From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: new upstream release 1.0.1g Date: Tue, 09 Jun 2026 12:43:18 GMT Message-ID: <178100899812.1.14250365423367195226.rpms-openssl-0376d8368caa@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 0376d8368caaad0465b6d75ba646bc6d8c299119 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbnNzbAogICAgICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAg ICAgICAgICAgIENvbW1pdCA6IDAzNzZkODM2OGNhYWFkMDQ2NWI2ZDc1YmE2NDZiYzZkOGMyOTkx MTkKICAgICAgICAgICAgQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CiAgICAgICAgICAgIERhdGUgICA6IDIwMTQtMDUtMDdUMTE6NDI6MzIrMDI6MDAKICAgICAg ICAgICAgU3RhdHMgIDogKzIyMzI4Ly0yMzA5OSBpbiAxOSBmaWxlKHMpCiAgICAgICAgICAgIFVS TCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvb3BlbnNzbC9jLzAzNzZk ODM2OGNhYWFkMDQ2NWI2ZDc1YmE2NDZiYzZkOGMyOTkxMTk/YnJhbmNoPXJlYmFzZV80MGJldGEK CiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgbmV3IHVwc3RyZWFtIHJlbGVhc2UgMS4wLjFn CgotIGRvIG5vdCBpbmNsdWRlIEVDQyBjaXBoZXJzdWl0ZXMgaW4gU1NMdjIgY2xpZW50IGhlbGxv ICgjMTA5MDk1MikKLSBmYWlsIG9uIGhtYWMgaW50ZWdyaXR5IGNoZWNrIGlmIHRoZSAuaG1hYyBm aWxlIGlzIGVtcHR5CgotLS0KZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmlu ZGV4IGY4MmIxZGIuLjA5NzgyMWEgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGln bm9yZQpAQCAtMTMsMyArMTMsNCBAQCBvcGVuc3NsLTEuMC4wYS11c2EudGFyLmJ6MgogL29wZW5z c2wtMS4wLjFjLXVzYS50YXIueHoKIC9vcGVuc3NsLTEuMC4xZS11c2EudGFyLnh6CiAvb3BlbnNz bC0xLjAuMWUtaG9iYmxlZC50YXIueHoKKy9vcGVuc3NsLTEuMC4xZy1ob2JibGVkLnRhci54egoK ZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjEtYmV0YTItc3NsLW9wLWFsbC5wYXRjaCBiL29wZW5z c2wtMS4wLjEtYmV0YTItc3NsLW9wLWFsbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMzI1OWQ4Yy4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xLWJldGEyLXNzbC1vcC1h bGwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEyL3NzbC9zc2wuaC5vcC1hbGwgb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvc3Ns LmgKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL3NzbC9zc2wuaC5vcC1hbGwJMjAxMi0wMi0wMiAx Mjo0OTowMC44MjgwMzU5MTYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL3NzbC9zc2wu aAkyMDEyLTAyLTAyIDEyOjUyOjI3LjI5NzgxODE4MiArMDEwMAotQEAgLTU0MCw3ICs1NDAsNyBA QCBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKLSAjZGVmaW5lIFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVO R0VfQlVHCQkJMHgwMDAwMDAwMkwKLSAvKiBBbGxvdyBpbml0aWFsIGNvbm5lY3Rpb24gdG8gc2Vy dmVycyB0aGF0IGRvbid0IHN1cHBvcnQgUkkgKi8KLSAjZGVmaW5lIFNTTF9PUF9MRUdBQ1lfU0VS VkVSX0NPTk5FQ1QJCQkweDAwMDAwMDA0TAotLSNkZWZpbmUgU1NMX09QX05FVFNDQVBFX1JFVVNF X0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4TAotKyNkZWZpbmUgU1NMX09QX05FVFNDQVBF X1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4TCAvKiBubyBlZmZlY3Qgc2luY2Ug MS4wLjBjIGR1ZSB0byBDVkUtMjAxMC00MTgwICovCi0gI2RlZmluZSBTU0xfT1BfU1NMUkVGMl9S RVVTRV9DRVJUX1RZUEVfQlVHCQkweDAwMDAwMDEwTAotICNkZWZpbmUgU1NMX09QX01JQ1JPU09G VF9CSUdfU1NMVjNfQlVGRkVSCQkweDAwMDAwMDIwTAotICNkZWZpbmUgU1NMX09QX01TSUVfU1NM VjJfUlNBX1BBRERJTkcJCQkweDAwMDAwMDQwTCAvKiBubyBlZmZlY3Qgc2luY2UgMC45LjdoIGFu ZCAwLjkuOGIgKi8KLUBAIC01NTgsNyArNTU4LDcgQEAgc3RydWN0IHNzbF9zZXNzaW9uX3N0Ci0g Ci0gLyogU1NMX09QX0FMTDogdmFyaW91cyBidWcgd29ya2Fyb3VuZHMgdGhhdCBzaG91bGQgYmUg cmF0aGVyIGhhcm1sZXNzLgotICAqICAgICAgICAgICAgIFRoaXMgdXNlZCB0byBiZSAweDAwMEZG RkZGTCBiZWZvcmUgMC45LjcuICovCi0tI2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDgwMDAwQkZG TAotKyNkZWZpbmUgU1NMX09QX0FMTAkJCQkJMHg4MDAwMEJGN0wgLyogd2Ugc3RpbGwgaGF2ZSB0 byBpbmNsdWRlIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMgKi8KLSAKLSAvKiBE VExTIG9wdGlvbnMgKi8KLSAjZGVmaW5lIFNTTF9PUF9OT19RVUVSWV9NVFUgICAgICAgICAgICAg ICAgIDB4MDAwMDEwMDBMCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWUtM2Rlcy1zdHJlbmd0 aC5wYXRjaCBiL29wZW5zc2wtMS4wLjFlLTNkZXMtc3RyZW5ndGgucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDczNzViNDcuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMWUt M2Rlcy1zdHJlbmd0aC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi1BbHRo b3VnaCB0aGUgcmVhbCBzdHJlbmd0aCBpcyByYXRoZXIgMTEyIGJpdHMgd2UgdXNlIDEyOCBoZXJl IGFzCi13ZSBkbyBub3Qgd2FudCB0byBzb3J0IGl0IGJlaGluZCBtb3JlIG9ic2N1cmUgY2lwaGVy cy4KLUFFUy0xMjggaXMgcHJlZmVycmVkIGFueXdheS4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L3NzbC9zMl9saWIuYy4zZGVzLXN0cmVuZ3RoIG9wZW5zc2wtMS4wLjFlL3NzbC9zMl9saWIuYwot LS0tIG9wZW5zc2wtMS4wLjFlL3NzbC9zMl9saWIuYy4zZGVzLXN0cmVuZ3RoCTIwMTMtMDItMTEg MTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvc3NsL3MyX2xpYi5j CTIwMTQtMDEtMjIgMTY6MzI6NDUuNzkxNzAwMzIyICswMTAwCi1AQCAtMjUwLDcgKzI1MCw3IEBA IE9QRU5TU0xfR0xPQkFMIGNvbnN0IFNTTF9DSVBIRVIgc3NsMl9jaXAKLSAJU1NMX1NTTFYyLAot IAlTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAJMCwKLS0JMTY4LAotKwkxMjgsCi0gCTE2OCwKLSAJ fSwKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL3NzbC9zM19saWIuYy4zZGVzLXN0cmVuZ3Ro IG9wZW5zc2wtMS4wLjFlL3NzbC9zM19saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFlL3NzbC9zM19s aWIuYy4zZGVzLXN0cmVuZ3RoCTIwMTQtMDEtMTcgMTE6NDE6MTEuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMWUvc3NsL3MzX2xpYi5jCTIwMTQtMDEtMjIgMTY6MzE6MTQuNzEzNjY2 Nzc3ICswMTAwCi1AQCAtMzI4LDcgKzMyOCw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIg c3NsM19jaXBoZXJzW10KLSAJU1NMX1NTTFYzLAotIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xf RklQUywKLSAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKLS0JMTY4LAotKwkx MjgsCi0gCTE2OCwKLSAJfSwKLSAKLUBAIC0zNzcsNyArMzc3LDcgQEAgT1BFTlNTTF9HTE9CQUwg U1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQotIAlTU0xfU1NMVjMsCi0gCVNTTF9OT1RfRVhQfFNT TF9ISUdIfFNTTF9GSVBTLAotIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAot LQkxNjgsCi0rCTEyOCwKLSAJMTY4LAotIAl9LAotIAotQEAgLTQyNSw3ICs0MjUsNyBAQCBPUEVO U1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCi0gCVNTTF9TU0xWMywKLSAJU1NM X05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0gCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8 VExTMV9QUkYsCi0tCTE2OCwKLSsJMTI4LAotIAkxNjgsCi0gCX0sCi0gCi1AQCAtNDc0LDcgKzQ3 NCw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIgc3NsM19jaXBoZXJzW10KLSAJU1NMX1NT TFYzLAotIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKLSAJU1NMX0hBTkRTSEFLRV9N QUNfREVGQVVMVHxUTFMxX1BSRiwKLS0JMTY4LAotKwkxMjgsCi0gCTE2OCwKLSAJfSwKLSAKLUBA IC01MjIsNyArNTIyLDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNb XQotIAlTU0xfU1NMVjMsCi0gCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotIAlTU0xf SEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAotLQkxNjgsCi0rCTEyOCwKLSAJMTY4LAot IAl9LAotIAotQEAgLTYwMiw3ICs2MDIsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNz bDNfY2lwaGVyc1tdCi0gCVNTTF9TU0xWMywKLSAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJ UFMsCi0gCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCi0tCTE2OCwKLSsJMTI4 LAotIAkxNjgsCi0gCX0sCi0gCi1AQCAtNjg3LDcgKzY4Nyw3IEBAIE9QRU5TU0xfR0xPQkFMIFNT TF9DSVBIRVIgc3NsM19jaXBoZXJzW10KLSAJU1NMX1NTTFYzLAotIAlTU0xfTk9UX0VYUHxTU0xf SElHSHxTU0xfRklQUywKLSAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKLS0J MTY4LAotKwkxMjgsCi0gCTE2OCwKLSAJfSwKLSAKLUBAIC03NTEsNyArNzUxLDcgQEAgT1BFTlNT TF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQotIAlTU0xfU1NMVjMsCi0gCVNTTF9O T1RfRVhQfFNTTF9ISUdILAotIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAot LQkxNjgsCi0rCTEyOCwKLSAJMTY4LAotIAl9LAotIAotQEAgLTE2ODUsNyArMTY4NSw3IEBAIE9Q RU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIgc3NsM19jaXBoZXJzW10KLSAJU1NMX1RMU1YxLAotIAlT U0xfTk9UX0VYUHxTU0xfSElHSCwKLSAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BS RiwKLS0JMTY4LAotKwkxMjgsCi0gCTE2OCwKLSAJfSwKLSAKLUBAIC0yMDYyLDcgKzIwNjIsNyBA QCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCi0gCVNTTF9UTFNWMSwK LSAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCi0gCVNTTF9IQU5EU0hBS0VfTUFDX0RF RkFVTFR8VExTMV9QUkYsCi0tCTE2OCwKLSsJMTI4LAotIAkxNjgsCi0gCX0sCi0gCi1AQCAtMjE0 Miw3ICsyMTQyLDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQot IAlTU0xfVExTVjEsCi0gCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotIAlTU0xfSEFO RFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAotLQkxNjgsCi0rCTEyOCwKLSAJMTY4LAotIAl9 LAotIAotQEAgLTIyMjIsNyArMjIyMiw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIgc3Ns M19jaXBoZXJzW10KLSAJU1NMX1RMU1YxLAotIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQ UywKLSAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKLS0JMTY4LAotKwkxMjgs Ci0gCTE2OCwKLSAJfSwKLSAKLUBAIC0yMzAyLDcgKzIzMDIsNyBAQCBPUEVOU1NMX0dMT0JBTCBT U0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCi0gCVNTTF9UTFNWMSwKLSAJU1NMX05PVF9FWFB8U1NM X0hJR0h8U1NMX0ZJUFMsCi0gCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCi0t CTE2OCwKLSsJMTI4LAotIAkxNjgsCi0gCX0sCi0gCi1AQCAtMjM4Miw3ICsyMzgyLDcgQEAgT1BF TlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQotIAlTU0xfVExTVjEsCi0gCVNT TF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAotIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxU fFRMUzFfUFJGLAotLQkxNjgsCi0rCTEyOCwKLSAJMTY4LAotIAl9LAotIAotQEAgLTI0MzIsNyAr MjQzMiw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIgc3NsM19jaXBoZXJzW10KLSAJU1NM X1RMU1YxLAotIAlTU0xfTk9UX0VYUHxTU0xfSElHSCwKLSAJU1NMX0hBTkRTSEFLRV9NQUNfREVG QVVMVHxUTFMxX1BSRiwKLS0JMTY4LAotKwkxMjgsCi0gCTE2OCwKLSAJfSwKLSAKLUBAIC0yNDQ4 LDcgKzI0NDgsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCi0g CVNTTF9UTFNWMSwKLSAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCi0gCVNTTF9IQU5EU0hBS0VfTUFD X0RFRkFVTFR8VExTMV9QUkYsCi0tCTE2OCwKLSsJMTI4LAotIAkxNjgsCi0gCX0sCi0gCi1AQCAt MjQ2NCw3ICsyNDY0LDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNb XQotIAlTU0xfVExTVjEsCi0gCVNTTF9OT1RfRVhQfFNTTF9ISUdILAotIAlTU0xfSEFORFNIQUtF X01BQ19ERUZBVUxUfFRMUzFfUFJGLAotLQkxNjgsCi0rCTEyOCwKLSAJMTY4LAotIAl9LAotIAoK ZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFlLWJhY2twb3J0cy5wYXRjaCBiL29wZW5zc2wtMS4w LjFlLWJhY2twb3J0cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlMzAx Ny4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xZS1iYWNrcG9ydHMucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwzNDUgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3Bl bS9wZW1faW5mby5jLmJhY2twb3J0cyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcGVtL3BlbV9pbmZv LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcGVtL3BlbV9pbmZvLmMuYmFja3BvcnRzCTIw MTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL3BlbS9wZW1faW5mby5jCTIwMTMtMDgtMTYgMTU6MzE6MzUuNzI2MDAzODkyICswMjAwCi1A QCAtMTY3LDYgKzE2Nyw3IEBAIHN0YXJ0OgotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAJCQlp ZiAoc3RyY21wKG5hbWUsUEVNX1NUUklOR19SU0EpID09IDApCi0gCQkJewotKwkJCWQyaT0oRDJJ X09GKHZvaWQpKWQyaV9SU0FQcml2YXRlS2V5OwotIAkJCWlmICh4aS0+eF9wa2V5ICE9IE5VTEwp IAotIAkJCQl7Ci0gCQkJCWlmICghc2tfWDUwOV9JTkZPX3B1c2gocmV0LHhpKSkgZ290byBlcnI7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmJhY2twb3J0 cyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCi0tLS0gb3BlbnNzbC0xLjAu MWUvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5iYWNrcG9ydHMJMjAxMy0wOC0xNiAxNTozMTozNS42 OTcwMDMyNTYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5j CTIwMTMtMDgtMTYgMTU6MzM6MzcuNzcwNjczOTE4ICswMjAwCi1AQCAtNTgyLDYgKzU4Miw4IEBA IHN0YXRpYyBpbnQgcGtleV9yc2FfY3RybF9zdHIoRVZQX1BLRVlfQ1QKLSAJCQlwbSA9IFJTQV9O T19QQURESU5HOwotIAkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm9lYXAiKSkKLSAJCQlwbSA9 IFJTQV9QS0NTMV9PQUVQX1BBRERJTkc7Ci0rCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAib2Fl cCIpKQotKwkJCXBtID0gUlNBX1BLQ1MxX09BRVBfUEFERElORzsKLSAJCWVsc2UgaWYgKCFzdHJj bXAodmFsdWUsICJ4OTMxIikpCi0gCQkJcG0gPSBSU0FfWDkzMV9QQURESU5HOwotIAkJZWxzZSBp ZiAoIXN0cmNtcCh2YWx1ZSwgInBzcyIpKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L3g1MDkveDUwOV92ZnkuYy5iYWNrcG9ydHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3g1MDkveDUw OV92ZnkuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMuYmFja3Bv cnRzCTIwMTMtMDgtMTYgMTU6MzE6MzUuNzIxMDAzNzgyICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDEzLTA4LTE2IDE1OjMxOjM1LjcyNjAwMzg5MiAr MDIwMAotQEAgLTY5Niw2ICs2OTYsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2NlcnQoWDUwOV9TVE9S RV9DVFggKmN0Ci0gCVg1MDlfQ1JMICpjcmwgPSBOVUxMLCAqZGNybCA9IE5VTEw7Ci0gCVg1MDkg Kng7Ci0gCWludCBvaywgY251bTsKLSsJdW5zaWduZWQgaW50IGxhc3RfcmVhc29uczsKLSAJY251 bSA9IGN0eC0+ZXJyb3JfZGVwdGg7Ci0gCXggPSBza19YNTA5X3ZhbHVlKGN0eC0+Y2hhaW4sIGNu dW0pOwotIAljdHgtPmN1cnJlbnRfY2VydCA9IHg7Ci1AQCAtNzA0LDYgKzcwNSw3IEBAIHN0YXRp YyBpbnQgY2hlY2tfY2VydChYNTA5X1NUT1JFX0NUWCAqY3QKLSAJY3R4LT5jdXJyZW50X3JlYXNv bnMgPSAwOwotIAl3aGlsZSAoY3R4LT5jdXJyZW50X3JlYXNvbnMgIT0gQ1JMRFBfQUxMX1JFQVNP TlMpCi0gCQl7Ci0rCQlsYXN0X3JlYXNvbnMgPSBjdHgtPmN1cnJlbnRfcmVhc29uczsKLSAJCS8q IFRyeSB0byByZXRyaWV2ZSByZWxldmFudCBDUkwgKi8KLSAJCWlmIChjdHgtPmdldF9jcmwpCi0g CQkJb2sgPSBjdHgtPmdldF9jcmwoY3R4LCAmY3JsLCB4KTsKLUBAIC03NDcsNiArNzQ5LDE1IEBA IHN0YXRpYyBpbnQgY2hlY2tfY2VydChYNTA5X1NUT1JFX0NUWCAqY3QKLSAJCVg1MDlfQ1JMX2Zy ZWUoZGNybCk7Ci0gCQljcmwgPSBOVUxMOwotIAkJZGNybCA9IE5VTEw7Ci0rCQkvKiBJZiByZWFz b25zIG5vdCB1cGRhdGVkIHdlIHdvbnQgZ2V0IGFueXdoZXJlIGJ5Ci0rCQkgKiBhbm90aGVyIGl0 ZXJhdGlvbiwgc28gZXhpdCBsb29wLgotKwkJICovCi0rCQlpZiAobGFzdF9yZWFzb25zID09IGN0 eC0+Y3VycmVudF9yZWFzb25zKQotKwkJCXsKLSsJCQljdHgtPmVycm9yID0gWDUwOV9WX0VSUl9V TkFCTEVfVE9fR0VUX0NSTDsKLSsJCQlvayA9IGN0eC0+dmVyaWZ5X2NiKDAsIGN0eCk7Ci0rCQkJ Z290byBlcnI7Ci0rCQkJfQotIAkJfQotIAllcnI6Ci0gCVg1MDlfQ1JMX2ZyZWUoY3JsKTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by94NTA5L3hfYWxsLmMuYmFja3BvcnRzIG9wZW5z c2wtMS4wLjFlL2NyeXB0by94NTA5L3hfYWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v eDUwOS94X2FsbC5jLmJhY2twb3J0cwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by94NTA5L3hfYWxsLmMJMjAxMy0wOC0xNiAxNToz MzoyNS4yNDczOTk5NDAgKzAyMDAKLUBAIC05Nyw2ICs5Nyw3IEBAIGludCBYNTA5X3NpZ24oWDUw OSAqeCwgRVZQX1BLRVkgKnBrZXksIGMKLSAKLSBpbnQgWDUwOV9zaWduX2N0eChYNTA5ICp4LCBF VlBfTURfQ1RYICpjdHgpCi0gCXsKLSsJeC0+Y2VydF9pbmZvLT5lbmMubW9kaWZpZWQgPSAxOwot IAlyZXR1cm4gQVNOMV9pdGVtX3NpZ25fY3R4KEFTTjFfSVRFTV9ycHRyKFg1MDlfQ0lORiksCi0g CQl4LT5jZXJ0X2luZm8tPnNpZ25hdHVyZSwKLSAJCXgtPnNpZ19hbGcsIHgtPnNpZ25hdHVyZSwg eC0+Y2VydF9pbmZvLCBjdHgpOwotQEAgLTEyMyw2ICsxMjQsNyBAQCBpbnQgWDUwOV9DUkxfc2ln bihYNTA5X0NSTCAqeCwgRVZQX1BLRVkKLSAKLSBpbnQgWDUwOV9DUkxfc2lnbl9jdHgoWDUwOV9D UkwgKngsIEVWUF9NRF9DVFggKmN0eCkKLSAJewotKwl4LT5jcmwtPmVuYy5tb2RpZmllZCA9IDE7 Ci0gCXJldHVybiBBU04xX2l0ZW1fc2lnbl9jdHgoQVNOMV9JVEVNX3JwdHIoWDUwOV9DUkxfSU5G TyksCi0gCQl4LT5jcmwtPnNpZ19hbGcsIHgtPnNpZ19hbGcsIHgtPnNpZ25hdHVyZSwgeC0+Y3Js LCBjdHgpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9kb2MvY3J5cHRvL1g1MDlfU1RP UkVfQ1RYX2dldF9lcnJvci5wb2QuYmFja3BvcnRzIG9wZW5zc2wtMS4wLjFlL2RvYy9jcnlwdG8v WDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yLnBvZAotLS0tIG9wZW5zc2wtMS4wLjFlL2RvYy9jcnlw dG8vWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yLnBvZC5iYWNrcG9ydHMJMjAxMy0wMi0xMSAxNjoy NjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9kb2MvY3J5cHRvL1g1MDlf U1RPUkVfQ1RYX2dldF9lcnJvci5wb2QJMjAxMy0wOC0xNiAxNTozMTozNS43MjcwMDM5MTQgKzAy MDAKLUBAIC0yNzgsNiArMjc4LDggQEAgaGFwcGVuIGlmIGV4dGVuZGVkIENSTCBjaGVja2luZyBp cyBlbmFibAotIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmljIGVycm9yLiBUaGlzIHdpbGwgbmV2ZXIg YmUgcmV0dXJuZWQgdW5sZXNzIGV4cGxpY2l0bHkKLSBzZXQgYnkgYW4gYXBwbGljYXRpb24uCi0g Ci0rPWJhY2sKLSsKLSA9aGVhZDEgTk9URVMKLSAKLSBUaGUgYWJvdmUgZnVuY3Rpb25zIHNob3Vs ZCBiZSB1c2VkIGluc3RlYWQgb2YgZGlyZWN0bHkgcmVmZXJlbmNpbmcgdGhlIGZpZWxkcwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvZG9jL3NzbC9TU0xfYWNjZXB0LnBvZC5iYWNrcG9ydHMgb3Bl bnNzbC0xLjAuMWUvZG9jL3NzbC9TU0xfYWNjZXB0LnBvZAotLS0tIG9wZW5zc2wtMS4wLjFlL2Rv Yy9zc2wvU1NMX2FjY2VwdC5wb2QuYmFja3BvcnRzCTIwMTMtMDItMTEgMTY6MDI6NDguMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvZG9jL3NzbC9TU0xfYWNjZXB0LnBvZAkyMDEz LTA4LTE2IDE1OjMxOjM1LjcyNzAwMzkxNCArMDIwMAotQEAgLTQ0LDE3ICs0NCwxNyBAQCBUaGUg Zm9sbG93aW5nIHJldHVybiB2YWx1ZXMgY2FuIG9jY3VyOgotIAotID1vdmVyIDQKLSAKLS09aXRl bSAxCi0tCi0tVGhlIFRMUy9TU0wgaGFuZHNoYWtlIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVk LCBhIFRMUy9TU0wgY29ubmVjdGlvbiBoYXMgYmVlbgotLWVzdGFibGlzaGVkLgotLQotID1pdGVt IDAKLSAKLSBUaGUgVExTL1NTTCBoYW5kc2hha2Ugd2FzIG5vdCBzdWNjZXNzZnVsIGJ1dCB3YXMg c2h1dCBkb3duIGNvbnRyb2xsZWQgYW5kCi0gYnkgdGhlIHNwZWNpZmljYXRpb25zIG9mIHRoZSBU TFMvU1NMIHByb3RvY29sLiBDYWxsIFNTTF9nZXRfZXJyb3IoKSB3aXRoIHRoZQotIHJldHVybiB2 YWx1ZSBCPHJldD4gdG8gZmluZCBvdXQgdGhlIHJlYXNvbi4KLSAKLSs9aXRlbSAxCi0rCi0rVGhl IFRMUy9TU0wgaGFuZHNoYWtlIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLCBhIFRMUy9TU0wg Y29ubmVjdGlvbiBoYXMgYmVlbgotK2VzdGFibGlzaGVkLgotKwotID1pdGVtIEU8bHQ+MAotIAot IFRoZSBUTFMvU1NMIGhhbmRzaGFrZSB3YXMgbm90IHN1Y2Nlc3NmdWwgYmVjYXVzZSBhIGZhdGFs IGVycm9yIG9jY3VycmVkIGVpdGhlcgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvZG9jL3NzbC9T U0xfY29ubmVjdC5wb2QuYmFja3BvcnRzIG9wZW5zc2wtMS4wLjFlL2RvYy9zc2wvU1NMX2Nvbm5l Y3QucG9kCi0tLS0gb3BlbnNzbC0xLjAuMWUvZG9jL3NzbC9TU0xfY29ubmVjdC5wb2QuYmFja3Bv cnRzCTIwMTMtMDItMTEgMTY6MDI6NDguMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MWUvZG9jL3NzbC9TU0xfY29ubmVjdC5wb2QJMjAxMy0wOC0xNiAxNTozMTozNS43MjcwMDM5MTQg KzAyMDAKLUBAIC00MSwxNyArNDEsMTcgQEAgVGhlIGZvbGxvd2luZyByZXR1cm4gdmFsdWVzIGNh biBvY2N1cjoKLSAKLSA9b3ZlciA0Ci0gCi0tPWl0ZW0gMQotLQotLVRoZSBUTFMvU1NMIGhhbmRz aGFrZSB3YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCwgYSBUTFMvU1NMIGNvbm5lY3Rpb24gaGFz IGJlZW4KLS1lc3RhYmxpc2hlZC4KLS0KLSA9aXRlbSAwCi0gCi0gVGhlIFRMUy9TU0wgaGFuZHNo YWtlIHdhcyBub3Qgc3VjY2Vzc2Z1bCBidXQgd2FzIHNodXQgZG93biBjb250cm9sbGVkIGFuZAot IGJ5IHRoZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgVExTL1NTTCBwcm90b2NvbC4gQ2FsbCBTU0xf Z2V0X2Vycm9yKCkgd2l0aCB0aGUKLSByZXR1cm4gdmFsdWUgQjxyZXQ+IHRvIGZpbmQgb3V0IHRo ZSByZWFzb24uCi0gCi0rPWl0ZW0gMQotKwotK1RoZSBUTFMvU1NMIGhhbmRzaGFrZSB3YXMgc3Vj Y2Vzc2Z1bGx5IGNvbXBsZXRlZCwgYSBUTFMvU1NMIGNvbm5lY3Rpb24gaGFzIGJlZW4KLStlc3Rh Ymxpc2hlZC4KLSsKLSA9aXRlbSBFPGx0PjAKLSAKLSBUaGUgVExTL1NTTCBoYW5kc2hha2Ugd2Fz IG5vdCBzdWNjZXNzZnVsLCBiZWNhdXNlIGEgZmF0YWwgZXJyb3Igb2NjdXJyZWQgZWl0aGVyCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xZS9kb2Mvc3NsL1NTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0 LnBvZC5iYWNrcG9ydHMgb3BlbnNzbC0xLjAuMWUvZG9jL3NzbC9TU0xfQ1RYX3NldF9jbGllbnRf Q0FfbGlzdC5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xZS9kb2Mvc3NsL1NTTF9DVFhfc2V0X2NsaWVu dF9DQV9saXN0LnBvZC5iYWNrcG9ydHMJMjAxMy0wMi0xMSAxNjowMjo0OC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9kb2Mvc3NsL1NTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0 LnBvZAkyMDEzLTA4LTE2IDE1OjMxOjM1LjcyNzAwMzkxNCArMDIwMAotQEAgLTY2LDE2ICs2Niwx NiBAQCB2YWx1ZXM6Ci0gCi0gPW92ZXIgNAotIAotLT1pdGVtIDEKLS0KLS1UaGUgb3BlcmF0aW9u IHN1Y2NlZWRlZC4KLS0KLSA9aXRlbSAwCi0gCi0gQSBmYWlsdXJlIHdoaWxlIG1hbmlwdWxhdGlu ZyB0aGUgU1RBQ0tfT0YoWDUwOV9OQU1FKSBvYmplY3Qgb2NjdXJyZWQgb3IKLSB0aGUgWDUwOV9O QU1FIGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQgZnJvbSBCPGNhY2VydD4uIENoZWNrIHRoZSBlcnJv ciBzdGFjawotIHRvIGZpbmQgb3V0IHRoZSByZWFzb24uCi0gCi0rPWl0ZW0gMQotKwotK1RoZSBv cGVyYXRpb24gc3VjY2VlZGVkLgotKwotID1iYWNrCi0gCi0gPWhlYWQxIEVYQU1QTEVTCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZS9kb2Mvc3NsL1NTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50 LnBvZC5iYWNrcG9ydHMgb3BlbnNzbC0xLjAuMWUvZG9jL3NzbC9TU0xfQ1RYX3VzZV9wc2tfaWRl bnRpdHlfaGludC5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xZS9kb2Mvc3NsL1NTTF9DVFhfdXNlX3Bz a19pZGVudGl0eV9oaW50LnBvZC5iYWNrcG9ydHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9kb2Mvc3NsL1NTTF9DVFhfdXNlX3Bza19pZGVu dGl0eV9oaW50LnBvZAkyMDEzLTA4LTE2IDE1OjMxOjM1LjcyNzAwMzkxNCArMDIwMAotQEAgLTgx LDYgKzgxLDggQEAgU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hpbnQoKSBhbmQgU1NMXwotIAot IFJldHVybiB2YWx1ZXMgZnJvbSB0aGUgc2VydmVyIGNhbGxiYWNrIGFyZSBpbnRlcnByZXRlZCBh cyBmb2xsb3dzOgotIAotKz1vdmVyIDQKLSsKLSA9aXRlbSA+IDAKLSAKLSBQU0sgaWRlbnRpdHkg d2FzIGZvdW5kIGFuZCB0aGUgc2VydmVyIGNhbGxiYWNrIGhhcyBwcm92aWRlZCB0aGUgUFNLCi1A QCAtOTksNCArMTAxLDYgQEAgY29tcGxldGVseS4KLSBQU0sgaWRlbnRpdHkgd2FzIG5vdCBmb3Vu ZC4gQW4gInVua25vd25fcHNrX2lkZW50aXR5IiBhbGVydCBtZXNzYWdlCi0gd2lsbCBiZSBzZW50 IGFuZCB0aGUgY29ubmVjdGlvbiBzZXR1cCBmYWlscy4KLSAKLSs9YmFjawotKwotID1jdXQKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2RvYy9zc2wvU1NMX2RvX2hhbmRzaGFrZS5wb2QuYmFja3Bv cnRzIG9wZW5zc2wtMS4wLjFlL2RvYy9zc2wvU1NMX2RvX2hhbmRzaGFrZS5wb2QKLS0tLSBvcGVu c3NsLTEuMC4xZS9kb2Mvc3NsL1NTTF9kb19oYW5kc2hha2UucG9kLmJhY2twb3J0cwkyMDEzLTAy LTExIDE2OjAyOjQ4LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2RvYy9zc2wv U1NMX2RvX2hhbmRzaGFrZS5wb2QJMjAxMy0wOC0xNiAxNTozMTozNS43MjcwMDM5MTQgKzAyMDAK LUBAIC00NSwxNyArNDUsMTcgQEAgVGhlIGZvbGxvd2luZyByZXR1cm4gdmFsdWVzIGNhbiBvY2N1 cjoKLSAKLSA9b3ZlciA0Ci0gCi0tPWl0ZW0gMQotLQotLVRoZSBUTFMvU1NMIGhhbmRzaGFrZSB3 YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCwgYSBUTFMvU1NMIGNvbm5lY3Rpb24gaGFzIGJlZW4K LS1lc3RhYmxpc2hlZC4KLS0KLSA9aXRlbSAwCi0gCi0gVGhlIFRMUy9TU0wgaGFuZHNoYWtlIHdh cyBub3Qgc3VjY2Vzc2Z1bCBidXQgd2FzIHNodXQgZG93biBjb250cm9sbGVkIGFuZAotIGJ5IHRo ZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgVExTL1NTTCBwcm90b2NvbC4gQ2FsbCBTU0xfZ2V0X2Vy cm9yKCkgd2l0aCB0aGUKLSByZXR1cm4gdmFsdWUgQjxyZXQ+IHRvIGZpbmQgb3V0IHRoZSByZWFz b24uCi0gCi0rPWl0ZW0gMQotKwotK1RoZSBUTFMvU1NMIGhhbmRzaGFrZSB3YXMgc3VjY2Vzc2Z1 bGx5IGNvbXBsZXRlZCwgYSBUTFMvU1NMIGNvbm5lY3Rpb24gaGFzIGJlZW4KLStlc3RhYmxpc2hl ZC4KLSsKLSA9aXRlbSBFPGx0PjAKLSAKLSBUaGUgVExTL1NTTCBoYW5kc2hha2Ugd2FzIG5vdCBz dWNjZXNzZnVsIGJlY2F1c2UgYSBmYXRhbCBlcnJvciBvY2N1cnJlZCBlaXRoZXIKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFlL2RvYy9zc2wvU1NMX3NodXRkb3duLnBvZC5iYWNrcG9ydHMgb3BlbnNz bC0xLjAuMWUvZG9jL3NzbC9TU0xfc2h1dGRvd24ucG9kCi0tLS0gb3BlbnNzbC0xLjAuMWUvZG9j L3NzbC9TU0xfc2h1dGRvd24ucG9kLmJhY2twb3J0cwkyMDEzLTAyLTExIDE2OjAyOjQ4LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2RvYy9zc2wvU1NMX3NodXRkb3duLnBvZAky MDEzLTA4LTE2IDE1OjMxOjM1LjcyODAwMzkzNSArMDIwMAotQEAgLTkyLDExICs5Miw2IEBAIFRo ZSBmb2xsb3dpbmcgcmV0dXJuIHZhbHVlcyBjYW4gb2NjdXI6Ci0gCi0gPW92ZXIgNAotIAotLT1p dGVtIDEKLS0KLS1UaGUgc2h1dGRvd24gd2FzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuIFRoZSAi Y2xvc2Ugbm90aWZ5IiBhbGVydCB3YXMgc2VudAotLWFuZCB0aGUgcGVlcidzICJjbG9zZSBub3Rp ZnkiIGFsZXJ0IHdhcyByZWNlaXZlZC4KLS0KLSA9aXRlbSAwCi0gCi0gVGhlIHNodXRkb3duIGlz IG5vdCB5ZXQgZmluaXNoZWQuIENhbGwgU1NMX3NodXRkb3duKCkgZm9yIGEgc2Vjb25kIHRpbWUs Ci1AQCAtMTA0LDYgKzk5LDExIEBAIGlmIGEgYmlkaXJlY3Rpb25hbCBzaHV0ZG93biBzaGFsbCBi ZSBwZXIKLSBUaGUgb3V0cHV0IG9mIEw8U1NMX2dldF9lcnJvcigzKXxTU0xfZ2V0X2Vycm9yKDMp PiBtYXkgYmUgbWlzbGVhZGluZywgYXMgYW4KLSBlcnJvbmVvdXMgU1NMX0VSUk9SX1NZU0NBTEwg bWF5IGJlIGZsYWdnZWQgZXZlbiB0aG91Z2ggbm8gZXJyb3Igb2NjdXJyZWQuCi0gCi0rPWl0ZW0g MQotKwotK1RoZSBzaHV0ZG93biB3YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gVGhlICJjbG9z ZSBub3RpZnkiIGFsZXJ0IHdhcyBzZW50Ci0rYW5kIHRoZSBwZWVyJ3MgImNsb3NlIG5vdGlmeSIg YWxlcnQgd2FzIHJlY2VpdmVkLgotKwotID1pdGVtIC0xCi0gCi0gVGhlIHNodXRkb3duIHdhcyBu b3Qgc3VjY2Vzc2Z1bCBiZWNhdXNlIGEgZmF0YWwgZXJyb3Igb2NjdXJyZWQgZWl0aGVyCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZS9zc2wvZDFfbGliLmMuYmFja3BvcnRzIG9wZW5zc2wtMS4wLjFl L3NzbC9kMV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFlL3NzbC9kMV9saWIuYy5iYWNrcG9ydHMJ MjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9z c2wvZDFfbGliLmMJMjAxMy0wOC0xNiAxNTozMzozMy4zMDY1NzYzNjMgKzAyMDAKLUBAIC0xOTYs NiArMTk2LDcgQEAgdm9pZCBkdGxzMV9mcmVlKFNTTCAqcykKLSAJcHF1ZXVlX2ZyZWUocy0+ZDEt PmJ1ZmZlcmVkX2FwcF9kYXRhLnEpOwotIAotIAlPUEVOU1NMX2ZyZWUocy0+ZDEpOwotKwlzLT5k MSA9IE5VTEw7Ci0gCX0KLSAKLSB2b2lkIGR0bHMxX2NsZWFyKFNTTCAqcykKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL3NzbC9kMV9wa3QuYy5iYWNrcG9ydHMgb3BlbnNzbC0xLjAuMWUvc3NsL2Qx X3BrdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvc3NsL2QxX3BrdC5jLmJhY2twb3J0cwkyMDEzLTAy LTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL3NzbC9kMV9w a3QuYwkyMDEzLTA4LTE2IDE1OjMxOjM1LjcyODAwMzkzNSArMDIwMAotQEAgLTg0Nyw2ICs4NDcs MTIgQEAgc3RhcnQ6Ci0gCQkJfQotIAkJfQotIAotKwlpZiAocy0+ZDEtPmxpc3RlbiAmJiByci0+ dHlwZSAhPSBTU0wzX1JUX0hBTkRTSEFLRSkKLSsJCXsKLSsJCXJyLT5sZW5ndGggPSAwOwotKwkJ Z290byBzdGFydDsKLSsJCX0KLSsKLSAJLyogd2Ugbm93IGhhdmUgYSBwYWNrZXQgd2hpY2ggY2Fu IGJlIHJlYWQgYW5kIHByb2Nlc3NlZCAqLwotIAotIAlpZiAocy0+czMtPmNoYW5nZV9jaXBoZXJf c3BlYyAvKiBzZXQgd2hlbiB3ZSByZWNlaXZlIENoYW5nZUNpcGhlclNwZWMsCi1AQCAtMTA1MSw2 ICsxMDU3LDcgQEAgc3RhcnQ6Ci0gCQkJIShzLT5zMy0+ZmxhZ3MgJiBTU0wzX0ZMQUdTX05PX1JF TkVHT1RJQVRFX0NJUEhFUlMpICYmCi0gCQkJIXMtPnMzLT5yZW5lZ290aWF0ZSkKLSAJCQl7Ci0r CQkJcy0+ZDEtPmhhbmRzaGFrZV9yZWFkX3NlcSsrOwotIAkJCXMtPm5ld19zZXNzaW9uID0gMTsK LSAJCQlzc2wzX3JlbmVnb3RpYXRlKHMpOwotIAkJCWlmIChzc2wzX3JlbmVnb3RpYXRlX2NoZWNr KHMpKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvc3NsL2QxX3NydnIuYy5iYWNrcG9ydHMgb3Bl bnNzbC0xLjAuMWUvc3NsL2QxX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjFlL3NzbC9kMV9zcnZy LmMuYmFja3BvcnRzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMWUvc3NsL2QxX3NydnIuYwkyMDEzLTA4LTE2IDE1OjMxOjM1LjcyODAwMzkzNSAr MDIwMAotQEAgLTI3NiwxMCArMjc2LDExIEBAIGludCBkdGxzMV9hY2NlcHQoU1NMICpzKQotIAkJ Y2FzZSBTU0wzX1NUX1NXX0hFTExPX1JFUV9COgotIAotIAkJCXMtPnNodXRkb3duPTA7Ci0rCQkJ ZHRsczFfY2xlYXJfcmVjb3JkX2J1ZmZlcihzKTsKLSAJCQlkdGxzMV9zdGFydF90aW1lcihzKTsK LSAJCQlyZXQ9ZHRsczFfc2VuZF9oZWxsb19yZXF1ZXN0KHMpOwotIAkJCWlmIChyZXQgPD0gMCkg Z290byBlbmQ7Ci0tCQkJcy0+czMtPnRtcC5uZXh0X3N0YXRlPVNTTDNfU1RfU1dfSEVMTE9fUkVR X0M7Ci0rCQkJcy0+czMtPnRtcC5uZXh0X3N0YXRlPVNTTDNfU1RfU1JfQ0xOVF9IRUxMT19BOwot IAkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfRkxVU0g7Ci0gCQkJcy0+aW5pdF9udW09MDsKLSAKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL3NzbC9zM19jYmMuYy5iYWNrcG9ydHMgb3BlbnNzbC0xLjAu MWUvc3NsL3MzX2NiYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvc3NsL3MzX2NiYy5jLmJhY2twb3J0 cwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFl L3NzbC9zM19jYmMuYwkyMDEzLTA4LTE2IDE1OjMxOjM1LjcyOTAwMzk1NiArMDIwMAotQEAgLTE0 OCw3ICsxNDgsNyBAQCBpbnQgdGxzMV9jYmNfcmVtb3ZlX3BhZGRpbmcoY29uc3QgU1NMKiBzCi0g CXVuc2lnbmVkIHBhZGRpbmdfbGVuZ3RoLCBnb29kLCB0b19jaGVjaywgaTsKLSAJY29uc3QgdW5z aWduZWQgb3ZlcmhlYWQgPSAxIC8qIHBhZGRpbmcgbGVuZ3RoIGJ5dGUgKi8gKyBtYWNfc2l6ZTsK LSAJLyogQ2hlY2sgaWYgdmVyc2lvbiByZXF1aXJlcyBleHBsaWNpdCBJViAqLwotLQlpZiAocy0+ dmVyc2lvbiA+PSBUTFMxXzFfVkVSU0lPTiB8fCBzLT52ZXJzaW9uID09IERUTFMxX1ZFUlNJT04p Ci0rCWlmIChzLT52ZXJzaW9uID49IFRMUzFfMV9WRVJTSU9OIHx8IHMtPnZlcnNpb24gPT0gRFRM UzFfQkFEX1ZFUikKLSAJCXsKLSAJCS8qIFRoZXNlIGxlbmd0aHMgYXJlIGFsbCBwdWJsaWMgc28g d2UgY2FuIHRlc3QgdGhlbSBpbgotIAkJICogbm9uLWNvbnN0YW50IHRpbWUuCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZS9zc2wvc3NsX2xpYi5jLmJhY2twb3J0cyBvcGVuc3NsLTEuMC4xZS9zc2wv c3NsX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvc3NsL3NzbF9saWIuYy5iYWNrcG9ydHMJMjAx My0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9zc2wv c3NsX2xpYi5jCTIwMTMtMDgtMTYgMTU6MzE6MzUuNzI5MDAzOTU2ICswMjAwCi1AQCAtMTc5Nyw3 ICsxNzk3LDkgQEAgU1NMX0NUWCAqU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbQotIAlD UllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1NTTF9DVFgsIHJldCwgJnJldC0+ZXhf ZGF0YSk7Ci0gCi0gCXJldC0+ZXh0cmFfY2VydHM9TlVMTDsKLS0JcmV0LT5jb21wX21ldGhvZHM9 U1NMX0NPTVBfZ2V0X2NvbXByZXNzaW9uX21ldGhvZHMoKTsKLSsJLyogTm8gY29tcHJlc3Npb24g Zm9yIERUTFMgKi8KLSsJaWYgKG1ldGgtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKLSsJCXJl dC0+Y29tcF9tZXRob2RzPVNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzKCk7Ci0gCi0g CXJldC0+bWF4X3NlbmRfZnJhZ21lbnQgPSBTU0wzX1JUX01BWF9QTEFJTl9MRU5HVEg7Ci0gCi1A QCAtMjc5Miw5ICsyNzk0LDcgQEAgdm9pZCBzc2xfY2xlYXJfY2lwaGVyX2N0eChTU0wgKnMpCi0g LyogRml4IHRoaXMgZnVuY3Rpb24gc28gdGhhdCBpdCB0YWtlcyBhbiBvcHRpb25hbCB0eXBlIHBh cmFtZXRlciAqLwotIFg1MDkgKlNTTF9nZXRfY2VydGlmaWNhdGUoY29uc3QgU1NMICpzKQotIAl7 Ci0tCWlmIChzLT5zZXJ2ZXIpCi0tCQlyZXR1cm4oc3NsX2dldF9zZXJ2ZXJfc2VuZF9jZXJ0KHMp KTsKLS0JZWxzZSBpZiAocy0+Y2VydCAhPSBOVUxMKQotKwlpZiAocy0+Y2VydCAhPSBOVUxMKQot IAkJcmV0dXJuKHMtPmNlcnQtPmtleS0+eDUwOSk7Ci0gCWVsc2UKLSAJCXJldHVybihOVUxMKTsK LWRpZmYgLS1naXQgYS9jcnlwdG8veDg2Y3B1aWQucGwgYi9jcnlwdG8veDg2Y3B1aWQucGwKLWlu ZGV4IDNiNmM0NjkuLmU4YTc1MTggMTAwNjQ0Ci0tLS0gYS9jcnlwdG8veDg2Y3B1aWQucGwKLSsr KyBiL2NyeXB0by94ODZjcHVpZC5wbAotQEAgLTY5LDYgKzY5LDcgQEAgZm9yIChAQVJHVikgeyAk c3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9Ci0gCSZpbmMJKCJlc2kiKTsJCSMg bnVtYmVyIG9mIGNvcmVzCi0gCi0gCSZtb3YJKCJlYXgiLDEpOwotKwkmeG9yCSgiZWN4IiwiZWN4 Iik7Ci0gCSZjcHVpZAkoKTsKLSAJJmJ0CSgiZWR4IiwyOCk7Ci0gCSZqbmMJKCZsYWJlbCgiZ2Vu ZXJpYyIpKTsKLUBAIC0xMDIsNiArMTAzLDcgQEAgZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgv LURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9Ci0gCi0gJnNldF9sYWJlbCgibm9jYWNoZWluZm8iKTsK LSAJJm1vdgkoImVheCIsMSk7Ci0rCSZ4b3IJKCJlY3giLCJlY3giKTsKLSAJJmNwdWlkCSgpOwot IAkmYW5kCSgiZWR4IiwweGJmZWZmZmZmKTsJIyBmb3JjZSByZXNlcnZlZCBiaXRzICMyMCwgIzMw IHRvIDAKLSAJJmNtcAkoImVicCIsMCk7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWUtYmFk LW1hYy5wYXRjaCBiL29wZW5zc2wtMS4wLjFlLWJhZC1tYWMucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDA2ZDI4NGUuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMWUtYmFk LW1hYy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLUZyb20gOWFiM2NlMTI0 NjE2Y2IxMmJkMzljNmFhMWUxYmRlMGY0Njk2OWIyOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK LUZyb206IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPgotRGF0ZTogTW9uLCAxOCBN YXIgMjAxMyAxOToyOTo0MSArMDEwMAotU3ViamVjdDogW1BBVENIXSBlX2Flc19jYmNfaG1hY19z aGExLmM6IGZpeCByYXJlIGJhZCByZWNvcmQgbWFjIG9uIEFFUy1OSQotIHBsYWZvcm1zLgotCi1Q UjogMzAwMgotKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNWM2MDA0NjU1MzcxNmZjZjE2MDcx OGY1OTE2MDQ5MzE5NGYyMTJkYykKLS0tLQotIGNyeXB0by9ldnAvZV9hZXNfY2JjX2htYWNfc2hh MS5jIHwgICAgNSArKystLQotIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVs ZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2VfYWVzX2NiY19obWFjX3NoYTEu YyBiL2NyeXB0by9ldnAvZV9hZXNfY2JjX2htYWNfc2hhMS5jCi1pbmRleCA0ODNlMDRiLi5mYjJj ODg0IDEwMDY0NAotLS0tIGEvY3J5cHRvL2V2cC9lX2Flc19jYmNfaG1hY19zaGExLmMKLSsrKyBi L2NyeXB0by9ldnAvZV9hZXNfY2JjX2htYWNfc2hhMS5jCi1AQCAtMzI4LDEwICszMjgsMTEgQEAg c3RhdGljIGludCBhZXNuaV9jYmNfaG1hY19zaGExX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0gCi0gCQkJCWlmIChyZXMhPVNIQV9DQkxPQ0spIGNvbnRp bnVlOwotIAotLQkJCQltYXNrID0gMC0oKGlucF9sZW4rOC1qKT4+KHNpemVvZihqKSo4LTEpKTsK LSsJCQkJLyogaiBpcyBub3QgaW5jcmVtZW50ZWQgeWV0ICovCi0rCQkJCW1hc2sgPSAwLSgoaW5w X2xlbis3LWopPj4oc2l6ZW9mKGopKjgtMSkpOwotIAkJCQlkYXRhLT51W1NIQV9MQkxPQ0stMV0g fD0gYml0bGVuJm1hc2s7Ci0gCQkJCXNoYTFfYmxvY2tfZGF0YV9vcmRlcigma2V5LT5tZCxkYXRh LDEpOwotLQkJCQltYXNrICY9IDAtKChqLWlucF9sZW4tNzMpPj4oc2l6ZW9mKGopKjgtMSkpOwot KwkJCQltYXNrICY9IDAtKChqLWlucF9sZW4tNzIpPj4oc2l6ZW9mKGopKjgtMSkpOwotIAkJCQlw bWFjLT51WzBdIHw9IGtleS0+bWQuaDAgJiBtYXNrOwotIAkJCQlwbWFjLT51WzFdIHw9IGtleS0+ bWQuaDEgJiBtYXNrOwotIAkJCQlwbWFjLT51WzJdIHw9IGtleS0+bWQuaDIgJiBtYXNrOwotLS0g Ci0xLjcuOS41Ci0KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xZS1jdmUtMjAxMy00MzUzLnBh dGNoIGIvb3BlbnNzbC0xLjAuMWUtY3ZlLTIwMTMtNDM1My5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNWY5NjExNi4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xZS1jdmUt MjAxMy00MzUzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotRml4IGZvciBU TFMgcmVjb3JkIHRhbXBlcmluZyBidWcuIEEgY2FyZWZ1bGx5IGNyYWZ0ZWQgaW52YWxpZCAKLWhh bmRzaGFrZSBjb3VsZCBjcmFzaCBPcGVuU1NMIHdpdGggYSBOVUxMIHBvaW50ZXIgZXhjZXB0aW9u LgotVGhhbmtzIHRvIEFudG9uIEpvaGFuc3NvbiBmb3IgcmVwb3J0aW5nIHRoaXMgaXNzdWVzLgot KENWRS0yMDEzLTQzNTMpCi1kaWZmIC0tZ2l0IGEvc3NsL3MzX2JvdGguYyBiL3NzbC9zM19ib3Ro LmMKLWluZGV4IDFlNWRjYWIuLjUzYjkzOTAgMTAwNjQ0Ci0tLS0gYS9zc2wvczNfYm90aC5jCi0r KysgYi9zc2wvczNfYm90aC5jCi1AQCAtMjEwLDcgKzIxMCwxMSBAQCBzdGF0aWMgdm9pZCBzc2wz X3Rha2VfbWFjKFNTTCAqcykKLSAJewotIAljb25zdCBjaGFyICpzZW5kZXI7Ci0gCWludCBzbGVu OwotLQotKwkvKiBJZiBubyBuZXcgY2lwaGVyIHNldHVwIHJldHVybiBpbW1lZGlhdGVseTogb3Ro ZXIgZnVuY3Rpb25zIHdpbGwKLSsJICogc2V0IHRoZSBhcHByb3ByaWF0ZSBlcnJvci4KLSsJICov Ci0rCWlmIChzLT5zMy0+dG1wLm5ld19jaXBoZXIgPT0gTlVMTCkKLSsJCXJldHVybjsKLSAJaWYg KHMtPnN0YXRlICYgU1NMX1NUX0NPTk5FQ1QpCi0gCQl7Ci0gCQlzZW5kZXI9cy0+bWV0aG9kLT5z c2wzX2VuYy0+c2VydmVyX2ZpbmlzaGVkX2xhYmVsOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4w LjFlLWN2ZS0yMDEzLTY0NDkucGF0Y2ggYi9vcGVuc3NsLTEuMC4xZS1jdmUtMjAxMy02NDQ5LnBh dGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODBhMTc4Li4wMDAwMDAwCi0tLSBh L29wZW5zc2wtMS4wLjFlLWN2ZS0yMDEzLTY0NDkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwx MTEgKzAsMCBAQAotVXNlIHZlcnNpb24gaW4gU1NMX01FVEhPRCBub3QgU1NMIHN0cnVjdHVyZS4K LQotV2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSBUTFMgMS4yIFBSRiBhbmQgcmVjb3JkIGhh c2ggYWxnb3JpdGhtcwotdXNlIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgY29ycmVzcG9uZGlu ZyBTU0xfTUVUSE9EIHN0cnVjdHVyZQotaW5zdGVhZCBvZiB0aGUgU1NMIHN0cnVjdHVyZS4gVGhl IFNTTCBzdHJ1Y3R1cmUgdmVyc2lvbiBpcyBzb21ldGltZXMKLWluYWNjdXJhdGUuIE5vdGU6IE9w ZW5TU0wgMS4wLjIgYW5kIGxhdGVyIGVmZmVjdGl2ZWx5IGRvIHRoaXMgYWxyZWFkeS4KLShDVkUt MjAxMy02NDQ5KQotCi1BbHNvIHByZXZlbnRpdmVseSBjaGVjayBFVlAgZXJyb3JzIGZvciBoYW5k c2hha2UgZGlnZXN0cy4KLQotZGlmZiAtLWdpdCBhL3NzbC9zM19saWIuYyBiL3NzbC9zM19saWIu YwotaW5kZXggYmY4MzJiYi4uYzRlZjI3MyAxMDA2NDQKLS0tLSBhL3NzbC9zM19saWIuYwotKysr IGIvc3NsL3MzX2xpYi5jCi1AQCAtNDI4Niw3ICs0Mjg2LDcgQEAgbmVlZCB0byBnbyB0byBTU0xf U1RfQUNDRVBULgotIGxvbmcgc3NsX2dldF9hbGdvcml0aG0yKFNTTCAqcykKLSAJewotIAlsb25n IGFsZzIgPSBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTI7Ci0tCWlmIChUTFMxX2dl dF92ZXJzaW9uKHMpID49IFRMUzFfMl9WRVJTSU9OICYmCi0rCWlmIChzLT5tZXRob2QtPnZlcnNp b24gPT0gVExTMV8yX1ZFUlNJT04gJiYKLSAJICAgIGFsZzIgPT0gKFNTTF9IQU5EU0hBS0VfTUFD X0RFRkFVTFR8VExTMV9QUkYpKQotIAkJcmV0dXJuIFNTTF9IQU5EU0hBS0VfTUFDX1NIQTI1NiB8 IFRMUzFfUFJGX1NIQTI1NjsKLSAJcmV0dXJuIGFsZzI7Ci1kaWZmIC0tZ2l0IGEvc3NsL3MzX2Jv dGguYyBiL3NzbC9zM19ib3RoLmMKLWluZGV4IGVhZDAxYzguLjFlNWRjYWIgMTAwNjQ0Ci0tLS0g YS9zc2wvczNfYm90aC5jCi0rKysgYi9zc2wvczNfYm90aC5jCi1AQCAtMTYxLDYgKzE2MSw4IEBA IGludCBzc2wzX3NlbmRfZmluaXNoZWQoU1NMICpzLCBpbnQgYSwgaW50IGIsIGNvbnN0IGNoYXIg KnNlbmRlciwgaW50IHNsZW4pCi0gCi0gCQlpPXMtPm1ldGhvZC0+c3NsM19lbmMtPmZpbmFsX2Zp bmlzaF9tYWMocywKLSAJCQlzZW5kZXIsc2xlbixzLT5zMy0+dG1wLmZpbmlzaF9tZCk7Ci0rCQlp ZiAoaSA9PSAwKQotKwkJCXJldHVybiAwOwotIAkJcy0+czMtPnRtcC5maW5pc2hfbWRfbGVuID0g aTsKLSAJCW1lbWNweShwLCBzLT5zMy0+dG1wLmZpbmlzaF9tZCwgaSk7Ci0gCQlwKz1pOwotZGlm ZiAtLWdpdCBhL3NzbC9zM19wa3QuYyBiL3NzbC9zM19wa3QuYwotaW5kZXggODA0MjkxZS4uYzRi YzRlNyAxMDA2NDQKLS0tLSBhL3NzbC9zM19wa3QuYwotKysrIGIvc3NsL3MzX3BrdC5jCi1AQCAt MzM1LDcgKzMzNSw3IEBAIGZwcmludGYoc3RkZXJyLCAiUmVjb3JkIHR5cGU9JWQsIExlbmd0aD0l ZFxuIiwgcnItPnR5cGUsIHJyLT5sZW5ndGgpOwotIAkJCWlmICh2ZXJzaW9uICE9IHMtPnZlcnNp b24pCi0gCQkJCXsKLSAJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX1JFQ09SRCxTU0xfUl9XUk9O R19WRVJTSU9OX05VTUJFUik7Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHMtPnZlcnNpb24gJiAweEZGMDApID09ICh2ZXJzaW9uICYgMHhGRjAwKSkKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgocy0+dmVyc2lvbiAmIDB4RkYwMCkgPT0gKHZlcnNp b24gJiAweEZGMDApICYmICFzLT5lbmNfd3JpdGVfY3R4ICYmICFzLT53cml0ZV9oYXNoKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCS8qIFNlbmQgYmFjayBlcnJvciB1c2luZyB0 aGVpciBtaW5vciB2ZXJzaW9uIG51bWJlciA6LSkgKi8KLSAJCQkJCXMtPnZlcnNpb24gPSAodW5z aWduZWQgc2hvcnQpdmVyc2lvbjsKLSAJCQkJYWw9U1NMX0FEX1BST1RPQ09MX1ZFUlNJT047Ci1A QCAtMTQ1OSw4ICsxNDU5LDE0IEBAIGludCBzc2wzX2RvX2NoYW5nZV9jaXBoZXJfc3BlYyhTU0wg KnMpCi0gCQlzbGVuPXMtPm1ldGhvZC0+c3NsM19lbmMtPmNsaWVudF9maW5pc2hlZF9sYWJlbF9s ZW47Ci0gCQl9Ci0gCi0tCXMtPnMzLT50bXAucGVlcl9maW5pc2hfbWRfbGVuID0gcy0+bWV0aG9k LT5zc2wzX2VuYy0+ZmluYWxfZmluaXNoX21hYyhzLAotKwlpID0gcy0+bWV0aG9kLT5zc2wzX2Vu Yy0+ZmluYWxfZmluaXNoX21hYyhzLAotIAkJc2VuZGVyLHNsZW4scy0+czMtPnRtcC5wZWVyX2Zp bmlzaF9tZCk7Ci0rCWlmIChpID09IDApCi0rCQl7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMM19ET19D SEFOR0VfQ0lQSEVSX1NQRUMsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLSsJCXJldHVybiAwOwot KwkJfQotKwlzLT5zMy0+dG1wLnBlZXJfZmluaXNoX21kX2xlbiA9IGk7Ci0gCi0gCXJldHVybigx KTsKLSAJfQotZGlmZiAtLWdpdCBhL3NzbC9zM19zcnZyLmMgYi9zc2wvczNfc3J2ci5jCi1pbmRl eCBlNWE4YjNmLi41MmVmZWQzIDEwMDY0NAotLS0tIGEvc3NsL3MzX3NydnIuYwotKysrIGIvc3Ns L3MzX3NydnIuYwotQEAgLTk1OCw3ICs5NTgsOCBAQCBpbnQgc3NsM19nZXRfY2xpZW50X2hlbGxv KFNTTCAqcykKLSAJICAgIChzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04gJiYgcy0+Y2xpZW50 X3ZlcnNpb24gPCBzLT52ZXJzaW9uKSkKLSAJCXsKLSAJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9D TElFTlRfSEVMTE8sIFNTTF9SX1dST05HX1ZFUlNJT05fTlVNQkVSKTsKLS0JCWlmICgocy0+Y2xp ZW50X3ZlcnNpb24+PjgpID09IFNTTDNfVkVSU0lPTl9NQUpPUikKLSsJCWlmICgocy0+Y2xpZW50 X3ZlcnNpb24+PjgpID09IFNTTDNfVkVSU0lPTl9NQUpPUiAmJiAKLSsJCQkhcy0+ZW5jX3dyaXRl X2N0eCAmJiAhcy0+d3JpdGVfaGFzaCkKLSAJCQl7Ci0gCQkJLyogc2ltaWxhciB0byBzc2wzX2dl dF9yZWNvcmQsIHNlbmQgYWxlcnQgdXNpbmcgcmVtb3RlIHZlcnNpb24gbnVtYmVyICovCi0gCQkJ cy0+dmVyc2lvbiA9IHMtPmNsaWVudF92ZXJzaW9uOwotZGlmZiAtLWdpdCBhL3NzbC90MV9lbmMu YyBiL3NzbC90MV9lbmMuYwotaW5kZXggODA5YWQyZS4uNzIwMTVmNSAxMDA2NDQKLS0tLSBhL3Nz bC90MV9lbmMuYwotKysrIGIvc3NsL3QxX2VuYy5jCi1AQCAtOTE1LDE4ICs5MTUsMTkgQEAgaW50 IHRsczFfZmluYWxfZmluaXNoX21hYyhTU0wgKnMsCi0gCQlpZiAobWFzayAmIHNzbF9nZXRfYWxn b3JpdGhtMihzKSkKLSAJCQl7Ci0gCQkJaW50IGhhc2hzaXplID0gRVZQX01EX3NpemUobWQpOwot LQkJCWlmIChoYXNoc2l6ZSA8IDAgfHwgaGFzaHNpemUgPiAoaW50KShzaXplb2YgYnVmIC0gKHNp emVfdCkocS1idWYpKSkKLSsJCQlFVlBfTURfQ1RYICpoZGdzdCA9IHMtPnMzLT5oYW5kc2hha2Vf ZGdzdFtpZHhdOwotKwkJCWlmICghaGRnc3QgfHwgaGFzaHNpemUgPCAwIHx8IGhhc2hzaXplID4g KGludCkoc2l6ZW9mIGJ1ZiAtIChzaXplX3QpKHEtYnVmKSkpCi0gCQkJCXsKLSAJCQkJLyogaW50 ZXJuYWwgZXJyb3I6ICdidWYnIGlzIHRvbyBzbWFsbCBmb3IgdGhpcyBjaXBlcnN1aXRlISAqLwot IAkJCQllcnIgPSAxOwotIAkJCQl9Ci0gCQkJZWxzZQotIAkJCQl7Ci0tCQkJCUVWUF9NRF9DVFhf Y29weV9leCgmY3R4LHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpZHhdKTsKLS0JCQkJRVZQX0RpZ2Vz dEZpbmFsX2V4KCZjdHgscSwmaSk7Ci0tCQkJCWlmIChpICE9ICh1bnNpZ25lZCBpbnQpaGFzaHNp emUpIC8qIGNhbid0IHJlYWxseSBoYXBwZW4gKi8KLSsJCQkJaWYgKCFFVlBfTURfQ1RYX2NvcHlf ZXgoJmN0eCwgaGRnc3QpIHx8Ci0rCQkJCQkhRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgscSwmaSkg fHwKLSsJCQkJCShpICE9ICh1bnNpZ25lZCBpbnQpaGFzaHNpemUpKQotIAkJCQkJZXJyID0gMTsK LS0JCQkJcSs9aTsKLSsJCQkJcSs9aGFzaHNpemU7Ci0gCQkJCX0KLSAJCQl9Ci0gCQl9Ci0tLSAK LTEuOC4zLjEKLQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFlLWN2ZS0yMDEzLTY0NTAucGF0 Y2ggYi9vcGVuc3NsLTEuMC4xZS1jdmUtMjAxMy02NDUwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBmYTA5NmM4Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjFlLWN2ZS0y MDEzLTY0NTAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi1GaXggRFRMUyBy ZXRyYW5zbWlzc2lvbiBmcm9tIHByZXZpb3VzIHNlc3Npb24uCi0KLUZvciBEVExTIHdlIG1pZ2h0 IG5lZWQgdG8gcmV0cmFuc21pdCBtZXNzYWdlcyBmcm9tIHRoZSBwcmV2aW91cyBzZXNzaW9uCi1z byBrZWVwIGEgY29weSBvZiB3cml0ZSBjb250ZXh0IGluIERUTFMgcmV0cmFuc21pc3Npb24gYnVm ZmVycyBpbnN0ZWFkCi1vZiByZXBsYWNpbmcgaXQgYWZ0ZXIgc2VuZGluZyBDQ1MuIENWRS0yMDEz LTY0NTAuCi0KLWRpZmYgLS1naXQgYS9zc2wvZDFfYm90aC5jIGIvc3NsL2QxX2JvdGguYwotaW5k ZXggNjVlYzAwMS4uN2E1NTk2YSAxMDA2NDQKLS0tLSBhL3NzbC9kMV9ib3RoLmMKLSsrKyBiL3Nz bC9kMV9ib3RoLmMKLUBAIC0yMTQsNiArMjE0LDEyIEBAIGR0bHMxX2htX2ZyYWdtZW50X25ldyh1 bnNpZ25lZCBsb25nIGZyYWdfbGVuLCBpbnQgcmVhc3NlbWJseSkKLSBzdGF0aWMgdm9pZAotIGR0 bHMxX2htX2ZyYWdtZW50X2ZyZWUoaG1fZnJhZ21lbnQgKmZyYWcpCi0gCXsKLSsKLSsJaWYgKGZy YWctPm1zZ19oZWFkZXIuaXNfY2NzKQotKwkJewotKwkJRVZQX0NJUEhFUl9DVFhfZnJlZShmcmFn LT5tc2dfaGVhZGVyLnNhdmVkX3JldHJhbnNtaXRfc3RhdGUuZW5jX3dyaXRlX2N0eCk7Ci0rCQlF VlBfTURfQ1RYX2Rlc3Ryb3koZnJhZy0+bXNnX2hlYWRlci5zYXZlZF9yZXRyYW5zbWl0X3N0YXRl LndyaXRlX2hhc2gpOwotKwkJfQotIAlpZiAoZnJhZy0+ZnJhZ21lbnQpIE9QRU5TU0xfZnJlZShm cmFnLT5mcmFnbWVudCk7Ci0gCWlmIChmcmFnLT5yZWFzc2VtYmx5KSBPUEVOU1NMX2ZyZWUoZnJh Zy0+cmVhc3NlbWJseSk7Ci0gCU9QRU5TU0xfZnJlZShmcmFnKTsKLWRpZmYgLS1naXQgYS9zc2wv c3NsX2xvY2wuaCBiL3NzbC9zc2xfbG9jbC5oCi1pbmRleCA5NmNlOWE3Li5lNDg1OTA3IDEwMDY0 NAotLS0tIGEvc3NsL3NzbF9sb2NsLmgKLSsrKyBiL3NzbC9zc2xfbG9jbC5oCi1AQCAtNjIxLDYg KzYyMSw4IEBAIGV4dGVybiBTU0wzX0VOQ19NRVRIT0QgVExTdjFfZW5jX2RhdGE7Ci0gZXh0ZXJu IFNTTDNfRU5DX01FVEhPRCBTU0x2M19lbmNfZGF0YTsKLSBleHRlcm4gU1NMM19FTkNfTUVUSE9E IERUTFN2MV9lbmNfZGF0YTsKLSAKLSsjZGVmaW5lIFNTTF9JU19EVExTKHMpIChzLT5tZXRob2Qt PnZlcnNpb24gPT0gRFRMUzFfVkVSU0lPTikKLSsKLSAjZGVmaW5lIElNUExFTUVOVF90bHNfbWV0 aF9mdW5jKHZlcnNpb24sIGZ1bmNfbmFtZSwgc19hY2NlcHQsIHNfY29ubmVjdCwgXAotIAkJCQlz X2dldF9tZXRoKSBcCi0gY29uc3QgU1NMX01FVEhPRCAqZnVuY19uYW1lKHZvaWQpICBcCi1kaWZm IC0tZ2l0IGEvc3NsL3QxX2VuYy5jIGIvc3NsL3QxX2VuYy5jCi1pbmRleCA3MjAxNWY1Li41NmRi ODM0IDEwMDY0NAotLS0tIGEvc3NsL3QxX2VuYy5jCi0rKysgYi9zc2wvdDFfZW5jLmMKLUBAIC00 MTQsMTUgKzQxNCwyMCBAQCBpbnQgdGxzMV9jaGFuZ2VfY2lwaGVyX3N0YXRlKFNTTCAqcywgaW50 IHdoaWNoKQotIAkJCXMtPm1hY19mbGFncyB8PSBTU0xfTUFDX0ZMQUdfV1JJVEVfTUFDX1NUUkVB TTsKLSAJCQllbHNlCi0gCQkJcy0+bWFjX2ZsYWdzICY9IH5TU0xfTUFDX0ZMQUdfV1JJVEVfTUFD X1NUUkVBTTsKLS0JCWlmIChzLT5lbmNfd3JpdGVfY3R4ICE9IE5VTEwpCi0rCQlpZiAocy0+ZW5j X3dyaXRlX2N0eCAhPSBOVUxMICYmICFTU0xfSVNfRFRMUyhzKSkKLSAJCQlyZXVzZV9kZCA9IDE7 Ci0tCQllbHNlIGlmICgocy0+ZW5jX3dyaXRlX2N0eD1PUEVOU1NMX21hbGxvYyhzaXplb2YoRVZQ X0NJUEhFUl9DVFgpKSkgPT0gTlVMTCkKLSsJCWVsc2UgaWYgKChzLT5lbmNfd3JpdGVfY3R4PUVW UF9DSVBIRVJfQ1RYX25ldygpKSA9PSBOVUxMKQotIAkJCWdvdG8gZXJyOwotLQkJZWxzZQotLQkJ CS8qIG1ha2Ugc3VyZSBpdCdzIGludGlhbGl6ZWQgaW4gY2FzZSB3ZSBleGl0IGxhdGVyIHdpdGgg YW4gZXJyb3IgKi8KLS0JCQlFVlBfQ0lQSEVSX0NUWF9pbml0KHMtPmVuY193cml0ZV9jdHgpOwot IAkJZGQ9IHMtPmVuY193cml0ZV9jdHg7Ci0tCQltYWNfY3R4ID0gc3NsX3JlcGxhY2VfaGFzaCgm cy0+d3JpdGVfaGFzaCxOVUxMKTsKLSsJCWlmIChTU0xfSVNfRFRMUyhzKSkKLSsJCQl7Ci0rCQkJ bWFjX2N0eCA9IEVWUF9NRF9DVFhfY3JlYXRlKCk7Ci0rCQkJaWYgKCFtYWNfY3R4KQotKwkJCQln b3RvIGVycjsKLSsJCQlzLT53cml0ZV9oYXNoID0gbWFjX2N0eDsKLSsJCQl9Ci0rCQllbHNlCi0r CQkJbWFjX2N0eCA9IHNzbF9yZXBsYWNlX2hhc2goJnMtPndyaXRlX2hhc2gsTlVMTCk7Ci0gI2lm bmRlZiBPUEVOU1NMX05PX0NPTVAKLSAJCWlmIChzLT5jb21wcmVzcyAhPSBOVUxMKQotIAkJCXsK LWRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2RpZ2VzdC5jIGIvY3J5cHRvL2V2cC9kaWdlc3QuYwot aW5kZXggNmZjNDY5Zi4uZDE0ZThlNCAxMDA2NDQKLS0tLSBhL2NyeXB0by9ldnAvZGlnZXN0LmMK LSsrKyBiL2NyeXB0by9ldnAvZGlnZXN0LmMKLUBAIC0zNjYsOCArMzY2LDExIEBAIGludCBFVlBf RGlnZXN0KGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCwKLSAKLSB2b2lkIEVWUF9NRF9D VFhfZGVzdHJveShFVlBfTURfQ1RYICpjdHgpCi0gCXsKLS0JRVZQX01EX0NUWF9jbGVhbnVwKGN0 eCk7Ci0tCU9QRU5TU0xfZnJlZShjdHgpOwotKwlpZiAoY3R4KQotKwkJewotKwkJRVZQX01EX0NU WF9jbGVhbnVwKGN0eCk7Ci0rCQlPUEVOU1NMX2ZyZWUoY3R4KTsKLSsJCX0KLSAJfQotIAotIC8q IFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0ICov CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWUtZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjFl LWZpcHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NDk2YTAuLjAwMDAw MDAKLS0tIGEvb3BlbnNzbC0xLjAuMWUtZmlwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIw MzkzICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2FwcHMvcGtjczEyLmMuZmlwcyBv cGVuc3NsLTEuMC4xZS9hcHBzL3BrY3MxMi5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvYXBwcy9wa2Nz MTIuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWUvYXBwcy9wa2NzMTIuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE3MjY5Mzk1NSArMDIw MAotQEAgLTY3LDYgKzY3LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9wZW0uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotICNk ZWZpbmUgUFJPRyBwa2NzMTJfbWFpbgotIAotQEAgLTEzMCw2ICsxMzMsMTEgQEAgaW50IE1BSU4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAotICAgICBhcHBzX3N0YXJ0dXAoKTsKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSkKLSsJY2VydF9wYmUgPSBrZXlf cGJlOyAvKiBjYW5ub3QgdXNlIFJDMiBpbiB0aGUgRklQUyBtb2RlICovCi0rI2VuZGlmCi0rCi0g ICAgIGVuYyA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSAgICAgaWYgKGJpb19lcnIgPT0gTlVMTCAp IGJpb19lcnIgPSBCSU9fbmV3X2ZwIChzdGRlcnIsIEJJT19OT0NMT1NFKTsKLSAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFlL2FwcHMvc3BlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2FwcHMvc3Bl ZWQuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2FwcHMvc3BlZWQuYy5maXBzCTIwMTMtMDItMTEgMTY6 MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvYXBwcy9zcGVlZC5jCTIw MTMtMTAtMDQgMTE6NDk6NTYuMzg0MjI3ODU5ICswMjAwCi1AQCAtMTk1LDcgKzE5NSw2IEBACi0g I2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAotICN1bmRlZiBBRVNfc2V0X2VuY3J5cHRf a2V5Ci0gI3VuZGVmIEFFU19zZXRfZGVjcnlwdF9rZXkKLS0jdW5kZWYgREVTX3NldF9rZXlfdW5j aGVja2VkCi0gI2VuZGlmCi0gI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQot ICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMjAzLDcgKzIw Miw2IEBACi0gI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKLSAjZGVm aW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKLSAjZGVmaW5lIFJDNF9zZXRfa2V5 CXByaXZhdGVfUkM0X3NldF9rZXkKLS0jZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZAlwcml2 YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZAotICNkZWZpbmUgQUVTX3NldF9lbmNyeXB0X2tleQlw cml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkKLSAjZGVmaW5lIEFFU19zZXRfZGVjcnlwdF9rZXkJ cHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5Ci0gI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXBy aXZhdGVfQ2FtZWxsaWFfc2V0X2tleQotQEAgLTk0MSw3ICs5MzksMTIgQEAgaW50IE1BSU4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAJCQlpZiAoc3Ry Y21wKCphcmd2LCJyc2EiKSA9PSAwKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJ CWlmICghRklQU19tb2RlKCkpCi0rI2VuZGlmCi0rCQkJCXsKLSAJCQlyc2FfZG9pdFtSX1JTQV81 MTJdPTE7Ci0rCQkJCX0KLSAJCQlyc2FfZG9pdFtSX1JTQV8xMDI0XT0xOwotIAkJCXJzYV9kb2l0 W1JfUlNBXzIwNDhdPTE7Ci0gCQkJcnNhX2RvaXRbUl9SU0FfNDA5Nl09MTsKLUBAIC05NTEsNyAr OTU0LDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjaWZuZGVmIE9QRU5T U0xfTk9fRFNBCi0gCQkJaWYgKHN0cmNtcCgqYXJndiwiZHNhIikgPT0gMCkKLSAJCQl7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwkJCQlpZiAoIUZJUFNfbW9kZSgpKQotKyNlbmRpZgotKwkJCQl7 Ci0gCQkJZHNhX2RvaXRbUl9EU0FfNTEyXT0xOwotKwkJCQl9Ci0gCQkJZHNhX2RvaXRbUl9EU0Ff MTAyNF09MTsKLSAJCQlkc2FfZG9pdFtSX0RTQV8yMDQ4XT0xOwotIAkJCX0KLUBAIC0xMTYyLDEy ICsxMTcwLDE4IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCXsKLSAJCWZv ciAoaT0wOyBpPEFMR09SX05VTTsgaSsrKQotIAkJCXsKLS0JCQlpZiAoaSAhPSBEX0VWUCkKLSsJ CQlpZiAoaSAhPSBEX0VWUCAmJgotKwkJCSAgICAoIUZJUFNfbW9kZSgpIHx8IChpICE9IERfV0hJ UkxQT09MICYmCi0rCQkJCWkgIT0gRF9NRDIgJiYgaSAhPSBEX01ENCAmJgotKwkJCQlpICE9IERf TUQ1ICYmIGkgIT0gRF9NREMyICYmCi0rCQkJCWkgIT0gRF9STUQxNjApKSkKLSAJCQkJZG9pdFtp XT0xOwotIAkJCX0KLSAJCWZvciAoaT0wOyBpPFJTQV9OVU07IGkrKykKLSsJCSAgICBpZiAoIUZJ UFNfbW9kZSgpIHx8IGkgIT0gUl9SU0FfNTEyKQotIAkJCXJzYV9kb2l0W2ldPTE7Ci0gCQlmb3Ig KGk9MDsgaTxEU0FfTlVNOyBpKyspCi0rCQkgICAgaWYgKCFGSVBTX21vZGUoKSB8fCBpICE9IFJf RFNBXzUxMikKLSAJCQlkc2FfZG9pdFtpXT0xOwotICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQot IAkJZm9yIChpPTA7IGk8RUNfTlVNOyBpKyspCi1AQCAtMTIyNiwzMCArMTI0MCw1NCBAQCBpbnQg TUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5MzIs MjU2LCZhZXNfa3MzKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKLSsJ aWYgKGRvaXRbRF9DQkNfMTI4X0NNTF0gfHwgZG9pdFtEX0NCQ18xOTJfQ01MXSB8fCBkb2l0W0Rf Q0JDXzI1Nl9DTUxdKQotKwkgICAgewotIAlDYW1lbGxpYV9zZXRfa2V5KGtleTE2LDEyOCwmY2Ft ZWxsaWFfa3MxKTsKLSAJQ2FtZWxsaWFfc2V0X2tleShja2V5MjQsMTkyLCZjYW1lbGxpYV9rczIp OwotIAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkzMiwyNTYsJmNhbWVsbGlhX2tzMyk7Ci0rCSAgICB9 Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0lERUEKLSsJaWYgKGRvaXRbRF9DQkNfSURF QV0pCi0rCSAgICB7Ci0gCWlkZWFfc2V0X2VuY3J5cHRfa2V5KGtleTE2LCZpZGVhX2tzKTsKLSsJ ICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAotKwlpZiAoZG9pdFtEX0NC Q19TRUVEXSkKLSsJICAgIHsKLSAJU0VFRF9zZXRfa2V5KGtleTE2LCZzZWVkX2tzKTsKLSsJICAg IH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0Ci0rCWlmIChkb2l0W0RfUkM0XSkK LSsJICAgIHsKLSAJUkM0X3NldF9rZXkoJnJjNF9rcywxNixrZXkxNik7Ci0rCSAgICB9Ci0gI2Vu ZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JDMgotKwlpZiAoZG9pdFtEX0NCQ19SQzJdKQotKwkg ICAgewotIAlSQzJfc2V0X2tleSgmcmMyX2tzLDE2LGtleTE2LDEyOCk7Ci0rCSAgICB9Ci0gI2Vu ZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JDNQotKwlpZiAoZG9pdFtEX0NCQ19SQzVdKQotKwkg ICAgewotIAlSQzVfMzJfc2V0X2tleSgmcmM1X2tzLDE2LGtleTE2LDEyKTsKLSsJICAgIH0KLSAj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQkYKLSsJaWYgKGRvaXRbRF9DQkNfQkZdKQotKwkg ICAgewotIAlCRl9zZXRfa2V5KCZiZl9rcywxNixrZXkxNik7Ci0rCSAgICB9Ci0gI2VuZGlmCi0g I2lmbmRlZiBPUEVOU1NMX05PX0NBU1QKLSsJaWYgKGRvaXRbRF9DQkNfQ0FTVF0pCi0rCSAgICB7 Ci0gCUNBU1Rfc2V0X2tleSgmY2FzdF9rcywxNixrZXkxNik7Ci0rCSAgICB9Ci0gI2VuZGlmCi0g I2lmbmRlZiBPUEVOU1NMX05PX1JTQQotIAltZW1zZXQocnNhX2MsMCxzaXplb2YocnNhX2MpKTsK LUBAIC0xNTY0LDYgKzE2MDIsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0g CQlITUFDX0NUWCBoY3R4OwotIAotIAkJSE1BQ19DVFhfaW5pdCgmaGN0eCk7Ci0rCQlITUFDX0NU WF9zZXRfZmxhZ3MoJmhjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQlI TUFDX0luaXRfZXgoJmhjdHgsKHVuc2lnbmVkIGNoYXIgKikiVGhpcyBpcyBhIGtleS4uLiIsCi0g CQkJMTYsRVZQX21kNSgpLCBOVUxMKTsKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL0NvbmZp Z3VyZS5maXBzIG9wZW5zc2wtMS4wLjFlL0NvbmZpZ3VyZQotLS0tIG9wZW5zc2wtMS4wLjFlL0Nv bmZpZ3VyZS5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTUzNjkzNTI2ICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWUvQ29uZmlndXJlCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTczNjkzOTc4ICswMjAw Ci1AQCAtOTk1LDExICs5OTUsNiBAQCBpZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBk ZWZpbmVkCi0gCSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7Ci0gCX0KLSAKLS1pZiAoJGZp cHMgJiYgJGZpcHNsaWJkaXIgZXEgIiIpCi0tCXsKLS0JJGZpcHNsaWJkaXIgPSAkZmlwc2RpciAu ICIvbGliLyI7Ci0tCX0KLS0KLSAjIFJTQVggRU5HSU5FIHNldHMgZGVmYXVsdCBub24tRklQUyBS U0EgbWV0aG9kLgotIGlmICgkZmlwcykKLSAJewotQEAgLTE0NzQsNyArMTQ2OSw2IEBAICRjZmxh Z3MuPSIgLURPUEVOU1NMX0JOX0FTTV9HRjJtIiBpZiAoJGIKLSBpZiAoJGZpcHMpCi0gCXsKLSAJ JG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwotLQkkY2Zs YWdzIC49ICIgLUlcJChGSVBTRElSKS9pbmNsdWRlIjsKLSAJfQotIAotICRjcHVpZF9vYmo9Im1l bV9jbHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7Ci1AQCAtMTY2MSw5ICsxNjU1 LDEyIEBAIHdoaWxlICg8SU4+KQotIAotIAlzL15GSVBTRElSPS4qL0ZJUFNESVI9JGZpcHNkaXIv OwotIAlzL15GSVBTTElCRElSPS4qL0ZJUFNMSUJESVI9JGZpcHNsaWJkaXIvOwotLQlzL15GSVBT Q0FOTElCPS4qL0ZJUFNDQU5MSUI9bGliY3J5cHRvLyBpZiAkZmlwczsKLSAJcy9eQkFTRUFERFI9 LiovQkFTRUFERFI9JGJhc2VhZGRyLzsKLSAKLSsJaWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQ Uz0uKi9GSVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9 JHNoYXJlZF90YXJnZXQvOwotIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9t YXJrLzsKLSAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykg XCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vYWVzL2Flc19taXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vYWVzL2Fl c19taXNjLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vYWVzL2Flc19taXNjLmMuZmlwcwky MDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9hZXMvYWVzX21pc2MuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE3MzY5Mzk3OCArMDIwMAot QEAgLTY5LDE3ICs2OSwxMSBAQCBjb25zdCBjaGFyICpBRVNfb3B0aW9ucyh2b2lkKSB7Ci0gaW50 IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3Qg aW50IGJpdHMsCi0gCQkJQUVTX0tFWSAqa2V5KQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwot LQlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOwotLSNlbmRpZgotIAlyZXR1cm4gcHJpdmF0ZV9BRVNf c2V0X2VuY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0gCX0KLSAKLSBpbnQgQUVTX3Nl dF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0 cywKLSAJCQlBRVNfS0VZICprZXkpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWZpcHNf Y2lwaGVyX2Fib3J0KEFFUyk7Ci0tI2VuZGlmCi0gCXJldHVybiBwcml2YXRlX0FFU19zZXRfZGVj cnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2NtYWMvY21hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2NtYWMvY21h Yy5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2NtYWMvY21hYy5jLmZpcHMJMjAxMy0wMi0x MSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vY21h Yy9jbWFjLmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xNzM2OTM5NzggKzAyMDAKLUBAIC0xMDcsMTMg KzEwNyw2IEBAIENNQUNfQ1RYICpDTUFDX0NUWF9uZXcodm9pZCkKLSAKLSB2b2lkIENNQUNfQ1RY X2NsZWFudXAoQ01BQ19DVFggKmN0eCkKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYg KEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJewotLQkJRklQU19jbWFjX2N0 eF9jbGVhbnVwKGN0eCk7Ci0tCQlyZXR1cm47Ci0tCQl9Ci0tI2VuZGlmCi0gCUVWUF9DSVBIRVJf Q1RYX2NsZWFudXAoJmN0eC0+Y2N0eCk7Ci0gCU9QRU5TU0xfY2xlYW5zZShjdHgtPnRibCwgRVZQ X01BWF9CTE9DS19MRU5HVEgpOwotIAlPUEVOU1NMX2NsZWFuc2UoY3R4LT5rMSwgRVZQX01BWF9C TE9DS19MRU5HVEgpOwotQEAgLTE2NCwxMSArMTU3LDYgQEAgaW50IENNQUNfSW5pdChDTUFDX0NU WCAqY3R4LCBjb25zdCB2b2lkCi0gCQkJRVZQZXJyKEVWUF9GX0NNQUNfSU5JVCwgRVZQX1JfRElT QUJMRURfRk9SX0ZJUFMpOwotIAkJCXJldHVybiAwOwotIAkJCX0KLS0JCS8qIE90aGVyIGFsZ29y aXRobSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsCi0tCQkgKiB2aWEg RklQU19jaXBoZXJpbml0KCkuCi0tCQkgKi8KLS0JCWlmICghaW1wbCAmJiAhY3R4LT5jY3R4LmVu Z2luZSkKLS0JCQlyZXR1cm4gRklQU19jbWFjX2luaXQoY3R4LCBrZXksIGtleWxlbiwgY2lwaGVy LCBOVUxMKTsKLSAJCX0KLSAjZW5kaWYKLSAJLyogQWxsIHplcm9zIG1lYW5zIHJlc3RhcnQgKi8K LUBAIC0yMTYsMTAgKzIwNCw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAqY3R4LCBjb25z dCB2b2kKLSAJewotIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gaW47Ci0gCXNpemVfdCBi bDsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4 LmVuZ2luZSkKLS0JCXJldHVybiBGSVBTX2NtYWNfdXBkYXRlKGN0eCwgaW4sIGRsZW4pOwotLSNl bmRpZgotIAlpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKLSAJCXJldHVybiAwOwotIAlpZiAo ZGxlbiA9PSAwKQotQEAgLTI2MSwxMCArMjQ1LDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RY ICpjdHgsIGNvbnN0IHZvaQotIGludCBDTUFDX0ZpbmFsKENNQUNfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKm91dCwgc2l6ZV90ICpwb3V0bGVuKQotIAl7Ci0gCWludCBpLCBibCwgbGI7Ci0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUp Ci0tCQlyZXR1cm4gRklQU19jbWFjX2ZpbmFsKGN0eCwgb3V0LCBwb3V0bGVuKTsKLS0jZW5kaWYK LSAJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCi0gCQlyZXR1cm4gMDsKLSAJYmwgPSBFVlBf Q0lQSEVSX0NUWF9ibG9ja19zaXplKCZjdHgtPmNjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2NyeXB0by5oCi0t LS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODow NC4wNTg2OTEzODEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vY3J5cHRvLmgJMjAx My0xMC0wNCAxMTo0ODowNC4xNzM2OTM5NzggKzAyMDAKLUBAIC01NTMsMjQgKzU1MywyOSBAQCBp bnQgRklQU19tb2RlX3NldChpbnQgcik7Ci0gdm9pZCBPUEVOU1NMX2luaXQodm9pZCk7Ci0gCi0g I2RlZmluZSBmaXBzX21kX2luaXQoYWxnKSBmaXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQotKyNk ZWZpbmUgbm9uZmlwc19tZF9pbml0KGFsZykgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGFsZykK LSsjZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotKwlpbnQgYWxnIyNfSW5pdChj eCMjX0NUWCAqYykKLSAKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tI2RlZmluZSBmaXBzX21kX2lu aXRfY3R4KGFsZywgY3gpIFwKLSsjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkg XAotIAlpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykgXAotIAl7IFwKLSAJaWYgKEZJUFNfbW9k ZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLQkJIkxvdyBsZXZlbCBBUEkg Y2FsbCB0byBkaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKTsgXAotKwkJ IkRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCi0gCXJldHVybiBw cml2YXRlXyMjYWxnIyNfSW5pdChjKTsgXAotIAl9IFwKLSAJaW50IHByaXZhdGVfIyNhbGcjI19J bml0KGN4IyNfQ1RYICpjKQotIAotICNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSBcCi0g CWlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLS0JCSJM b3cgbGV2ZWwgQVBJIGNhbGwgdG8gY2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1v ZGUhIikKLSsJCSJDaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQotKwot Ky8qIGRpZSBpZiBGSVBTIHNlbGZ0ZXN0IGZhaWxlZCAqLwotK3ZvaWQgRklQU19zZWxmdGVzdF9j aGVjayh2b2lkKTsKLSAKLSAjZWxzZQotLSNkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4 KSBcCi0tCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQotKyNkZWZpbmUgbm9uZmlwc19tZF9p bml0X2N0eChhbGcsIGN4KSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpCi0gI2RlZmluZSBmaXBz X2NpcGhlcl9hYm9ydChhbGcpIHdoaWxlKDApCi0gI2VuZGlmCi0gCi1AQCAtNTg3LDYgKzU5Miw5 IEBAIGludCBDUllQVE9fbWVtY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHYKLSAgKi8KLSB2b2lk IEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOwotIAotKyNkZWZpbmUgT1BFTlNTTF9IQVZF X0lOSVQJMQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0gLyogRXJyb3Ig Y29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVz LiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9kZXMvZGVzLmgKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGVz L2Rlcy5oLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4wODg2OTIwNTggKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZGVzL2Rlcy5oCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTczNjkzOTc4 ICswMjAwCi1AQCAtMjI0LDkgKzIyNCw2IEBAIGludCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Js b2NrICprZXksREUKLSBpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVT X2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwotIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0 X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0gdm9pZCBERVNf c2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUg KnNjaGVkdWxlKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tdm9pZCBwcml2YXRlX0RFU19zZXRf a2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2No ZWR1bGUpOwotLSNlbmRpZgotIHZvaWQgREVTX3N0cmluZ190b19rZXkoY29uc3QgY2hhciAqc3Ry LERFU19jYmxvY2sgKmtleSk7Ci0gdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIg KnN0cixERVNfY2Jsb2NrICprZXkxLERFU19jYmxvY2sgKmtleTIpOwotIHZvaWQgREVTX2NmYjY0 X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcg bGVuZ3RoLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Rlcy9zZXRfa2V5LmMuZmlw cyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGVzL3NldF9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGVzL3NldF9rZXkuYwkyMDEzLTEwLTA0 IDExOjQ4OjA0LjE3NDY5NDAwMSArMDIwMAotQEAgLTMzNiwxMyArMzM2LDYgQEAgaW50IERFU19z ZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9jawotIAl9Ci0gCi0gdm9pZCBERVNfc2V0X2tl eV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hl ZHVsZSkKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCXsKLS0JZmlwc19jaXBoZXJfYWJvcnQoREVT KTsKLS0JcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hlZHVsZSk7Ci0tCX0K LS12b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtl eSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCi0tI2VuZGlmCi0gCXsKLSAJc3RhdGljIGNv bnN0IGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07Ci0g CXJlZ2lzdGVyIERFU19MT05HIGMsZCx0LHMsdDI7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhfZ2VuLmMK LS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcwkyMDEzLTAyLTExIDE2 OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kaC9kaF9n ZW4uYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE3NDY5NDAwMSArMDIwMAotQEAgLTg0LDExICs4NCw2 IEBAIGludCBESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERIICpyZXQsIGkKLSAjZW5kaWYKLSAJ aWYocmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCi0gCQlyZXR1cm4gcmV0LT5tZXRoLT5nZW5l cmF0ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfZGhfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChyZXQsIHByaW1lX2xlbiwKLS0JCQkJCQkJZ2VuZXJhdG9yLCBjYik7Ci0t I2VuZGlmCi0gCXJldHVybiBkaF9idWlsdGluX2dlbnBhcmFtcyhyZXQsIHByaW1lX2xlbiwgZ2Vu ZXJhdG9yLCBjYik7Ci0gCX0KLSAKLUBAIC0xMjMsNiArMTE4LDIwIEBAIHN0YXRpYyBpbnQgZGhf YnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwKLSAJaW50IGcsb2s9IC0xOwotIAlCTl9DVFggKmN0 eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJaWYgKEZJ UFNfbW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpCi0rCQl7Ci0rCQlESGVycihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBESF9SX0tFWV9T SVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4PUJO X0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0 KGN0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9kaC9kaC5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2Ro LmguZmlwcwkyMDE0LTAyLTA2IDE4OjA0OjE5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9kaC9kaC5oCTIwMTQtMDItMTEgMTY6MDE6MTcuMDM5MzQ1MzU2ICswMTAw Ci1AQCAtNzcsNiArNzcsOCBAQAotICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklU UwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVT X0JJVFMgMTAyNAotKwotICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKLSAj ZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsg dGhlIGJ1aWx0LWluIERICi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtMjEwLDYgKzIxMiw3 IEBAIGludAlESF9jaGVjayhjb25zdCBESCAqZGgsaW50ICpjb2Rlcyk7Ci0gaW50CURIX2NoZWNr X3B1Yl9rZXkoY29uc3QgREggKmRoLGNvbnN0IEJJR05VTSAqcHViX2tleSwgaW50ICpjb2Rlcyk7 Ci0gaW50CURIX2dlbmVyYXRlX2tleShESCAqZGgpOwotIGludAlESF9jb21wdXRlX2tleSh1bnNp Z25lZCBjaGFyICprZXksY29uc3QgQklHTlVNICpwdWJfa2V5LERIICpkaCk7Ci0raW50CURIX2Nv bXB1dGVfa2V5X3BhZGRlZCh1bnNpZ25lZCBjaGFyICprZXksY29uc3QgQklHTlVNICpwdWJfa2V5 LERIICpkaCk7Ci0gREggKglkMmlfREhwYXJhbXMoREggKiphLGNvbnN0IHVuc2lnbmVkIGNoYXIg KipwcCwgbG9uZyBsZW5ndGgpOwotIGludAlpMmRfREhwYXJhbXMoY29uc3QgREggKmEsdW5zaWdu ZWQgY2hhciAqKnBwKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v ZGgvZGhfa2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwky MDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9kaC9kaF9rZXkuYwkyMDE0LTAyLTExIDE1OjU3OjU1LjI2Njg0MDMwMSArMDEwMAotQEAg LTYxLDYgKzYxLDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCBn ZW5lcmF0ZV9rZXkoREggKmRoKTsKLSBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNo YXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOwotQEAgLTk3LDYgKzEwMCwy MSBAQCBpbnQgREhfY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LCBjCi0gCXJldHVybiBk aC0+bWV0aC0+Y29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7Ci0gCX0KLSAKLStpbnQgREhf Y29tcHV0ZV9rZXlfcGFkZGVkKHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJf a2V5LCBESCAqZGgpCi0rCXsKLSsJaW50IHJ2LCBwYWQ7Ci0rCXJ2ID0gREhfY29tcHV0ZV9rZXko a2V5LCBwdWJfa2V5LCBkaCk7Ci0rCWlmIChydiA8PSAwKQotKwkJcmV0dXJuIHJ2OwotKwlwYWQg PSBCTl9udW1fYnl0ZXMoZGgtPnApIC0gcnY7Ci0rCWlmIChwYWQgPiAwKQotKwkJewotKwkJbWVt bW92ZShrZXkgKyBwYWQsIGtleSwgcnYpOwotKwkJbWVtc2V0KGtleSwgMCwgcGFkKTsKLSsJCX0K LSsJcmV0dXJuIHJ2ICsgcGFkOwotKwl9Ci0rCi0gc3RhdGljIERIX01FVEhPRCBkaF9vc3NsID0g ewotICJPcGVuU1NMIERIIE1ldGhvZCIsCi0gZ2VuZXJhdGVfa2V5LAotQEAgLTEwNCw3ICsxMjIs NyBAQCBjb21wdXRlX2tleSwKLSBkaF9ibl9tb2RfZXhwLAotIGRoX2luaXQsCi0gZGhfZmluaXNo LAotLTAsCi0rREhfRkxBR19GSVBTX01FVEhPRCwKLSBOVUxMLAotIE5VTEwKLSB9OwotQEAgLTEy Myw2ICsxNDEsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQotIAlCTl9NT05U X0NUWCAqbW9udD1OVUxMOwotIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsK LSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2Jp dHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJ REhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKyNlbmRpZgotKwotIAljdHggPSBCTl9DVFhfbmV3KCk7Ci0gCWlmIChj dHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCi1AQCAtMjEzLDYgKzIzOSwxMyBAQCBzdGF0aWMgaW50 IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCi0gCQlESGVycihESF9GX0NPTVBVVEVfS0VZ LERIX1JfTU9EVUxVU19UT09fTEFSR0UpOwotIAkJZ290byBlcnI7Ci0gCQl9Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9Q RU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfQ09N UFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KyNlbmRpZgotIAotIAljdHggPSBCTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290 byBlcnI7Ci1AQCAtMjgwLDYgKzMxMyw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25z dCBESCAqZGgsIEIKLSAKLSBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQotIAl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWRoLT5m bGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIAl9Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZGgvZGhfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhfbGliLmMu ZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9kaC9kaF9saWIuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE3NDY5NDAwMSArMDIw MAotQEAgLTgxLDE0ICs4MSw3IEBAIGNvbnN0IERIX01FVEhPRCAqREhfZ2V0X2RlZmF1bHRfbWV0 aG9kKHYKLSAJewotIAlpZighZGVmYXVsdF9ESF9tZXRob2QpCi0gCQl7Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX2RoX29wZW5zc2wo KTsKLS0JCWVsc2UKLS0JCQlyZXR1cm4gREhfT3BlblNTTCgpOwotLSNlbHNlCi0gCQlkZWZhdWx0 X0RIX21ldGhvZCA9IERIX09wZW5TU0woKTsKLS0jZW5kaWYKLSAJCX0KLSAJcmV0dXJuIGRlZmF1 bHRfREhfbWV0aG9kOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2Rz YV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2Vyci5jCi0tLS0gb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2Vyci5j CTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc0Njk0MDAxICswMjAwCi1AQCAtNzQsNiArNzQsOCBAQCBz dGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKERTQV9G X0RPX0RTQV9QUklOVCksCSJET19EU0FfUFJJTlQifSwKLSB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFS QU1TX1BSSU5UKSwJIkRTQXBhcmFtc19wcmludCJ9LAotIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJB TVNfUFJJTlRfRlApLAkiRFNBcGFyYW1zX3ByaW50X2ZwIn0sCi0re0VSUl9GVU5DKERTQV9GX0RT QV9CVUlMVElOX0tFWUdFTiksCSJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKLSt7RVJSX0ZVTkMoRFNB X0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLAkiZHNhX2J1aWx0aW5fcGFyYW1nZW4ifSwKLSB7RVJS X0ZVTkMoRFNBX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKLSB7RVJSX0ZVTkMoRFNB X0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0sCi0ge0VSUl9GVU5DKERTQV9GX0RT QV9HRU5FUkFURV9LRVkpLAkiRFNBX2dlbmVyYXRlX2tleSJ9LAotQEAgLTEwNiw2ICsxMDgsOCBA QCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04o RFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKSwiZGF0YSB0b28gbGFyZ2UgZm9yIGtl eSBzaXplIn0sCi0ge0VSUl9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRl Y29kZSBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUpICAg LCJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0sCi0re0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5W QUxJRCkgICAgICAsImtleSBzaXplIGludmFsaWQifSwKLSt7RVJSX1JFQVNPTihEU0FfUl9LRVlf U0laRV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCi0ge0VSUl9SRUFTT04o RFNBX1JfTUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAotIHtF UlJfUkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJn ZSJ9LAotIHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUykgLCJuZWVkIG5l dyBzZXR1cCB2YWx1ZXMifSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNh X2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMKLS0tLSBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJ MjAxMy0xMC0wNCAxMTo0ODowNC4xNzU2OTQwMjMgKzAyMDAKLUBAIC04NSw2ICs4NSwxNCBAQAot ICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjZW5kaWYKLSAKLSsjaWZuZGVmIE9QRU5TU0xf RklQUwotK3N0YXRpYyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVf dCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBj aGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCi0rCQlCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9y ZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYik7Ci0rc3RhdGljIGludCBGSVBTX2Rz YV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJCUJJR05V TSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLSsjZW5kaWYK LSsKLSBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAot IAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAotIAkJaW50ICpj b3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKLUBAIC0xMDAs MTQgKzEwOCw2IEBAIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKLSAJ aWYocmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4pCi0gCQlyZXR1cm4gcmV0LT5tZXRoLT5kc2FfcGFy YW1nZW4ocmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xlbiwKLSAJCQkJY291bnRlcl9yZXQsIGhf cmV0LCBjYik7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQllbHNlIGlmIChGSVBTX21vZGUoKSkK LS0JCXsKLS0JCXJldHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KHJldCwgYml0 cywgCi0tCQkJCQkJCXNlZWRfaW4sIHNlZWRfbGVuLAotLQkJCQkJCQljb3VudGVyX3JldCwgaF9y ZXQsIGNiKTsKLS0JCX0KLS0jZW5kaWYKLSAJZWxzZQotIAkJewotIAkJY29uc3QgRVZQX01EICpl dnBtZDsKLUBAIC0xMjUsMjcgKzEyNSwxMTkgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KERTQSAqcmV0LAotIAkJCX0KLSAKLSAJCXJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihy ZXQsIGJpdHMsIHFiaXRzLCBldnBtZCwKLS0JCQlzZWVkX2luLCBzZWVkX2xlbiwgTlVMTCwgY291 bnRlcl9yZXQsIGhfcmV0LCBjYik7Ci0rCQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBjb3VudGVyX3Jl dCwgaF9yZXQsIGNiKTsKLSAJCX0KLSAJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQg RklQU19kc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBx Yml0cywKLSsJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9p biwgc2l6ZV90IHNlZWRfbGVuLAotKwlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpo X3JldCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCXJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihy ZXQsIGJpdHMsIHFiaXRzLAotKwkJZXZwbWQsIHNlZWRfaW4sIHNlZWRfbGVuLAotKwkJY291bnRl cl9yZXQsIGhfcmV0LCBjYik7Ci0rCX0KLSsjZW5kaWYKLSsKLSBpbnQgZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0gCWNvbnN0IEVWUF9N RCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwK LS0JdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCi0gCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVk IGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCi0gCXsKLSAJaW50IG9rPTA7Ci0gCXVuc2lnbmVk IGNoYXIgc2VlZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCUJJR05VTSAqZz1OVUxMLCpxPU5V TEwsKnA9TlVMTDsKLSsJc2l6ZV90IHFzaXplID0gcWJpdHMgPj4gMzsKLSsJQk5fQ1RYICpjdHg9 TlVMTDsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwK LSsJCSAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgZ290byBlcnI7Ci0r CSAgICB9Ci0rCi0rCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYKLSsJICAgIChiaXRzICE9IDEw MjQgfHwgcWJpdHMgIT0gMTYwKSAmJgotKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAy MjQpICYmCi0rCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDI1NikgJiYKLSsJICAgIChi aXRzICE9IDMwNzIgfHwgcWJpdHMgIT0gMjU2KSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0Ff QlVJTFRJTl9QQVJBTUdFTiwgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCk7Ci0rCQlnb3RvIGVycjsK LSsJCX0KLSsjZW5kaWYKLSsJaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNp emUpKQotKwkJc2VlZF9pbiA9IE5VTEw7CQkvKiBzZWVkIGJ1ZmZlciB0b28gc21hbGwgLS0gaWdu b3JlICovCi0rCWlmIChzZWVkX2xlbiA+IHNpemVvZihzZWVkKSkgCi0rCQlzZWVkX2xlbiA9IHNp emVvZihzZWVkKTsJLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJnZXIgU0VF RCwKLSsJCQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8g MjU2IGJpdHMqLwotKwlpZiAoc2VlZF9pbiAhPSBOVUxMKQotKwkJbWVtY3B5KHNlZWQsIHNlZWRf aW4sIHNlZWRfbGVuKTsKLSsJZWxzZQotKwkJc2VlZF9sZW4gPSAwOwotKwotKwlpZiAoKGN0eD1C Tl9DVFhfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJQk5fQ1RYX3N0YXJ0KGN0 eCk7Ci0rCi0rCWlmICghRklQU19kc2FfZ2VuZXJhdGVfcHEoY3R4LCBiaXRzLCBxYml0cywgZXZw bWQsCi0rCQlzZWVkLCBzZWVkX2xlbiwgJnAsICZxLCBjb3VudGVyX3JldCwgY2IpKQotKwkJZ290 byBlcnI7Ci0rCi0rCWlmICghRklQU19kc2FfZ2VuZXJhdGVfZyhjdHgsIHAsIHEsICZnLCBoX3Jl dCwgY2IpKQotKwkJZ290byBlcnI7Ci0rCi0rCW9rPTE7Ci0rZXJyOgotKwlpZiAob2spCi0rCQl7 Ci0rCQlpZihyZXQtPnApCi0rCQkJewotKwkJCUJOX2ZyZWUocmV0LT5wKTsKLSsJCQlyZXQtPnAg PSBOVUxMOwotKwkJCX0KLSsJCWlmKHJldC0+cSkKLSsJCQl7Ci0rCQkJQk5fZnJlZShyZXQtPnEp OwotKwkJCXJldC0+cSA9IE5VTEw7Ci0rCQkJfQotKwkJaWYocmV0LT5nKQotKwkJCXsKLSsJCQlC Tl9mcmVlKHJldC0+Zyk7Ci0rCQkJcmV0LT5nID0gTlVMTDsKLSsJCQl9Ci0rCQlyZXQtPnA9Qk5f ZHVwKHApOwotKwkJcmV0LT5xPUJOX2R1cChxKTsKLSsJCXJldC0+Zz1CTl9kdXAoZyk7Ci0rCQlp ZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5VTEwpCi0r CQkJb2s9MDsKLSsJCX0KLSsJaWYoY3R4KQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJ Qk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsJcmV0dXJuIG9rOwotKwl9Ci0rCi0rI2lmbmRlZiBP UEVOU1NMX0ZJUFMKLStzdGF0aWMKLSsjZW5kaWYKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEo Qk5fQ1RYICpjdHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rCQljb25zdCBFVlBfTUQg KmV2cG1kLCB1bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCi0rCQlCSUdOVU0gKipw X3JldCwgQklHTlVNICoqcV9yZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYikKLSsJ ewotKwlpbnQgb2s9MDsKLSAJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07 Ci0tCXVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSxidWYyW1NIQTI1Nl9E SUdFU1RfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhd OwotIAlCSUdOVU0gKnIwLCpXLCpYLCpjLCp0ZXN0OwotLQlCSUdOVU0gKmc9TlVMTCwqcT1OVUxM LCpwPU5VTEw7Ci0tCUJOX01PTlRfQ1RYICptb250PU5VTEw7Ci0tCWludCBpLCBrLCBuPTAsIG09 MCwgcXNpemUgPSBxYml0cyA+PiAzOwotKwlCSUdOVU0gKnE9TlVMTCwqcD1OVUxMOwotKwlpbnQg aSwgaywgYiwgbj0wLCBtPTAsIHFzaXplID0gcWJpdHMgPj4gMzsKLSAJaW50IGNvdW50ZXI9MDsK LSAJaW50IHI9MDsKLS0JQk5fQ1RYICpjdHg9TlVMTDsKLS0JdW5zaWduZWQgaW50IGg9MjsKLSAK LSAJaWYgKHFzaXplICE9IFNIQV9ESUdFU1RfTEVOR1RIICYmIHFzaXplICE9IFNIQTIyNF9ESUdF U1RfTEVOR1RIICYmCi0gCSAgICBxc2l6ZSAhPSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKLUBAIC0x NTMsNTEgKzI0NSw0MyBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVf Ci0gCQlyZXR1cm4gMDsKLSAKLSAJaWYgKGV2cG1kID09IE5VTEwpCi0tCQkvKiB1c2UgU0hBMSBh cyBkZWZhdWx0ICovCi0tCQlldnBtZCA9IEVWUF9zaGExKCk7Ci0rCSAgICB7Ci0rCQlpZiAocWJp dHMgPD0gMTYwKQotKwkJCWV2cG1kID0gRVZQX3NoYTEoKTsKLSsJCWVsc2UgaWYgKHFiaXRzIDw9 IDIyNCkKLSsJCQlldnBtZCA9IEVWUF9zaGEyMjQoKTsKLSsJCWVsc2UKLSsJCQlldnBtZCA9IEVW UF9zaGEyNTYoKTsKLSsJICAgIH0KLSAKLSAJaWYgKGJpdHMgPCA1MTIpCi0gCQliaXRzID0gNTEy OwotIAotIAliaXRzID0gKGJpdHMrNjMpLzY0KjY0OwotIAotLQkvKiBOQjogc2VlZF9sZW4gPT0g MCBpcyBzcGVjaWFsIGNhc2U6IGNvcHkgZ2VuZXJhdGVkIHNlZWQgdG8KLS0gCSAqIHNlZWRfaW4g aWYgaXQgaXMgbm90IE5VTEwuCi0tIAkgKi8KLS0JaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8 IChzaXplX3QpcXNpemUpKQotLQkJc2VlZF9pbiA9IE5VTEw7CQkvKiBzZWVkIGJ1ZmZlciB0b28g c21hbGwgLS0gaWdub3JlICovCi0tCWlmIChzZWVkX2xlbiA+IChzaXplX3QpcXNpemUpIAotLQkJ c2VlZF9sZW4gPSBxc2l6ZTsJLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJn ZXIgU0VFRCwKLS0JCQkJCSAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3Rl ZCB0byAxNjAgYml0cyovCi0tCWlmIChzZWVkX2luICE9IE5VTEwpCi0tCQltZW1jcHkoc2VlZCwg c2VlZF9pbiwgc2VlZF9sZW4pOwotLQotLQlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwp Ci0tCQlnb3RvIGVycjsKLS0KLS0JaWYgKChtb250PUJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxM KQotLQkJZ290byBlcnI7Ci0tCi0tCUJOX0NUWF9zdGFydChjdHgpOwotIAlyMCA9IEJOX0NUWF9n ZXQoY3R4KTsKLS0JZyA9IEJOX0NUWF9nZXQoY3R4KTsKLSAJVyA9IEJOX0NUWF9nZXQoY3R4KTsK LS0JcSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJKnFfcmV0ID0gcSA9IEJOX0NUWF9nZXQoY3R4KTsK LSAJWCA9IEJOX0NUWF9nZXQoY3R4KTsKLSAJYyA9IEJOX0NUWF9nZXQoY3R4KTsKLS0JcCA9IEJO X0NUWF9nZXQoY3R4KTsKLSsJKnBfcmV0ID0gcCA9IEJOX0NUWF9nZXQoY3R4KTsKLSAJdGVzdCA9 IEJOX0NUWF9nZXQoY3R4KTsKLSAKLSAJaWYgKCFCTl9sc2hpZnQodGVzdCxCTl92YWx1ZV9vbmUo KSxiaXRzLTEpKQotIAkJZ290byBlcnI7Ci0gCi0rCS8qIHN0ZXAgMyBuID0gXGxjZWlsIGJpdHMg LyBxYml0cyBccmNlaWwgLSAxICovCi0rCW4gPSAoYml0cytxYml0cy0xKS9xYml0cyAtIDE7Ci0r CS8qIHN0ZXAgNCBiID0gYml0cyAtIDEgLSBuICogcWJpdHMgKi8KLSsJYiA9IGJpdHMgLSAxIC0g bipxYml0czsKLSsKLSAJZm9yICg7OykKLSAJCXsKLSAJCWZvciAoOzspIC8qIGZpbmQgcSAqLwot IAkJCXsKLSAJCQlpbnQgc2VlZF9pc19yYW5kb207Ci0gCi0tCQkJLyogc3RlcCAxICovCi0rCQkJ Lyogc3RlcCA1IGdlbmVyYXRlIHNlZWQgKi8KLSAJCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMCwg bSsrKSkKLSAJCQkJZ290byBlcnI7Ci0gCi1AQCAtMjEyLDMwICsyOTYsMTggQEAgaW50IGRzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkJCQlzZWVkX2xlbj0wOyAvKiB1c2Ug cmFuZG9tIHNlZWQgaWYgJ3NlZWRfaW4nIHR1cm5zIG91dCB0byBiZSBiYWQqLwotIAkJCQl9Ci0g CQkJbWVtY3B5KGJ1ZiAsIHNlZWQsIHFzaXplKTsKLS0JCQltZW1jcHkoYnVmMiwgc2VlZCwgcXNp emUpOwotLQkJCS8qIHByZWNvbXB1dGUgIlNFRUQgKyAxIiBmb3Igc3RlcCA3OiAqLwotLQkJCWZv ciAoaSA9IHFzaXplLTE7IGkgPj0gMDsgaS0tKQotLQkJCQl7Ci0tCQkJCWJ1ZltpXSsrOwotLQkJ CQlpZiAoYnVmW2ldICE9IDApCi0tCQkJCQlicmVhazsKLS0JCQkJfQotIAotLQkJCS8qIHN0ZXAg MiAqLwotKwkJCS8qIHN0ZXAgNiBVID0gaGFzaChzZWVkKSAqLwotIAkJCWlmICghRVZQX0RpZ2Vz dChzZWVkLCBxc2l6ZSwgbWQsICAgTlVMTCwgZXZwbWQsIE5VTEwpKQotIAkJCQlnb3RvIGVycjsK LS0JCQlpZiAoIUVWUF9EaWdlc3QoYnVmLCAgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2cG1kLCBOVUxM KSkKLS0JCQkJZ290byBlcnI7Ci0tCQkJZm9yIChpID0gMDsgaSA8IHFzaXplOyBpKyspCi0tCQkJ CW1kW2ldXj1idWYyW2ldOwotIAotLQkJCS8qIHN0ZXAgMyAqLwotKwkJCS8qIHN0ZXAgNyBxID0g Ml4ocWJpdHMtMSkgKyBVICsgMSAtIChVIG1vZCAyKSAqLwotIAkJCW1kWzBdIHw9IDB4ODA7Ci0g CQkJbWRbcXNpemUtMV0gfD0gMHgwMTsKLSAJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHEp KQotIAkJCQlnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVwIDQgKi8KLSsJCQkvKiBzdGVwIDggdGVz dCBmb3IgcHJpbWUgKDY0IHJvdW5kIG9mIFJhYmluLU1pbGxlcikgKi8KLSAJCQlyID0gQk5faXNf cHJpbWVfZmFzdHRlc3RfZXgocSwgRFNTX3ByaW1lX2NoZWNrcywgY3R4LAotIAkJCQkJc2VlZF9p c19yYW5kb20sIGNiKTsKLSAJCQlpZiAociA+IDApCi1AQCAtMjQzLDI3ICszMTUsMjIgQEAgaW50 IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkJCWlmIChyICE9IDApCi0g CQkJCWdvdG8gZXJyOwotIAotLQkJCS8qIGRvIGEgY2FsbGJhY2sgY2FsbCAqLwotLQkJCS8qIHN0 ZXAgNSAqLwotIAkJCX0KLSAKLSAJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAwKSkgZ290byBl cnI7Ci0gCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpIGdvdG8gZXJyOwotIAotLQkJLyog c3RlcCA2ICovCi0rCQkvKiBzdGVwIDExICovCi0gCQljb3VudGVyPTA7Ci0tCQkvKiAib2Zmc2V0 ID0gMiIgKi8KLS0KLS0JCW49KGJpdHMtMSkvMTYwOwotKwkJLyogIm9mZnNldCA9IDEiICovCi0g Ci0gCQlmb3IgKDs7KQotIAkJCXsKLSAJCQlpZiAoKGNvdW50ZXIgIT0gMCkgJiYgIUJOX0dFTkNC X2NhbGwoY2IsIDAsIGNvdW50ZXIpKQotIAkJCQlnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVwIDcg Ki8KLSsJCQkvKiBzdGVwIDExLjEsIDExLjIgb2J0YWluIFcgKi8KLSAJCQlCTl96ZXJvKFcpOwot LQkJCS8qIG5vdyAnYnVmJyBjb250YWlucyAiU0VFRCArIG9mZnNldCAtIDEiICovCi0gCQkJZm9y IChrPTA7IGs8PW47IGsrKykKLSAJCQkJewotIAkJCQkvKiBvYnRhaW4gIlNFRUQgKyBvZmZzZXQg KyBrIiBieSBpbmNyZW1lbnRpbmc6ICovCi1AQCAtMjc4LDI4ICszNDUsMzAgQEAgaW50IGRzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkJCQkJCQkJCU5VTEwpKQotIAkJCQkJ Z290byBlcnI7Ci0gCi0tCQkJCS8qIHN0ZXAgOCAqLwotIAkJCQlpZiAoIUJOX2JpbjJibihtZCwg cXNpemUsIHIwKSkKLSAJCQkJCWdvdG8gZXJyOwotLQkJCQlpZiAoIUJOX2xzaGlmdChyMCxyMCwo cXNpemUgPDwgMykqaykpIGdvdG8gZXJyOwotKwkJCQlpZiAoayA9PSBuKQotKwkJCQkJQk5fbWFz a19iaXRzKHIwLGIpOwotKwkJCQlpZiAoIUJOX2xzaGlmdChyMCxyMCxxYml0cyprKSkgZ290byBl cnI7Ci0gCQkJCWlmICghQk5fYWRkKFcsVyxyMCkpIGdvdG8gZXJyOwotIAkJCQl9Ci0gCi0tCQkJ LyogbW9yZSBvZiBzdGVwIDggKi8KLS0JCQlpZiAoIUJOX21hc2tfYml0cyhXLGJpdHMtMSkpIGdv dG8gZXJyOwotKwkJCS8qIHN0ZXAgMTEuMyBYID0gVyArIDJeKEwtMSkgKi8KLSAJCQlpZiAoIUJO X2NvcHkoWCxXKSkgZ290byBlcnI7Ci0gCQkJaWYgKCFCTl9hZGQoWCxYLHRlc3QpKSBnb3RvIGVy cjsKLSAKLS0JCQkvKiBzdGVwIDkgKi8KLSsJCQkvKiBzdGVwIDExLjQgYyA9IFggbW9kIDIqcSAq LwotIAkJCWlmICghQk5fbHNoaWZ0MShyMCxxKSkgZ290byBlcnI7Ci0gCQkJaWYgKCFCTl9tb2Qo YyxYLHIwLGN0eCkpIGdvdG8gZXJyOwotKwotKwkJCS8qIHN0ZXAgMTEuNSBwID0gWCAtIChjIC0g MSkgKi8KLSAJCQlpZiAoIUJOX3N1YihyMCxjLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7Ci0g CQkJaWYgKCFCTl9zdWIocCxYLHIwKSkgZ290byBlcnI7Ci0gCi0tCQkJLyogc3RlcCAxMCAqLwot KwkJCS8qIHN0ZXAgMTEuNiAqLwotIAkJCWlmIChCTl9jbXAocCx0ZXN0KSA+PSAwKQotIAkJCQl7 Ci0tCQkJCS8qIHN0ZXAgMTEgKi8KLSsJCQkJLyogc3RlcCAxMS43ICovCi0gCQkJCXIgPSBCTl9p c19wcmltZV9mYXN0dGVzdF9leChwLCBEU1NfcHJpbWVfY2hlY2tzLAotIAkJCQkJCWN0eCwgMSwg Y2IpOwotIAkJCQlpZiAociA+IDApCi1AQCAtMzA4LDE5ICszNzcsNDUgQEAgaW50IGRzYV9idWls dGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkJCQkJZ290byBlcnI7Ci0gCQkJCX0KLSAK LS0JCQkvKiBzdGVwIDEzICovCi0rCQkJLyogc3RlcCAxMS45ICovCi0gCQkJY291bnRlcisrOwot IAkJCS8qICJvZmZzZXQgPSBvZmZzZXQgKyBuICsgMSIgKi8KLSAKLS0JCQkvKiBzdGVwIDE0ICov Ci0tCQkJaWYgKGNvdW50ZXIgPj0gNDA5NikgYnJlYWs7Ci0rCQkJLyogc3RlcCAxMiAqLwotKwkJ CWlmIChjb3VudGVyID49IDQqYml0cykgYnJlYWs7Ci0gCQkJfQotIAkJfQotIGVuZDoKLSAJaWYo IUJOX0dFTkNCX2NhbGwoY2IsIDIsIDEpKQotIAkJZ290byBlcnI7Ci0gCi0tCS8qIFdlIG5vdyBu ZWVkIHRvIGdlbmVyYXRlIGcgKi8KLSsJb2s9MTsKLStlcnI6Ci0rCWlmIChvaykKLSsJCXsKLSsJ CWlmIChjb3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKLSsJCX0KLSsJ cmV0dXJuIG9rOwotKwl9Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMKLSsjZW5k aWYKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdO VU0gKnEsCi0rCQlCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNC ICpjYikKLSsJewotKwlpbnQgb2s9MDsKLSsJQklHTlVNICpyMCwgKnRlc3QsICpnID0gTlVMTDsK LSsJQk5fTU9OVF9DVFggKm1vbnQ7Ci0rCXVuc2lnbmVkIGludCBoPTI7Ci0rCi0rCWlmICgobW9u dD1CTl9NT05UX0NUWF9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlyMCA9IEJO X0NUWF9nZXQoY3R4KTsKLSsJKmdfcmV0ID0gZyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJdGVzdCA9 IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSAJLyogU2V0IHIwPShwLTEpL3EgKi8KLSAJaWYgKCFCTl9z dWIodGVzdCxwLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7Ci0gCWlmICghQk5fZGl2KHIwLE5V TEwsdGVzdCxxLGN0eCkpIGdvdG8gZXJyOwotQEAgLTM0NCwyNiArNDM5LDcgQEAgZW5kOgotIGVy cjoKLSAJaWYgKG9rKQotIAkJewotLQkJaWYocmV0LT5wKSBCTl9mcmVlKHJldC0+cCk7Ci0tCQlp ZihyZXQtPnEpIEJOX2ZyZWUocmV0LT5xKTsKLS0JCWlmKHJldC0+ZykgQk5fZnJlZShyZXQtPmcp OwotLQkJcmV0LT5wPUJOX2R1cChwKTsKLS0JCXJldC0+cT1CTl9kdXAocSk7Ci0tCQlyZXQtPmc9 Qk5fZHVwKGcpOwotLQkJaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJl dC0+ZyA9PSBOVUxMKQotLQkJCXsKLS0JCQlvaz0wOwotLQkJCWdvdG8gZXJyOwotLQkJCX0KLS0J CWlmIChjb3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKLSAJCWlmICho X3JldCAhPSBOVUxMKSAqaF9yZXQ9aDsKLS0JCWlmIChzZWVkX291dCkKLS0JCQltZW1jcHkoc2Vl ZF9vdXQsIHNlZWQsIHFzaXplKTsKLS0JCX0KLS0JaWYoY3R4KQotLQkJewotLQkJQk5fQ1RYX2Vu ZChjdHgpOwotLQkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSAJCX0KLSAJaWYgKG1vbnQgIT0gTlVMTCkg Qk5fTU9OVF9DVFhfZnJlZShtb250KTsKLSAJcmV0dXJuIG9rOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNh LmgKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAxMy0xMC0wNCAx MTo0ODowMy45NTY2ODkwNzggKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2Rz YS5oCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc1Njk0MDIzICswMjAwCi1AQCAtODgsNiArODgsOCBA QAotICMgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYK LSAKLSsjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0g I2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQotICNkZWZpbmUgRFNBX0ZMQUdfTk9f RVhQX0NPTlNUVElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWlu IERTQQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlt cGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKLUBAIC0yNjQsNiArMjY2LDE3IEBA IGludAlEU0FfcHJpbnRfZnAoRklMRSAqYnAsIGNvbnN0IERTQSAqeCwKLSBESCAqRFNBX2R1cF9E SChjb25zdCBEU0EgKnIpOwotICNlbmRpZgotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQg RklQU19kc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBx Yml0cywKLSsJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9p biwgc2l6ZV90IHNlZWRfbGVuLAotKwlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpo X3JldCwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpj dHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1 bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCi0rCQlCSUdOVU0gKipwX3JldCwgQklH TlVNICoqcV9yZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYik7Ci0raW50IEZJUFNf ZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAotKwkJQklH TlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotKyNlbmRp ZgotKwotICNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kc2FfcGFyYW1nZW5fYml0cyhjdHgsIG5i aXRzKSBcCi0gCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfRFNBLCBFVlBfUEtFWV9P UF9QQVJBTUdFTiwgXAotIAkJCQlFVlBfUEtFWV9DVFJMX0RTQV9QQVJBTUdFTl9CSVRTLCBuYml0 cywgTlVMTCkKLUBAIC0yODUsMTAgKzI5OCwxMyBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdz KHZvaWQpOwotICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKLSAjZGVmaW5lIERT QV9GX0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCi0gI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJ TlRfRlAJCQkgMTAxCi0rI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0Ci0r I2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKLSAjZGVmaW5lIERTQV9G X0RTQV9ET19TSUdOCQkJCSAxMTIKLSAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDEx MwotLSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWQkJCQkgMTI0Ci0tI2RlZmluZSBEU0Ff Rl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSU19FWAkJIDEyMwotKyNkZWZpbmUgRFNBX0ZfRFNBX0dF TkVSQVRFX0tFWQkJCQkgMTI2Ci0rI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVS U19FWAkJIDEyNwotKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJLyogdW51 c2VkICovCSAxMjUKLSAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKLSAjZGVm aW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQotICNkZWZpbmUgRFNBX0ZfRFNBX1BS SU5UX0ZQCQkJCSAxMDUKLUBAIC0zMTQsMTEgKzMzMCwxNSBAQCB2b2lkIEVSUl9sb2FkX0RTQV9z dHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpF CQkgMTAwCi0gI2RlZmluZSBEU0FfUl9ERUNPREVfRVJST1IJCQkJIDEwNAotICNkZWZpbmUgRFNB X1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKLSsjZGVmaW5lIERTQV9SX0tFWV9TSVpFX0lO VkFMSUQJCQkJIDExMwotKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDExMAot ICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQotICNkZWZpbmUgRFNBX1Jf TU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMwotLSNkZWZpbmUgRFNBX1JfTkVFRF9ORVdfU0VUVVBf VkFMVUVTCQkJIDExMAotKyNkZWZpbmUgRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTCQkJIDEx MgotICNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRAkJCSAxMTEKLSsjZGVmaW5lIERT QV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTExCi0gI2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJT X1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQ U19NT0RFIC8qIHVudXNlZCAqLyAxMTIKLSAjZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9FTkNPRElO R19FUlJPUgkJCSAxMDUKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9k c2EvZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlw cwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc1Njk0MDIzICswMjAw Ci1AQCAtNjYsNiArNjYsMzUgQEAKLSAKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0gI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotK3N0YXRpYyBp bnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCi0rCXsKLSsJRVZQX1BLRVkgKnBrOwotKwl1bnNp Z25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKLSsJaW50IHJldCA9 IDA7Ci0rCi0rCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsK LSsKLSsJRVZQX1BLRVlfc2V0MV9EU0EocGssIGRzYSk7Ci0rCi0rCWlmIChmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIHRicywgMCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkpCi0rCQlyZXQg PSAxOwotKwotKwllcnI6Ci0rCWlmIChyZXQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfQ0hFQ0tfRFNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rCQlmaXBzX3Nl dF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQl9Ci0rCi0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUo cGspOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0gI2VuZGlmCi0gCi0gc3RhdGljIGludCBk c2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOwotQEAgLTgyLDEwICsxMTEsNiBAQCBpbnQgRFNB X2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAjZW5kaWYKLSAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5 Z2VuKQotIAkJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOwotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRl X2tleShkc2EpOwotLSNlbmRpZgotIAlyZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2VuKGRzYSk7Ci0g CX0KLSAKLUBAIC05NSw2ICsxMjAsMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4o RFNBICpkc2EpCi0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpw cml2X2tleT1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgp ICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJJiYgKEJOX251 bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJ ewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoKGN0eD1CTl9D VFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAotIAlpZiAoZHNhLT5wcml2X2tleSA9PSBO VUxMKQotQEAgLTEzMyw2ICsxNjcsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4o RFNBICpkc2EpCi0gCi0gCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7Ci0gCWRzYS0+cHViX2tleT1w dWJfa2V5OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkgJiYgIWZpcHNf Y2hlY2tfZHNhKGRzYSkpCi0rCQl7Ci0rCQlkc2EtPnB1Yl9rZXkgPSBOVUxMOwotKwkJZHNhLT5w cml2X2tleSA9IE5VTEw7Ci0rCSAgICAJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7 Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfbGliLmMu ZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9saWIuYwkyMDEzLTEw LTA0IDExOjQ4OjA0LjE3NTY5NDAyMyArMDIwMAotQEAgLTg3LDE0ICs4Nyw3IEBAIGNvbnN0IERT QV9NRVRIT0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJewotIAlpZighZGVmYXVsdF9EU0Ff bWV0aG9kKQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkK LS0JCQlyZXR1cm4gRklQU19kc2Ffb3BlbnNzbCgpOwotLQkJZWxzZQotLQkJCXJldHVybiBEU0Ff T3BlblNTTCgpOwotLSNlbHNlCi0gCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgp OwotLSNlbmRpZgotIAkJfQotIAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOwotIAl9Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNh L2RzYV9sb2NsLmguZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjAzLjk1ODY4OTEyMyArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDEzLTEwLTA0IDExOjQ4OjA0 LjE3NTY5NDAyMyArMDIwMAotQEAgLTU2LDUgKzU2LDQgQEAKLSAKLSBpbnQgZHNhX2J1aWx0aW5f cGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0gCWNvbnN0IEVW UF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xl biwKLS0JdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCi0gCWludCAqY291bnRlcl9yZXQsIHVuc2ln bmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2Ff b3NzbC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAx My0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZHNhL2RzYV9vc3NsLmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xNzU2OTQwMjMgKzAyMDAKLUBA IC02NSw2ICs2NSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBE U0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwg RFNBICpkc2EpOwotIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAq Y3R4X2luLCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOwotQEAgLTgyLDcgKzg1LDcgQEAg TlVMTCwgLyogZHNhX21vZF9leHAsICovCi0gTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCi0g ZHNhX2luaXQsCi0gZHNhX2ZpbmlzaCwKLS0wLAotK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAotIE5V TEwsCi0gTlVMTCwKLSBOVUxMCi1AQCAtMTM4LDYgKzE0MSwyMSBAQCBzdGF0aWMgRFNBX1NJRyAq ZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduCi0gCURTQV9TSUcgKnJldD1OVUxMOwotIAlpbnQgbm9y ZWRvID0gMDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIE5VTEw7Ci0rCSAgICB9Ci0rCi0r CWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExP VykgCi0rCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01P RFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tF WV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJ Qk5faW5pdCgmbSk7Ci0gCUJOX2luaXQoJnhyKTsKLSAKLUBAIC0zMjUsNiArMzQzLDIxIEBAIHN0 YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAkJcmV0dXJuIC0xOwotIAkJ fQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkK LSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJ UFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKLSsJ CSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0la RV9UT09fU01BTEwpOwotKwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5f bnVtX2JpdHMoZHNhLT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0g CQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSxEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1A QCAtMzk5LDYgKzQzMiw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25l ZAotIAotIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCi0gewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlkc2EtPmZsYWdzfD1E U0FfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSB9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2RzYS9kc2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX3BtZXRo LmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xNzU2OTQw MjMgKzAyMDAKLUBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIGludCBwa2V5X2RzYV9wYXJhbWdl bihFVlBfUEtFWV9DVAotIAlpZiAoIWRzYSkKLSAJCXJldHVybiAwOwotIAlyZXQgPSBkc2FfYnVp bHRpbl9wYXJhbWdlbihkc2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1kLAot LQkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBw Y2IpOwotKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBw Y2IpOwotIAlpZiAocmV0KQotIAkJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOwotIAll bHNlCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhdGVzdC5jCTIwMTMtMTAtMDQgMTE6 NDg6MDQuMTc2Njk0MDQ1ICswMjAwCi1AQCAtOTYsMzYgKzk2LDQxIEBAIHN0YXRpYyBpbnQgTVNf Q0FMTEJBQ0sgZHNhX2NiKGludCBwLCBpbnQKLSAvKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9n IGFyZSB0YWtlbiBmcm9tIHRoZSB1cGRhdGVkIEFwcGVuZGl4IDUgdG8KLSAgKiBGSVBTIFBVQiAx ODYgYW5kIGFsc28gYXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2LTEgKi8KLSBz dGF0aWMgdW5zaWduZWQgY2hhciBzZWVkWzIwXT17Ci0tCTB4ZDUsMHgwMSwweDRlLDB4NGIsMHg2 MCwweGVmLDB4MmIsMHhhOCwweGI2LDB4MjEsMHgxYiwweDQwLAotLQkweDYyLDB4YmEsMHgzMiww eDI0LDB4ZTAsMHg0MiwweDdkLDB4ZDMsCi0rCTB4MDIsMHg0NywweDExLDB4OTIsMHgxMSwweDg4 LDB4QzgsMHhGQiwweEFGLDB4NDgsMHg0QywweDYyLAotKwkweERGLDB4QTUsMHhCRSwweEEwLDB4 QTQsMHgzQywweDU2LDB4RTMsCi0gCX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3Bb XT17Ci0tCTB4OGQsMHhmMiwweGE0LDB4OTQsMHg0OSwweDIyLDB4NzYsMHhhYSwKLS0JMHgzZCww eDI1LDB4NzUsMHg5YiwweGIwLDB4NjgsMHg2OSwweGNiLAotLQkweGVhLDB4YzAsMHhkOCwweDNh LDB4ZmIsMHg4ZCwweDBjLDB4ZjcsCi0tCTB4Y2IsMHhiOCwweDMyLDB4NGYsMHgwZCwweDc4LDB4 ODIsMHhlNSwKLS0JMHhkMCwweDc2LDB4MmYsMHhjNSwweGI3LDB4MjEsMHgwZSwweGFmLAotLQkw eGMyLDB4ZTksMHhhZCwweGFjLDB4MzIsMHhhYiwweDdhLDB4YWMsCi0tCTB4NDksMHg2OSwweDNk LDB4ZmIsMHhmOCwweDM3LDB4MjQsMHhjMiwKLS0JMHhlYywweDA3LDB4MzYsMHhlZSwweDMxLDB4 YzgsMHgwMiwweDkxLAotKwkweEFDLDB4Q0IsMHgxRSwweDYzLDB4NjAsMHg2OSwweDBDLDB4RkIs MHgwNiwweDE5LDB4NjgsMHgzRSwKLSsJMHhBNSwweDAxLDB4NUEsMHhBMiwweDE1LDB4NUMsMHhF MiwweDk5LDB4MkQsMHhENSwweDMwLDB4OTksCi0rCTB4N0UsMHg1RiwweDhELDB4RTIsMHhGNyww eEM2LDB4MkUsMHg4RCwweEEzLDB4OUYsMHg1OCwweEFELAotKwkweEQ2LDB4QTksMHg3RCwweDBF LDB4MEQsMHg5NSwweDUzLDB4QTYsMHg3MSwweDNBLDB4REUsMHhBQiwKLSsJMHhBQywweEU5LDB4 RjQsMHgzNiwweDU1LDB4OUUsMHhCOSwweEQ2LDB4OTMsMHhCRiwweEYzLDB4MTgsCi0rCTB4MUMs MHgxNCwweDdCLDB4QTUsMHg0MiwweDJFLDB4Q0QsMHgwMCwweEVCLDB4MzUsMHgzQiwweDFCLAot KwkweEE4LDB4NTEsMHhCQiwweEUxLDB4NTgsMHg0MiwweDg1LDB4ODQsMHgyMiwweEE3LDB4OTcs MHg1RSwKLSsJMHg5OSwweDZGLDB4MzgsMHgyMCwweEJELDB4OUQsMHhCNiwweEQ5LDB4MzMsMHgz NywweDJBLDB4RkQsCi0rCTB4QkIsMHhENCwweEJDLDB4MEMsMHgyQSwweDY3LDB4Q0IsMHg5Riww eEJCLDB4REYsMHhGOSwweDkzLAotKwkweEFBLDB4RDYsMHhGMCwweEQ2LDB4OTUsMHgwQiwweDVE LDB4NjUsMHgxNCwweEQwLDB4MTgsMHg5RCwKLSsJMHhDNiwweEFGLDB4RjAsMHhDNiwweDM3LDB4 N0MsMHhGMywweDVGLAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9xW109ewot LQkweGM3LDB4NzMsMHgyMSwweDhjLDB4NzMsMHg3ZSwweGM4LDB4ZWUsCi0tCTB4OTksMHgzYiww eDRmLDB4MmQsMHhlZCwweDMwLDB4ZjQsMHg4ZSwKLS0JMHhkYSwweGNlLDB4OTEsMHg1ZiwKLSsJ MHhFMywweDhFLDB4NUUsMHg2RCwweEJGLDB4MkIsMHg3OSwweEY4LDB4QzUsMHg0QiwweDg5LDB4 OEIsCi0rCTB4QkEsMHgyRCwweDkxLDB4QzMsMHg2QywweDgwLDB4QUMsMHg4NywKLSAJfTsKLSAK LSBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdPXsKLS0JMHg2MiwweDZkLDB4MDIsMHg3OCww eDM5LDB4ZWEsMHgwYSwweDEzLAotLQkweDQxLDB4MzEsMHg2MywweGE1LDB4NWIsMHg0YywweGI1 LDB4MDAsCi0tCTB4MjksMHg5ZCwweDU1LDB4MjIsMHg5NSwweDZjLDB4ZWYsMHhjYiwKLS0JMHgz YiwweGZmLDB4MTAsMHhmMywweDk5LDB4Y2UsMHgyYywweDJlLAotLQkweDcxLDB4Y2IsMHg5ZCww eGU1LDB4ZmEsMHgyNCwweGJhLDB4YmYsCi0tCTB4NTgsMHhlNSwweGI3LDB4OTUsMHgyMSwweDky LDB4NWMsMHg5YywKLS0JMHhjNCwweDJlLDB4OWYsMHg2ZiwweDQ2LDB4NGIsMHgwOCwweDhjLAot LQkweGM1LDB4NzIsMHhhZiwweDUzLDB4ZTYsMHhkNywweDg4LDB4MDIsCi0rCTB4NDIsMHg0QSww eDA0LDB4NEUsMHg3OSwweEI0LDB4OTksMHg3RiwweEZELDB4NTgsMHgzNiwweDJDLAotKwkweDFC LDB4NUYsMHgxOCwweDdFLDB4MEQsMHhDQywweEFCLDB4ODEsMHhDOSwweDVELDB4MTAsMHhDRSwK LSsJMHg0RSwweDgwLDB4N0UsMHg1OCwweEI0LDB4MzQsMHgzRiwweEE3LDB4NDUsMHhDNywweEFB LDB4MzYsCi0rCTB4MjQsMHg0MiwweEE5LDB4M0IsMHhFOCwweDBFLDB4MDQsMHgwMiwweDJELDB4 RkIsMHhBNiwweDEzLAotKwkweEI5LDB4QjUsMHgxNSwweEE1LDB4NTYsMHgwNywweDM1LDB4RTQs MHgwMywweEI2LDB4NzksMHg3QywKLSsJMHg2MiwweERELDB4REYsMHgzRiwweDcxLDB4M0EsMHg5 RCwweDhCLDB4QzQsMHhGNiwweEU3LDB4MUQsCi0rCTB4NTIsMHhBOCwweEE5LDB4NDMsMHgxRCww eDMzLDB4NTEsMHg4OCwweDM5LDB4QkQsMHg3MywweEU5LAotKwkweDVGLDB4QkUsMHg4MiwweDQ5 LDB4MjcsMHhFNiwweEI1LDB4NTMsMHhDMSwweDM4LDB4QUMsMHgyRiwKLSsJMHg2RCwweDk3LDB4 NkMsMHhFQiwweDY3LDB4QzEsMHg1RiwweDY3LDB4RjgsMHgzNSwweDA1LDB4NUUsCi0rCTB4RDUs MHg2OCwweDgwLDB4QUEsMHg5NiwweENBLDB4MEIsMHg4QSwweEU2LDB4RjEsMHhCMSwweDQxLAot KwkweEM2LDB4NzUsMHg5NCwweDBBLDB4MEEsMHgyQSwweEZBLDB4MjksCi0gCX07Ci0gCi0gc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Ci1A QCAtMTU3LDcgKzE2Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJQklP X3ByaW50ZihiaW9fZXJyLCJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNBIHBhcmFtZXRlcnNcbiIpOwot IAotIAlCTl9HRU5DQl9zZXQoJmNiLCBkc2FfY2IsIGJpb19lcnIpOwotLQlpZigoKGRzYSA9IERT QV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgNTEy LAotKwlpZigoKGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KGRzYSwgMTAyNCwKLSAJCQkJc2VlZCwgMjAsICZjb3VudGVyLCAmaCwgJmNiKSkK LSAJCWdvdG8gZW5kOwotIAotQEAgLTE3MCw5ICsxNzUsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0gCUJJT19wcmludGYoYmlvX2VyciwiXG5jb3VudGVyPSVkIGg9JWxkXG4i LGNvdW50ZXIsaCk7Ci0gCQkKLSAJRFNBX3ByaW50KGJpb19lcnIsZHNhLDApOwotLQlpZiAoY291 bnRlciAhPSAxMDUpIAotKwlpZiAoY291bnRlciAhPSAyMzkpIAotIAkJewotLQkJQklPX3ByaW50 ZihiaW9fZXJyLCJjb3VudGVyIHNob3VsZCBiZSAxMDVcbiIpOwotKwkJQklPX3ByaW50ZihiaW9f ZXJyLCJjb3VudGVyIHNob3VsZCBiZSAyMzlcbiIpOwotIAkJZ290byBlbmQ7Ci0gCQl9Ci0gCWlm IChoICE9IDIpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZW5naW5lL2VuZ19hbGwu Yy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCi0tLS0gb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lbmdpbmUvZW5nX2Fs bC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc2Njk0MDQ1ICswMjAwCi1AQCAtNTgsMTEgKzU4LDI1 IEBACi0gCi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgImVuZ19pbnQuaCIKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot IAotIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCi0gCXsKLSAJLyogU29t ZSBFTkdJTkVzIG5lZWQgdGhpcyAqLwotIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoRklQU19tb2Rl KCkpIHsKLSsJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBw YXJ0eQotKwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgotKwkJICAgVXNlciBp cyBkaXNhbGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCi0rCQkgICBieSBzZWN1 cml0eSBwb2xpY3kuICovCi0rCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7Ci0rCQlyZXR1cm47Ci0r CX0KLSsjZW5kaWYKLSAjaWYgMAotIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3Ig YW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCi0gCSAqIGl0IGlzIHRoZSAqb25s eSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2Nf YWxsYy5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc2Njk0 MDQ1ICswMjAwCi1AQCAtNjUsNiArNjUsMTEgQEAKLSB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBo ZXJzKHZvaWQpCi0gCXsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5pdF9s aWJyYXJ5KCk7Ci0rCWlmKCFGSVBTX21vZGUoKSkgCi0rCQl7Ci0rI2VuZGlmCi0gI2lmbmRlZiBP UEVOU1NMX05PX0RFUwotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYigpKTsKLSAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19jZmIxKCkpOwotQEAgLTIyNyw0ICsyMzIsNjAgQEAgdm9pZCBPcGVu U1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1l bGxpYV8yNTZfY2JjLCJDQU1FTExJQTI1NiIpOwotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9j YW1lbGxpYV8yNTZfY2JjLCJjYW1lbGxpYTI1NiIpOwotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfY2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9vZmIoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19vZmIoKSk7Ci0rCi0rCUVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfZWRlX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygp KTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCJERVMzIik7Ci0rCUVW UF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiZGVzMyIpOwotKwotKwlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkp OwotKyNlbmRpZgotKwotKyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7 Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfY2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiOCgp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF9jdHIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwotKwlFVlBfYWRkX2NpcGhl cl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiQUVTMTI4Iik7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2Flc18xMjhfY2JjLCJhZXMxMjgiKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf ZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7Ci0rCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTkyX2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiOCgpKTsKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5 Ml9jdHIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKLSsJRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsIkFFUzE5MiIpOwotKwlFVlBfYWRkX2NpcGhl cl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiYWVzMTkyIik7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMjU2X2VjYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMjU2X2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjgoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X29mYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18yNTZfY3RyKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxp YXMoU05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9h ZXNfMjU2X2NiYywiYWVzMjU2Iik7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZXZwL2NfYWxsZC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9jX2Fs bGQuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2V2cC9jX2FsbGQuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE3NjY5NDA0 NSArMDIwMAotQEAgLTY0LDYgKzY0LDExIEBACi0gCi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGln ZXN0cyh2b2lkKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGli cmFyeSgpOwotKwlpZiAoIUZJUFNfbW9kZSgpKQotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BF TlNTTF9OT19NRDQKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX21kNCgpKTsKLSAjZW5kaWYKLUBAIC0x MTEsNCArMTE2LDMyIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSAjaWZu ZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCi0gCUVWUF9hZGRfZGlnZXN0KEVWUF93aGlybHBvb2wo KSk7Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJfQotKwllbHNlCi0rCQl7Ci0r I2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEp Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhT Tl9zaGExLCJzc2wzLXNoYTEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhS U0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0r CUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9k c2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f ZHNhV2l0aFNIQTEsIkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNI QTEsImRzczEiKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2Fk ZF9kaWdlc3QoRVZQX2VjZHNhKCkpOwotKyNlbmRpZgotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNT TF9OT19TSEEyNTYKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsJRVZQX2FkZF9k aWdlc3QoRVZQX3NoYTI1NigpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEy Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9z aGE1MTIoKSk7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZw L2RpZ2VzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIw MTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2V2cC9kaWdlc3QuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE3NjY5NDA0NSArMDIwMAotQEAg LTE0Miw5ICsxNDIsNTAgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9DVFggKmN0eCwgY29u cwotIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBOVUxMKTsKLSAJfQotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0 cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1z IGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGlu dCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdl c3QgaW5pdCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9D VFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKLSsJeyBGSVBTX0VSUk9SX0lH Tk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2Zp bmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKLSsJeyBGSVBTX0VSUk9SX0lH Tk9SRUQoIkRpZ2VzdCBGaW5hbCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9N RCBiYWRfbWQgPQotKwl7Ci0rCTAsCi0rCTAsCi0rCTAsCi0rCTAsCi0rCWJhZF9pbml0LAotKwli YWRfdXBkYXRlLAotKwliYWRfZmluYWwsCi0rCU5VTEwsCi0rCU5VTEwsCi0rCU5VTEwsCi0rCTAs Ci0rCXswLDAsMCwwfSwKLSsJfTsKLSsKLSsjZW5kaWYKLSsKLSBpbnQgRVZQX0RpZ2VzdEluaXRf ZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKLSAJ ewotIAlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCXJldHVybiAwOwotKwkJ fQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdz IG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwot IAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBh dm9pZCByZWxlYXNpbmcKLUBAIC0yMDEsNiArMjQyLDE4IEBAIGludCBFVlBfRGlnZXN0SW5pdF9l eChFVlBfTURfQ1RYICpjdHgsIGMKLSAjZW5kaWYKLSAJaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUp Ci0gCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9kZSgpKQotKwkJCXsK LSsJCQlpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpIAotKwkJCSAmJiAhKGN0 eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwkJCQl7Ci0rCQkJ CUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMp OwotKwkJCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0r CQkJfQotKyNlbmRpZgotIAkJaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6 ZSkKLSAJCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLSAJCWN0eC0+ZGlnZXN0PXR5cGU7 Ci1AQCAtMjI5LDI2ICsyODIsMTUgQEAgc2tpcF90b19pbml0OgotIAkJfQotIAlpZiAoY3R4LT5m bGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19JTklUKQotIAkJcmV0dXJuIDE7Ci0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQl7Ci0tCQlpZiAoRklQU19kaWdlc3Rp bml0KGN0eCwgdHlwZSkpCi0tCQkJcmV0dXJuIDE7Ci0tCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9k YXRhKTsKLS0JCWN0eC0+bWRfZGF0YSA9IE5VTEw7Ci0tCQlyZXR1cm4gMDsKLS0JCX0KLS0jZW5k aWYKLSAJcmV0dXJuIGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7Ci0gCX0KLSAKLSBpbnQgRVZQX0Rp Z2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3Vu dCkKLSAJewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJuIEZJUFNfZGlnZXN0dXBkYXRl KGN0eCwgZGF0YSwgY291bnQpOwotLSNlbHNlCi0tCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0 YSxjb3VudCk7Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSAjZW5kaWYKLSsJcmV0dXJuIGN0 eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKLSAJfQotIAotIC8qIFRoZSBjYWxsZXIgY2FuIGFz c3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAq LwotQEAgLTI2MywxMSArMzA1LDExIEBAIGludCBFVlBfRGlnZXN0RmluYWwoRVZQX01EX0NUWCAq Y3R4LCB1bnMKLSAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55 IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KLSBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4 KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqc2l6ZSkK LSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJuIEZJUFNfZGlnZXN0ZmluYWwoY3R4 LCBtZCwgc2l6ZSk7Ci0tI2Vsc2UKLSAJaW50IHJldDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJT1BFTlNTTF9hc3NlcnQoY3R4 LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKLSAJcmV0PWN0eC0+ZGlnZXN0 LT5maW5hbChjdHgsbWQpOwotIAlpZiAoc2l6ZSAhPSBOVUxMKQotQEAgLTI3OSw3ICszMjEsNiBA QCBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwKLSAJCX0KLSAJbWVtc2V0 KGN0eC0+bWRfZGF0YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Ci0gCXJldHVybiByZXQ7Ci0t I2VuZGlmCi0gCX0KLSAKLSBpbnQgRVZQX01EX0NUWF9jb3B5KEVWUF9NRF9DVFggKm91dCwgY29u c3QgRVZQX01EX0NUWCAqaW4pCi1AQCAtMzczLDcgKzQxNCw2IEBAIHZvaWQgRVZQX01EX0NUWF9k ZXN0cm95KEVWUF9NRF9DVFggKmN0eCkKLSAvKiBUaGlzIGNhbGwgZnJlZXMgcmVzb3VyY2VzIGFz c29jaWF0ZWQgd2l0aCB0aGUgY29udGV4dCAqLwotIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQ X01EX0NUWCAqY3R4KQotIAl7Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAJLyogRG9uJ3QgYXNz dW1lIGN0eC0+bWRfZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBfRGlnZXN0X0ZpbmFsLAotIAkgKiBi ZWNhdXNlIHNvbWV0aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUgY29udGV4dCBhcmUgZXZlciBmaW5h bGlzZWQuCi0gCSAqLwotQEAgLTM4Niw3ICs0MjYsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVw KEVWUF9NRF9DVFggKmN0eCkKLSAJCU9QRU5TU0xfY2xlYW5zZShjdHgtPm1kX2RhdGEsY3R4LT5k aWdlc3QtPmN0eF9zaXplKTsKLSAJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJfQot LSNlbmRpZgotIAlpZiAoY3R4LT5wY3R4KQotIAkJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4LT5wY3R4 KTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAtMzk1LDkgKzQzNCw2IEBAIGludCBF VlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQotIAkJICogZnVuY3Rpb25hbCByZWZl cmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCi0gCQlFTkdJTkVfZmluaXNoKGN0eC0+ ZW5naW5lKTsKLSAjZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCUZJUFNfbWRfY3R4X2Ns ZWFudXAoY3R4KTsKLS0jZW5kaWYKLSAJbWVtc2V0KGN0eCwnXDAnLHNpemVvZiAqY3R4KTsKLSAK LSAJcmV0dXJuIDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2VfYWVzLmMu ZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZV9hZXMuYwkyMDEzLTEwLTA0IDEx OjQ4OjA0LjE3NzY5NDA2OCArMDIwMAotQEAgLTU2LDcgKzU2LDYgQEAKLSAjaW5jbHVkZSA8YXNz ZXJ0Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0gI2luY2x1ZGUgImV2cF9sb2NsLmgi Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSAibW9kZXNfbGNsLmgiCi0gI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgotIAotQEAgLTcxNiw3ICs3MTUsNyBAQCBzdGF0aWMgaW50IGFl c19nY21fY3RybChFVlBfQ0lQSEVSX0NUWCAqCi0gCQlpZiAoYXJnIDw9IDApCi0gCQkJcmV0dXJu IDA7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAh KGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykKLSsJCWlmIChGSVBTX21v ZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykKLSAJCQkJ CQkgJiYgYXJnIDwgMTIpCi0gCQkJcmV0dXJuIDA7Ci0gI2VuZGlmCi1AQCAtMTEyOCw3ICsxMTI3 LDcgQEAgc3RhdGljIGludCBhZXNfeHRzX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAotIAkJcmV0dXJu IDA7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotIAkvKiBSZXF1aXJlbWVudCBvZiBTUDgwMC0zOEUg Ki8KLS0JaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9G TEFHX05PTl9GSVBTX0FMTE9XKSAmJgotKwlpZiAoRklQU19tb2RlKCkgJiYgIShjdHgtPmZsYWdz ICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYKLSAJCQkobGVuID4gKDFVTDw8MjAp KjE2KSkKLSAJCXsKLSAJCUVWUGVycihFVlBfRl9BRVNfWFRTX0NJUEhFUiwgRVZQX1JfVE9PX0xB UkdFKTsKLUBAIC0xMzExLDQgKzEzMTAsMyBAQCBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMs MTkyLDEsMTIsY2NtCi0gQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDI1NiwxLDEyLGNjbSxD Q00sRVZQX0NJUEhfRkxBR19GSVBTfENVU1RPTV9GTEFHUykKLSAKLSAjZW5kaWYKLS0jZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2 cC9lX2RlczMuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE3 NzY5NDA2OCArMDIwMAotQEAgLTY1LDggKzY1LDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kZXMu aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LS0KLSBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixp bnQgZW5jKTsKLSAKLUBAIC0yMDgsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4 X2NpcGhlcihFVlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwg REVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFO RF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFf aXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVW UF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRl X2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNk ZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE5 LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksCi0g I2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgotIAotIEJMT0NL X0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwg OCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAK LS0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYs Ci0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEsCi0rCQkJZGVzX2VkZTNfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVMTCwgTlVM TCwKLSAJCQlkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVT X0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVks IGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYs Ci0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxF VlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRl c19lZGUzX2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMz X2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklE X2Rlc19lZGUzLDI0LDgsOCwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2lu aXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVW UF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFH X0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRf a2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0g c3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwKLUBAIC0zMTMsNCArMzExLDMgQEAgY29uc3QgRVZQX0NJUEhFUiAq RVZQX2Rlc19lZGUzKHZvaWQpCi0gCXJldHVybiAmZGVzX2VkZTNfZWNiOwotIH0KLSAjZW5kaWYK LS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZV9udWxsLmMuZmlw cyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2VfbnVsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9lX251bGwuYwkyMDEzLTEwLTA0IDEx OjQ4OjA0LjE3NzY5NDA2OCArMDIwMAotQEAgLTYxLDggKzYxLDYgQEAKLSAjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gCi0tI2lmbmRlZiBP UEVOU1NMX0ZJUFMKLS0KLSBzdGF0aWMgaW50IG51bGxfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFgg KmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAljb25zdCB1bnNpZ25lZCBjaGFyICpp dixpbnQgZW5jKTsKLSBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwKLUBAIC03MSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBFVlBf Q0lQSEVSIG5fY2lwaGVyPQotIAl7Ci0gCU5JRF91bmRlZiwKLSAJMSwwLDAsCi0tCTAsCi0rCUVW UF9DSVBIX0ZMQUdfRklQUywKLSAJbnVsbF9pbml0X2tleSwKLSAJbnVsbF9jaXBoZXIsCi0gCU5V TEwsCi1AQCAtMTAxLDQgKzk5LDMgQEAgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVS X0NUWCAqYwotIAkJbWVtY3B5KChjaGFyICopb3V0LChjb25zdCBjaGFyICopaW4saW5sKTsKLSAJ cmV0dXJuIDE7Ci0gCX0KLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9l dnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9ldnBfZW5jLmMKLS0t LSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMTMtMDItMTEgMTY6 MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9ldnBf ZW5jLmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xNzc2OTQwNjggKzAyMDAKLUBAIC02OSwxNyArNjks NTggQEAKLSAjZW5kaWYKLSAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLS0jaWZkZWYgT1BFTlNT TF9GSVBTCi0tI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgRklQU19jaXBo ZXIoY3R4LCBvdXQsIGluLCBpbmwpCi0tI2Vsc2UKLSAjZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwg b3V0LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQot LSNlbmRpZgotIAotIAotIGNvbnN0IGNoYXIgRVZQX3ZlcnNpb25bXT0iRVZQIiBPUEVOU1NMX1ZF UlNJT05fUFRFWFQ7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3Nl IG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQ UwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsg Ki8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwKLSsJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVu YykKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBpbml0Iik7IHJldHVybiAwO30KLSsK LStzdGF0aWMgaW50IGJhZF9kb19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQg Y2hhciAqb3V0LAotKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlu bCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciB1cGRhdGUiKTsgcmV0dXJuIDA7fQot KwotKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2UgaXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQg aW5pdCAqLwotKwotK3N0YXRpYyBpbnQgYmFkX3NldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgs IEFTTjFfVFlQRSAqdHlwKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24x Iik7IHJldHVybiAwO30KLStzdGF0aWMgaW50IGJhZF9nZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAq Y3R4LCBBU04xX1RZUEUgKnR5cCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBnZXRf YXNuMSIpOyByZXR1cm4gMDt9Ci0rc3RhdGljIGludCBiYWRfY3RybChFVlBfQ0lQSEVSX0NUWCAq Y3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQotKwl7IEZJUFNfRVJST1JfSUdOT1JF RCgiQ2lwaGVyIGN0cmwiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVS IGJhZF9jaXBoZXIgPQotKwl7Ci0rCTAsCi0rCTAsCi0rCTAsCi0rCTAsCi0rCTAsCi0rCWJhZF9p bml0LAotKwliYWRfZG9fY2lwaGVyLAotKwlOVUxMLAotKwkwLAotKwliYWRfc2V0X2FzbjEsCi0r CWJhZF9nZXRfYXNuMSwKLSsJYmFkX2N0cmwsCi0rCU5VTEwKLSsJfTsKLSsKLSsjZW5kaWYKLSsK LSB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCkKLSAJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlt ZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7Ci0gCS8qIGN0eC0+Y2lwaGVyPU5V TEw7ICovCi0gCX0KLUBAIC0xMTEsNiArMTUyLDE0IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChF VlBfQ0lQSEVSX0NUWCAqY3QKLSAJCQllbmMgPSAxOwotIAkJY3R4LT5lbmNyeXB0ID0gZW5jOwot IAkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkK LSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0VWUF9DSVBIRVJJTklUX0VYLEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQljdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBXaGV0 aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNv bnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEg VHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAgLTE2OSwxMCArMjE4LDYgQEAgaW50IEVWUF9DaXBo ZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJCWN0eC0+ZW5naW5lID0gTlVMTDsKLSAj ZW5kaWYKLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAoRklQU19tb2RlKCkpCi0tCQkJ cmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKLS0jZW5k aWYKLSAJCWN0eC0+Y2lwaGVyPWNpcGhlcjsKLSAJCWlmIChjdHgtPmNpcGhlci0+Y3R4X3NpemUp Ci0gCQkJewotQEAgLTIwNiwxMCArMjUxLDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9D SVBIRVJfQ1RYICpjdAotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSBza2lwX3RvX2luaXQ6 Ci0gI2VuZGlmCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQly ZXR1cm4gRklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOwotLSNlbmRp ZgotIAkvKiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBk YXRlICovCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDEKLSAJ ICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKLUBAIC0yNDksNiArMjkwLDIyIEBA IHNraXBfdG9faW5pdDoKLSAJCX0KLSAJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJLyog QWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJt aXNzaWJsZS4KLSsJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhp cyBwb2ludC4KLSsJICovCi0rCWlmIChrZXkgJiYgRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAo IShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCQkJJiAhKGN0eC0+ ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQl7Ci0rCQkJRVZQZXJy KEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJ Y3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0r I2VuZGlmCi0rCi0gCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxX QVlTX0NBTExfSU5JVCkpIHsKLSAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVu YykpIHJldHVybiAwOwotIAl9Ci1AQCAtNTY4LDcgKzYyNSw2IEBAIHZvaWQgRVZQX0NJUEhFUl9D VFhfZnJlZShFVlBfQ0lQSEVSX0NUWAotIAotIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVW UF9DSVBIRVJfQ1RYICpjKQotIAl7Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAJaWYgKGMtPmNp cGhlciAhPSBOVUxMKQotIAkJewotIAkJaWYoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBo ZXItPmNsZWFudXAoYykpCi1AQCAtNTc5LDE2ICs2MzUsMTIgQEAgaW50IEVWUF9DSVBIRVJfQ1RY X2NsZWFudXAoRVZQX0NJUEhFUl9DVAotIAkJfQotIAlpZiAoYy0+Y2lwaGVyX2RhdGEpCi0gCQlP UEVOU1NMX2ZyZWUoYy0+Y2lwaGVyX2RhdGEpOwotLSNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9O T19FTkdJTkUKLSAJaWYgKGMtPmVuZ2luZSkKLSAJCS8qIFRoZSBFVlBfQ0lQSEVSIHdlIHVzZWQg YmVsb25ncyB0byBhbiBFTkdJTkUsIHJlbGVhc2UgdGhlCi0gCQkgKiBmdW5jdGlvbmFsIHJlZmVy ZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KLSAJCUVOR0lORV9maW5pc2goYy0+ZW5n aW5lKTsKLSAjZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCUZJUFNfY2lwaGVyX2N0eF9j bGVhbnVwKGMpOwotLSNlbmRpZgotIAltZW1zZXQoYywwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkp OwotIAlyZXR1cm4gMTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9l dnAuaC5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4wNzE2OTE2NzUg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2V2cC5oCTIwMTMtMTAtMDQgMTE6 NDg6MDQuMTc3Njk0MDY4ICswMjAwCi1AQCAtNzUsNiArNzUsMTAgQEAKLSAjaW5jbHVkZSA8b3Bl bnNzbC9iaW8uaD4KLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIC8qCi0gI2RlZmluZSBFVlBfUkMyX0tFWV9T SVpFCQkxNgotICNkZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYKLUBAIC0yODIsMTAgKzI4Niw2 IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVhbmVkICovCi0gI2RlZmluZSBF VlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0 YQotIAkJCQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyogRklQUyBhbmQgcGFkIG9w dGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCi0tICogc28g d2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2Vz LgotLSAqLwotLQotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAw OAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJCQkJICogaW4gRklQUyBtb2Rl ICovCi0gCi1AQCAtMjk3LDYgKzI5NywxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAotICNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8K LSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8K LSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCi0r I2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsJCSgoY3R4LT5mbGFn cz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUFNTX01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwotKyNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJl Y292ZXJlZCAqLwotIAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAv KiBEb24ndCBpbml0aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0zNDgsMTUgKzM1MiwxNSBAQCBz dHJ1Y3QgZXZwX2NpcGhlcl9zdAotIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJh dGlvbiAqLwotICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAotIC8qIGNpcGhlciBo YXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KLS0jZGVmaW5lIAlFVlBfQ0lQ SF9DVVNUT01fQ09QWQkJMHg0MDAKLSsjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0 MDAwCi0gLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCi0gI2RlZmluZQkJ RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCi0gLyogQnVmZmVyIGxlbmd0aCBpbiBi aXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KLSAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFH X0xFTkdUSF9CSVRTCTB4MjAwMAotIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBT IG1vZGUgKi8KLS0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwMAotKyNkZWZpbmUJ CUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAKLSAvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4g RklQUyBtb2RlICovCi0tI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgw MDAKLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCi0gLyogQ2lw aGVyIGhhbmRsZXMgYW55IGFuZCBhbGwgcGFkZGluZyBsb2dpYyBhcyB3ZWxsCi0gICogYXMgZmlu YWxpc2F0aW9uLgotICAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9ldnBf bGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2V2cF9saWIuYwotLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2V2cF9saWIuYwky MDEzLTEwLTA0IDExOjQ4OjA0LjE3NzY5NDA2OCArMDIwMAotQEAgLTE5MCw2ICsxOTAsOSBAQCBp bnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCi0gCi0gaW50IEVWUF9DaXBo ZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25l ZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlyZXR1cm4gY3R4LT5jaXBoZXIt PmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7Ci0gCX0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAv ZXZwX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBz CTIwMTMtMTAtMDQgMTE6NDg6MDQuMDY3NjkxNTg0ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc4Njk0MDkxICswMjAw Ci1AQCAtMjU4LDEwICsyNTgsOSBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMjX2Vj Yih2b2lkCi0gCUJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZp eCxjYml0cyxrc3RydWN0LGtzY2hlZCkgXAotIAlCTE9DS19DSVBIRVJfZGVmX2NmYihjaXBoZXIj I18jI2tleXNpemUsa3N0cnVjdCwgXAotIAkJCSAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXpl LCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKLS0JCQkgICAgIDAsIGNpcGhlciMjX2luaXRf a2V5LCBOVUxMLCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LCBcCi0tCQkJICAg ICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCi0tCQkJICAgICBOVUxMKQotKwkJCSAgICAgRVZQ X0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIFwKLSsJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotKwotIAotIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKLSAJ ewotQEAgLTM2NywxMSArMzY2LDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBf Q0lQSEVSXwotICNkZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5pdAotICNkZWZpbmUgTURD Ml9Jbml0CXByaXZhdGVfTURDMl9Jbml0Ci0gI2RlZmluZSBTSEFfSW5pdAlwcml2YXRlX1NIQV9J bml0Ci0tI2RlZmluZSBTSEExX0luaXQJcHJpdmF0ZV9TSEExX0luaXQKLS0jZGVmaW5lIFNIQTIy NF9Jbml0CXByaXZhdGVfU0hBMjI0X0luaXQKLS0jZGVmaW5lIFNIQTI1Nl9Jbml0CXByaXZhdGVf U0hBMjU2X0luaXQKLS0jZGVmaW5lIFNIQTM4NF9Jbml0CXByaXZhdGVfU0hBMzg0X0luaXQKLS0j ZGVmaW5lIFNIQTUxMl9Jbml0CXByaXZhdGVfU0hBNTEyX0luaXQKLSAKLSAjZGVmaW5lIEJGX3Nl dF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Ci0gI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9D QVNUX3NldF9rZXkKLUBAIC0zNzksNyArMzczLDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlp dmdlbihFVlBfQ0lQSEVSXwotICNkZWZpbmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRf a2V5Ci0gI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5Ci0gI2RlZmluZSBS QzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5Ci0tI2RlZmluZSBERVNfc2V0X2tleV91bmNo ZWNrZWQJcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQKLSAjZGVmaW5lIENhbWVsbGlhX3Nl dF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5Ci0gCi0gI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2V2cC9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvTWFrZWZpbGUuZmlw cwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9ldnAvTWFrZWZpbGUJMjAxMy0xMC0wNCAxMTo0ODowNC4xNzg2OTQwOTEgKzAyMDAK LUBAIC0yOCw3ICsyOCw3IEBAIExJQlNSQz0gZW5jb2RlLmMgZGlnZXN0LmMgZXZwX2VuYy5jIGV2 cF8KLSAJYmlvX21kLmMgYmlvX2I2NC5jIGJpb19lbmMuYyBldnBfZXJyLmMgZV9udWxsLmMgXAot IAljX2FsbC5jIGNfYWxsYy5jIGNfYWxsZC5jIGV2cF9saWIuYyBiaW9fb2suYyBcCi0gCWV2cF9w a2V5LmMgZXZwX3BiZS5jIHA1X2NycHQuYyBwNV9jcnB0Mi5jIFwKLS0JZV9vbGQuYyBwbWV0aF9s aWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBldnBfZmlwcy5jCVwKLSsJZV9v bGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBcCi0gCWVf YWVzX2NiY19obWFjX3NoYTEuYyBlX3JjNF9obWFjX21kNS5jCi0gCi0gTElCT0JKPQllbmNvZGUu byBkaWdlc3QubyBldnBfZW5jLm8gZXZwX2tleS5vIGV2cF9hY25mLm8gZXZwX2NuZi5vIFwKLUBA IC00MSw3ICs0MSw3IEBAIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF8K LSAJYmlvX21kLm8gYmlvX2I2NC5vIGJpb19lbmMubyBldnBfZXJyLm8gZV9udWxsLm8gXAotIAlj X2FsbC5vIGNfYWxsYy5vIGNfYWxsZC5vIGV2cF9saWIubyBiaW9fb2subyBcCi0gCWV2cF9wa2V5 Lm8gZXZwX3BiZS5vIHA1X2NycHQubyBwNV9jcnB0Mi5vIFwKLS0JZV9vbGQubyBwbWV0aF9saWIu byBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBldnBfZmlwcy5vIFwKLSsJZV9vbGQu byBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBcCi0gCWVfYWVz X2NiY19obWFjX3NoYTEubyBlX3JjNF9obWFjX21kNS5vCi0gCi0gU1JDPSAkKExJQlNSQykKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9ldnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvbV9k c3MuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc4Njk0MDkx ICswMjAwCi1AQCAtNjYsNyArNjYsNiBAQAotICNlbmRpZgotIAotICNpZm5kZWYgT1BFTlNTTF9O T19TSEEKLS0jaWZuZGVmIE9QRU5TU0xfRklQUwotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURf Q1RYICpjdHgpCi0gCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci1AQCAtODIs NyArODEsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzYV9tZD0KLSAJTklEX2RzYVdpdGhTSEEs Ci0gCU5JRF9kc2FXaXRoU0hBLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdf UEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMs Ci0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1AQCAtOTgsNCArOTcsMyBAQCBjb25zdCBF VlBfTUQgKkVWUF9kc3Modm9pZCkKLSAJcmV0dXJuKCZkc2FfbWQpOwotIAl9Ci0gI2VuZGlmCi0t I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9tX2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9ldnAvbV9kc3MxLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvbV9kc3MxLmMJMjAxMy0xMC0wNCAxMTo0 ODowNC4xNzg2OTQwOTEgKzAyMDAKLUBAIC02OCw4ICs2OCw2IEBACi0gI2luY2x1ZGUgPG9wZW5z c2wvZHNhLmg+Ci0gI2VuZGlmCi0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMgCi0tCi0gc3RhdGlj IGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRf ZGF0YSk7IH0KLSAKLUBAIC04NCw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9t ZD0KLSAJTklEX2RzYSwKLSAJTklEX2RzYVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwK LS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVW UF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1AQCAtMTAwLDQg Kzk4LDMgQEAgY29uc3QgRVZQX01EICpFVlBfZHNzMSh2b2lkKQotIAlyZXR1cm4oJmRzczFfbWQp OwotIAl9Ci0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v ZXZwL21fbWQyLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fbWQyLmMKLS0tLSBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvbV9tZDIuYwky MDEzLTEwLTA0IDExOjQ4OjA0LjE3ODY5NDA5MSArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAj aWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlm Ci0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFgg KmN0eCkKLSAJeyByZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9ldnAvbV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fc2hhMS5jLmZp cHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc4Njk0MDkxICswMjAw Ci1AQCAtNTksOCArNTksNiBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJjcnlw dGxpYi5oIgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0tCi0gI2lmbmRlZiBPUEVOU1NMX05P X1NIQQotIAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotQEAgLTg1LDcgKzgzLDggQEAgc3Rh dGljIGNvbnN0IEVWUF9NRCBzaGExX21kPQotIAlOSURfc2hhMSwKLSAJTklEX3NoYTFXaXRoUlNB RW5jcnlwdGlvbiwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVU SE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFH X1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlF VlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTEyMiw3 ICsxMjEsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZD0KLSAJTklEX3NoYTIyNCwK LSAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEyMjRfRElHRVNUX0xFTkdUSCwK LS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lE X0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFH X0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyMjQsCi0gCXVw ZGF0ZTI1NiwKLSAJZmluYWwyNTYsCi1AQCAtMTQxLDcgKzE0MSw4IEBAIHN0YXRpYyBjb25zdCBF VlBfTUQgc2hhMjU2X21kPQotIAlOSURfc2hhMjU2LAotIAlOSURfc2hhMjU2V2l0aFJTQUVuY3J5 cHRpb24sCi0gCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhP RF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19Q S0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQ X01EX0ZMQUdfRklQUywKLSAJaW5pdDI1NiwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBA IC0xNzIsNyArMTczLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9Ci0gCU5JRF9z aGEzODQsCi0gCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMzg0X0RJR0VTVF9M RU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19E SUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBf TURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0Mzg0 LAotIAl1cGRhdGU1MTIsCi0gCWZpbmFsNTEyLAotQEAgLTE5MSw3ICsxOTMsOCBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIHNoYTUxMl9tZD0KLSAJTklEX3NoYTUxMiwKLSAJTklEX3NoYTUxMldpdGhS U0FFbmNyeXB0aW9uLAotIAlTSEE1MTJfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtF WV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwK LSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQ1MTIsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1 MTIsCi1AQCAtMjA2LDQgKzIwOSwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTUxMih2b2lkKQot IAl7IHJldHVybigmc2hhNTEyX21kKTsgfQotICNlbmRpZgkvKiBpZm5kZWYgT1BFTlNTTF9OT19T SEE1MTIgKi8KLSAKLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAv cF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL3Bfc2lnbi5jCi0tLS0gb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9wX3NpZ24uYwky MDEzLTEwLTA0IDExOjQ4OjA0LjE3OTY5NDExNCArMDIwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAot ICNpZmRlZiB1bmRlZgotIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01E ICp0eXBlKQotQEAgLTEwMyw2ICsxMDQsMjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NU WCAqY3R4LCB1bnNpZwotIAkJCWdvdG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2ln bmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSsJCWlm IChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQotKwkJ CQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Mp Ci0rCQkJewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9w YWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJy OwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOwotKwkJCWlm IChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rCQkJCXNhbHRsZW4gPSAt MTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsJ CQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxl bihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJfQotIAkJaWYgKEVW UF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKLSAJCQln b3RvIGVycjsKLSAJCSpzaWdsZW4gPSBzbHRtcDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvcF92ZXJp ZnkuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMTMt MDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2V2cC9wX3ZlcmlmeS5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTc5Njk0MTE0ICswMjAwCi1AQCAt NjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVu c3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+Ci0gCi0gaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKLSAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBF VlBfUEtFWSAqcGtleSkKLUBAIC04OCw2ICs4OSwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVW UF9NRF9DVFggKmN0eCwgY29uCi0gCQkJZ290byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3Nl dF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8gZXJyOwot KwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVW UF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDAp Ci0rCQkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BTUykKLSsJCQl7Ci0rCQkJaW50IHNhbHRsZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRf cnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKLSsJCQkJZ290 byBlcnI7Ci0rCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0r CQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKLSsJCQkJc2FsdGxl biA9IC0xOwotKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVD KQotKwkJCQlzYWx0bGVuID0gLTI7Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19z YWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlp ID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOwotIAkJ ZXJyOgotIAkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4xNzk2OTQxMTQg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMJ MjAxMy0xMC0wNCAxMTo0ODowNC4xNzk2OTQxMTQgKzAyMDAKLUBAIC0wLDAgKzEsOTM5IEBACi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0 aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0aW9uIFN1aXRl Ci0rICBUZXN0IFByb2dyYW0KLSsKLSsgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKLSsgIFYtT05F IENvcnBvcmF0aW9uCi0rICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAotKyAgR2VybWFu dG93biwgTUQgMjA4NzQKLSsgIFUuUy5BLgotKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUg PHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsj aW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgot KwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxuIik7Ci0rICAgIHJl dHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgotKwot KyNkZWZpbmUgVkVSQk9TRSAwCi0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCi0rCi0raW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwK LSsJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKLSsJ ICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAotKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLwotKwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25l ZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBI RVIgKmNpcGhlciA9IE5VTEw7Ci0rCi0rICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikg PT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lw aGVyID0gRVZQX2Flc18xMjhfY2JjKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJ Y2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2Ogot KwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsKLSsJfQot KyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKLSsJewotKwlzd2l0 Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhf ZWNiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18x OTJfZWNiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Fl c18yNTZfZWNiKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmIChzdHJjYXNl Y21wKGFtb2RlLCAiQ0ZCMTI4IikgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsK LSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7Ci0rCQlicmVh azsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMTI4KCk7Ci0r CQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMTI4 KCk7Ci0rCQlicmVhazsKLSsJCX0KLSsKLSsJfQotKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChh bW9kZSwgIk9GQiIsIDMpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQlj YXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOwotKwkJYnJlYWs7Ci0rCi0r CQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigpOwotKwkJYnJlYWs7Ci0r Ci0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigpOwotKwkJYnJlYWs7 Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwl7 Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBf YWVzXzEyOF9jZmIxKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0g RVZQX2Flc18xOTJfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMjU2X2NmYjEoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2Ug aWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJ CXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiOCgpOwotKwkJYnJl YWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjgoKTsKLSsJ CWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmI4KCk7 Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlCi0rCXsKLSsJcHJpbnRmKCJVbmtub3du IG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCXJldHVybiAwOwotKwl9Ci0rICAgIGlmICghY2lwaGVy KQotKwl7Ci0rCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7Ci0rCXJl dHVybiAwOyAKLSsJfQotKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5V TEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmKCFzdHJjYXNl Y21wKGFtb2RlLCJDRkIxIikpCi0rCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQ X0NJUEhfRkxBR19MRU5HVEhfQklUUyk7Ci0rICAgIGlmIChkaXIpCi0rCQlFVlBfQ2lwaGVyKGN0 eCwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOwotKwllbHNlCi0rCQlFVlBfQ2lwaGVyKGN0 eCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot K2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OwotK2NoYXIgKnRf bW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIxMjgifTsKLStl bnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07Ci0rZW51bSBYQ3J5 cHQge1hERUNSWVBULCBYRU5DUllQVH07Ci0rCi0rLyo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSovCi0rLyogIE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICovCi0rLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rLyojZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhd ID4+ICgoYiklOCkpJjEpKi8KLSsvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlb KGIpLzhdJn4oMSA8PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSovCi0rCi0rI2RlZmlu ZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCi0rI2RlZmluZSBzYihhLGIs dikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkpfCghISh2KSA8PCAo Ny0oYiklOCkpKQotKwotK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAotKwkgICBpbnQgYWtleXN6 LCB1bnNpZ25lZCBjaGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCi0rCSAgIGludCBkaXIs IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCi0rCSAgIEZJTEUgKnJmcCkKLSsgICAgewot KyAgICBpbnQgcmV0ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbMTAxXVszMl07Ci0rICAg IHVuc2lnbmVkIGNoYXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07Ci0rICAgIHVuc2lnbmVkIGNo YXIgcHRleHRbMTAwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEwMDFdWzMyXTsK LSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOwotKyAgICBpbnQgaSwgaiwgbiwg bjEsIG4yOwotKyAgICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ovODsKLSsgICAgRVZQ X0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAg ICBpZiAobGVuID4gMzIpCi0rCXsKLSsJcHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4Y2VlZHMgMzIg Zm9yICVzICVkIDw8PDxcblxuIiwgCi0rCSAgICAgICBhbW9kZSwgYWtleXN6KTsKLSsJcmV0dXJu IC0xOwotKwl9Ci0rICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1vZGUpCi0rCWlm IChzdHJjbXAoYW1vZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCi0rCSAgICBicmVhazsKLSsgICAg aWYgKGltb2RlID09IDYpCi0rCXsgCi0rCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4i LCBhbW9kZSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKwotKyAgICBtZW1jcHkoa2V5WzBdLCBhS2V5 LCBua2V5c3opOwotKyAgICBpZiAoaVZlYykKLSsJbWVtY3B5KGl2WzBdLCBpVmVjLCBBRVNfQkxP Q0tfU0laRSk7Ci0rICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCW1lbWNweShwdGV4dFswXSwg dGV4dCwgbGVuKTsKLSsgICAgZWxzZQotKwltZW1jcHkoY3RleHRbMF0sIHRleHQsIGxlbik7Ci0r ICAgIGZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkKLSsJewotKwkvKiBwcmludGYoIkl0ZXJhdGlv biAlZFxuIiwgaSk7ICovCi0rCWlmIChpID4gMCkKLSsJICAgIHsKLSsJICAgIGZwcmludGYocmZw LCJDT1VOVCA9ICVkXG4iLGkpOwotKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5W2ldLG5rZXlz eixyZnAsMCk7Ci0rCSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICovCi0rCQlPdXRwdXRW YWx1ZSgiSVYiLGl2W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKLSsJICAgIC8qIE91dHB1dCBD aXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCi0rCSAgICBPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0s ZGlyID8gcHRleHRbMF0gOiBjdGV4dFswXSxsZW4scmZwLAotKwkJCWltb2RlID09IENGQjEpOwot KwkgICAgfQotKwlmb3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQotKwkgICAgewotKwkgICAgc3dp dGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJaWYgKGogPT0gMCkKLSsJCSAg ICB7IC8qIHNldCB1cCBlbmNyeXB0aW9uICovCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBh bW9kZSwgYWtleXN6LCBrZXlbaV0sIE5VTEwsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAg ICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwg bGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4p OwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQ VCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7 Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJCX0KLSsJCSAgICBl bHNlCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4p OwotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAg fQotKwkJYnJlYWs7Ci0rCi0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOiAgCi0rCSAg ICBjYXNlIENGQjEyODoKLSsJCWlmIChqID09IDApCi0rCQkgICAgewotKwkJICAgIHJldCA9IEFF U1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCi0rCQkJCSAgZGlyLCAg LyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pd LCBsZW4pOwotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJbWVtY3B5KHB0ZXh0W2or MV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgaXZb aV0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtq XSwgbGVuKTsKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xXSwgbGVuKTsKLSsJCQl9 Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4 dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xXSwgbGVuKTsKLSsJ CQl9Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCi0rCSAgICBjYXNlIENGQjg6Ci0rCQlpZiAoaiA9 PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3os IGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNl Ci0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJRVZQX0NpcGhlcigm Y3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCUVWUF9DaXBo ZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0KLSsJCWlmIChkaXIg PT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KHB0 ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KHB0ZXh0 W2orMV0sIGN0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0r CQkgICAgaWYgKGogPCAxNikKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgJml2W2ldW2pdLCBsZW4p OwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xNl0sIGxlbik7 Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCi0rCSAgICBjYXNlIENGQjE6Ci0rCQlpZihqID09IDAp Ci0rCQkgICAgewotKyNpZiAwCi0rCQkgICAgLyogY29tcGVuc2F0ZSBmb3Igd3JvbmcgZW5kaWFu bmVzcyBvZiBpbnB1dCBmaWxlICovCi0rCQkgICAgaWYoaSA9PSAwKQotKwkJCXB0ZXh0WzBdWzBd PDw9NzsKLSsjZW5kaWYKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGtl eVtpXSxpdltpXSxkaXIsCi0rCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9 Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJRVZQ X0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJ CUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwotKwkJICAgIH0K LSsJCWlmKGRpciA9PSBYRU5DUllQVCkKLSsJCSAgICB7Ci0rCQkgICAgaWYoaiA8IDEyOCkKLSsJ CQlzYihwdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOwotKwkJICAgIGVsc2UKLSsJCQlzYihwdGV4 dFtqKzFdLDAsZ2IoY3RleHRbai0xMjhdLDApKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAg ewotKwkJICAgIGlmKGogPCAxMjgpCi0rCQkJc2IoY3RleHRbaisxXSwwLGdiKGl2W2ldLGopKTsK LSsJCSAgICBlbHNlCi0rCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4XSwwKSk7Ci0r CQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCS0tajsgLyogcmVzZXQgdG8gbGFz dCBvZiByYW5nZSAqLwotKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwlP dXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRbal0sbGVuLHJmcCwK LSsJCSAgICBpbW9kZSA9PSBDRkIxKTsKLSsJZnByaW50ZihyZnAsICJcbiIpOyAgLyogYWRkIHNl cGFyYXRvciAqLwotKwotKwkvKiBDb21wdXRlIG5leHQgS0VZICovCi0rCWlmIChkaXIgPT0gWEVO Q1JZUFQpCi0rCSAgICB7Ci0rCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKLSsJCXsgLyogY3QgPSBD VFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KLSsJCWZvciAobjEgPSAwLCBu MiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKLSsJCSAgICBjaXBoZXJ0ZXh0 W24xXSA9IGN0ZXh0W2otbjJdWzBdOwotKwkJfQotKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIx KQotKwkJewotKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1u MikKLSsJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXN3aXRjaCAoYWtleXN6KQotKwkJICAgIHsKLSsJCWNhc2UgMTI4OgotKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJ Y2FzZSAxOTI6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0rOCwgOCk7Ci0r CQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsK LSsJCWNhc2UgMjU2OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdLCAxNik7 Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJl YWs7Ci0rCQkgICAgfQotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBpZiAoaW1vZGUg PT0gQ0ZCOCkKLSsJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rb al0gKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwg LS1uMikKLSsJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBdOwotKwkJfQotKwkg ICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQotKwkJewotKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEg OyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKHB0 ZXh0W2otbjJdLDApKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXN3aXRjaCAoYWtleXN6KQotKwkJ ICAgIHsKLSsJCWNhc2UgMTI4OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqXSwg MTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAxOTI6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRl eHQsIHB0ZXh0W2otMV0rOCwgOCk7Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgcHRleHRb al0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMjU2OgotKwkJICAgIG1lbWNweShjaXBo ZXJ0ZXh0LCBwdGV4dFtqLTFdLCAxNik7Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIHB0 ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkgICAgfQotKwkvKiBDb21w dXRlIG5leHQga2V5OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KLSsJZm9yIChuID0gMDsg biA8IG5rZXlzejsgKytuKQotKwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1bbl0gXiBjaXBoZXJ0 ZXh0W25dOwotKwkKLSsJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICovCi0rCWlmIChkaXIg PT0gWEVOQ1JZUFQpCi0rCSAgICB7Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQotKwkJewotKwkgICAg Y2FzZSBFQ0I6Ci0rCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7 Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0JDOgotKwkgICAgY2FzZSBPRkI6Ci0rCSAgICBjYXNl IENGQjEyODoKLSsJCW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwot KwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVh azsKLSsJICAgIGNhc2UgQ0ZCODoKLSsJCS8qIElWW2krMV0gPSBjdCAqLwotKwkJZm9yIChuMSA9 IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBj dGV4dFtqLW4yXVswXTsKLSsJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1bMF07Ci0rCQlicmVh azsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytu MSwtLW4yKQotKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0sMCkpOwotKwkJcHRl eHRbMF1bMF09Y3RleHRbai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0K LSsJZWxzZQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2Ug RUNCOgotKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJ YnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAgY2FzZSBDRkIx Mjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCW1l bWNweShjdGV4dFswXSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0r CSAgICBjYXNlIENGQjg6Ci0rCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwg LS1uMikKLSsJCSAgICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOwotKwkJY3RleHRbMF1b MF0gPSBwdGV4dFtqLTE2XVswXTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkIxOgotKwkJZm9y KG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCi0rCQkgICAgc2IoaXZbaSsxXSxu MSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQljdGV4dFswXVswXT1wdGV4dFtqLTEyOF1bMF0mMHg4 MDsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIAotKyAgICByZXR1cm4gcmV0 OwotKyAgICB9Ci0rCi0rLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0qLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgIyBDb25maWcg aW5mbyBmb3Igdi1vbmUKLSsgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNCCi0rICAjIFN0 YXRlIDogRW5jcnlwdCBhbmQgRGVjcnlwdAotKyAgIyBLZXkgTGVuZ3RoIDogMjU2Ci0rICAjIEZy aSBBdWcgMzAgMDQ6MDc6MjIgUE0KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwot KwotK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQotKyAgICB7Ci0r ICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOwotKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZw ID0gTlVMTDsKLSsgICAgY2hhciBpYnVmWzIwNDhdOwotKyAgICBjaGFyIHRidWZbMjA0OF07Ci0r ICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7Ci0rICAgIGNoYXIgYWxnb1s4XSA9ICIiOwotKyAg ICBjaGFyIGFtb2RlWzhdID0gIiI7Ci0rICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsKLSsgICAgaW50 IGFrZXlzeiA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOwotKyAg ICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIHBs YWludGV4dFsyMDQ4XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOwotKyAg ICBjaGFyICpycDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NU WF9pbml0KCZjdHgpOwotKwotKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQotKwl7Ci0r CXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgc3RyY3B5 KGFmbiwgcnFmaWxlKTsKLSsKLSsgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5V TEwpCi0rCXsKLSsJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAg ICAgYWZuLCBzdHJlcnJvcihlcnJubykpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgaWYgKCFy c3BmaWxlKQotKwl7Ci0rCXN0cmNweShyZm4sYWZuKTsKLSsJcnA9c3Ryc3RyKHJmbiwicmVxLyIp OwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlpZiAoIXJwKQotKwkgICAgcnA9c3Ryc3Ry KHJmbiwicmVxXFwiKTsKLSsjZW5kaWYKLSsJYXNzZXJ0KHJwKTsKLSsJbWVtY3B5KHJwLCJyc3Ai LDMpOwotKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7Ci0rCW1lbWNweShycCwgIi5yc3AiLCA0 KTsKLSsJcnNwZmlsZSA9IHJmbjsKLSsJfQotKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUs ICJ3IikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNc biIsIAotKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOwotKwlmY2xvc2UoYWZwKTsKLSsJ YWZwID0gTlVMTDsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHdoaWxlICghZXJyICYmIChmZ2V0 cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCi0rCXsKLSsJdGlkeV9saW5lKHRi dWYsIGlidWYpOwotKwlpbGVuID0gc3RybGVuKGlidWYpOwotKwkvKiAgICAgIHByaW50Zigic3Rl cD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyAqLwotKwlzd2l0Y2ggKHN0ZXApCi0rCSAgICB7Ci0r CWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KLSsJICAgIGlmIChpYnVmWzBdID09ICdcbicp Ci0rCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLwotKwkJaWYgKCgqYWxnbyA9PSAnXDAnKSB8fAot KwkJICAgICgqYW1vZGUgPT0gJ1wwJykgfHwKLSsJCSAgICAoYWtleXN6ID09IDApKQotKwkJICAg IHsKLSsJCSAgICBwcmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtleVNpemUgKCVz LyVzLyVkKVxuIiwKLSsJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7Ci0rCQkgICAgZXJyID0gMTsK LSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0r CQkgICAgKysgc3RlcDsKLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChpYnVmWzBdICE9 ICcjJykKLSsJCXsKLSsJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1 Zik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJeyAvKiBwcm9jZXNzIHByZWFt YmxlICovCi0rCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOwotKwkJaW50IG47Ci0rCQlpZiAoYWtl eXN6KQotKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0 aW1lX3QgcnRpbSA9IHRpbWUoMCk7Ci0rCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUo JnJ0aW0pKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYs IHJmcCk7Ci0rCQkgICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9PSAwKQotKwkJCXsK LSsJCQlzdHJjcHkoYWxnbywgIkFFUyIpOwotKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KLSsJCQlw cCArPSA2OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlz dHJuY3B5KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBt b2RlICovCi0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQlu ID0gc3RybGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1v ZGVbbl0gPSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9T RSkKLSsJCQkJcHJpbnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRlc3QsIGFtb2RlKTsK LSsJCQl9Ci0rCQkgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkgTGVuZ3RoIDogIiwg MTMpID09IDApCi0rCQkJewotKwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOwotKwkJCWlmIChWRVJC T1NFKQotKwkJCQlwcmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7Ci0rCQkJfQotKwkJ ICAgIH0KLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBb REVDUllQVF0gKi8KLSsJICAgIGlmIChpYnVmWzBdID09ICdbJykKLSsJCXsKLSsJCWZwdXRzKGli dWYsIHJmcCk7Ci0rCQkrK3N0ZXA7Ci0rCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBU XSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMTsKLSsJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGli dWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDA7Ci0rCQllbHNlCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7Ci0rCQkg ICAgZXJyID0gMTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKGRp ciA9PSAtMSkKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9E RUNSWVBUIGtleXdvcmRcbiIpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIAotKwkJc3Rl cCA9IDI7Ci0rCi0rCWNhc2UgMjogLyogS0VZID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1Ziwg cmZwKTsKLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0rCQlicmVhazsKLSsJICAgIGlmKCFzdHJu Y2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCi0rCQlicmVhazsKLSsKLSsJICAgIGlmIChzdHJu Y2FzZWNtcChpYnVmLCAiS0VZID0gIiwgNikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2lu ZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9 IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7 Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAg IGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7Ci0rCQlp ZiAoc3RyY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgbWVtc2V0KGlW ZWMsIDAsIHNpemVvZihpVmVjKSk7Ci0rCQkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8g aXZlYyBmb3IgRUNCICovCi0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgICsrc3RlcDsKLSsJCX0K LSsJICAgIGJyZWFrOwotKwotKwljYXNlIDM6IC8qIElWID0geHh4eCAqLwotKwkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAw KQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0r CSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOwot KwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7 Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUo IklWIiwgaVZlYywgbGVuKTsKLSsJCXN0ZXAgPSAoZGlyKT8gNDogNTsKLSsJCX0KLSsJICAgIGJy ZWFrOwotKwotKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGli dWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEy KSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7Ci0rCQllcnIg PSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIp OwotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVm KzEyLG5uLTEscGxhaW50ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW49aGV4MmJpbihpYnVmKzEy LCBwbGFpbnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50Zigi SW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAg IGJyZWFrOwotKwkJICAgIH0KLSsJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKLSsJCSAgICB9Ci0rCQlQ cmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOwot KwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICov Ci0rCQkgICAgewotKwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAK LSsJCQkgICAgICBkaXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbiwgCi0rCQkJICAg ICAgcmZwKSA8IDApCi0rCQkJRVhJVCgxKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewot KwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0r CQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50 ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixj aXBoZXJ0ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAg fQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA1OiAvKiBDSVBI RVJURVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJu Y2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQotKwkJewotKwkJcHJpbnRm KCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewot KwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEz LHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbiA9IGhl eDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJ ICAgIGJyZWFrOwotKwkJICAgIH0KLSsKLSsJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBo ZXJ0ZXh0LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250 ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBh S2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9 Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFr ZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNy eXB0ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1 dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCi0r CQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9 Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA2OgotKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykK LSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7Ci0r CQl9Ci0rCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQotKwkJeyAvKiBN Q1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLwotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsK LSsJCX0KLSsJICAgIHN0ZXAgPSAxOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCX0KLSsgICAg aWYgKHJmcCkKLSsJZmNsb3NlKHJmcCk7Ci0rICAgIGlmIChhZnApCi0rCWZjbG9zZShhZnApOwot KyAgICByZXR1cm4gZXJyOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBm aWxlIG9yIAotKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZp bGUuCi0rICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWYg eHh4LnJlcQotKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVz dCAtZCB4eHh4eC54eHgKLSsgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Ci0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSsgICAgewotKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4 dCIsICpyc3BmaWxlID0gTlVMTDsKLSsgICAgRklMRSAqZnAgPSBOVUxMOwotKyAgICBjaGFyIGZu WzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKLSsgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAx OwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0r CXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsjZW5kaWYKLSsgICAg aWYgKGFyZ2MgPiAxKQotKwl7Ci0rCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDAp Ci0rCSAgICB7Ci0rCSAgICBkX29wdCA9IDE7Ci0rCSAgICB9Ci0rCWVsc2UgaWYgKHN0cmNhc2Vj bXAoYXJndlsxXSwgIi1mIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGZfb3B0ID0gMTsKLSsJICAg IGRfb3B0ID0gMDsKLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgcHJpbnRmKCJJbnZh bGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9 Ci0rCWlmIChhcmdjIDwgMykKLSsJICAgIHsKLSsJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0 ZXJcbiIpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChkX29wdCkKLSsJICAgIHJx bGlzdCA9IGFyZ3ZbMl07Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN0cmNweShmbiwgYXJndlsy XSk7Ci0rCSAgICByc3BmaWxlID0gYXJndlszXTsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAoZF9v cHQpCi0rCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLwotKwlpZiAoIShmcCA9IGZv cGVuKHJxbGlzdCwgInIiKSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJl cSBsaXN0IGZpbGVcbiIpOwotKwkgICAgcmV0dXJuIC0xOwotKwkgICAgfQotKwl3aGlsZSAoZmdl dHMoZm4sIHNpemVvZihmbiksIGZwKSkKLSsJICAgIHsKLSsJICAgIHN0cnRvayhmbiwgIlxyXG4i KTsKLSsJICAgIHN0cmNweShyZm4sIGZuKTsKLSsJICAgIGlmIChWRVJCT1NFKQotKwkJcHJpbnRm KCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKLSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3Bm aWxlKSkKLSsJCXsKLSsJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8 XG4iLCByZm4pOwotKwkJRVhJVCgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJ fQotKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCSAg ICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJz cGZpbGUpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9y OiAlcyA8PDxcbiIsIGZuKTsKLSsJICAgIH0KLSsJfQotKyAgICBFWElUKDApOwotKyAgICByZXR1 cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2Nh dnMvZmlwc19jbWFjdGVzdC5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4xNzk2OTQxMTQgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwky MDEzLTEwLTA0IDExOjQ4OjA0LjE3OTY5NDExNCArMDIwMAotQEAgLTAsMCArMSw1MTcgQEAKLSsv KiBmaXBzX2NtYWN0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24g KHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0r ICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsg KiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8K LSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9j bWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgQ01BQyBzdXBwb3J0XG4iKTsKLSsg ICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGNtYWNfdGVzdChjb25z dCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwgRklMRSAqaW4sCi0rCWludCBtb2RlLCBp bnQgS2xlbl9jb3VudHNfa2V5cywgaW50IGtub3duX2tleWxlbik7Ci0rc3RhdGljIGludCBwcmlu dF9jbWFjX2dlbihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVuc2ln bmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2ds ZW4sCi0rCQlpbnQgVGxlbik7Ci0rc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBf Q0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEts ZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFy ICpNYWMsIGludCBNYWNsZW4sCi0rCQlpbnQgVGxlbik7Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMK LStpbnQgZmlwc19jbWFjdGVzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZWxzZQot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwlGSUxFICpp biA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwlpbnQgbW9kZSA9IDA7CQkvKiAwID0+IEdlbmVyYXRl LCAxID0+IFZlcmlmeSAqLwotKwlpbnQgS2xlbl9jb3VudHNfa2V5cyA9IDA7IC8qIDAgPT4gS2xl biBpcyBzaXplIG9mIG9uZSBrZXkKLSsJCQkJICAgICAxID0+IEtsZW4gaXMgYW1vdW50IG9mIGtl eXMKLSsJCQkJICAqLwotKwlpbnQga25vd25fa2V5bGVuID0gMDsJLyogT25seSBzZXQgd2hlbiBL bGVuX2NvdW50c19rZXlzID0gMSAqLwotKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSAwOwot KwlpbnQgcmV0ID0gMTsKLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsKLSsJd2hpbGUgKGFyZ2Mg PiAxICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKQotKwkJewotKwkJc3dpdGNoIChhcmd2WzFdWzFdKQot KwkJCXsKLSsJCWNhc2UgJ2EnOgotKwkJCXsKLSsJCQljaGFyICpwID0gJmFyZ3ZbMV1bMl07Ci0r CQkJaWYgKCpwID09ICdcMCcpCi0rCQkJCXsKLSsJCQkJaWYgKGFyZ2MgPD0gMikKLSsJCQkJCXsK LSsJCQkJCWZwcmludGYoc3RkZXJyLCAiT3B0aW9uICVzIG5lZWRzIGEgdmFsdWVcbiIsIGFyZ3Zb MV0pOwotKwkJCQkJZ290byBlbmQ7Ci0rCQkJCQl9Ci0rCQkJCWFyZ3YrKzsKLSsJCQkJYXJnYy0t OwotKwkJCQlwID0gJmFyZ3ZbMV1bMF07Ci0rCQkJCX0KLSsJCQlpZiAoIXN0cmNtcChwLCAiYWVz MTI4IikpCi0rCQkJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJCWVsc2UgaWYgKCFz dHJjbXAocCwgImFlczE5MiIpKQotKwkJCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsJ CQllbHNlIGlmICghc3RyY21wKHAsICJhZXMyNTYiKSkKLSsJCQkJY2lwaGVyID0gRVZQX2Flc18y NTZfY2JjKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcChwLCAidGRlYTMiKSB8fCAhc3RyY21wKHAs ICJ0ZGVzMyIpKQotKwkJCQl7Ci0rCQkJCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsJ CQkJS2xlbl9jb3VudHNfa2V5cyA9IDE7Ci0rCQkJCWtub3duX2tleWxlbiA9IDg7Ci0rCQkJCX0K LSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGFsZ29yaXRo bSAlc1xuIiwgcCk7Ci0rCQkJCWdvdG8gZW5kOwotKwkJCQl9Ci0rCQkJfQotKwkJCWJyZWFrOwot KwkJY2FzZSAnZyc6Ci0rCQkJbW9kZSA9IDA7Ci0rCQkJYnJlYWs7Ci0rCQljYXNlICd2JzoKLSsJ CQltb2RlID0gMTsKLSsJCQlicmVhazsKLSsJCWRlZmF1bHQ6Ci0rCQkJZnByaW50ZihzdGRlcnIs ICJVbmtub3duIG9wdGlvbiAlc1xuIiwgYXJndlsxXSk7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQot KwkJYXJndisrOwotKwkJYXJnYy0tOwotKwkJfQotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBz dGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJn YyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0s ICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlu cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxp emF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWNtYWNfdGVz dChjaXBoZXIsIG91dCwgaW4sIG1vZGUsCi0rCQkJS2xlbl9jb3VudHNfa2V5cywga25vd25fa2V5 bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgY21hYyBmaWxlIHByb2Nlc3Np bmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0r Ci0rCWVuZDoKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwot KwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1 cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBDTUFDX1RFU1RfTUFYTElORUxFTgkxNTAwMDAK LSsKLStpbnQgY21hY190ZXN0KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LCBG SUxFICppbiwKLSsJaW50IG1vZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQga25vd25fa2V5 bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICpr ZXl3b3JkLCAqdmFsdWU7Ci0rCXVuc2lnbmVkIGNoYXIgKipLZXlzID0gTlVMTCwgKk1zZyA9IE5V TEwsICpNYWMgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMOwotKwlpbnQgQ291 bnQsIEtsZW4sIE1sZW4sIFRsZW47Ci0rCWxvbmcgS2V5bGVuLCBNc2dsZW4sIE1hY2xlbjsKLSsJ aW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21h bGxvYyhDTUFDX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhD TUFDX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0r CQlnb3RvIGVycm9yOwotKwotKwlDb3VudCA9IC0xOwotKwlLbGVuID0gLTE7Ci0rCU1sZW4gPSAt MTsKLSsJVGxlbiA9IC0xOwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIENNQUNfVEVTVF9N QVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xp bmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3 b3JkKys7Ci0rCi0rCQkvKiBTa2lwIGNvbW1lbnRzICovCi0rCQlpZiAoa2V5d29yZFswXSA9PSAn IycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8g ZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICov Ci0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0 cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJ ewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0r CQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0r CQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyog UmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAx OwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkp Ci0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ291bnQiKSkKLSsJ CQl7Ci0rCQkJaWYgKENvdW50ICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUNv dW50ID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKENvdW50IDwgMCkKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLbGVuIikpCi0rCQkJ ewotKwkJCWlmIChLbGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUtsZW4g PSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoS2xlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJaWYgKEtsZW5fY291bnRzX2tleXMpCi0rCQkJCXsKLSsJCQkJS2V5cyA9IE9QRU5TU0xf bWFsbG9jKHNpemVvZigqS2V5cykgKiBLbGVuKTsKLSsJCQkJbWVtc2V0KEtleXMsICdcMCcsIHNp emVvZigqS2V5cykgKiBLbGVuKTsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlLZXlz ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKCpLZXlzKSk7Ci0rCQkJCW1lbXNldChLZXlzLCAnXDAn LCBzaXplb2YoKktleXMpKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIk1sZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKE1sZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJTWxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChNbGVuIDwgMCkKLSsJ CQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJUbGVuIikpCi0rCQkJewotKwkJCWlmIChUbGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoVGxlbiA8IDApCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2V5 IikgJiYgIUtsZW5fY291bnRzX2tleXMpCi0rCQkJewotKwkJCWlmIChLZXlzWzBdKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCUtleXNbMF0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4p OwotKwkJCWlmICghS2V5c1swXSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQll bHNlIGlmICghc3RybmNtcChrZXl3b3JkLCAiS2V5IiwgMykgJiYgS2xlbl9jb3VudHNfa2V5cykK LSsJCQl7Ci0rCQkJaW50IGtleW51bSA9IGF0b2koa2V5d29yZCArIDMpOwotKwkJCWlmICgha2V5 bnVtIHx8IGtleW51bSA+IEtsZW4gfHwgS2V5c1trZXludW0tMV0pCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJS2V5c1trZXludW0tMV0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4pOwot KwkJCWlmICghS2V5c1trZXludW0tMV0pCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNn bGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNYWMiKSkKLSsJCQl7Ci0rCQkJaWYgKG1vZGUgPT0g MCkKLSsJCQkJY29udGludWU7Ci0rCQkJaWYgKE1hYykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlNYWMgPSBoZXgyYmluX20odmFsdWUsICZNYWNsZW4pOwotKwkJCWlmICghTWFjKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlJlc3VsdCIpKQotKwkJCXsKLSsJCQlpZiAobW9kZSA9PSAxKQotKwkJCQljb250aW51ZTsKLSsJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAoS2V5cyAmJiBNc2cgJiYg KCFtb2RlIHx8IE1hYykgJiYgKFRsZW4gPiAwKSAmJiAoS2xlbiA+IDApKQotKwkJCXsKLSsJCQlp ZiAoS2xlbl9jb3VudHNfa2V5cykKLSsJCQkJewotKwkJCQlpbnQgeDsKLSsJCQkJS2V5ID0gT1BF TlNTTF9tYWxsb2MoS2xlbiAqIGtub3duX2tleWxlbik7Ci0rCQkJCWZvciAoeCA9IDA7IHggPCBL bGVuOyB4KyspCi0rCQkJCQl7Ci0rCQkJCQltZW1jcHkoS2V5ICsgeCAqIGtub3duX2tleWxlbiwK LSsJCQkJCQlLZXlzW3hdLCBrbm93bl9rZXlsZW4pOwotKwkJCQkJT1BFTlNTTF9mcmVlKEtleXNb eF0pOwotKwkJCQkJfQotKwkJCQlLbGVuICo9IGtub3duX2tleWxlbjsKLSsJCQkJfQotKwkJCWVs c2UKLSsJCQkJewotKwkJCQlLZXkgPSBPUEVOU1NMX21hbGxvYyhLbGVuKTsKLSsJCQkJbWVtY3B5 KEtleSwgS2V5c1swXSwgS2xlbik7Ci0rCQkJCU9QRU5TU0xfZnJlZShLZXlzWzBdKTsKLSsJCQkJ fQotKwkJCU9QRU5TU0xfZnJlZShLZXlzKTsKLSsKLSsJCQlzd2l0Y2gobW9kZSkKLSsJCQkJewot KwkJCWNhc2UgMDoKLSsJCQkJaWYgKCFwcmludF9jbWFjX2dlbihjaXBoZXIsIG91dCwKLSsJCQkJ CQlLZXksIEtsZW4sCi0rCQkJCQkJTXNnLCBNbGVuLAotKwkJCQkJCVRsZW4pKQotKwkJCQkJZ290 byBlcnJvcjsKLSsJCQkJYnJlYWs7Ci0rCQkJY2FzZSAxOgotKwkJCQlpZiAoIXByaW50X2NtYWNf dmVyKGNpcGhlciwgb3V0LAotKwkJCQkJCUtleSwgS2xlbiwKLSsJCQkJCQlNc2csIE1sZW4sCi0r CQkJCQkJTWFjLCBNYWNsZW4sCi0rCQkJCQkJVGxlbikpCi0rCQkJCQlnb3RvIGVycm9yOwotKwkJ CQlicmVhazsKLSsJCQkJfQotKwotKwkJCU9QRU5TU0xfZnJlZShLZXkpOwotKwkJCUtleSA9IE5V TEw7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlPUEVOU1NM X2ZyZWUoTWFjKTsKLSsJCQlNYWMgPSBOVUxMOwotKwkJCUtsZW4gPSAtMTsKLSsJCQlNbGVuID0g LTE7Ci0rCQkJVGxlbiA9IC0xOwotKwkJCUNvdW50ID0gLTE7Ci0rCQkJfQotKwkJfQotKwotKwot KwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1 Zik7Ci0rCWlmIChLZXkpCi0rCQlPUEVOU1NMX2ZyZWUoS2V5KTsKLSsJaWYgKE1zZykKLSsJCU9Q RU5TU0xfZnJlZShNc2cpOwotKwlpZiAoTWFjKQotKwkJT1BFTlNTTF9mcmVlKE1hYyk7Ci0rCi0r CXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8g ZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9D SVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xl biwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCi0rCQlpbnQgVGxlbikKLSsJewot KwlpbnQgcmMsIGk7Ci0rCXNpemVfdCByZXNsZW47Ci0rCXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07 Ci0rCUNNQUNfQ1RYICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygpOwotKwotKwlDTUFDX0luaXQo Y21hY19jdHgsIEtleSwgS2xlbiwgY2lwaGVyLCAwKTsKLSsJQ01BQ19VcGRhdGUoY21hY19jdHgs IE1zZywgTWxlbik7Ci0rCWlmICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkK LSsJCXsKLSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOwotKwkJ cmMgPSAwOwotKwkJfQotKwllbHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCi0rCQl7Ci0rCQlm cHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7Ci0r CQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWZwdXRzKCJNYWMgPSAiLCBvdXQpOwot KwkJZm9yIChpID0gMDsgaSA8IFRsZW47IGkrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBy ZXNbaV0pOwotKwkJZnB1dHMoUkVTUF9FT0wsIG91dCk7Ci0rCQlyYyA9IDE7Ci0rCQl9Ci0rCUNN QUNfQ1RYX2ZyZWUoY21hY19jdHgpOwotKwlyZXR1cm4gcmM7Ci0rCX0KLSsKLStzdGF0aWMgaW50 IHByaW50X2NtYWNfdmVyKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAotKwkJ dW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50 IE1sZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNYWMsIGludCBNYWNsZW4sCi0rCQlpbnQgVGxlbikK LSsJewotKwlpbnQgcmMgPSAxOwotKwlzaXplX3QgcmVzbGVuOwotKwl1bnNpZ25lZCBjaGFyIHJl c1sxMjhdOwotKwlDTUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsKLSsJQ01B Q19Jbml0KGNtYWNfY3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7Ci0rCUNNQUNfVXBkYXRlKGNt YWNfY3R4LCBNc2csIE1sZW4pOwotKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJl c2xlbikpCi0rCQl7Ci0rCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJy KTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQotKwkJ ewotKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRl cnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlIGlmIChUbGVuICE9IE1hY2xlbikKLSsJCXsK LSsJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gIT0gcmVzdWx0aW5nIE1hYyBsZW5ndGhc biIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWlmICghbWVt Y21wKE1hYywgcmVzLCBNYWNsZW4pKQotKwkJCWZwdXRzKCJSZXN1bHQgPSBQIiBSRVNQX0VPTCwg b3V0KTsKLSsJCWVsc2UKLSsJCQlmcHV0cygiUmVzdWx0ID0gRiIgUkVTUF9FT0wsIG91dCk7Ci0r CQl9Ci0rCUNNQUNfQ1RYX2ZyZWUoY21hY19jdHgpOwotKwlyZXR1cm4gcmM7Ci0rCX0KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNt b3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5j Ci0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBz CTIwMTMtMTAtMDQgMTE6NDg6MDQuMTgwNjk0MTM2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4MDY5 NDEzNiArMDIwMAotQEAgLTAsMCArMSw3MDIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8K LSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklT VCBERVMgTW9kZXMgb2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCi0rICBUZXN0IFByb2dy YW0KLSsKLSsgIEJhc2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgot KyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUw IENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5T LkEuCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K LSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRm KCJObyBGSVBTIERFUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxz ZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIK LSsKLSsjZGVmaW5lIERFU19CTE9DS19TSVpFIDgKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwot K2ludCBERVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50 IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVj LCAKLSsJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAg IHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCi0rICAgIHsK LSsgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKGFrZXlz eiAhPSAxOTIpCi0rCXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6 KTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIp ID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsgICAgZWxzZSBpZiAoc3Ry Y2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2Io KTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lw aGVyID0gRVZQX2Rlc19lZGUzX2NmYjY0KCk7Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFt b2RlLCAiT0ZCIiwgMykgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwotKyAg ICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCWNpcGhlciA9IEVWUF9kZXNf ZWRlM19jZmI4KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJ Y2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjEoKTsKLSsgICAgZWxzZQotKwl7Ci0rCXByaW50Zigi VW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlm IChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8 PSAwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJ TV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRT KTsKLSsgICAgRVZQX0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7Ci0rCi0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAq dmFsLCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9s ZW47Ci0rICAgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgICAgcHJpbnRmKCIl cyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4o dW5zaWduZWQgY2hhciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCi0rICAgIHsK LSsgICAgaW50IG47Ci0rCi0rICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCi0rICAgIG1lbW1v dmUoZHN0LGRzdCtuYml0cy84LDMqOC1uYml0cy84KTsKLSsgICAgLyogYXBwZW5kIG5ldyBkYXRh ICovCi0rICAgIG1lbWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKLSsgICAg LyogbGVmdCBzaGlmdCB0aGUgYml0cyAqLwotKyAgICBpZihuYml0cyU4KQotKwlmb3Iobj0wIDsg biA8IDMqOCA7ICsrbikKLSsJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtu KzFdID4+ICg4LW5iaXRzJTgpKTsKLSsgICAgfQkKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5U RVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9G QiIsIkNGQjEiLCJDRkI4IiwiQ0ZCNjQifTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENG QjEsIENGQjgsIENGQjY0fTsKLStpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0r dm9pZCBkb19tY3QoY2hhciAqYW1vZGUsIAotKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMs IHVuc2lnbmVkIGNoYXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKLSsJICAgIGludCBkaXIs IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCi0rCSAgICBGSUxFICpyZnApCi0rICAgIHsK LSsgICAgaW50IGksaW1vZGU7Ci0rICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2Vz dCBrZXkrOCAqLwotKyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOwotKwotKyAgICBmb3IgKGlt b2RlPTAgOyBpbW9kZSA8IDYgOyArK2ltb2RlKQotKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtp bW9kZV0pKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmlu dGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0r Ci0rICAgIGZvcihpPTAgOyBpIDwgNDAwIDsgKytpKQotKwl7Ci0rCWludCBqOwotKwlpbnQgbjsK LSsJaW50IGtwPWFrZXlzei82NDsKLSsJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07Ci0rCUVWUF9D SVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJZnByaW50 ZihyZnAsIlxuQ09VTlQgPSAlZFxuIixpKTsKLSsJaWYoa3AgPT0gMSkKLSsJICAgIE91dHB1dFZh bHVlKCJLRVkiLGFrZXksOCxyZnAsMCk7Ci0rCWVsc2UKLSsJICAgIGZvcihuPTAgOyBuIDwga3Ag OyArK24pCi0rCQl7Ci0rCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1 ZSgiIixha2V5K24qOCw4LHJmcCwwKTsKLSsJCX0KLSsKLSsJaWYoaW1vZGUgIT0gRUNCKQotKwkg ICAgT3V0cHV0VmFsdWUoIklWIixpdmVjLDgscmZwLDApOwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tk aXJeMV0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOwotKyNpZiAwCi0rCS8qIGNvbXBlbnNh dGUgZm9yIGVuZGlhbm5lc3MgKi8KLSsJaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08 PD03OwotKyNlbmRpZgotKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGog PCAxMDAwMCA7ICsraikKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07 Ci0rCi0rCSAgICBtZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJ CXsKLSsJCW1lbWNweShvbGRfaXYsaXZlYyw4KTsKLSsJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5 c3osYWtleSxpdmVjLGRpcix0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsK LSsJCW1lbWNweShvbGRfaXYsY3R4Lml2LDgpOwotKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4 dCxsZW4pOwotKwkJfQotKwkgICAgaWYoaiA9PSA5OTk5KQotKwkJewotKwkJT3V0cHV0VmFsdWUo dF90YWdbZGlyXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2 ZWMsdGV4dCw4KTsgKi8KLSsJCX0KLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2 LDgpOyAqLwotKwkgICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICov Ci0rCSAgICBzaGlmdGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1 Z1ZhbHVlKCJuayIsbmssMjQpOyovCi0rCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8 IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQKLSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8 fCBpbW9kZSA9PSBPRkIpCi0rCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7Ci0rCi0rCSAgICBpZigh ZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQp KQotKwkJewotKwkJLyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhl IHJhdyBERVMgb3BlcmF0aW9uCi0rCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0 cnVjdCBpdC4uLiAqLwotKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJICAgIHRleHRbbl1e PW9sZF90ZXh0W25dOwotKwkJfQotKwkgICAgfQotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0r CSAgICBha2V5W25dXj1ua1sxNituXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAg YWtleVs4K25dXj1ua1s4K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5 WzE2K25dXj1ua1tuXTsKLSsJaWYobnVta2V5cyA8IDMpCi0rCSAgICBtZW1jcHkoJmFrZXlbMio4 XSxha2V5LDgpOwotKwlpZihudW1rZXlzIDwgMikKLSsJICAgIG1lbWNweSgmYWtleVs4XSxha2V5 LDgpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKLSsJREVTX3Nl dF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOwotKwlERVNfc2V0X29kZF9wYXJp dHkoKERFU19jYmxvY2sgKikoYWtleSsxNikpOwotKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0r Ci0rCS8qIHBvaW50bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5k IG9uIHRoZQotKwkgICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0 IGl0IGlzPyAoV2hvCi0rCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KLSsJaWYoaW1vZGUg PT0gT0ZCKQotKwkgICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJdGV4dFtuXT10ZXh0MFtu XV5vbGRfaXZbbl07Ci0rCX0KLSsgICAgfQotKyAgICAKLStpbnQgcHJvY19maWxlKGNoYXIgKnJx ZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2 XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1Zlsy MDQ4XSwgdGJ1ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hh ciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKLSsgICAgaW50IGFr ZXlzej0wOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50 IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hh ciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgaW50IG51bWtleXM9MTsKLSsg ICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgq cnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwot Kwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4o YWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwot Kwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0 cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkK LSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0r CW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1j cHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAg PSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9w ZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJ ZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGls ZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7 Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyoJ cHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYm ICFzdHJjbXAoYW1vZGUsIkVDQiIpKQotKwkgICAgewotKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNp emVvZihpVmVjKSk7Ci0rCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBF Q0IgKi8KLSsJICAgIH0KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiBy ZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQg b2YgcHJlYW1ibGUgKi8KLSsJCWlmICgqYW1vZGUgPT0gJ1wwJykKLSsJCSAgICB7Ci0rCQkgICAg cHJpbnRmKCJNaXNzaW5nIE1vZGVcbiIpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7 Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0r CQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0g MTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hh ciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYoKmFtb2RlKQotKwkJICAgIHsg LyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRp bWUoMCk7Ci0rCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAg ICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAg aWYoIXN0cm5jbXAocHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKLSsJ CSAgICAgICB8fCAhc3RybmNtcChwcCwiVERFUyAiLDUpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAo cHAsIlBFUk1VVEFUSU9OICIsMTIpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRV VElPTiAiLDEzKQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJ CXsKLSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQp KQotKwkJCSAgICBwcCs9NDsKLSsJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCi0r CQkJICAgIHBwKz01OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsK LSsJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8q IGdldCBtb2RlICovCi0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8K LSsJCQluID0gc3RybGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0r CQkJYW1vZGVbbl0gPSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAo VkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsK LSsJCQl9Ci0rCQkgICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtF TkNSWVBUXSB8IFtERUNSWVBUXSAqLwotKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJl YWs7Ci0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnAp OwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9 PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RF Q1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9 IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEp Ci0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBr ZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwot KwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0r CQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAg ICAgICB9Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJewot KwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAg fQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCi0rCQl7Ci0rCSAgICAg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAg ICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQotKwkJewotKwkJbnVta2V5 cz1hdG9pKGlidWYrMTApOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVm LCByZnApOwotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCi0rCQl7Ci0r CQlha2V5c3o9NjQ7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJ aWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwot KwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktF WSIsIGFLZXksIGxlbik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2Fz ZWNtcChpYnVmLCJLRVlzID0gIiw3KSkKLSsJCXsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhl eDJiaW4oaWJ1Zis3LGFLZXkpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHBy aW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJ ICAgIH0KLSsJCW1lbWNweShhS2V5KzgsYUtleSw4KTsKLSsJCW1lbWNweShhS2V5KzE2LGFLZXks OCk7Ci0rCQlpYnVmWzRdPSdcMCc7Ci0rCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7Ci0r CQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMp KQotKwkJewotKwkJaW50IG49aWJ1ZlszXS0nMSc7Ci0rCi0rCQlha2V5c3o9NjQqMzsKLSsJCWxl bj1oZXgyYmluKGlidWYrNyxhS2V5K24qOCk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0r CQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJl YWs7Ci0rCQkgICAgfQotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXks bGVuKTsKLSsJCWlmKG4gPT0gMikKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0r CQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAg ICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYs IHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJ CXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAg ZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlm IChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJ ICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIs IGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsK LSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0g MCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsK LSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJ CWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixu bi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxh aW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFs aWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVh azsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsK LSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRW YWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlm IChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0r CQkgICAgewotKwkJICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGly LHBsYWludGV4dCxsZW4scmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAg IGFzc2VydChkaXIgPT0gMSk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtl eXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5 cHQgKi8KLSsJCQkJICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0 VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9k ZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwot KwotKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9 IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9 Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAg bGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQll bHNlCi0rCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxl biA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsK LSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJCi0rCQlQcmludFZh bHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3Qs ICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAg IGRvX21jdChhbW9kZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIs IGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJ ICAgIGFzc2VydChkaXIgPT0gMCk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwg YWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0 cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwK LSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJ CX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4n KQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsK LSsJCX0KLSsJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8q IE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnAp OwotKwkJfQotKwkgICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAg ICBpZiAocmZwKQotKwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7 Ci0rICAgIHJldHVybiBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xl IGZpbGUgb3IgCi0rICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEg ZmlsZS4KLSsgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAt ZiB4eHgucmVxCi0rICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190 ZXN0IC1kIHh4eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEu dHh0IiwgKnJzcGZpbGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIg Zm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9 IDE7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkK LSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAg ICBpZiAoYXJnYyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0g MCkKLSsJICAgIHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2Fz ZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkg ICAgZF9vcHQgPSAwOwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIklu dmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAg IH0KLSsJaWYgKGFyZ2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFt ZXRlclxuIik7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAg cnFsaXN0ID0gYXJndlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2 WzJdKTsKLSsJICAgIHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChk X29wdCkKLSsJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0g Zm9wZW4ocnFsaXN0LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4g cmVxIGxpc3QgZmlsZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChm Z2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJc biIpOwotKwkgICAgc3RyY3B5KHJmbiwgZm4pOwotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAl c1xuIiwgcmZuKTsKLSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJ CXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJ RVhJVCgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8q IHNpbmdsZSBmaWxlICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Np bmc6ICVzXG4iLCBmbik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewot KwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsK LSsJICAgIH0KLSsJfQotKyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Ro dnMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMKLS0t LSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMJMjAxMy0x MC0wNCAxMTo0ODowNC4xODA2OTQxMzYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZGh2cy5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTgwNjk0MTM2ICswMjAw Ci1AQCAtMCwwICsxLDI5MiBAQAotKy8qIGZpcHMvZGgvZmlwc19kaHZzLmMgKi8KLSsvKiBXcml0 dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9w ZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoK LSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK LSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqLwotKwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRp by5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50 ZigiTm8gRklQUyBESCBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQot KwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBz X3V0bC5oIgotKwotK3N0YXRpYyBjb25zdCBFVlBfTUQgKnBhcnNlX21kKGNoYXIgKmxpbmUpCi0r CXsKLSsJY2hhciAqcDsKLSsJaWYgKGxpbmVbMF0gIT0gJ1snIHx8IGxpbmVbMV0gIT0gJ0YnKQot KwkJcmV0dXJuIE5VTEw7Ci0rCXAgPSBzdHJjaHIobGluZSwgJy0nKTsKLSsJaWYgKCFwKQotKwkJ cmV0dXJuIE5VTEw7Ci0rCWxpbmUgPSBwICsgMTsKLSsJcCA9IHN0cmNocihsaW5lLCAnXScpOwot KwlpZiAoIXApCi0rCQlyZXR1cm4gTlVMTDsKLSsJKnAgPSAwOwotKwlwID0gbGluZTsKLSsJd2hp bGUoaXNzcGFjZSgqcCkpCi0rCQlwKys7Ci0rCWlmICghc3RyY21wKHAsICJTSEExIikpCi0rCQly ZXR1cm4gRVZQX3NoYTEoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMjI0IikpCi0rCQly ZXR1cm4gRVZQX3NoYTIyNCgpOwotKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyNTYiKSkKLSsJ CXJldHVybiBFVlBfc2hhMjU2KCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTM4NCIpKQot KwkJcmV0dXJuIEVWUF9zaGEzODQoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBNTEyIikp Ci0rCQlyZXR1cm4gRVZQX3NoYTUxMigpOwotKwllbHNlCi0rCQlyZXR1cm4gTlVMTDsKLSsJfQot KwotK3N0YXRpYyB2b2lkIG91dHB1dF9aaGFzaChGSUxFICpvdXQsIGludCBleG91dCwKLSsJCQkJ REggKmRoLCBCSUdOVU0gKnBlZXJrZXksIGNvbnN0IEVWUF9NRCAqbWQsCi0rCQkJCXVuc2lnbmVk IGNoYXIgKnJoYXNoLCBzaXplX3Qgcmhhc2hsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqWjsK LSsJdW5zaWduZWQgY2hhciBjaGFzaFtFVlBfTUFYX01EX1NJWkVdOwotKwlpbnQgWmxlbjsKLSsJ aWYgKHJoYXNoID09IE5VTEwpCi0rCQl7Ci0rCQlyaGFzaGxlbiA9IE1fRVZQX01EX3NpemUobWQp OwotKwkJaWYgKCFESF9nZW5lcmF0ZV9rZXkoZGgpKQotKwkJCWV4aXQgKDEpOwotKwkJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJZZXBoZW1JVVQiLCBkaC0+cHViX2tleSk7Ci0rCQlpZiAoZXhvdXQp Ci0rCQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJYZXBoZW1JVVQiLCBkaC0+cHJpdl9rZXkpOwot KwkJfQotKwlaID0gT1BFTlNTTF9tYWxsb2MoQk5fbnVtX2J5dGVzKGRoLT5wKSk7Ci0rCWlmICgh WikKLSsJCWV4aXQoMSk7Ci0rCVpsZW4gPSBESF9jb21wdXRlX2tleV9wYWRkZWQoWiwgcGVlcmtl eSwgZGgpOwotKwlpZiAoZXhvdXQpCi0rCQlPdXRwdXRWYWx1ZSgiWiIsIFosIFpsZW4sIG91dCwg MCk7Ci0rCUZJUFNfZGlnZXN0KFosIFpsZW4sIGNoYXNoLCBOVUxMLCBtZCk7Ci0rCU91dHB1dFZh bHVlKHJoYXNoID8gIklVVEhhc2haWiIgOiAiSGFzaFpaIiwgY2hhc2gsIHJoYXNobGVuLCBvdXQs IDApOwotKwlpZiAocmhhc2gpCi0rCQl7Ci0rCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9ICVzXG4i LAotKwkJCQltZW1jbXAoY2hhc2gsIHJoYXNoLCByaGFzaGxlbikgPyAiRiIgOiAiUCIpOwotKwkJ fQotKwllbHNlCi0rCQl7Ci0rCQlCTl9jbGVhcl9mcmVlKGRoLT5wcml2X2tleSk7Ci0rCQlCTl9j bGVhcl9mcmVlKGRoLT5wdWJfa2V5KTsKLSsJCWRoLT5wcml2X2tleSA9IE5VTEw7Ci0rCQlkaC0+ cHViX2tleSA9IE5VTEw7Ci0rCQl9Ci0rCU9QRU5TU0xfY2xlYW5zZShaLCBabGVuKTsKLSsJT1BF TlNTTF9mcmVlKFopOwotKwl9Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMKLStpbnQgZmlwc19kaHZz X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbHNlCi0raW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotKyNlbmRpZgotKwl7Ci0rCWNoYXIgKiphcmdzID0gYXJndiArIDE7Ci0r CWludCBhcmduID0gYXJnYyAtIDE7Ci0rCUZJTEUgKmluLCAqb3V0OwotKwljaGFyIGJ1ZlsyMDQ4 XSwgbGJ1ZlsyMDQ4XTsKLSsJdW5zaWduZWQgY2hhciAqcmhhc2g7Ci0rCWxvbmcgcmhhc2hsZW47 Ci0rCURIICpkaCA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwotKwlCSUdOVU0g KnBlZXJrZXkgPSBOVUxMOwotKwljaGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsK LSsJaW50IGRvX3ZlcmlmeSA9IC0xLCBleG91dCA9IDA7Ci0rCi0rCWZpcHNfYWxndGVzdF9pbml0 KCk7Ci0rCi0rCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaHZlciIpKQotKwkJewotKwkJ ZG9fdmVyaWZ5ID0gMTsKLSsJCWFyZ3MrKzsKLSsJCWFyZ24tLTsKLSsJCX0KLSsJZWxzZSBpZiAo YXJnbiAmJiAhc3RyY21wKCphcmdzLCAiZGhnZW4iKSkKLSsJCXsKLSsJCWRvX3ZlcmlmeSA9IDA7 Ci0rCQlhcmdzKys7Ci0rCQlhcmduLS07Ci0rCQl9Ci0rCi0rCWlmIChhcmduICYmICFzdHJjbXAo KmFyZ3MsICItZXhvdXQiKSkKLSsJCXsKLSsJCWV4b3V0ID0gMTsKLSsJCWFyZ3MrKzsKLSsJCWFy Z24tLTsKLSsJCX0KLSsKLSsJaWYgKGRvX3ZlcmlmeSA9PSAtMSkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFy Z3ZbMF0pOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsKLSsJaWYgKGFyZ24gPT0gMikKLSsJCXsKLSsJ CWluID0gZm9wZW4oKmFyZ3MsICJyIik7Ci0rCQlpZiAoIWluKQotKwkJCXsKLSsJCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJ CQl9Ci0rCQlvdXQgPSBmb3BlbihhcmdzWzFdLCAidyIpOwotKwkJaWYgKCFvdXQpCi0rCQkJewot KwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7Ci0rCQkJ ZXhpdCgxKTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UgaWYgKGFyZ24gPT0gMCkKLSsJCXsKLSsJCWlu ID0gc3RkaW47Ci0rCQlvdXQgPSBzdGRvdXQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWZwcmlu dGYoc3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4i LGFyZ3ZbMF0pOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsKLSsJZGggPSBGSVBTX2RoX25ldygpOwot KwotKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCi0rCQl7Ci0r CQlmcHV0cyhidWYsIG91dCk7Ci0rCQlpZiAoc3RybGVuKGJ1ZikgPiA2ICYmICFzdHJuY21wKGJ1 ZiwgIltGIiwgMikpCi0rCQkJewotKwkJCW1kID0gcGFyc2VfbWQoYnVmKTsKLSsJCQlpZiAobWQg PT0gTlVMTCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoZGgpCi0rCQkJCUZJUFNf ZGhfZnJlZShkaCk7Ci0rCQkJZGggPSBGSVBTX2RoX25ldygpOwotKwkJCWNvbnRpbnVlOwotKwkJ CX0KLSsJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJ CWNvbnRpbnVlOwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlAiKSkKLSsJCQl7Ci0rCQkJaWYg KCFkb19oZXgyYm4oJmRoLT5wLCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUSIpKQotKwkJCXsKLSsJCQlpZiAoIWRv X2hleDJibigmZGgtPnEsIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJHIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4 MmJuKCZkaC0+ZywgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhlcGhlbUlVVCIpKQotKwkJCXsKLSsJCQlpZiAoIWRv X2hleDJibigmZGgtPnByaXZfa2V5LCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtSVVUIikpCi0rCQkJewot KwkJCWlmICghZG9faGV4MmJuKCZkaC0+cHViX2tleSwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlllcGhlbUNBVlMi KSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJnBlZXJrZXksIHZhbHVlKSkKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoZG9fdmVyaWZ5ID09IDApCi0rCQkJCW91dHB1dF9aaGFz aChvdXQsIGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCi0rCQkJCQkJCU5VTEwsIDApOwotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNBVlNIYXNoWloiKSkKLSsJCQl7Ci0rCQkJ aWYgKCFtZCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlyaGFzaCA9IGhleDJiaW5fbSh2 YWx1ZSwgJnJoYXNobGVuKTsKLSsJCQlpZiAoIXJoYXNoIHx8IHJoYXNobGVuICE9IE1fRVZQX01E X3NpemUobWQpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCW91dHB1dF9aaGFzaChvdXQs IGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCi0rCQkJCQkJCXJoYXNoLCByaGFzaGxlbik7Ci0rCQkJ fQotKwkJfQotKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAo b3V0ICYmIG91dCAhPSBzdGRvdXQpCi0rCQlmY2xvc2Uob3V0KTsKLSsJcmV0dXJuIDA7Ci0rCXBh cnNlX2Vycm9yOgotKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIFBhcnNpbmcgcmVxdWVzdCBmaWxl XG4iKTsKLSsJZXhpdCgxKTsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODA2OTQxMzYg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMJ MjAxMy0xMC0wNCAxMTo0ODowNC4xODA2OTQxMzYgKzAyMDAKLUBAIC0wLDAgKzEsNDE2IEBACi0r LyogZmlwcy9yYW5kL2ZpcHNfZHJiZ3ZzLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0 LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKwotKyNkZWZp bmUgT1BFTlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsK LSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBEUkJHIHN1 cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot K3N0YXRpYyBpbnQgZHBhcnNlX21kKGNoYXIgKnN0cikKLSsJewotKwlzd2l0Y2goYXRvaShzdHIg KyA1KSkKLSsJCXsKLSsJCWNhc2UgMToKLSsJCXJldHVybiBOSURfc2hhMTsKLSsKLSsJCWNhc2Ug MjI0OgotKwkJcmV0dXJuIE5JRF9zaGEyMjQ7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCXJldHVybiBO SURfc2hhMjU2OwotKwotKwkJY2FzZSAzODQ6Ci0rCQlyZXR1cm4gTklEX3NoYTM4NDsKLSsKLSsJ CWNhc2UgNTEyOgotKwkJcmV0dXJuIE5JRF9zaGE1MTI7Ci0rCi0rCQl9Ci0rCi0rCXJldHVybiBO SURfdW5kZWY7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHBhcnNlX2VjKGNoYXIgKnN0cikKLSsJewot KwlpbnQgY3VydmVfbmlkLCBtZF9uaWQ7Ci0rCWNoYXIgKm1kOwotKwltZCA9IHN0cmNocihzdHIs ICcgJyk7Ci0rCWlmICghbWQpCi0rCQlyZXR1cm4gTklEX3VuZGVmOwotKwlpZiAoIXN0cm5jbXAo c3RyLCAiW1AtMjU2IiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsK LSsJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiW1AtMzg0IiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBO SURfc2VjcDM4NHIxOwotKwllbHNlIGlmICghc3RybmNtcChzdHIsICJbUC01MjEiLCA2KSkKLSsJ CWN1cnZlX25pZCA9IE5JRF9zZWNwNTIxcjE7Ci0rCWVsc2UKLSsJCXJldHVybiBOSURfdW5kZWY7 Ci0rCW1kX25pZCA9IGRwYXJzZV9tZChtZCk7Ci0rCWlmIChtZF9uaWQgPT0gTklEX3VuZGVmKQot KwkJcmV0dXJuIE5JRF91bmRlZjsKLSsJcmV0dXJuIChjdXJ2ZV9uaWQgPDwgMTYpIHwgbWRfbmlk OwotKwl9Ci0rCi0rc3RhdGljIGludCBwYXJzZV9hZXMoY2hhciAqc3RyLCBpbnQgKnBkZikKLSsJ ewotKwotKwlpZiAoIXN0cm5jbXAoc3RyICsgOSwgIm5vIiwgMikpCi0rCQkqcGRmID0gMDsKLSsJ ZWxzZQotKwkJKnBkZiA9IERSQkdfRkxBR19DVFJfVVNFX0RGOwotKwotKwlzd2l0Y2goYXRvaShz dHIgKyA1KSkKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJcmV0dXJuIE5JRF9hZXNfMTI4X2N0cjsK LSsKLSsJCWNhc2UgMTkyOgotKwkJcmV0dXJuIE5JRF9hZXNfMTkyX2N0cjsKLSsKLSsJCWNhc2Ug MjU2OgotKwkJcmV0dXJuIE5JRF9hZXNfMjU2X2N0cjsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1 cm4gTklEX3VuZGVmOwotKwotKwkJfQotKwl9Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJ dW5zaWduZWQgY2hhciAqZW50OwotKwlzaXplX3QgZW50bGVuOwotKwl1bnNpZ25lZCBjaGFyICpu b25jZTsKLSsJc2l6ZV90IG5vbmNlbGVuOwotKwl9IFRFU1RfRU5UOwotKwotK3N0YXRpYyBzaXpl X3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xl biwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2Fw cF9kYXRhKGRjdHgpOwotKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OwotKwlyZXR1 cm4gdC0+ZW50bGVuOwotKwl9Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RY ICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsK LSsJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKwkqcG91dCA9 ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7Ci0rCXJldHVybiB0LT5ub25jZWxlbjsKLSsJfQot KwotKyNpZmRlZiBGSVBTX0FMR1ZTCi0raW50IGZpcHNfZHJiZ3ZzX21haW4oaW50IGFyZ2MsY2hh ciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsjZW5k aWYKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwlEUkJHX0NUWCAqZGN0 eCA9IE5VTEw7Ci0rCVRFU1RfRU5UIHQ7Ci0rCWludCByLCBuaWQgPSAwOwotKwlpbnQgcHIgPSAw OwotKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKLSsJdW5zaWduZWQgY2hhciByYW5kb3V0 WzIwNDhdOwotKwljaGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKLSsKLSsJdW5z aWduZWQgY2hhciAqZW50ID0gTlVMTCwgKm5vbmNlID0gTlVMTCwgKnBlcnMgPSBOVUxMLCAqYWRp biA9IE5VTEw7Ci0rCWxvbmcgZW50bGVuLCBub25jZWxlbiwgcGVyc2xlbiwgYWRpbmxlbjsKLSsJ aW50IGRmID0gMDsKLSsKLSsJZW51bSBkdHlwZSB7IERSQkdfTk9ORSwgRFJCR19DVFIsIERSQkdf SEFTSCwgRFJCR19ITUFDLCBEUkJHX0RVQUxfRUMgfQotKwkJZHJiZ190eXBlID0gRFJCR19OT05F OwotKwotKwlpbnQgcmFuZG91dGxlbiA9IDA7Ci0rCi0rCWludCBnZW4gPSAwOwotKwotKwlmaXBz X2FsZ3Rlc3RfaW5pdCgpOwotKwotKwlpZiAoYXJnYyA9PSAzKQotKwkJewotKwkJaW4gPSBmb3Bl bihhcmd2WzFdLCAiciIpOwotKwkJaWYgKCFpbikKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIs ICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsJCWlmICghb3V0KQotKwkJCXsKLSsJCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7 Ci0rCQkJfQotKwkJfQotKwllbHNlIGlmIChhcmdjID09IDEpCi0rCQl7Ci0rCQlpbiA9IHN0ZGlu OwotKwkJb3V0ID0gc3Rkb3V0OwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwiJXMgKGluZmlsZSBvdXRmaWxlKVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0r Ci0rCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKLSsJCXsKLSsJ CWZwdXRzKGJ1Ziwgb3V0KTsKLSsJCWlmIChkcmJnX3R5cGUgPT0gRFJCR19OT05FKQotKwkJCXsK LSsJCQlpZiAoc3Ryc3RyKGJ1ZiwgIkNUUl9EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdf Q1RSOwotKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJIYXNoX0RSQkciKSkKLSsJCQkJZHJiZ190 eXBlID0gRFJCR19IQVNIOwotKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJITUFDX0RSQkciKSkK LSsJCQkJZHJiZ190eXBlID0gRFJCR19ITUFDOwotKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJE dWFsX0VDX0RSQkciKSkKLSsJCQkJZHJiZ190eXBlID0gRFJCR19EVUFMX0VDOwotKwkJCWVsc2UK LSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gNCAmJiAhc3RybmNt cChidWYsICJbU0hBLSIsIDUpKQotKwkJCXsKLSsJCQluaWQgPSBkcGFyc2VfbWQoYnVmKTsKLSsJ CQlpZiAobmlkID09IE5JRF91bmRlZikKLSsJCQkJZXhpdCgxKTsKLSsJCQlpZiAoZHJiZ190eXBl ID09IERSQkdfSE1BQykKLSsJCQkJewotKwkJCQlzd2l0Y2ggKG5pZCkKLSsJCQkJCXsKLSsJCQkJ CWNhc2UgTklEX3NoYTE6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEExOwotKwkJCQkJYnJl YWs7Ci0rCi0rCQkJCQljYXNlIE5JRF9zaGEyMjQ6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhT SEEyMjQ7Ci0rCQkJCQlicmVhazsKLSsKLSsJCQkJCWNhc2UgTklEX3NoYTI1NjoKLSsJCQkJCW5p ZCA9IE5JRF9obWFjV2l0aFNIQTI1NjsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURf c2hhMzg0OgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMzg0OwotKwkJCQkJYnJlYWs7Ci0r Ci0rCQkJCQljYXNlIE5JRF9zaGE1MTI6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEE1MTI7 Ci0rCQkJCQlicmVhazsKLSsKLSsJCQkJCWRlZmF1bHQ6Ci0rCQkJCQlleGl0KDEpOwotKwkJCQkJ fQotKwkJCQl9Ci0rCQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVm LCAiW0FFUy0iLCA1KSkKLSsJCQl7Ci0rCQkJbmlkID0gcGFyc2VfYWVzKGJ1ZiwgJmRmKTsKLSsJ CQlpZiAobmlkID09IE5JRF91bmRlZikKLSsJCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlpZiAoc3Ry bGVuKGJ1ZikgPiAxMiAmJiAhc3RybmNtcChidWYsICJbUC0iLCAzKSkKLSsJCQl7Ci0rCQkJbmlk ID0gcGFyc2VfZWMoYnVmKTsKLSsJCQlpZiAobmlkID09IE5JRF91bmRlZikKLSsJCQkJZXhpdCgx KTsKLSsJCQl9Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCQljb250aW51ZTsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJbUHJlZGljdGlv blJlc2lzdGFuY2UiKSkKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAodmFsdWUsICJUcnVlXSIpKQot KwkJCQlwciA9IDE7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIkZhbHNlXSIpKQotKwkJ CQlwciA9IDA7Ci0rCQkJZWxzZQotKwkJCQlleGl0KDEpOwotKwkJCX0KLSsKLSsJCWlmICghc3Ry Y21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXQiKSkKLSsJCQl7Ci0rCQkJZW50ID0gaGV4MmJpbl9t KHZhbHVlLCAmZW50bGVuKTsKLSsJCQl0LmVudCA9IGVudDsKLSsJCQl0LmVudGxlbiA9IGVudGxl bjsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiTm9uY2UiKSkKLSsJCQl7Ci0r CQkJbm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZub25jZWxlbik7Ci0rCQkJdC5ub25jZSA9IG5v bmNlOwotKwkJCXQubm9uY2VsZW4gPSBub25jZWxlbjsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNt cChrZXl3b3JkLCAiUGVyc29uYWxpemF0aW9uU3RyaW5nIikpCi0rCQkJewotKwkJCXBlcnMgPSBo ZXgyYmluX20odmFsdWUsICZwZXJzbGVuKTsKLSsJCQlpZiAobmlkID09IDApCi0rCQkJCXsKLSsJ CQkJZnByaW50ZihzdGRlcnIsICJEUkJHIHR5cGUgbm90IHJlY29nbmlzZWQhXG4iKTsKLSsJCQkJ ZXhpdCAoMSk7Ci0rCQkJCX0KLSsJCQlkY3R4ID0gRklQU19kcmJnX25ldyhuaWQsIGRmIHwgRFJC R19GTEFHX1RFU1QpOwotKwkJCWlmICghZGN0eCkKLSsJCQkJZXhpdCAoMSk7Ci0rCQkJRklQU19k cmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLAotKwkJCQkJCQl0ZXN0 X25vbmNlLCAwKTsKLSsJCQlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKLSsJCQly YW5kb3V0bGVuID0gKGludClGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKGRjdHgpOwotKwkJCXIg PSBGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgcGVycywgcGVyc2xlbik7Ci0rCQkJaWYgKCFy KQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgaW5zdGFudGlhdGluZyBEUkJH XG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCU9QRU5TU0xfZnJlZShwZXJzKTsKLSsJ CQlPUEVOU1NMX2ZyZWUoZW50KTsKLSsJCQlPUEVOU1NMX2ZyZWUobm9uY2UpOwotKwkJCWVudCA9 IG5vbmNlID0gcGVycyA9IE5VTEw7Ci0rCQkJZ2VuID0gMDsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0 cmNtcChrZXl3b3JkLCAiQWRkaXRpb25hbElucHV0IikpCi0rCQkJewotKwkJCWFkaW4gPSBoZXgy YmluX20odmFsdWUsICZhZGlubGVuKTsKLSsJCQlpZiAocHIpCi0rCQkJCWNvbnRpbnVlOwotKwkJ CXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgcmFuZG91dGxlbiwgMCwKLSsJ CQkJCQkJCWFkaW4sIGFkaW5sZW4pOwotKwkJCWlmICghcikKLSsJCQkJewotKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKLSsJCQkJZXhpdCgxKTsK LSsJCQkJfQotKwkJCWlmICghcikKLSsJCQkJZXhpdCgxKTsKLSsJCQlPUEVOU1NMX2ZyZWUoYWRp bik7Ci0rCQkJYWRpbiA9IE5VTEw7Ci0rCQkJZ2VuKys7Ci0rCQkJfQotKwotKwkJaWYgKHByKQot KwkJCXsKLSsJCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0UFIiKSkKLSsJCQkJ ewotKwkJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOwotKwkJCQl0LmVudCA9IGVu dDsKLSsJCQkJdC5lbnRsZW4gPSBlbnRsZW47Ci0rCQkJCXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUo ZGN0eCwKLSsJCQkJCQkJcmFuZG91dCwgcmFuZG91dGxlbiwKLSsJCQkJCQkJMSwgYWRpbiwgYWRp bmxlbik7Ci0rCQkJCWlmICghcikKLSsJCQkJCXsKLSsJCQkJCWZwcmludGYoc3RkZXJyLAotKwkJ CQkJCSJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xuIik7Ci0rCQkJCQlleGl0KDEpOwotKwkJ CQkJfQotKwkJCQlPUEVOU1NMX2ZyZWUoYWRpbik7Ci0rCQkJCU9QRU5TU0xfZnJlZShlbnQpOwot KwkJCQlhZGluID0gZW50ID0gTlVMTDsKLSsJCQkJZ2VuKys7Ci0rCQkJCX0KLSsJCQl9Ci0rCQlp ZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0UmVzZWVkIikpCi0rCQkJewotKwkJCWVu dCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7Ci0rCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJdC5l bnRsZW4gPSBlbnRsZW47Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9u YWxJbnB1dFJlc2VlZCIpKQotKwkJCXsKLSsJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRp bmxlbik7Ci0rCQkJRklQU19kcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuKTsKLSsJCQlP UEVOU1NMX2ZyZWUoZW50KTsKLSsJCQlPUEVOU1NMX2ZyZWUoYWRpbik7Ci0rCQkJZW50ID0gYWRp biA9IE5VTEw7Ci0rCQkJfQotKwkJaWYgKGdlbiA9PSAyKQotKwkJCXsKLSsJCQlPdXRwdXRWYWx1 ZSgiUmV0dXJuZWRCaXRzIiwgcmFuZG91dCwgcmFuZG91dGxlbiwKLSsJCQkJCQkJCQlvdXQsIDAp OwotKwkJCUZJUFNfZHJiZ19mcmVlKGRjdHgpOwotKwkJCWRjdHggPSBOVUxMOwotKwkJCWdlbiA9 IDA7Ci0rCQkJfQotKwotKwkJfQotKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCi0rCQlmY2xvc2Uo aW4pOwotKwlpZiAob3V0ICYmIG91dCAhPSBzdGRvdXQpCi0rCQlmY2xvc2Uob3V0KTsKLSsJcmV0 dXJuIDA7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Rzc3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf ZHNzdnMuYy5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTgwNjk0MTM2ICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMy0xMC0wNCAxMTo0 ODowNC4xODA2OTQxMzYgKzAyMDAKLUBAIC0wLDAgKzEsNTM3IEBACi0rI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxz dGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHBy aW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vs c2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZvaWQg cGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJ dW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwl0bXAgPSBP UEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwlCTl9i bjJiaW4oYm4sIHRtcCk7Ci0rCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKLSsJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQotKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKLSsJZnB1dHMoIlxuIiwg c3Rkb3V0KTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0rCXJldHVybjsKLSsJfQotKwotK3ZvaWQg cHJpbWVzKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgbGJ1Zlsx MDI0MF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsKLSsgICAgd2hpbGUoZmdldHMo YnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7 Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29u dGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKLSsJICAgIHsKLSsJICAgIEJJ R05VTSAqcHA7Ci0rCi0rCSAgICBwcD1CTl9uZXcoKTsKLSsJICAgIGRvX2hleDJibigmcHAsdmFs dWUpOwotKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAotKwkJICAgQk5faXNfcHJpbWVfZXgo cHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7Ci0rCSAgICB9CSAgICAKLSsJfQotKyAgICB9 Ci0rCi0rdm9pZCBwcWcoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFy IGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9 MDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0r CXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7 Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21w KGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJOIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsK LSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwotKwkgICAgd2hpbGUobi0t KQotKwkJewotKwkJdW5zaWduZWQgY2hhciBzZWVkWzIwXTsKLSsJCURTQSAqZHNhOwotKwkJaW50 IGNvdW50ZXI7Ci0rCQl1bnNpZ25lZCBsb25nIGg7Ci0rCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsK LSsKLSsJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwm Y291bnRlciwmaCxOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhp dCgxKTsKLSsJCQl9Ci0rCQlwYm4oIlAiLGRzYS0+cCk7Ci0rCQlwYm4oIlEiLGRzYS0+cSk7Ci0r CQlwYm4oIkciLGRzYS0+Zyk7Ci0rCQlwdigiU2VlZCIsc2VlZCwyMCk7Ci0rCQlwcmludGYoImMg PSAlZFxuIixjb3VudGVyKTsKLSsJCXByaW50ZigiSCA9ICVseFxuIixoKTsKLSsJCXB1dGMoJ1xu JyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwllbHNlCi0rCSAgICBmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBwcWd2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVm WzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7Ci0rICAgIGlu dCBjb3VudGVyLCBjb3VudGVyMjsKLSsgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKLSsgICAgRFNB ICpkc2E9TlVMTDsKLSsgICAgaW50IG5tb2Q9MDsKLSsgICAgdW5zaWduZWQgY2hhciBzZWVkWzEw MjRdOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkK LSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJ CXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWZwdXRzKGJ1 Ziwgc3Rkb3V0KTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0 b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgcD1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgcT1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgZz1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQotKwkgICAgewot KwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKLSsJICAgIGlmIChzbGVuICE9 IDIwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxu Iik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsImMiKSkKLSsJICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOwotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiSCIpKQotKwkgICAgewotKwkgICAgaCA9IGF0b2kodmFsdWUpOwotKwkgICAgaWYg KCFwIHx8ICFxIHx8ICFnKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxu Iik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNv dW50ZXIyLCZoMixOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhp dCgxKTsKLSsJCQl9Ci0rICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2Nt cChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcpCi0rCQl8fCAoY291bnRlciAhPSBjb3Vu dGVyMikgfHwgKGggIT0gaDIpKQotKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAg ICBlbHNlCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJICAgIEJOX2ZyZWUocCk7 Ci0rCSAgICBCTl9mcmVlKHEpOwotKwkgICAgQk5fZnJlZShnKTsKLSsJICAgIHAgPSBOVUxMOwot KwkgICAgcSA9IE5VTEw7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIEZJUFNfZHNhX2ZyZWUoZHNh KTsKLSsJICAgIGRzYSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKy8qIEtleXBh aXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5k YXJkIEZJUFMxNDAtMgotKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0 ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKLSsgKiBvdXRwdXQgb2YgdGhlIEtl eVBhaXIgdGVzdC4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9k LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpnLAotKwkJCQkJCQlCTl9DVFggKmN0eCkK LSsgICAgewotKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7Ci0rICAgIGlmIChCTl9udW1fYml0cyhw KSAhPSBubW9kKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkK LSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3Ms IGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChx LCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJl bSA9IEJOX25ldygpOwotKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lz X29uZShyZW0pCi0rICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQotKwl8 fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQotKwl7 Ci0rCUJOX2ZyZWUocmVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsgICAgLyogVG9kbzogY2hlY2sg ZyAqLwotKyAgICBCTl9mcmVlKHJlbSk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9p ZCBrZXl2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZb MTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0gTlVM TCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOwotKyAgICBCSUdO VU0gKlkyOwotKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0rICAgIGludCBubW9kPTAsIHBhcmFt Y2hlY2sgPSAwOwotKwotKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7Ci0rICAgIFkyID0gQk5fbmV3 KCk7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQot Kwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJ ewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNt cChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBpZiAocCkKLSsJCUJOX2ZyZWUocCk7 Ci0rCSAgICBwID0gTlVMTDsKLSsJICAgIGlmIChxKQotKwkJQk5fZnJlZShxKTsKLSsJICAgIHEg PSBOVUxMOwotKwkgICAgaWYgKGcpCi0rCQlCTl9mcmVlKGcpOwotKwkgICAgZyA9IE5VTEw7Ci0r CSAgICBwYXJhbWNoZWNrID0gMDsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICB9Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCi0rCSAgICBYPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICB7Ci0rCSAgICBZPWhleDJibih2 YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkg ICAgcGJuKCJQIixwKTsKLSsJICAgIHBibigiUSIscSk7Ci0rCSAgICBwYm4oIkciLGcpOwotKwkg ICAgcGJuKCJYIixYKTsKLSsJICAgIHBibigiWSIsWSk7Ci0rCSAgICBpZiAoIXBhcmFtY2hlY2sp Ci0rCQl7Ci0rCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKLSsJCQlw YXJhbWNoZWNrID0gMTsKLSsJCWVsc2UKLSsJCQlwYXJhbWNoZWNrID0gLTE7Ci0rCQl9Ci0rCSAg ICBpZiAocGFyYW1jaGVjayAhPSAxKQotKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJ ICAgIGVsc2UKLSsJCXsKLSsJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBC Tl9jbXAoWTIsIFkpKQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgICAg IGVsc2UKLSsJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJCX0KLSsJICAgIEJOX2Zy ZWUoWCk7Ci0rCSAgICBCTl9mcmVlKFkpOwotKwkgICAgWCA9IE5VTEw7Ci0rCSAgICBZID0gTlVM TDsKLSsJICAgIH0KLSsJfQotKwlpZiAocCkKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCWlmIChxKQot KwkgICAgQk5fZnJlZShxKTsKLSsJaWYgKGcpCi0rCSAgICBCTl9mcmVlKGcpOwotKwlpZiAoWTIp Ci0rCSAgICBCTl9mcmVlKFkyKTsKLSsgICAgfQotKwotK3ZvaWQga2V5cGFpcigpCi0rICAgIHsK LSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhi dWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtl eXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwot KwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAg bm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAg IHsKLSsJICAgIERTQSAqZHNhOwotKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBw cmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygp OwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCww LE5VTEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgx KTsKLSsJCX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsK LSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwotKwkg ICAgd2hpbGUobi0tKQotKwkJewotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCQkJ ewotKwkJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwotKwkJcGJu KCJYIixkc2EtPnByaXZfa2V5KTsKLSsJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJCXB1dGMo J1xuJyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ2dl bigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsK LSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICBEU0Eg KmRzYT1OVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVl KTsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgaWYgKGRzYSkK LSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEws TlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJ CX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAg IHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQotKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBj aGFyIG1zZ1sxMDI0XTsKLSsJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07Ci0rCSAgICB1bnNp Z25lZCBpbnQgc2xlbjsKLSsJICAgIGludCBuOwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICBF VlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBEU0FfU0lHICpzaWc7Ci0rCSAgICBFVlBfTURfQ1RYX2lu aXQoJm1jdHgpOwotKwotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNn Iixtc2csbik7Ci0rCi0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCXsKLSsJ CWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBrLnR5cGUgPSBF VlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHBibigiWSIsZHNh LT5wdWJfa2V5KTsKLSsKLSsJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwg TlVMTCk7Ci0rCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKLSsJICAgIEVWUF9T aWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGspOwotKwotKwkgICAgc2lnID0gRFNBX1NJ R19uZXcoKTsKLSsJICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKLSsK LSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsJICAgIHB1 dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7Ci0rCSAgICBFVlBfTURf Q1RYX2NsZWFudXAoJm1jdHgpOwotKwkgICAgfQotKwl9Ci0rCWlmIChkc2EpCi0rCQlGSVBTX2Rz YV9mcmVlKGRzYSk7Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ3ZlcigpCi0rICAgIHsKLSsgICAgRFNB ICpkc2E9TlVMTDsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsK LSsgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgaW50IG5tb2Q9MCwgbj0wOwotKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOwot KwotKyAgICBzaWctPnIgPSBOVUxMOwotKyAgICBzaWctPnMgPSBOVUxMOwotKwotKyAgICB3aGls ZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNl X2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1Zixz dGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIp KQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIGlmKGRzYSkKLSsJCUZJ UFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKLSsJICAgIH0KLSsJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUp OwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgZHNhLT5xPWhleDJibih2 YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICB7Ci0rCSAgICBk c2EtPmc9aGV4MmJuKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5t b2QpOwotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkg ICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIG49aGV4MmJp bih2YWx1ZSxtc2cpOwotKwkgICAgcHYoIk1zZyIsbXNnLG4pOwotKwkgICAgfQotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiWSIpKQotKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikpCi0rCSAgICBzaWctPnI9aGV4MmJuKHZh bHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKLSsJICAgIHsKLSsJICAgIEVW UF9NRF9DVFggbWN0eDsKLSsJICAgIEVWUF9QS0VZIHBrOwotKwkgICAgdW5zaWduZWQgY2hhciBz aWdidWZbNjBdOwotKwkgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgcjsKLSsJICAg IEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOwot KwkgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKLSsJ Ci0rCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0r CSAgICBwYm4oIlMiLHNpZy0+cyk7Ci0rCi0rCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29k ZShzaWdidWYsIHNpZyk7Ci0rCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCk7Ci0rCSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAg ciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOwotKwkgICAgRVZQ X01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJCi0rCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4i LCByID09IDEgPyAnUCcgOiAnRicpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9 Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7 Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBx Z3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsK LSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMo KTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCi0r CXByaW1lcygpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCi0rCXBxZygp OwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCi0rCXBxZ3ZlcigpOwot KyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQotKwlrZXlwYWlyKCk7Ci0r ICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKLSsJa2V5dmVyKCk7Ci0rICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKLSsJc2lnZ2VuKCk7Ci0rICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkKLSsJc2lndmVyKCk7Ci0rICAgIGVsc2UK LSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0p OwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYwotLS0t IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcwkyMDEz LTEwLTA0IDExOjQ4OjA0LjE4MTY5NDE1OCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODE2OTQxNTgg KzAyMDAKLUBAIC0wLDAgKzEsNTcxIEBACi0rLyogZmlwcy9hZXMvZmlwc19nY210ZXN0LmMgKi8K LSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBm b3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqLwotKwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0r ICAgIHByaW50ZigiTm8gRklQUyBHQ00gc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9 Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0r I2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGlj IHZvaWQgZ2NtdGVzdChGSUxFICppbiwgRklMRSAqb3V0LCBpbnQgZW5jcnlwdCkKLSsJewotKwlj aGFyIGJ1ZlsyMDQ4XTsKLSsJY2hhciBsYnVmWzIwNDhdOwotKwljaGFyICprZXl3b3JkLCAqdmFs dWU7Ci0rCWludCBrZXlsZW4gPSAtMSwgaXZsZW4gPSAtMSwgYWFkbGVuID0gLTEsIHRhZ2xlbiA9 IC0xLCBwdGxlbiA9IC0xOwotKwlpbnQgcnY7Ci0rCWxvbmcgbDsKLSsJdW5zaWduZWQgY2hhciAq a2V5ID0gTlVMTCwgKml2ID0gTlVMTCwgKmFhZCA9IE5VTEwsICp0YWcgPSBOVUxMOwotKwl1bnNp Z25lZCBjaGFyICpjdCA9IE5VTEwsICpwdCA9IE5VTEw7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsK LSsJY29uc3QgRVZQX0NJUEhFUiAqZ2NtID0gTlVMTDsKLSsJRklQU19jaXBoZXJfY3R4X2luaXQo JmN0eCk7Ci0rCi0rCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQotKwkJ ewotKwkJZnB1dHMoYnVmLG91dCk7Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsKLSsJCWlmKCFzdHJjbXAoa2V5d29yZCwiW0tl eWxlbiIpKQotKwkJCXsKLSsJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoa2V5bGVu ID09IDEyOCkKLSsJCQkJZ2NtID0gRVZQX2Flc18xMjhfZ2NtKCk7Ci0rCQkJZWxzZSBpZiAoa2V5 bGVuID09IDE5MikKLSsJCQkJZ2NtID0gRVZQX2Flc18xOTJfZ2NtKCk7Ci0rCQkJZWxzZSBpZiAo a2V5bGVuID09IDI1NikKLSsJCQkJZ2NtID0gRVZQX2Flc18yNTZfZ2NtKCk7Ci0rCQkJZWxzZSAK LSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVkIGtleWxlbiAlZFxuIiwK LSsJCQkJCQkJa2V5bGVuKTsKLSsJCQkJfQotKwkJCWtleWxlbiA+Pj0gMzsKLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbSVZsZW4iKSkKLSsJCQlpdmxlbiA9IGF0b2kodmFs dWUpID4+IDM7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbQUFEbGVuIikpCi0rCQkJ YWFkbGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IltUYWdsZW4iKSkKLSsJCQl0YWdsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiW1BUbGVuIikpCi0rCQkJcHRsZW4gPSBhdG9pKHZhbHVlKSA+PiAz OwotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkJCXsKLSsJCQlrZXkgPSBo ZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBrZXlsZW4pCi0rCQkJCXsKLSsJCQkJ ZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQo MSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSVYiKSkKLSsJ CQl7Ci0rCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBpdmxlbikK LSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBJViBsZW5ndGhcbiIp OwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlBUIikpCi0rCQkJewotKwkJCXB0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYg KGwgIT0gcHRsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQg UFQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJDVCIpKQotKwkJCXsKLSsJCQljdCA9IGhleDJiaW5fbSh2YWx1ZSwg JmwpOwotKwkJCWlmIChsICE9IHB0bGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAi SW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9 Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiQUFEIikpCi0rCQkJewotKwkJCWFhZCA9IGhl eDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IGFhZGxlbikKLSsJCQkJewotKwkJCQlm cHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBBQUQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgx KTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJUYWciKSkKLSsJ CQl7Ci0rCQkJdGFnID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gdGFnbGVu KQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFRhZyBsZW5ndGhc biIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJaWYgKGVuY3J5cHQgJiYgcHQg JiYgYWFkICYmIChpdiB8fCBlbmNyeXB0PT0xKSkKLSsJCQl7Ci0rCQkJdGFnID0gT1BFTlNTTF9t YWxsb2ModGFnbGVuKTsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxM LCAxKTsKLSsJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCi0rCQkJ TV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19B TExPVyk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9J VkxFTiwgaXZsZW4sIDApOwotKwkJCWlmIChlbmNyeXB0ID09IDEpCi0rCQkJCXsKLSsJCQkJc3Rh dGljIHVuc2lnbmVkIGNoYXIgaXZfZml4ZWRbNF0gPSB7MSwyLDMsNH07Ci0rCQkJCWlmICghaXYp Ci0rCQkJCQlpdiA9IE9QRU5TU0xfbWFsbG9jKGl2bGVuKTsKLSsJCQkJRklQU19jaXBoZXJpbml0 KCZjdHgsIE5VTEwsIGtleSwgTlVMTCwgMSk7Ci0rCQkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZj dHgsCi0rCQkJCQkJRVZQX0NUUkxfR0NNX1NFVF9JVl9GSVhFRCwKLSsJCQkJCQk0LCBpdl9maXhl ZCk7Ci0rCQkJCWlmICghRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKLSsJCQkJCUVWUF9DVFJM X0dDTV9JVl9HRU4sIDAsIGl2KSkKLSsJCQkJCXsKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiSVYg Z2VuIGVycm9yXG4iKTsKLSsJCQkJCWV4aXQoMSk7Ci0rCQkJCQl9Ci0rCQkJCU91dHB1dFZhbHVl KCJJViIsIGl2LCBpdmxlbiwgb3V0LCAwKTsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJRklQU19j aXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDEpOwotKwotKwotKwkJCWlmIChhYWRsZW4p Ci0rCQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKLSsJCQlpZiAocHRs ZW4pCi0rCQkJCXsKLSsJCQkJY3QgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7Ci0rCQkJCXJ2ID0g RklQU19jaXBoZXIoJmN0eCwgY3QsIHB0LCBwdGxlbik7Ci0rCQkJCX0KLSsJCQlGSVBTX2NpcGhl cigmY3R4LCBOVUxMLCBOVUxMLCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBF VlBfQ1RSTF9HQ01fR0VUX1RBRywKLSsJCQkJCQkJCXRhZ2xlbiwgdGFnKTsJCi0rCQkJT3V0cHV0 VmFsdWUoIkNUIiwgY3QsIHB0bGVuLCBvdXQsIDApOwotKwkJCU91dHB1dFZhbHVlKCJUYWciLCB0 YWcsIHRhZ2xlbiwgb3V0LCAwKTsKLSsJCQlpZiAoaXYpCi0rCQkJCU9QRU5TU0xfZnJlZShpdik7 Ci0rCQkJaWYgKGFhZCkKLSsJCQkJT1BFTlNTTF9mcmVlKGFhZCk7Ci0rCQkJaWYgKGN0KQotKwkJ CQlPUEVOU1NMX2ZyZWUoY3QpOwotKwkJCWlmIChwdCkKLSsJCQkJT1BFTlNTTF9mcmVlKHB0KTsK LSsJCQlpZiAoa2V5KQotKwkJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJCQlpZiAodGFnKQotKwkJ CQlPUEVOU1NMX2ZyZWUodGFnKTsKLSsJCQlpdiA9IGFhZCA9IGN0ID0gcHQgPSBrZXkgPSB0YWcg PSBOVUxMOwotKwkJCX0JCi0rCQlpZiAoIWVuY3J5cHQgJiYgdGFnKQotKwkJCXsKLSsJCQlGSVBT X2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAwKTsKLSsJCQkvKiBSZWxheCBGSVBT IGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCi0rCQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxh Z3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7Ci0rCQkJRklQU19jaXBoZXJf Y3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOwotKwkJCUZJ UFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIGl2LCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9j dHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywgdGFnbGVuLCB0YWcpOwotKwkJCWlm IChhYWRsZW4pCi0rCQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKLSsJ CQlpZiAocHRsZW4pCi0rCQkJCXsKLSsJCQkJcHQgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7Ci0r CQkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgcHQsIGN0LCBwdGxlbik7Ci0rCQkJCX0KLSsJCQly diA9IEZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOwotKwkJCWlmIChydiA8IDApCi0r CQkJCWZwcmludGYob3V0LCAiRkFJTCIgUkVTUF9FT0wpOwotKwkJCWVsc2UKLSsJCQkJT3V0cHV0 VmFsdWUoIlBUIiwgcHQsIHB0bGVuLCBvdXQsIDApOwotKwkJCWlmIChpdikKLSsJCQkJT1BFTlNT TF9mcmVlKGl2KTsKLSsJCQlpZiAoYWFkKQotKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKLSsJCQlp ZiAoY3QpCi0rCQkJCU9QRU5TU0xfZnJlZShjdCk7Ci0rCQkJaWYgKHB0KQotKwkJCQlPUEVOU1NM X2ZyZWUocHQpOwotKwkJCWlmIChrZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShrZXkpOwotKwkJCWlm ICh0YWcpCi0rCQkJCU9QRU5TU0xfZnJlZSh0YWcpOwotKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9 IGtleSA9IHRhZyA9IE5VTEw7Ci0rCQkJfQotKwkJfQotKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51 cCgmY3R4KTsJCi0rCX0KLSsKLStzdGF0aWMgdm9pZCB4dHN0ZXN0KEZJTEUgKmluLCBGSUxFICpv dXQpCi0rCXsKLSsJY2hhciBidWZbMjA0ODAwXTsKLSsJY2hhciBsYnVmWzIwNDgwMF07Ci0rCWNo YXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJaW50IGlubGVuID0gMDsKLSsJaW50IGVuY3J5cHQgPSAw OwotKwlsb25nIGw7Ci0rCXVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEwsICppdiA9IE5VTEw7Ci0r CXVuc2lnbmVkIGNoYXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7Ci0rCUVWUF9DSVBI RVJfQ1RYIGN0eDsKLSsJY29uc3QgRVZQX0NJUEhFUiAqeHRzID0gTlVMTDsKLSsJRklQU19jaXBo ZXJfY3R4X2luaXQoJmN0eCk7Ci0rCi0rCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAh PSBOVUxMKQotKwkJewotKwkJZnB1dHMoYnVmLG91dCk7Ci0rCQlpZiAoYnVmWzBdID09ICdbJyAm JiBzdHJsZW4oYnVmKSA+PSA5KQotKwkJCXsKLSsJCQlpZighc3RybmNtcChidWYsIltFTkNSWVBU XSIsIDkpKQotKwkJCQllbmNyeXB0ID0gMTsKLSsJCQllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0RF Q1JZUFRdIiwgOSkpCi0rCQkJCWVuY3J5cHQgPSAwOwotKwkJCX0KLSsJCWlmICAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJCQl7Ci0rCQkJa2V5ID0gaGV4MmJpbl9tKHZh bHVlLCAmbCk7Ci0rCQkJaWYgKGwgPT0gMzIpCi0rCQkJCXh0cyA9IEVWUF9hZXNfMTI4X3h0cygp OwotKwkJCWVsc2UgaWYgKGwgPT0gNjQpCi0rCQkJCXh0cyA9IEVWUF9hZXNfMjU2X3h0cygpOwot KwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkg bGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJpIikpCi0rCQkJewotKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7 Ci0rCQkJaWYgKGwgIT0gMTYpCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNp c3RlbnQgaSBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxz ZSBpZihlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwiUFQiKSkKLSsJCQl7Ci0rCQkJaW5idWYg PSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpbmxlbiA9IGw7Ci0rCQkJfQotKwkJZWxzZSBp ZighZW5jcnlwdCAmJiAhc3RyY21wKGtleXdvcmQsIkNUIikpCi0rCQkJewotKwkJCWluYnVmID0g aGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaW5sZW4gPSBsOwotKwkJCX0KLSsJCWlmIChpbmJ1 ZikKLSsJCQl7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIHh0cywga2V5LCBpdiwgZW5jcnlw dCk7Ci0rCQkJb3V0YnVmID0gT1BFTlNTTF9tYWxsb2MoaW5sZW4pOwotKwkJCUZJUFNfY2lwaGVy KCZjdHgsIG91dGJ1ZiwgaW5idWYsIGlubGVuKTsKLSsJCQlPdXRwdXRWYWx1ZShlbmNyeXB0ID8g IkNUIjoiUFQiLCBvdXRidWYsIGlubGVuLCBvdXQsIDApOwotKwkJCU9QRU5TU0xfZnJlZShpbmJ1 Zik7Ci0rCQkJT1BFTlNTTF9mcmVlKG91dGJ1Zik7Ci0rCQkJT1BFTlNTTF9mcmVlKGtleSk7Ci0r CQkJT1BFTlNTTF9mcmVlKGl2KTsKLSsJCQlpdiA9IGtleSA9IGluYnVmID0gb3V0YnVmID0gTlVM TDsKLSsJCQl9CQotKwkJfQotKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCi0rCX0K LSsKLStzdGF0aWMgdm9pZCBjY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCi0rCXsKLSsJY2hh ciBidWZbMjAwMDQ4XTsKLSsJY2hhciBsYnVmWzIwMDA0OF07Ci0rCWNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKLSsJbG9uZyBsOwotKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMLCAqTm9uY2UgPSBO VUxMOwotKwl1bnNpZ25lZCBjaGFyICpBZGF0YSA9IE5VTEwsICpQYXlsb2FkID0gTlVMTDsKLSsJ dW5zaWduZWQgY2hhciAqQ1QgPSBOVUxMOwotKwlpbnQgUGxlbiA9IC0xLCBObGVuID0gLTEsIFRs ZW4gPSAtMSwgQWxlbiA9IC0xOwotKwlpbnQgZGVjciA9IDA7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKLSsJY29uc3QgRVZQX0NJUEhFUiAqY2NtID0gTlVMTDsKLSsJRklQU19jaXBoZXJfY3R4X2lu aXQoJmN0eCk7Ci0rCi0rCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQot KwkJewotKwkJY2hhciAqcDsKLSsJCWZwdXRzKGJ1ZixvdXQpOwotKwkJcmVkbzoKLSsJCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwot KwotKwkJLyogSWYgc3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgemFwIHRoZW0gKi8KLSsJ CWlmIChrZXl3b3JkWzBdID09ICdbJykKLSsJCQl7Ci0rCQkJa2V5d29yZCsrOwotKwkJCXAgPSBz dHJjaHIodmFsdWUsICddJyk7Ci0rCQkJaWYgKHApCi0rCQkJCSpwID0gMDsKLSsJCQl9Ci0rCQkv KiBTZWUgaWYgd2UgaGF2ZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMKLSsJ CSAqIGlmIHNvIGNvcHkgcmVzdCBvZiBsaW5lIGJhY2sgdG8gYnVmZmVyIGFuZCByZWRvIGxhdGVy LgotKwkJICovCi0rCQlwID0gc3RyY2hyKHZhbHVlLCAnLCcpOwotKwkJaWYgKHApCi0rCQkJewot KwkJCSpwID0gMDsKLSsJCQlzdHJjcHkoYnVmLCBwICsgMSk7Ci0rCQkJc3RyY2F0KGJ1ZiwgIlxu Iik7Ci0rCQkJZGVjciA9IDE7Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiUGxlbiIp KQotKwkJCVBsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwi TmxlbiIpKQotKwkJCU5sZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwiVGxlbiIpKQotKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwiQWxlbiIpKQotKwkJCUFsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCWlmIChwKQot KwkJCWdvdG8gcmVkbzsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkJCXsKLSsJ CQlpZiAoS2V5KQotKwkJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKLSsJCQlLZXkgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKLSsJCQlpZiAobCA9PSAxNikKLSsJCQkJY2NtID0gRVZQX2Flc18xMjhfY2Nt KCk7Ci0rCQkJZWxzZSBpZiAobCA9PSAyNCkKLSsJCQkJY2NtID0gRVZQX2Flc18xOTJfY2NtKCk7 Ci0rCQkJZWxzZSBpZiAobCA9PSAzMikKLSsJCQkJY2NtID0gRVZQX2Flc18yNTZfY2NtKCk7Ci0r CQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBs ZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCJOb25jZSIpKQotKwkJCXsKLSsJCQlpZiAoTm9uY2UpCi0rCQkJCU9QRU5T U0xfZnJlZShOb25jZSk7Ci0rCQkJTm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlp ZiAobCAhPSBObGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50 IG5vbmNlIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsIlBheWxvYWQiKSAmJiAhZGVjcikKLSsJCQl7Ci0rCQkJUGF5 bG9hZCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChQbGVuICYmIGwgIT0gUGxlbikK LSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxlbmd0 aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsIkFkYXRhIikpCi0rCQkJewotKwkJCWlmIChBZGF0YSkKLSsJCQkJT1BFTlNTTF9m cmVlKEFkYXRhKTsKLSsJCQlBZGF0YSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChB bGVuICYmIGwgIT0gQWxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lz dGVudCBQYXlsb2FkIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkNUIikgJiYgZGVjcikKLSsJCQl7Ci0rCQkJQ1Qg PSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSAoUGxlbiArIFRsZW4pKQotKwkJ CQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7Ci0r CQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQlpZiAoUGF5bG9hZCkKLSsJCQl7Ci0rCQkJ RklQU19jaXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwgMSk7Ci0rCQkJRklQU19jaXBo ZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7Ci0rCQkJ RklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIFRsZW4sIDAp OwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAxKTsKLSsKLSsJ CQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKLSsJCQlGSVBTX2NpcGhlcigm Y3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7Ci0rCQkJQ1QgPSBPUEVOU1NMX21hbGxvYyhQbGVuICsg VGxlbik7Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgQ1QsIFBheWxvYWQsIFBsZW4pOwotKwkJCUZJ UFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCBUbGVuLAotKwkJ CQkJCUNUICsgUGxlbik7Ci0rCQkJT3V0cHV0VmFsdWUoIkNUIiwgQ1QsIFBsZW4gKyBUbGVuLCBv dXQsIDApOwotKwkJCU9QRU5TU0xfZnJlZShDVCk7Ci0rCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQp OwotKwkJCUNUID0gUGF5bG9hZCA9IE5VTEw7Ci0rCQkJfQotKwkJaWYgKENUKQotKwkJCXsKLSsJ CQlpbnQgcnY7Ci0rCQkJaW50IGxlbiA9IFBsZW4gPT0gMCA/IDE6IFBsZW47Ci0rCQkJRklQU19j aXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwgMCk7Ci0rCQkJRklQU19jaXBoZXJfY3R4 X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7Ci0rCQkJRklQU19j aXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsCi0rCQkJCQkJVGxlbiwg Q1QgKyBQbGVuKTsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5LCBOb25jZSwg MCk7Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7Ci0rCQkJRklQU19j aXBoZXIoJmN0eCwgTlVMTCwgQWRhdGEsIEFsZW4pOwotKwkJCVBheWxvYWQgPSBPUEVOU1NMX21h bGxvYyhsZW4pOwotKwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgUGF5bG9hZCwgQ1QsIFBsZW4p OwotKwkJCWlmIChydiA+PSAwKQotKwkJCQl7Ci0rCQkJCWlmIChydiA9PSAwKQotKwkJCQkJUGF5 bG9hZFswXSA9IDA7Ci0rCQkJCWZwdXRzKCJSZXN1bHQgPSBQYXNzIiBSRVNQX0VPTCwgb3V0KTsK LSsJCQkJT3V0cHV0VmFsdWUoIlBheWxvYWQiLCBQYXlsb2FkLCBsZW4sIG91dCwgMCk7Ci0rCQkJ CX0KLSsJCQllbHNlCi0rCQkJCWZwdXRzKCJSZXN1bHQgPSBGYWlsIiBSRVNQX0VPTCwgb3V0KTsK LSsJCQlPUEVOU1NMX2ZyZWUoQ1QpOwotKwkJCU9QRU5TU0xfZnJlZShQYXlsb2FkKTsKLSsJCQlD VCA9IFBheWxvYWQgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsJaWYgKEtleSkKLSsJCU9QRU5TU0xf ZnJlZShLZXkpOwotKwlpZiAoTm9uY2UpCi0rCQlPUEVOU1NMX2ZyZWUoTm9uY2UpOwotKwlpZiAo QWRhdGEpCi0rCQlPUEVOU1NMX2ZyZWUoQWRhdGEpOwotKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51 cCgmY3R4KTsKLSsJfQotKwotKyNpZmRlZiBGSVBTX0FMR1ZTCi0raW50IGZpcHNfZ2NtdGVzdF9t YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZWxzZQotK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwlpbnQgZW5jcnlwdDsKLSsJaW50IHh0cyA9IDAs IGNjbSA9IDA7Ci0rCUZJTEUgKmluLCAqb3V0OwotKwlpZiAoYXJnYyA9PSA0KQotKwkJewotKwkJ aW4gPSBmb3Blbihhcmd2WzJdLCAiciIpOwotKwkJaWYgKCFpbikKLSsJCQl7Ci0rCQkJZnByaW50 ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0r CQkJfQotKwkJb3V0ID0gZm9wZW4oYXJndlszXSwgInciKTsKLSsJCWlmICghb3V0KQotKwkJCXsK LSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOwotKwkJ CWV4aXQoMSk7Ci0rCQkJfQotKwkJfQotKwllbHNlIGlmIChhcmdjID09IDIpCi0rCQl7Ci0rCQlp biA9IHN0ZGluOwotKwkJb3V0ID0gc3Rkb3V0OwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlmcHJp bnRmKHN0ZGVyciwiJXMgWy1lbmNyeXB0fC1kZWNyeXB0XVxuIixhcmd2WzBdKTsKLSsJCWV4aXQo MSk7Ci0rCQl9Ci0rCWZpcHNfYWxndGVzdF9pbml0KCk7Ci0rCWlmKCFzdHJjbXAoYXJndlsxXSwi LWVuY3J5cHQiKSkKLSsJCWVuY3J5cHQgPSAxOwotKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwi LWVuY3J5cHRJVmV4dCIpKQotKwkJZW5jcnlwdCA9IDI7Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCItZGVjcnlwdCIpKQotKwkJZW5jcnlwdCA9IDA7Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCItY2NtIikpCi0rCQljY20gPSAxOwotKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLXh0 cyIpKQotKwkJeHRzID0gMTsKLSsJZWxzZQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsIkRvbid0 IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCWlm IChjY20pCi0rCQljY210ZXN0KGluLCBvdXQpOwotKwllbHNlIGlmICh4dHMpCi0rCQl4dHN0ZXN0 KGluLCBvdXQpOwotKwllbHNlCi0rCQlnY210ZXN0KGluLCBvdXQsIGVuY3J5cHQpOwotKwotKwlp ZiAoYXJnYyA9PSA0KQotKwkJewotKwkJZmNsb3NlKGluKTsKLSsJCWZjbG9zZShvdXQpOwotKwkJ fQotKwotKwlyZXR1cm4gMDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JuZ3ZzLmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4MTY5NDE1OCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCTIwMTMt MTAtMDQgMTE6NDg6MDQuMTgxNjk0MTU4ICswMjAwCi1AQCAtMCwwICsxLDIzMCBAQAotKy8qCi0r ICogQ3J1ZGUgdGVzdCBkcml2ZXIgZm9yIHByb2Nlc3NpbmcgdGhlIFZTVCBhbmQgTUNUIHRlc3R2 ZWN0b3IgZmlsZXMKLSsgKiBnZW5lcmF0ZWQgYnkgdGhlIENNVlAgUk5HVlMgcHJvZHVjdC4KLSsg KgotKyAqIE5vdGUgdGhlIGlucHV0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBfdmVyeV8g c3BlY2lmaWMgZm9ybWF0Ci0rICogYXMgZGVzY3JpYmVkIGluIHRoZSBOSVNUIGRvY3VtZW50ICJU aGUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IKLSsgKiBWYWxpZGF0aW9uIFN5c3RlbSAoUk5HVlMp IiwgTWF5IDI1LCAyMDA0LgotKyAqCi0rICovCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQ UyBSTkcgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybiAwOwotK30KLSsjZWxzZQotKwotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC94NTA5djMuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0 eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rdm9pZCB2c3QoKQotKyAgICB7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnYg PSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNo YXIgcmV0WzE2XTsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsK LSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBsb25nIGksIGtleWxlbjsKLSsKLSsg ICAga2V5bGVuID0gMDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4p ICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmKCFzdHJuY21wKGJ1Ziwi W0FFUyAxMjgtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDE2OwotKwllbHNlIGlmKCFzdHJuY21w KGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDI0OwotKwllbHNlIGlmKCFz dHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDMyOwotKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwot KwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkgICAgewotKwkgICAga2V5PWhleDJiaW5f bSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSBrZXlsZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0 ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJ CXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikp Ci0rCSAgICB7Ci0rCSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0g MTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJ CXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkK LSsJICAgIHsKLSsJICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2 KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJl dHVybjsKLSsJCX0KLSsKLSsJICAgIGlmICgha2V5IHx8ICFkdCkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkg ICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKwkgICAgRklQU194OTMxX3NlZWQo diwxNik7Ci0rCSAgICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKLSsJICAgIGlmIChGSVBTX3g5MzFf Ynl0ZXMocmV0LDE2KSA8PSAwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0 aW5nIFBSTkcgdmFsdWVcbiIpOwotKwkgICAgICAgIHJldHVybjsKLSsJICAgICAgICB9Ci0rCi0r CSAgICBwdigiUiIscmV0LDE2KTsKLSsJICAgIE9QRU5TU0xfZnJlZShrZXkpOwotKwkgICAga2V5 ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZShkdCk7Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAg ICBPUEVOU1NMX2ZyZWUodik7Ci0rCSAgICB2ID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9 Ci0rCi0rdm9pZCBtY3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9 IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKLSsgICAgY2hhciBidWZbMTAyNF07 Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAg ICBsb25nIGksIGtleWxlbjsKLSsgICAgaW50IGo7Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0r ICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZw dXRzKGJ1ZixzdGRvdXQpOwotKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykp Ci0rCQlrZXlsZW4gPSAxNjsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0i LCAxMykpCi0rCQlrZXlsZW4gPSAyNDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2 LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3Jk LCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3Jk LCJLZXkiKSkKLSsJICAgIHsKLSsJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAg aWYgKGkgIT0ga2V5bGVuKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBs ZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAg ICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9 aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAg ICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhl eDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAg ICBpZiAoIWtleSB8fCAhZHQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5 IG9yIERUXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfeDkzMV9zZXRfa2V5 KGtleSwga2V5bGVuKTsKLSsJICAgIEZJUFNfeDkzMV9zZWVkKHYsMTYpOwotKwkgICAgZm9yIChp ID0gMDsgaSA8IDEwMDAwOyBpKyspCi0rCQl7Ci0rCQkgICAgRklQU194OTMxX3NldF9kdChkdCk7 Ci0rCQkgICAgaWYgKEZJUFNfeDkzMV9ieXRlcyhyZXQsMTYpIDw9IDApCi0rCQkJewotKwkJCWZw cmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJCSAgICAgICAg cmV0dXJuOwotKwkJICAgICAgICB9Ci0rCQkgICAgLyogSW5jcmVtZW50IERUICovCi0rCQkgICAg Zm9yIChqID0gMTU7IGogPj0gMDsgai0tKQotKwkJCXsKLSsJCQlkdFtqXSsrOwotKwkJCWlmIChk dFtqXSkKLSsJCQkJYnJlYWs7Ci0rCQkJfQotKwkJfQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7 Ci0rCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVO U1NMX2ZyZWUoZHQpOwotKwkgICAgZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwot KwkgICAgdiA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBh cmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJp bnRmKHN0ZGVyciwiJXMgW21jdHx2c3RdXG4iLGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0r ICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwll eGl0KDEpOwotKwl9Ci0rICAgIEZJUFNfeDkzMV9yZXNldCgpOwotKyAgICBpZiAoIUZJUFNfeDkz MV90ZXN0X21vZGUoKSkKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcgUFJO RyB0ZXN0IG1vZGVcbiIpOwotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQot KyAgICBpZighc3RyY21wKGFyZ3ZbMV0sIm1jdCIpKQotKwltY3QoKTsKLSsgICAgZWxzZSBpZigh c3RyY21wKGFyZ3ZbMV0sInZzdCIpKQotKwl2c3QoKTsKLSsgICAgZWxzZQotKwl7Ci0rCWZwcmlu dGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7 Ci0rCX0KLSsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzCTIwMTMtMTAtMDQgMTE6NDg6 MDQuMTgxNjk0MTU4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3JzYWd0ZXN0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODE2OTQxNTggKzAyMDAKLUBAIC0w LDAgKzEsMzkwIEBACi0rLyogZmlwc19yc2FndGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBT dGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICog cHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRz b2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8 Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0r I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJu KDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCBy c2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTEo RklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVN ICpYcCwKLSsJCUJJR05VTSAqZSk7Ci0rc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91 dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpOwot KwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5V TEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9z ZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Bl bihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0r CWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4i KTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8g ZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJ Z290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYg KHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGlu KSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNs b3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNU X01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikK LSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29y ZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCUJJR05VTSAqWHAxID0gTlVMTCwgKlhw MiA9IE5VTEwsICpYcCA9IE5VTEw7Ci0rCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEws ICpYcSA9IE5VTEw7Ci0rCUJJR05VTSAqZSA9IE5VTEw7Ci0rCWludCByZXQgPSAwOwotKwlpbnQg bG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsK LSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdo aWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJ bG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5l YnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3Ig PSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9 IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJ CWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYs IG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJ CXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAw OwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJ dmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQotKwkJCXsKLSsJCQlpZiAoWHAxIHx8ICFkb19oZXgy Ym4oJlhwMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCi0rCQkJewotKwkJCWlmIChYcDIgfHwgIWRvX2hl eDJibigmWHAyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQotKwkJCXsKLSsJCQlpZiAoWHAgfHwgIWRvX2hl eDJibigmWHAsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQotKwkJCXsKLSsJCQlpZiAoWHExIHx8ICFkb19o ZXgyYm4oJlhxMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCi0rCQkJewotKwkJCWlmIChYcTIgfHwgIWRv X2hleDJibigmWHEyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQotKwkJCXsKLSsJCQlpZiAoWHEgfHwgIWRv X2hleDJibigmWHEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKGUgfHwgIWRvX2hl eDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgInAyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJwIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJxMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi cTIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkK LSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQlj b250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKLSsJCQljb250aW51 ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYs IG91dCk7Ci0rCi0rCQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQotKwkJCXsKLSsJCQlyc2Eg PSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlp ZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCi0rCQkJCWdvdG8g ZXJyb3I7Ci0rCQkJQk5fZnJlZShYcDEpOwotKwkJCVhwMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShY cDIpOwotKwkJCVhwMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcCk7Ci0rCQkJWHAgPSBOVUxMOwot KwkJCUJOX2ZyZWUoZSk7Ci0rCQkJZSA9IE5VTEw7Ci0rCQkJfQotKwotKwkJaWYgKHJzYSAmJiBY cTEgJiYgWHEyICYmIFhxKQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCByc2Es IFhxMSwgWHEyLCBYcSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcTEpOwotKwkJ CVhxMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcTIpOwotKwkJCVhxMiA9IE5VTEw7Ci0rCQkJQk5f ZnJlZShYcSk7Ci0rCQkJWHEgPSBOVUxMOwotKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQly c2EgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0r CWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVm KQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwotKwlpZiAoWHAxKQotKwkJQk5fZnJlZShY cDEpOwotKwlpZiAoWHAyKQotKwkJQk5fZnJlZShYcDIpOwotKwlpZiAoWHApCi0rCQlCTl9mcmVl KFhwKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2Zy ZWUoWHExKTsKLSsJaWYgKFhxMikKLSsJCUJOX2ZyZWUoWHEyKTsKLSsJaWYgKFhxKQotKwkJQk5f ZnJlZShYcSk7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShlKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNf cnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0r CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4i LCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3By aW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAy LCBCSUdOVU0gKlhwLAotKwkJQklHTlVNICplKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdO VU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKLSsJcDEgPSBCTl9uZXcoKTsKLSsJcDIgPSBCTl9u ZXcoKTsKLSsJaWYgKCFwMSB8fCAhcDIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9Y OTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAotKwkJ CQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJw MiIsIHAyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKLSsKLSsJcmV0 ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChwMSkKLSsJCUJOX2ZyZWUocDEpOwotKwlpZiAocDIp Ci0rCQlCTl9mcmVlKHAyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQg cnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05V TSAqWHEyLCBCSUdOVU0gKlhxKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnExID0g TlVMTCwgKnEyID0gTlVMTDsKLSsJcTEgPSBCTl9uZXcoKTsKLSsJcTIgPSBCTl9uZXcoKTsKLSsJ aWYgKCFxMSB8fCAhcTIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2 ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJCQlY cTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJp bnRfbmFtZShvdXQsICJxMSIsIHExKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEy KTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsKLSsJZG9fYm5fcHJpbnRf bmFtZShvdXQsICJuIiwgcnNhLT5uKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNh LT5kKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChxMSkKLSsJCUJOX2ZyZWUo cTEpOwotKwlpZiAocTIpCi0rCQlCTl9mcmVlKHEyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQot KwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3JzYXN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh c3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVz dC5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODE2OTQxNTggKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwkyMDEzLTEwLTA0IDExOjQ4 OjA0LjE4MTY5NDE1OCArMDIwMAotQEAgLTAsMCArMSwzNzAgQEAKLSsvKiBmaXBzX3JzYXN0ZXN0 LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29m dC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0r ICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8 c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBw b3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJm aXBzX3V0bC5oIgotKwotK3N0YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4s IGludCBTYWx0bGVuKTsKLStzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAq cnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNn bGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQot Kwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxLCBT YWx0bGVuID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJp bnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYg IXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFy Z3ZbMl0pOwotKwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0r CQlhcmdjIC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkg JiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJ CWFyZ2MtLTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0g c3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFy Z2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJd LCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBp bnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJ aWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2Ffc3Rl c3Qob3V0LCBpbiwgU2FsdGxlbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJT QVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJ ZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRf ZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsK LSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0 dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAot KwotK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pCi0rCXsK LSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOwot Kwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiA9IC0xOwotKwlpbnQg a2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0gLTE7Ci0rCWludCByZXQgPSAwOwotKwlpbnQg bG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsK LSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdo aWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJ bG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5l YnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3Ig PSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9 IGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYs IG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJ CXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAw OwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJ dmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJLyog TG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBsZW5ndGggKi8KLSsKLSsJCWlmICghc3RyY21w KGtleXdvcmQsICJbbW9kIikpCi0rCQkJewotKwkJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkg LSAxOwotKwkJCWlmICgqcCAhPSAnXScpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJKnAg PSAwOwotKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChrZXlsZW4gPCAwKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKLSsJCQkJ ZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIp KQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKLSsJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7Ci0rCQkJZWxz ZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigp OwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwKLSsJCQkJCSJGQVRBTDog dW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJCQkJCQkJCXZhbHVlKTsKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJ CQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwot KwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUgYW5kIG91dHB1dCBwdWJs aWMKLSsJCSAqIGtleSBjb21wb25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0ZSBrZXkuCi0rCQkgKi8K LSsKLSsJCWlmIChrZXlsZW4gIT0gY3VycmVudF9rZXlsZW4pCi0rCQkJewotKwkJCUJJR05VTSAq Ym5fZTsKLSsJCQlpZiAocnNhKQotKwkJCQlGSVBTX3JzYV9mcmVlKHJzYSk7Ci0rCQkJcnNhID0g RklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2EpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJYm5f ZSA9IEJOX25ldygpOwotKwkJCWlmICghYm5fZSB8fCAhQk5fc2V0X3dvcmQoYm5fZSwgMHgxMDAx KSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAoIVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChy c2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShi bl9lKTsKLSsJCQlmcHV0cygibiA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2Et Pm4pOwotKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQpOwotKwkJCWRvX2JuX3ByaW50KG91dCwgcnNh LT5lKTsKLSsJCQlmcHV0cygiXG4iLCBvdXQpOwotKwkJCWN1cnJlbnRfa2V5bGVuID0ga2V5bGVu OwotKwkJCX0KLSsKLSsJCWlmIChNc2cgJiYgZGdzdCkKLSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJp bnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNnbGVuLAotKwkJCQkJCQkJU2FsdGxlbikpCi0r CQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsK LSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwotKwlpZiAob2xp bmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9Q RU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsK LSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJ Z290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91 dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywg bG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25l ZCBjaGFyICpzaWdidWYgPSBOVUxMOwotKwlpbnQgaSwgc2lnbGVuOwotKwkvKiBFVlBfUEtFWSBz dHJ1Y3R1cmUgKi8KLSsJRVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwlway50eXBl ID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9IHJzYTsKLSsKLSsJc2lnbGVuID0gUlNB X3NpemUocnNhKTsKLSsJc2lnYnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVuKTsKLSsJaWYgKCFz aWdidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0r CWlmIChTYWx0bGVuID49IDApCi0rCQl7Ci0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgs Ci0rCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOwotKwkJfQot KwllbHNlIGlmIChTYWx0bGVuID09IC0yKQotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4 LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwotKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4 LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25VcGRhdGUoJmN0 eCwgTXNnLCBNc2dsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZj dHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZzaWdsZW4sICZwaykpCi0rCQlnb3RvIGVycm9y OwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWZwdXRzKCJTID0gIiwgb3V0 KTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IHNpZ2xlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIl MDJYIiwgc2lnYnVmW2ldKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJcmV0ID0gMTsK LSsKLSsJZXJyb3I6Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTMtMTAtMDQgMTE6 NDg6MDQuMTgxNjk0MTU4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3JzYXZ0ZXN0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODE2OTQxNTggKzAyMDAKLUBA IC0wLDAgKzEsMzc3IEBACi0rLyogZmlwc19yc2F2dGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0r ICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq Ci0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRl biBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0 eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKwotKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK LSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigw KTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStpbnQgcnNh X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IHNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNh X3ByaW50dmVyKEZJTEUgKm91dCwKLSsJCUJJR05VTSAqbiwgQklHTlVNICplLAotKwkJY29uc3Qg RVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKLSsJCXVu c2lnbmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pOwotKwotK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxM OwotKwotKwlpbnQgcmV0ID0gMTsKLSsJaW50IFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNf bW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0p KQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDAp Ci0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhc biIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsK LSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0p KQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQot KwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Bl bihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0r CWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4i KTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8g ZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FWVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3Jc biIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoK LSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGlu ICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQp KQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5l IFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBG SUxFICppbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAq cCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJY29uc3QgRVZQX01EICpkZ3N0ID0g TlVMTDsKLSsJQklHTlVNICpuID0gTlVMTCwgKmUgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpN c2cgPSBOVUxMLCAqUyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuLCBTbGVuOwotKwlpbnQgcmV0ID0g MDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9U RVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFY TElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9y OwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkK LSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3 b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8q IExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJ LyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBj b3B5ICovCi0rCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKLSsJCQl7Ci0rCQkJaWYgKGZwdXRz KG9saW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJ CQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8K LSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsK LSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBz cGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFs dWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2 YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAo KnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsK LSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJuIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4 MmJuKCZuLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJlIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZlLHZh bHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJTSEFBbGciKSkKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEEx IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMSgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJTSEEyMjQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKLSsJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMjU2IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7Ci0rCQkJZWxz ZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgp OwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKLSsJCQkJZGdzdCA9IEVW UF9zaGE1MTIoKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsCi0rCQkJ CQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCi0rCQkJCQkJCQl2YWx1 ZSk7Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkg PSAnMCc7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKLSsJCQlpZiAoIU1z ZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJTIikpCi0rCQkJewotKwkJCWlmIChTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlT ID0gaGV4MmJpbl9tKHZhbHVlLCAmU2xlbik7Ci0rCQkJaWYgKCFTKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQot KwkJCWNvbnRpbnVlOwotKwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0 cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChuICYmIGUgJiYgTXNnICYmIFMgJiYgZGdzdCkK LSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJpbnR2ZXIob3V0LCBuLCBlLCBkZ3N0LAotKwkJCQkJTXNn LCBNc2dsZW4sIFMsIFNsZW4sIFNhbHRsZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5T U0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJT1BFTlNTTF9mcmVlKFMpOwotKwkJ CVMgPSBOVUxMOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJy b3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlm IChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAobikKLSsJCUJOX2Zy ZWUobik7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShlKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJ cGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJv Y2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwot K3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJTEUgKm91dCwKLSsJCUJJR05VTSAqbiwgQklHTlVN ICplLAotKwkJY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25n IE1zZ2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pCi0r CXsKLSsJaW50IHJldCA9IDAsIHI7Ci0rCS8qIFNldHVwIFJTQSBhbmQgRVZQX1BLRVkgc3RydWN0 dXJlcyAqLwotKwlSU0EgKnJzYV9wdWJrZXkgPSBOVUxMOwotKwlFVlBfUEtFWSBwazsKLSsJRVZQ X01EX0NUWCBjdHg7Ci0rCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7Ci0rCXJzYV9wdWJrZXkg PSBGSVBTX3JzYV9uZXcoKTsKLSsJaWYgKCFyc2FfcHVia2V5KQotKwkJZ290byBlcnJvcjsKLSsJ cnNhX3B1YmtleS0+biA9IEJOX2R1cChuKTsKLSsJcnNhX3B1YmtleS0+ZSA9IEJOX2R1cChlKTsK LSsJaWYgKCFyc2FfcHVia2V5LT5uIHx8ICFyc2FfcHVia2V5LT5lKQotKwkJZ290byBlcnJvcjsK LSsJcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsJcGsucGtleS5yc2EgPSByc2FfcHVia2V5Owot KwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChTYWx0bGVuID49IDApCi0rCQl7 Ci0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCi0rCQkJRVZQX01EX0NUWF9GTEFHX1BB RF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOwotKwkJfQotKwllbHNlIGlmIChTYWx0bGVuID09IC0y KQotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEpOwotKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290 byBlcnJvcjsKLSsJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKLSsJ CWdvdG8gZXJyb3I7Ci0rCi0rCXIgPSBFVlBfVmVyaWZ5RmluYWwoJmN0eCwgUywgU2xlbiwgJnBr KTsKLSsKLSsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKwlpZiAociA8IDApCi0r CQlnb3RvIGVycm9yOwotKwlFUlJfY2xlYXJfZXJyb3IoKTsKLSsKLSsJaWYgKHIgPT0gMCkKLSsJ CWZwdXRzKCJSZXN1bHQgPSBGXG4iLCBvdXQpOwotKwllbHNlCi0rCQlmcHV0cygiUmVzdWx0ID0g UFxuIiwgb3V0KTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChyc2FfcHVia2V5 KQotKwkJRklQU19yc2FfZnJlZShyc2FfcHVia2V5KTsKLSsJaWYgKGJ1ZikKLSsJCU9QRU5TU0xf ZnJlZShidWYpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0 LjE4MjY5NDE4MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlw c19zaGF0ZXN0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODI2OTQxODEgKzAyMDAKLUBAIC0wLDAg KzEsMzg4IEBACi0rLyogZmlwc19zaGF0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9q ZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVy aWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku Ci0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVm IE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewot KyAgICBwcmludGYoIk5vIEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7 Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGlu dCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGljIGludCBwcmludF9kZ3N0 KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50 IE1zZ2xlbik7Ci0rc3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxF ICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7Ci0rCi0raW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9 IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwotKwlpZighRklQU19tb2RlX3NldCgxKSkKLSsJ CXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChh cmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmICghZGdzdF90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBkaWdlc3QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlk b19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xv c2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwot KwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkx MDI0MDAKLSsjZGVmaW5lIFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMg Pj4gMykgKiAyKSArIDEwMCkKLSsKLStpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4p Ci0rCXsKLSsJY29uc3QgRVZQX01EICptZCA9IE5VTEw7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGlu ZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCXVuc2lnbmVkIGNoYXIg Kk1zZyA9IE5VTEwsICpTZWVkID0gTlVMTDsKLSsJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEs IFNlZWRMZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9 IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYg fHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5l YnVmLCBTSEFfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJj cHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lw IGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3 b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAg PSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGgg WyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCkKLSsJCQl7Ci0rCQkJ ZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAg LSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2 YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAq LwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsr OwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2 YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChr ZXl3b3JkLCJbTCIpICYmICpwPT0nXScpCi0rCQkJewotKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkp Ci0rCQkJCXsKLSsJCQkJY2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsKLSsJCQkJY2Fz ZSAyODogbWQ9RVZQX3NoYTIyNCgpOyBicmVhazsKLSsJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1 NigpOyBicmVhazsKLSsJCQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKLSsJCQkJ Y2FzZSA2NDogbWQ9RVZQX3NoYTUxMigpOyBicmVhazsKLSsJCQkJZGVmYXVsdDogZ290byBwYXJz ZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxl biIpKQotKwkJCXsKLSsJCQlpZiAoTGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCUxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChMZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCS8qIE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KLSsJCQlp ZiAoTGVuICYgMHg3KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChMZW4gPiBTSEFf VEVTVF9NQVhfQklUUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNc2dMZW4gPSBMZW4g Pj4gMzsKLSsJCQl9Ci0rCi0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJ CQl7Ci0rCQkJbG9uZyB0bXBsZW47Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkq KC0tdmFsdWUpID0gJzAnOwotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmdG1wbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJT ZWVkIikpCi0rCQkJewotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVl KSA9ICcwJzsKLSsJCQlpZiAoU2VlZCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlTZWVk ID0gaGV4MmJpbl9tKHZhbHVlLCAmU2VlZExlbik7Ci0rCQkJaWYgKCFTZWVkKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikp Ci0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZw dXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDAp KQotKwkJCXsKLSsJCQlpZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQotKwkJ CQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0r CQkJTXNnTGVuID0gLTE7Ci0rCQkJTGVuID0gLTE7Ci0rCQkJfQotKwkJZWxzZSBpZiAobWQgJiYg U2VlZCAmJiAoU2VlZExlbiA+IDApKQotKwkJCXsKLSsJCQlpZiAoIXByaW50X21vbnRlKG1kLCBv dXQsIFNlZWQsIFNlZWRMZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShT ZWVkKTsKLSsJCQlTZWVkID0gTlVMTDsKLSsJCQlTZWVkTGVuID0gLTE7Ci0rCQkJfQotKwkKLSsK LSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1 ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKGxpbmVidWYpOwotKwlpZiAoTXNnKQotKwkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCWlm IChTZWVkKQotKwkJT1BFTlNTTF9mcmVlKFNlZWQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlw YXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9j ZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0r c3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCi0rCQl1 bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4pCi0rCXsKLSsJaW50IGksIG1kbGVuOwotKwl1 bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07Ci0rCWlmICghRVZQX0RpZ2VzdChNc2cs IE1zZ2xlbiwgbWQsICh1bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkpCi0rCQl7Ci0r CQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKLSsJCXJldHVybiAw OwotKwkJfQotKwlmcHV0cygiTUQgPSAiLCBvdXQpOwotKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47 IGkrKykKLSsJCWZwcmludGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKLSsJZnB1dHMoIlxuIiwgb3V0 KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVW UF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVu KQotKwl7Ci0rCXVuc2lnbmVkIGludCBpLCBqLCBrOwotKwlpbnQgcmV0ID0gMDsKLSsJRVZQX01E X0NUWCBjdHg7Ci0rCXVuc2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7Ci0rCXVuc2lnbmVk IGludCBtbGVuLCBtMWxlbiwgbTJsZW4sIG0zbGVuOwotKwotKwlFVlBfTURfQ1RYX2luaXQoJmN0 eCk7Ci0rCi0rCWlmIChTZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQotKwkJbWxlbiA9IFNlZWRM ZW47Ci0rCWVsc2UKLSsJCW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7Ci0rCi0rCW0xID0gT1BFTlNT TF9tYWxsb2MobWxlbik7Ci0rCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0rCW0zID0gT1BF TlNTTF9tYWxsb2MobWxlbik7Ci0rCi0rCWlmICghbTEgfHwgIW0yIHx8ICFtMykKLSsJCWdvdG8g bWNfZXJyb3I7Ci0rCi0rCW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47Ci0rCW1lbWNw eShtMSwgU2VlZCwgU2VlZExlbik7Ci0rCW1lbWNweShtMiwgU2VlZCwgU2VlZExlbik7Ci0rCW1l bWNweShtMywgU2VlZCwgU2VlZExlbik7Ci0rCi0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCi0rCWZv ciAoaiA9IDA7IGogPCAxMDA7IGorKykKLSsJCXsKLSsJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBp KyspCi0rCQkJewotKwkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKLSsJCQlF VlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0xLCBtMWxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgm Y3R4LCBtMiwgbTJsZW4pOwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsK LSsJCQlwID0gbTE7Ci0rCQkJbTEgPSBtMjsKLSsJCQltMWxlbiA9IG0ybGVuOwotKwkJCW0yID0g bTM7Ci0rCQkJbTJsZW4gPSBtM2xlbjsKLSsJCQltMyA9IHA7Ci0rCQkJRVZQX0RpZ2VzdEZpbmFs X2V4KCZjdHgsIG0zLCAmbTNsZW4pOwotKwkJCX0KLSsJCWZwcmludGYob3V0LCAiQ09VTlQgPSAl ZFxuIiwgaik7Ci0rCQlmcHV0cygiTUQgPSAiLCBvdXQpOwotKwkJZm9yIChrID0gMDsgayA8IG0z bGVuOyBrKyspCi0rCQkJZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOwotKwkJZnB1dHMoIlxu XG4iLCBvdXQpOwotKwkJbWVtY3B5KG0xLCBtMywgbTNsZW4pOwotKwkJbWVtY3B5KG0yLCBtMywg bTNsZW4pOwotKwkJbTFsZW4gPSBtMmxlbiA9IG0zbGVuOwotKwkJfQotKwotKwlyZXQgPSAxOwot KwotKwltY19lcnJvcjoKLSsJaWYgKG0xKQotKwkJT1BFTlNTTF9mcmVlKG0xKTsKLSsJaWYgKG0y KQotKwkJT1BFTlNTTF9mcmVlKG0yKTsKLSsJaWYgKG0zKQotKwkJT1BFTlNTTF9mcmVlKG0zKTsK LSsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0r Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf dXRsLmguZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgKLS0t LSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwkyMDEzLTEw LTA0IDExOjQ4OjA0LjE4MjY5NDE4MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2NhdnMvZmlwc191dGwuaAkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4MjY5NDE4MSArMDIwMAot QEAgLTAsMCArMSwzNDMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw NyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSt2b2lkIGRv X3ByaW50X2Vycm9ycyh2b2lkKQotKwl7Ci0rCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOwotKwlp bnQgbGluZSwgZmxhZ3M7Ci0rCXVuc2lnbmVkIGxvbmcgbDsKLSsJd2hpbGUgKChsID0gRVJSX2dl dF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQiCi0r CQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4iLAotKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBFUlJf R0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09OKGwpLAotKwkJCWZpbGUsIGxpbmUsIGZsYWdzICYg RVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIpOwotKwkJfQotKwl9Ci0rCi0raW50IGhleDJiaW4o Y29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjEs IG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IGlu W24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkKLSsJeyAvKiBmaXJzdCBieXRlICovCi0rCWlmICgo aW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAt ICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJ ICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScp ICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJ ZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlpZighaW5bbjFdKQotKwkgICAgewotKwkgICAgb3V0 W24yKytdPWNoOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCW91dFtuMl0gPSBjaCA8PCA0Owot KwkvKiBzZWNvbmQgYnl0ZSAqLwotKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0g JzknKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnMCc7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0g J0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7 Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCi0rCSAgICBj aCA9IGluW24xKytdIC0gJ2EnICsgMTA7Ci0rCWVsc2UKLSsJICAgIHJldHVybiAtMTsKLSsJb3V0 W24yKytdIHw9IGNoOwotKwl9Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwotK3Vuc2lnbmVk IGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKLSsJewotKwl1bnNp Z25lZCBjaGFyICpwOwotKwlwID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8yKTsK LSsJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsKLSsJcmV0dXJuIHA7Ci0rCX0KLSsKLStpbnQgZG9f aGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBjaGFyICppbikKLSsJewotKwl1bnNpZ25lZCBjaGFy ICpwOwotKwlsb25nIHBsZW47Ci0rCWludCByID0gMDsKLSsJcCA9IGhleDJiaW5fbShpbiwgJnBs ZW4pOwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCEqcHIpCi0rCQkqcHIgPSBCTl9u ZXcoKTsKLSsJaWYgKCEqcHIpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKEJOX2JpbjJibihwLCBwbGVu LCAqcHIpKQotKwkJciA9IDE7Ci0rCU9QRU5TU0xfZnJlZShwKTsKLSsJcmV0dXJuIHI7Ci0rCX0K LSsKLStpbnQgZG9fYm5fcHJpbnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCBs ZW4sIGk7Ci0rCXVuc2lnbmVkIGNoYXIgKnRtcDsKLSsJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsK LSsJaWYgKGxlbiA9PSAwKQotKwkJewotKwkJZnB1dHMoIjAwIiwgb3V0KTsKLSsJCXJldHVybiAx OwotKwkJfQotKwotKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJ cmV0dXJuIDA7Ci0rCQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKLSsJT1BFTlNTTF9m cmVlKHRtcCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGRvX2JuX3ByaW50X25hbWUoRklM RSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCByOwotKwlm cHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7Ci0rCXIgPSBkb19ibl9wcmludChvdXQsIGJuKTsK LSsJaWYgKCFyKQotKwkJcmV0dXJuIDA7Ci0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0raW50IHBhcnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNoYXIg KmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQotKwl7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwg KnAsICpxOwotKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwlrZXl3b3JkID0gbGluZWJ1 ZjsKLSsJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKLSsJCWtleXdvcmQrKzsKLSsKLSsJLyogTG9vayBmb3IgPSBzaWdu ICovCi0rCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyogSWYgbm8gJz0nIGV4aXQg Ki8KLSsJaWYgKCFwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXEgPSBwIC0gMTsKLSsKLSsJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpx KSkKLSsJCSpxLS0gPSAwOwotKwotKwkqcCA9IDA7Ci0rCXZhbHVlID0gcCArIDE7Ci0rCi0rCS8q IFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCXZhbHVlKys7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwot KwotKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJ CSpwLS0gPSAwOwotKwotKwkqcGt3ID0ga2V5d29yZDsKLSsJKnB2YWwgPSB2YWx1ZTsKLSsJcmV0 dXJuIDE7Ci0rCX0KLSsKLStCSUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKLSsgICAgewot KyAgICBCSUdOVU0gKnA9TlVMTDsKLSsKLSsgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkKLSsJ cmV0dXJuIE5VTEw7Ci0rCi0rICAgIHJldHVybiBwOwotKyAgICB9Ci0rCi0raW50IGJpbjJoZXgo Y29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAg aW50IG4xLCBuMjsKLSsgICAgdW5zaWduZWQgY2hhciBjaDsKLSsKLSsgICAgZm9yIChuMT0wLG4y PTAgOyBuMSA8IGxlbiA7ICsrbjEpCi0rCXsKLSsJY2g9aW5bbjFdID4+IDQ7Ci0rCWlmIChjaCA8 PSAweDA5KQotKwkgICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytd PWNoLTEwKydhJzsKLSsJY2g9aW5bbjFdICYgMHgwZjsKLSsJaWYoY2ggPD0gMHgwOSkKLSsJICAg IG91dFtuMisrXT1jaCsnMCc7Ci0rCWVsc2UKLSsJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7Ci0r CX0KLSsgICAgb3V0W24yXT0nXDAnOwotKyAgICByZXR1cm4gbjI7Ci0rICAgIH0KLSsKLSt2b2lk IHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikKLSsg ICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rCi0rICAgIGJpbjJoZXgodmFsLGxlbixvYnVm KTsKLSsgICAgcHJpbnRmKCIlcyA9ICVzXG4iLHRhZyxvYnVmKTsKLSsgICAgfQotKwotKy8qIFRv IGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1 c3QgY29udmVydAotKyAqIHRoZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBL ZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBmb3JtCi0rICogImtleXdvcmQgPSB2YWx1ZVxuIiBu byBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKLSsgKiBq dXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KLSsgKi8KLSsKLStp bnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQotKwl7Ci0rCWNoYXIg KmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOwotKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwot KwlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCWtleXdvcmQrKzsKLSsJLyog TG9vayBmb3IgPSBzaWduICovCi0rCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyog SWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLwotKwlpZiAoIXApCi0r CQl7Ci0rCQlwID0ga2V5d29yZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7Ci0rCQl3aGlsZSAoKnAg PT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsJ CXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCQlzdHJjYXQob2xpbmVidWYsICJcbiIpOwot KwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXEgPSBwIC0gMTsKLSsKLSsJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpx LS0gPSAwOwotKwotKwkqcCA9IDA7Ci0rCXZhbHVlID0gcCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBs ZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnZhbHVlKSkKLSsJCXZhbHVlKys7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBm cm9tIHZhbHVlICovCi0rCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwl3aGls ZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAw OwotKwotKwlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOwotKwlzdHJjYXQob2xpbmVidWYsICIg PSAiKTsKLSsJc3RyY2F0KG9saW5lYnVmLCB2YWx1ZSk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIlxu Iik7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBudW1i ZXIgb2YgX2JpdHNfIHJlYWQgKi8KLStpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGludCBs ZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgbWVt c2V0KG91dCwwLGxlbik7Ci0rICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQotKwlpZihpbltu XSA9PSAnMScpCi0rCSAgICBvdXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOwotKyAgICByZXR1cm4g bGVuOwotKyAgICB9Ci0rCi0raW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGlu dCBsZW4sY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBmb3Iobj0wIDsg biA8IGxlbiA7ICsrbikKLSsJb3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAnMScg OiAnMCc7Ci0rICAgIHJldHVybiBuOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rdm9pZCBQcmludFZhbHVlKGNoYXIg KnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQotK3sKLSsjaWYgVkVSQk9TRQotKyAg Y2hhciBvYnVmWzIwNDhdOwotKyAgaW50IG9sZW47Ci0rICBvbGVuID0gYmluMmhleCh2YWwsIGxl biwgb2J1Zik7Ci0rICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsj ZW5kaWYKLSt9Ci0rCi0rdm9pZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIg KnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGludCBiaXRtb2RlKQotKyAgICB7Ci0rICAgIGNoYXIg b2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rCi0rICAgIGlmKGJpdG1vZGUpCi0rCW9sZW49 YmluMmJpbnQodmFsLGxlbixvYnVmKTsKLSsgICAgZWxzZQotKwlvbGVuPWJpbjJoZXgodmFsLGxl bixvYnVmKTsKLSsKLSsgICAgZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwg b2J1Zik7Ci0rI2lmIFZFUkJPU0UKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xl biwgb2J1Zik7Ci0rI2VuZGlmCi0rICAgIH0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v Zmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Zmlwc19hZXNfc2VsZnRlc3QuYy5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTgyNjk0MTgxICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwky MDEzLTEwLTA0IDExOjQ4OjA0LjE4MjY5NDE4MSArMDIwMAotQEAgLTAsMCArMSwzNTkgQEAKLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGNvbnN0IHN0cnVjdAotKyAgICB7Ci0rICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbMTZdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOwotKyAgICB9 IHRlc3RzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4 MDYsMHgwNywKLSsJICAweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwK LSsJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCi0rCSAgMHg4OCww eDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZGIH0sCi0rCXsgMHg2OSwweEM0LDB4RTAs MHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAotKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3MCww eEI0LDB4QzUsMHg1QSB9LAotKwl9LAotKwl9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9hZXM7 Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKLSsgICAgewotKyAgICBjb3JydXB0X2FlcyA9 IDE7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXMoKQotKyAgICB7Ci0rICAgIGlu dCBuOwotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24p Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKwotKwltZW1jcHkoa2V5LCB0ZXN0c1tu XS5rZXksIHNpemVvZihrZXkpKTsKLSsJaWYgKGNvcnJ1cHRfYWVzKQotKwkJa2V5WzBdKys7Ci0r CWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAotKwkJCQlrZXks IE5VTEwsCi0rCQkJCXRlc3RzW25dLnBsYWludGV4dCwKLSsJCQkJdGVzdHNbbl0uY2lwaGVydGV4 dCwKLSsJCQkJMTYpIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAg ICBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQg PT0gMCkKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rCi0rLyogQUVTLUNDTSB0 ZXN0IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBjY21fa2V5W10gPSB7Ci0rCTB4Y2UsMHhiMCwweDA5LDB4YWUsMHhh NCwweDQ1LDB4NDQsMHg1MSwweGZlLDB4YWQsMHhmMCwweGU2LAotKwkweGIzLDB4NmYsMHg0NSww eDU1LDB4NWQsMHhkMCwweDQ3LDB4MjMsMHhiYSwweGE0LDB4NDgsMHhlOAotK307Ci0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX25vbmNlW10gPSB7Ci0rCTB4NzYsMHg0MCwweDQzLDB4 YzQsMHg5NCwweDYwLDB4YjcKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9h ZGF0YVtdID0gewotKwkweDZlLDB4ODAsMHhkZCwweDdmLDB4MWIsMHhhZCwweGYzLDB4YTEsMHhj OSwweGFiLDB4MjUsMHhjNywKLSsJMHg1ZiwweDEwLDB4YmQsMHhlNywweDhjLDB4MjMsMHhmYSww eDBlLDB4YjgsMHhmOSwweGFhLDB4YTUsCi0rCTB4M2EsMHhkZSwweGZiLDB4ZjQsMHhjYiwweGY3 LDB4OGYsMHhlNAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3B0W10gPSB7 Ci0rCTB4YzgsMHhkMiwweDc1LDB4ZjksMHgxOSwweGUxLDB4N2QsMHg3ZiwweGU2LDB4OWMsMHgy YSwweDFmLAotKwkweDU4LDB4OTMsMHg5ZCwweGZlLDB4NGQsMHg0MCwweDM3LDB4OTEsMHhiNSww eGRmLDB4MTMsMHgxMAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2N0W10g PSB7Ci0rCTB4OGEsMHgwZiwweDNkLDB4ODIsMHgyOSwweGU0LDB4OGUsMHg3NCwweDg3LDB4ZmQs MHg5NSwweGEyLAotKwkweDhhLDB4ZDMsMHg5MiwweGM4LDB4MGIsMHgzNiwweDgxLDB4ZDQsMHhm YiwweGM3LDB4YmIsMHhmZAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3Rh Z1tdID0gewotKwkweDJkLDB4ZDYsMHhlZiwweDFjLDB4NDUsMHhkNCwweGNjLDB4YjcsMHgyMyww eGRjLDB4MDcsMHg0NCwKLSsJMHgxNCwweGRiLDB4NTAsMHg2ZAotK307Ci0rCi0raW50IEZJUFNf c2VsZnRlc3RfYWVzX2NjbSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBj aGFyIG91dFsxMjhdLCB0YWdbMTZdOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7Ci0rCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsJaWYg KCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSxOVUxMLCBOVUxMLCBO VUxMLCAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwg RVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwKLSsJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkK LSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxf Q0NNX1NFVF9UQUcsCi0rCQkJCQlzaXplb2YoY2NtX3RhZyksIE5VTEwpKQotKwkJZ290byBlcnI7 Ci0rCWlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgY2NtX2tleSwgY2Nt X25vbmNlLCAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBO VUxMLCBzaXplb2YoY2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkg PCAwKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX3B0LCBz aXplb2YoY2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYg KCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCAxNiwgdGFn KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAobWVtY21wKHRhZywgY2NtX3RhZywgc2l6ZW9mKGNjbV90 YWcpKQotKwkJfHwgbWVtY21wKG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkpCi0rCQlnb3Rv IGVycjsKLSsKLSsJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwotKwotKwlpZiAoIUVWUF9D aXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAw KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NU UkxfQ0NNX1NFVF9JVkxFTiwKLSsJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKLSsJCWdv dG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NF VF9UQUcsIDE2LCB0YWcpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NpcGhlckluaXRfZXgo JmN0eCwgTlVMTCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAwKSkKLSsJCWdvdG8gZXJyOwot KwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6 ZW9mKGNjbV9jdCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwg Y2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQotKwkJZ290byBlcnI7Ci0rCWlmIChF VlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNj bV9wdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChvdXQsIGNjbV9wdCwgc2l6ZW9m KGNjbV9wdCkpKQotKwkJZ290byBlcnI7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsJRVZQ X0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJ RklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNLEZJUFNfUl9TRUxGVEVTVF9GQUlM RUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldHVybiByZXQ7Ci0rCi0rCX0K LSsKLSsvKiBBRVMtR0NNIHRlc3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAq LwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9rZXlbXSA9IHsKLSsJMHhlZSww eGJjLDB4MWYsMHg1NywweDQ4LDB4N2YsMHg1MSwweDkyLDB4MWMsMHgwNCwweDY1LDB4NjYsCi0r CTB4NWYsMHg4YSwweGU2LDB4ZDEsMHg2NSwweDhiLDB4YjIsMHg2ZCwweGU2LDB4ZjgsMHhhMCww eDY5LAotKwkweGEzLDB4NTIsMHgwMiwweDkzLDB4YTUsMHg3MiwweDA3LDB4OGYKLSt9OwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9pdltdID0gewotKwkweDk5LDB4YWEsMHgzZSww eDY4LDB4ZWQsMHg4MSwweDczLDB4YTAsMHhlZSwweGQwLDB4NjYsMHg4NAotK307Ci0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3B0W10gPSB7Ci0rCTB4ZjUsMHg2ZSwweDg3LDB4MDUs MHg1YiwweGMzLDB4MmQsMHgwZSwweGViLDB4MzEsMHhiMiwweGVhLAotKwkweGNjLDB4MmIsMHhm MiwweGE1Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fYWFkW10gPSB7Ci0r CTB4NGQsMHgyMywweGMzLDB4Y2UsMHhjMywweDM0LDB4YjQsMHg5YiwweGRiLDB4MzcsMHgwYyww eDQzLAotKwkweDdmLDB4ZWMsMHg3OCwweGRlCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBnY21fY3RbXSA9IHsKLSsJMHhmNywweDI2LDB4NDQsMHgxMywweGE4LDB4NGMsMHgwZSww eDdjLDB4ZDUsMHgzNiwweDg2LDB4N2UsCi0rCTB4YjksMHhmMiwweDE3LDB4MzYKLSt9OwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV90YWdbXSA9IHsKLSsJMHg2NywweGJhLDB4MDUs MHgxMCwweDI2LDB4MmEsMHhlNCwweDg3LDB4ZDcsMHgzNywweGVlLDB4NjIsCi0rCTB4OTgsMHhm NywweDdlLDB4MGMKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9pZCkKLSsJ ewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsJ RVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwltZW1z ZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rCW1lbXNldCh0YWcsIDAsIHNpemVvZih0YWcpKTsK LSsJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwg TlVMTCwgTlVMTCwgMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJs KCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVM TCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBO VUxMLCBnY21fa2V5LCBnY21faXYsIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVy KCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQotKwkJZ290byBlcnI7 Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX3B0LCBzaXplb2YoZ2NtX3B0KSkgIT0g c2l6ZW9mKGdjbV9jdCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVM TCwgTlVMTCwgMCkgPCAwKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghRVZQX0NJUEhFUl9DVFhf Y3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsK LSsKLSsJaWYgKG1lbWNtcCh0YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1jbXAob3V0LCBnY21fY3Qs IDE2KSkKLSsJCWdvdG8gZXJyOwotKwotKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0r Ci0rCWlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCksIE5VTEws IE5VTEwsIE5VTEwsIDApKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGdjbV9pdiksIE5V TEwpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBf Q1RSTF9HQ01fU0VUX1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDApKQotKwkJZ290 byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21f YWFkKSkgPCAwKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2Nt X2N0LCBzaXplb2YoZ2NtX2N0KSkgIT0gc2l6ZW9mKGdjbV9wdCkpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmIChtZW1jbXAob3V0LCBnY21fcHQsIDE2KSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQg PSAxOwotKwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlm IChyZXQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dD TSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwllbHNlCi0r CQlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg WFRTXzEyOF9rZXlbXSA9IHsKLSsJMHhhMSwweGI5LDB4MGMsMHhiYSwweDNmLDB4MDYsMHhhYyww eDM1LDB4M2IsMHgyYywweDM0LDB4MzgsCi0rCTB4NzYsMHgwOCwweDE3LDB4NjIsMHgwOSwweDA5 LDB4MjMsMHgwMiwweDZlLDB4OTEsMHg3NywweDE4LAotKwkweDE1LDB4ZjIsMHg5ZCwweGFiLDB4 MDEsMHg5MywweDJmLDB4MmYKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18x MjhfaVtdID0gewotKwkweDRmLDB4YWUsMHhmNywweDExLDB4N2MsMHhkYSwweDU5LDB4YzYsMHg2 ZSwweDRiLDB4OTIsMHgwMSwKLSsJMHgzZSwweDc2LDB4OGEsMHhkNQotK307Ci0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9wdFtdID0gewotKwkweGViLDB4YWIsMHhjZSwweDk1 LDB4YjEsMHg0ZCwweDNjLDB4OGQsMHg2ZiwweGIzLDB4NTAsMHgzOSwKLSsJMHgwNywweDkwLDB4 MzEsMHgxYwotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0g ewotKwkweDc3LDB4OGEsMHhlOCwweGI0LDB4M2MsMHhiOSwweDhkLDB4NWEsMHg4MiwweDUwLDB4 ODEsMHhkNSwKLSsJMHhiZSwweDQ3LDB4MWMsMHg2MwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgWFRTXzI1Nl9rZXlbXSA9IHsKLSsJMHgxZSwweGE2LDB4NjEsMHhjNSwweDhk LDB4OTQsMHgzYSwweDBlLDB4NDgsMHgwMSwweGU0LDB4MmYsCi0rCTB4NGIsMHgwOSwweDQ3LDB4 MTQsMHg5ZSwweDdmLDB4OWYsMHg4ZSwweDNlLDB4NjgsMHhkMCwweGM3LAotKwkweDUwLDB4NTIs MHgxMCwweGJkLDB4MzEsMHgxYSwweDBlLDB4N2MsMHhkNiwweGUxLDB4M2YsMHhmZCwKLSsJMHhm MiwweDQxLDB4OGQsMHg4ZCwweDE5LDB4MTEsMHhjMCwweDA0LDB4Y2QsMHhhNSwweDhkLDB4YTMs Ci0rCTB4ZDYsMHgxOSwweGI3LDB4ZTIsMHhiOSwweDE0LDB4MWUsMHg1OCwweDMxLDB4OGUsMHhl YSwweDM5LAotKwkweDJjLDB4ZjQsMHgxYiwweDA4Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBYVFNfMjU2X2lbXSA9IHsKLSsJMHhhZCwweGY4LDB4ZDksMHgyNiwweDI3LDB4NDYs MHg0YSwweGQyLDB4ZjAsMHg0MiwweDhlLDB4ODQsCi0rCTB4YTksMHhmOCwweDc1LDB4NjQKLSt9 OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfcHRbXSA9IHsKLSsJMHgyZSww eGVkLDB4ZWEsMHg1MiwweGNkLDB4ODIsMHgxNSwweGUxLDB4YWMsMHhjNiwweDQ3LDB4ZTgsCi0r CTB4MTAsMHhiYiwweGMzLDB4NjQsMHgyZSwweDg3LDB4MjgsMHg3ZiwweDhkLDB4MmUsMHg1Nyww eGUzLAotKwkweDZjLDB4MGEsMHgyNCwweGZiLDB4YzEsMHgyYSwweDIwLDB4MmUKLSt9OwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfY3RbXSA9IHsKLSsJMHhjYiwweGFhLDB4 ZDAsMHhlMiwweGY2LDB4Y2UsMHhhMywweGY1LDB4MGIsMHgzNywweGY5LDB4MzQsCi0rCTB4ZDQs MHg2YSwweDliLDB4MTMsMHgwYiwweDlkLDB4NTQsMHhmMCwweDdlLDB4MzQsMHhmMywweDZhLAot KwkweGY3LDB4OTMsMHhlOCwweDZmLDB4NzMsMHhjNiwweGQ3LDB4ZGIKLSt9OwotKwotK2ludCBG SVBTX3NlbGZ0ZXN0X2Flc194dHMoKQotKwl7Ci0rCWludCByZXQgPSAxOwotKwlFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChmaXBzX2Np cGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X3h0cygpLAotKwkJCQlYVFNfMTI4X2tleSwgWFRT XzEyOF9pLCBYVFNfMTI4X3B0LCBYVFNfMTI4X2N0LAotKwkJCQlzaXplb2YoWFRTXzEyOF9wdCkp IDw9IDApCi0rCQlyZXQgPSAwOwotKwotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBf YWVzXzI1Nl94dHMoKSwKLSsJCQkJWFRTXzI1Nl9rZXksIFhUU18yNTZfaSwgWFRTXzI1Nl9wdCwg WFRTXzI1Nl9jdCwKLSsJCQkJc2l6ZW9mKFhUU18yNTZfcHQpKSA8PSAwKQotKwkJcmV0ID0gMDsK LSsKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJaWYgKHJldCA9PSAwKQotKwkJ RklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTLEZJUFNfUl9TRUxGVEVTVF9GQUlM RUQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9m aXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDEzLTEw LTA0IDExOjQ4OjA0LjE4MjY5NDE4MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2ZpcHMuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4MjY5NDE4MSArMDIwMAotQEAgLTAsMCAr MSw0ODkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAg ICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi Ci0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K LSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIF9HTlVfU09V UkNFCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNpbmNs dWRlIDxkbGZjbi5oPgotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4K LSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSsjaWZuZGVmIFBBVEhfTUFYCi0rI2RlZmluZSBQ QVRIX01BWCAxMDI0Ci0rI2VuZGlmCi0rCi0rc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAwOwotK3N0YXRpYyBpbnQgZmlwc19tb2RlID0gMDsKLStzdGF0aWMgaW50IGZpcHNfc3RhcnRl ZCA9IDA7Ci0rCi0rc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCk7Ci0rc3Rh dGljIGludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQgZmlwc19j bGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpOwotKwotKyNkZWZpbmUgZmlwc193X2xvY2soKQlDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3dfdW5sb2NrKCkJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3JfbG9jaygpCUNS WVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUykKLSsjZGVmaW5lIGZpcHNfcl91bmxvY2soKQlD UllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKLSsKLStzdGF0aWMgdm9pZCBmaXBzX3Nl dF9tb2RlKGludCBvbm9mZikKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3du aW5nX3RocmVhZCgpOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJaWYgKCFvd25p bmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19tb2RlID0gb25vZmY7Ci0rCQlpZiAo IW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKLSsJCX0KLSsJfQotKwotK2ludCBGSVBT X21vZHVsZV9tb2RlKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhy ZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0ZWQpCi0r CQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCQlyZXQgPSBmaXBz X21vZGU7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJCX0KLSsJ cmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQotKyAg ICB7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBpZiAoZmlwc19zdGFydGVkKQotKwl7Ci0rCWlu dCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmICghb3du aW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOwot KwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJfQotKyAgICByZXR1cm4g cmV0OwotKyAgICB9Ci0rCi0rLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUu IFRoaXMgd2lsbCBiZSBjYWxsZWQKLSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVy YXRpb24uIEl0IGhhcyB0aGUgbWluaW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lk IHRvbyBiaWcgYSBwZXJmb3JtYW5jZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0 X2NoZWNrKHZvaWQpCi0rICAgIHsKLSsgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKLSsJewot KwlPcGVuU1NMRGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlM VVJFIik7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lk KQotKyAgICB7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgIH0KLSsKLSsvKiB3 ZSBpbXBsZW1lbnQgd2hhdCBsaWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8KLSsKLStzdGF0 aWMgaW50Ci0rZ2V0X2xpYnJhcnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFy ICpzeW1ib2xuYW1lLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbikKLSt7Ci0rCURsX2luZm8g aW5mbzsKLSsJdm9pZCAqZGwsICpzeW07Ci0rCWludCBydiA9IC0xOwotKwotKyAgICAgICAgZGwg PSBkbG9wZW4obGlibmFtZSwgUlRMRF9MQVpZKTsKLSsgICAgICAgIGlmIChkbCA9PSBOVUxMKSB7 Ci0rCSAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfSAgICAgICAKLSsKLSsJc3ltID0gZGxz eW0oZGwsIHN5bWJvbG5hbWUpOwotKwotKwlpZiAoc3ltICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwg JmluZm8pKSB7Ci0rCQlzdHJuY3B5KHBhdGgsIGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuLTEpOwot KwkJcGF0aFtwYXRobGVuLTFdID0gJ1wwJzsKLSsJCXJ2ID0gMDsKLSsJfQotKwotKwlkbGNsb3Nl KGRsKTsJCi0rCQotKwlyZXR1cm4gcnY7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBjaGFyIGNvbnZb XSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSsKLStzdGF0aWMgY2hhciAqCi0rYmluMmhleCh2b2lk ICpidWYsIHNpemVfdCBsZW4pCi0rewotKwljaGFyICpoZXgsICpwOwotKwl1bnNpZ25lZCBjaGFy ICpzcmMgPSBidWY7Ci0rCQotKwloZXggPSBtYWxsb2MobGVuICogMiArIDEpOwotKwlpZiAoaGV4 ID09IE5VTEwpCi0rCQlyZXR1cm4gTlVMTDsKLSsKLSsJcCA9IGhleDsKLSsKLSsJd2hpbGUgKGxl biA+IDApIHsKLSsJCXVuc2lnbmVkIGM7Ci0rCi0rCQljID0gKnNyYzsKLSsJCXNyYysrOwotKwot KwkJKnAgPSBjb252W2MgPj4gNF07Ci0rCQkrK3A7Ci0rCQkqcCA9IGNvbnZbYyAmIDB4MGZdOwot KwkJKytwOwotKwkJLS1sZW47Ci0rCX0KLSsJKnAgPSAnXDAnOwotKwlyZXR1cm4gaGV4OwotK30K LSsKLSsjZGVmaW5lIEhNQUNfUFJFRklYICIuIiAKLSsjZGVmaW5lIEhNQUNfU1VGRklYICIuaG1h YyIgCi0rI2RlZmluZSBSRUFEX0JVRkZFUl9MRU5HVEggMTYzODQKLSsKLStzdGF0aWMgY2hhciAq Ci0rbWFrZV9obWFjX3BhdGgoY29uc3QgY2hhciAqb3JpZ3BhdGgpCi0rewotKwljaGFyICpwYXRo LCAqcDsKLSsJY29uc3QgY2hhciAqZm47Ci0rCi0rCXBhdGggPSBtYWxsb2Moc2l6ZW9mKEhNQUNf UFJFRklYKSArIHNpemVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKLSsJaWYo cGF0aCA9PSBOVUxMKSB7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlmbiA9IHN0cnJjaHIo b3JpZ3BhdGgsICcvJyk7Ci0rCWlmIChmbiA9PSBOVUxMKSB7Ci0rCQlmbiA9IG9yaWdwYXRoOwot Kwl9IGVsc2UgewotKwkJKytmbjsKLSsJfQotKwotKwlzdHJuY3B5KHBhdGgsIG9yaWdwYXRoLCBm bi1vcmlncGF0aCk7Ci0rCXAgPSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOwotKwlwID0gc3RwY3B5 KHAsIEhNQUNfUFJFRklYKTsKLSsJcCA9IHN0cGNweShwLCBmbik7Ci0rCXAgPSBzdHBjcHkocCwg SE1BQ19TVUZGSVgpOwotKwotKwlyZXR1cm4gcGF0aDsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IGNo YXIgaG1hY2tleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKLSsKLStz dGF0aWMgaW50Ci0rY29tcHV0ZV9maWxlX2htYWMoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmJ1 Ziwgc2l6ZV90ICpobWFjbGVuKQotK3sKLSsJRklMRSAqZiA9IE5VTEw7Ci0rCWludCBydiA9IC0x OwotKwl1bnNpZ25lZCBjaGFyIHJidWZbUkVBRF9CVUZGRVJfTEVOR1RIXTsKLSsJc2l6ZV90IGxl bjsKLSsJdW5zaWduZWQgaW50IGhsZW47Ci0rCUhNQUNfQ1RYIGM7Ci0rCi0rCUhNQUNfQ1RYX2lu aXQoJmMpOwotKwotKwlmID0gZm9wZW4ocGF0aCwgInIiKTsKLSsKLSsJaWYgKGYgPT0gTlVMTCkg ewotKwkJZ290byBlbmQ7Ci0rCX0KLSsKLSsJSE1BQ19Jbml0KCZjLCBobWFja2V5LCBzaXplb2Yo aG1hY2tleSktMSwgRVZQX3NoYTI1NigpKTsKLSsKLSsJd2hpbGUgKChsZW49ZnJlYWQocmJ1Ziwg MSwgc2l6ZW9mKHJidWYpLCBmKSkgIT0gMCkgewotKwkJSE1BQ19VcGRhdGUoJmMsIHJidWYsIGxl bik7Ci0rCX0KLSsKLSsJbGVuID0gc2l6ZW9mKHJidWYpOwotKwkvKiByZXVzZSByYnVmIGZvciBo bWFjICovCi0rCUhNQUNfRmluYWwoJmMsIHJidWYsICZobGVuKTsKLSsKLSsJKmJ1ZiA9IG1hbGxv YyhobGVuKTsKLSsJaWYgKCpidWYgPT0gTlVMTCkgewotKwkJZ290byBlbmQ7Ci0rCX0KLSsKLSsJ KmhtYWNsZW4gPSBobGVuOwotKwotKwltZW1jcHkoKmJ1ZiwgcmJ1ZiwgaGxlbik7Ci0rCi0rCXJ2 ID0gMDsKLStlbmQ6Ci0rCUhNQUNfQ1RYX2NsZWFudXAoJmMpOwotKwotKwlpZiAoZikKLSsJCWZj bG9zZShmKTsKLSsKLSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgaW50Ci0rRklQU0NIRUNL X3ZlcmlmeShjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lKQotK3sK LSsJY2hhciBwYXRoW1BBVEhfTUFYKzFdOwotKwlpbnQgcnY7Ci0rCUZJTEUgKmhmOwotKwljaGFy ICpobWFjcGF0aCwgKnA7Ci0rCWNoYXIgKmhtYWMgPSBOVUxMOwotKwlzaXplX3QgbjsKLSsJCi0r CXJ2ID0gZ2V0X2xpYnJhcnlfcGF0aChsaWJuYW1lLCBzeW1ib2xuYW1lLCBwYXRoLCBzaXplb2Yo cGF0aCkpOwotKwotKwlpZiAocnYgPCAwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWhtYWNwYXRoID0g bWFrZV9obWFjX3BhdGgocGF0aCk7Ci0rCWlmIChobWFjcGF0aCA9PSBOVUxMKQotKwkJcmV0dXJu IDA7Ci0rCi0rCWhmID0gZm9wZW4oaG1hY3BhdGgsICJyIik7Ci0rCWlmIChoZiA9PSBOVUxMKSB7 Ci0rCQlmcmVlKGhtYWNwYXRoKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCWlmIChnZXRsaW5l KCZobWFjLCAmbiwgaGYpID4gMCkgewotKwkJdm9pZCAqYnVmOwotKwkJc2l6ZV90IGhtYWNsZW47 Ci0rCQljaGFyICpoZXg7Ci0rCi0rCQlpZiAoKHA9c3RyY2hyKGhtYWMsICdcbicpKSAhPSBOVUxM KQotKwkJCSpwID0gJ1wwJzsKLSsKLSsJCWlmIChjb21wdXRlX2ZpbGVfaG1hYyhwYXRoLCAmYnVm LCAmaG1hY2xlbikgPCAwKSB7Ci0rCQkJcnYgPSAtNDsKLSsJCQlnb3RvIGVuZDsKLSsJCX0KLSsK LSsJCWlmICgoaGV4PWJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgewotKwkJCWZyZWUo YnVmKTsKLSsJCQlydiA9IC01OwotKwkJCWdvdG8gZW5kOwotKwkJfQotKwotKwkJaWYgKHN0cmNt cChoZXgsIGhtYWMpICE9IDApIHsKLSsJCQlydiA9IC0xOwotKwkJfQotKwkJZnJlZShidWYpOwot KwkJZnJlZShoZXgpOwotKwl9Ci0rCi0rZW5kOgotKwlmcmVlKGhtYWMpOwotKwlmcmVlKGhtYWNw YXRoKTsKLSsJZmNsb3NlKGhmKTsKLSsKLSsJaWYgKHJ2IDwgMCkKLSsJCXJldHVybiAwOwotKwot KwkvKiBjaGVjayBzdWNjZXNzZnVsICovCi0rCXJldHVybiAxOwkKLSt9Ci0rCi0raW50IEZJUFNf bW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCkKLSsgICAgewotKyAg ICBpbnQgcmV0ID0gMDsKLSsKLSsgICAgZmlwc193X2xvY2soKTsKLSsgICAgZmlwc19zdGFydGVk ID0gMTsKLSsgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwotKwotKyAgICBpZihvbm9mZikK LSsJewotKwotKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOwotKwotKwkvKiBEb24ndCBnbyBpbnRv IEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCi0rCSAgIHNlZWRp bmcgKi8KLSsJaWYoRklQU19tb2R1bGVfbW9kZSgpKQotKwkgICAgewotKwkgICAgRklQU2VycihG SVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCk7 Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdv dG8gZW5kOwotKwkgICAgfQotKwotKyNpZmRlZiBPUEVOU1NMX0lBMzJfU1NFMgotKwl7Ci0rCWV4 dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07Ci0rCWlmICgoT1BFTlNTTF9p YTMyY2FwX1BbMF0gJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8MjYpKQotKwkgICAgewot KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9S VEVEX1BMQVRGT1JNKTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQg PSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rCU9QRU5TU0xfaWEzMmNhcF9QWzBdIHw9 ICgxPDwyOCk7CS8qIHNldCAic2hhcmVkIGNhY2hlIgkqLwotKwlPUEVOU1NMX2lhMzJjYXBfUFsx XSAmPSB+KDE8PCg2MC0zMikpOwkvKiBjbGVhciBBVlgJCSovCi0rCX0KLSsjZW5kaWYKLSsKLSsJ aWYoIUZJUFNDSEVDS192ZXJpZnkoImxpYmNyeXB0by5zby4iIFNITElCX1ZFUlNJT05fTlVNQkVS LCJGSVBTX21vZGVfc2V0IikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01P RFVMRV9NT0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOwotKwkgICAg Zmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsK LSsJICAgIH0KLSsKLSsJaWYoIUZJUFNDSEVDS192ZXJpZnkoImxpYnNzbC5zby4iIFNITElCX1ZF UlNJT05fTlVNQkVSLCJTU0xfQ1RYX25ldyIpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBT X0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENI KTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAg Z290byBlbmQ7Ci0rCSAgICB9Ci0rCi0rCWlmKEZJUFNfc2VsZnRlc3QoKSkKLSsJICAgIGZpcHNf c2V0X21vZGUob25vZmYpOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlyZXQg PSAxOwotKwlnb3RvIGVuZDsKLSsJfQotKyAgICBmaXBzX3NldF9tb2RlKDApOwotKyAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAwOwotKyAgICByZXQgPSAxOwotK2VuZDoKLSsgICAgZmlwc19jbGVh cl9vd25pbmdfdGhyZWFkKCk7Ci0rICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgcmV0dXJuIHJl dDsKLSsgICAgfQotKwotK3N0YXRpYyBDUllQVE9fVEhSRUFESUQgZmlwc190aHJlYWQ7Ci0rc3Rh dGljIGludCBmaXBzX3RocmVhZF9zZXQgPSAwOwotKwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25p bmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0 ZWQpCi0rCQl7Ci0rCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChm aXBzX3RocmVhZF9zZXQpCi0rCQkJewotKwkJCUNSWVBUT19USFJFQURJRCBjdXI7Ci0rCQkJQ1JZ UFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7Ci0rCQkJaWYgKCFDUllQVE9fVEhSRUFESURfY21w KCZjdXIsICZmaXBzX3RocmVhZCkpCi0rCQkJCXJldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3Jf dW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwot K2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0r Ci0rCWlmIChmaXBzX3N0YXJ0ZWQpCi0rCQl7Ci0rCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NL X0ZJUFMyKTsKLSsJCWlmICghZmlwc190aHJlYWRfc2V0KQotKwkJCXsKLSsJCQlDUllQVE9fVEhS RUFESURfY3VycmVudCgmZmlwc190aHJlYWQpOwotKwkJCXJldCA9IDE7Ci0rCQkJZmlwc190aHJl YWRfc2V0ID0gMTsKLSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIp OwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IGZpcHNfY2xlYXJfb3duaW5nX3Ro cmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQot KwkJewotKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190 aHJlYWRfc2V0KQotKwkJCXsKLSsJCQlDUllQVE9fVEhSRUFESUQgY3VyOwotKwkJCUNSWVBUT19U SFJFQURJRF9jdXJyZW50KCZjdXIpOwotKwkJCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3Vy LCAmZmlwc190aHJlYWQpKQotKwkJCQlmaXBzX3RocmVhZF9zZXQgPSAwOwotKwkJCX0KLSsJCUNS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0r CX0KLSsKLSsKLSsjaWYgMAotKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gZW5zdXJlIHRo ZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCi0rICogbmFtZSBpcyB0byBrZWVw IHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVpZXQKLSsgKi8KLSt2b2lkIGhhc2hfZmluYWwo dm9pZCkKLSsJewotKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19N RVRIT0QpOwotKwl9Ci0rI2VuZGlmCi0rCi0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4 MzY5NDIwNCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfY21hY19z ZWxmdGVzdC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTgzNjk0MjA0ICswMjAwCi1AQCAtMCwwICsx LDE2MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwlpbnQgbmlkOwotKwlj b25zdCB1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5HVEhdOyBzaXplX3Qga2V5c2l6 ZTsKLSsJY29uc3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOyBzaXplX3QgbXNnc2l6ZTsKLSsJY29u c3QgdW5zaWduZWQgY2hhciBtYWNbMzJdOyBzaXplX3QgbWFjc2l6ZTsKLSt9IENNQUNfS0FUOwot KwotKy8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgw MC0zOEIvU1BfODAwLTM4Qi5wZGYgKi8KLStzdGF0aWMgY29uc3QgQ01BQ19LQVQgdmVjdG9yW10g PSB7Ci0rICAgIHsJTklEX2Flc18xMjhfY2JjLAkvKiBDb3VudCA9IDMyIGZyb20gQ01BQ0dlbkFF UzEyOC50eHQgKi8KLSsJeyAweDc3LDB4YTcsMHg3ZiwweGFmLCAweDI5LDB4MGMsMHgxZiwweGEz LAotKwkgIDB4MGMsMHg2OCwweDNkLDB4ZjEsIDB4NmIsMHhhNywweGE3LDB4N2IsIH0sIDEyOCwK LSsJeyAweDAyLDB4MDYsMHg4MywweGUxLCAweGYwLDB4MzksMHgyZiwweDRjLAotKwkgIDB4YWMs MHg1NCwweDMxLDB4OGIsIDB4NjAsMHgyOSwweDI1LDB4OWUsCi0rCSAgMHg5YywweDU1LDB4M2Qs MHhiYywgMHg0YiwweDZhLDB4ZDksMHg5OCwKLSsJICAweGU2LDB4NGQsMHg1OCwweGU0LCAweGU3 LDB4ZGMsMHgyZSwweDEzLCB9LCAyNTYsCi0rCXsgMHhmYiwweGZlLDB4YTQsMHgxYiwgfSwgMzIK LSsgICAgfSwKLSsgICAgewlOSURfYWVzXzE5Ml9jYmMsCS8qIENvdW50ID0gMjMgZnJvbSBDTUFD R2VuQUVTMTkyLnR4dCAqLwotKwl7IDB4N2IsMHgzMiwweDM5LDB4MTMsIDB4NjksMHhhYSwweDRj LDB4YTksCi0rCSAgMHg3NSwweDU4LDB4MDksMHg1YiwgMHhlMywweGMzLDB4ZWMsMHg4NiwKLSsJ ICAweDJiLDB4ZDAsMHg1NywweGNlLCAweGYxLDB4ZTMsMHgyZCwweDYyLCB9LCAxOTIsCi0rCXsg MHgwIH0sIDAsCi0rCXsgMHhlNCwweGQ5LDB4MzQsMHgwYiwgMHgwMywweGU2LDB4N2QsMHhlZiwK LSsJICAweGQ0LDB4OTYsMHg5YywweGMxLCAweGVkLDB4MzcsMHgzNSwweGU2LCB9LCAxMjgsCi0r ICAgIH0sCi0rICAgIHsJTklEX2Flc18yNTZfY2JjLAkvKiBDb3VudCA9IDMzIGZyb20gQ01BQ0dl bkFFUzI1Ni50eHQgKi8KLSsJeyAweDBiLDB4MTIsMHgyYSwweGM4LCAweGYzLDB4NGUsMHhkMSww eGZlLAotKwkgIDB4MDgsMHgyYSwweDM2LDB4MjUsIDB4ZDEsMHg1NywweDU2LDB4MTQsCi0rCSAg MHg1NCwweDE2LDB4N2EsMHhjMSwgMHg0NSwweGExLDB4MGIsMHhiZiwKLSsJICAweDc3LDB4YzYs MHhhNywweDA1LCAweDk2LDB4ZDUsMHg3NCwweGYxLCB9LCAyNTYsCi0rCXsgMHg0OSwweDhiLDB4 NTMsMHhmZCwgMHhlYywweDg3LDB4ZWQsMHhjYiwKLSsJICAweGYwLDB4NzAsMHg5NywweGRjLCAw eGNkLDB4ZTksMHgzYSwweDA4LAotKwkgIDB4NGIsMHhhZCwweDc1LDB4MDEsIDB4YTIsMHgyNCww eGUzLDB4ODgsCi0rCSAgMHhkZiwweDM0LDB4OWMsMHhlMSwgMHg4OSwweDU5LDB4ZmUsMHg4NCwK LSsJICAweDg1LDB4ZjgsMHhhZCwweDE1LCAweDM3LDB4ZjAsMHhkOCwweDk2LAotKwkgIDB4ZWEs MHg3MywweGJlLDB4ZGMsIDB4NzIsMHgxNCwweDcxLDB4M2YsIH0sIDM4NCwKLSsJeyAweGY2LDB4 MmMsMHg0NiwweDMyLCAweDliLCB9LCA0MCwKLSsgICAgfSwKLSsgICAgewlOSURfZGVzX2VkZTNf Y2JjLAkvKiBDb3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJlcSAqLwotKwl7IDB4ODksMHhi YywweGQ5LDB4NTIsIDB4YTgsMHhjOCwweGFiLDB4MzcsCi0rCSAgMHgxYSwweGY0LDB4OGEsMHhj NywgMHhkMCwweDcwLDB4ODUsMHhkNSwKLSsJICAweGVmLDB4ZjcsMHgwMiwweGU2LCAweGQ2LDB4 MmMsMHhkYywweDIzLCB9LCAxOTIsCi0rCXsgMHhmYSwweDYyLDB4MGMsMHgxYiwgMHhiZSwweDk3 LDB4MzEsMHg5ZSwKLSsJICAweDlhLDB4MGMsMHhmMCwweDQ5LCAweDIxLDB4MjEsMHhmNywweGEy LAotKwkgIDB4MGUsMHhiMCwweDhhLDB4NmEsIDB4NzAsMHg5ZCwweGNiLDB4ZDAsCi0rCSAgMHgw YSwweGFmLDB4MzgsMHhlNCwgMHhmOSwweDllLDB4NzUsMHg0ZSwgfSwgMjU2LAotKwl7IDB4OGYs MHg0OSwweGExLDB4YjcsIDB4ZDYsMHhhYSwweDIyLDB4NTgsIH0sIDY0LAotKyAgICB9LAotK307 Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfY21hYygpCi0rCXsKLSsJc2l6ZV90IG4sIG91dGxlbjsK LSsJdW5zaWduZWQgY2hhciAgICBvdXRbMzJdOwotKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXI7 Ci0rCUNNQUNfQ1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsJY29uc3QgQ01BQ19LQVQgKnQ7 Ci0rCWludCBydiA9IDE7Ci0rCi0rCWZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikv c2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCi0rCQl7Ci0rCQljaXBoZXIgPSBGSVBTX2dldF9j aXBoZXJieW5pZCh0LT5uaWQpOwotKwkJaWYgKCFjaXBoZXIpCi0rCQkJewotKwkJCXJ2ID0gLTE7 Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJaWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQt PmtleXNpemUvOCwgY2lwaGVyLCAwKSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVy cjsKLSsJCQl9Ci0rCQlpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+bXNnLCB0LT5tc2dzaXplLzgp KQotKwkJCXsKLSsJCQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCQkKLSsJCWlm ICghQ01BQ19GaW5hbChjdHgsIG91dCwgJm91dGxlbikpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0r CQkJZ290byBlcnI7Ci0rCQkJfQotKwkJQ01BQ19DVFhfY2xlYW51cChjdHgpOwotKwotKwkJaWYo b3V0bGVuIDwgdC0+bWFjc2l6ZS84IHx8IG1lbWNtcChvdXQsdC0+bWFjLHQtPm1hY3NpemUvOCkp Ci0rCQkJewotKwkJICAgIAlydiA9IDA7Ci0rCQkgICAgCX0KLSsJCX0KLSsKLSsJZXJyOgotKwlD TUFDX0NUWF9mcmVlKGN0eCk7Ci0rCi0rCWlmIChydiA9PSAtMSkKLSsJCXsKLSsJCXJ2ID0gMDsK LSsJCX0KLSsJaWYgKCFydikKLSsJCSAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01B QyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwotLS0t IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEz LTEwLTA0IDExOjQ4OjA0LjE4MzY5NDIwNCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODM2OTQyMDQg KzAyMDAKLUBAIC0wLDAgKzEsMTQ3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0r I2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNvbnN0IHN0cnVjdAotKyAgICB7Ci0r ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbOF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsK LSsgICAgfSB0ZXN0czJbXT0KLSsJewotKwl7Ci0rCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEy LDB4MDQsMHgxNiwweGVjLAotKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcs MHhjNCB9LAotKwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAot Kwl7IDB4NGMsMHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9Ci0rCX0sCi0rCXsK LSsJeyAweDVkLDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCi0rCSAgMHgwMSww eDE2LDB4N2MsMHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCi0rCXsgMHg5YywweDUwLDB4MDks MHgwZiwweDVlLDB4N2QsMHg2OSwweDdlIH0sCi0rCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5 LDB4MGQsMHg5ZSwweGZmIH0sCi0rCX0KLSsJfTsKLSsKLStzdGF0aWMgY29uc3Qgc3RydWN0Ci0r ICAgIHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMjRdOwotKyAgICBjb25zdCB1bnNp Z25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0 ZXh0WzhdOwotKyAgICB9IHRlc3RzM1tdPQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCSAgMHhGRSwweERDLDB4QkEsMHg5OCwweDc2LDB4 NTQsMHgzMiwweDEwLAotKwkgIDB4MTIsMHgzNCwweDU2LDB4NzgsMHg5YSwweGJjLDB4ZGUsMHhm MCB9LAotKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1ZCwweDQ4LDB4YjQsMHgxYyB9LAotKwl7 IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEyLDB4ZWEsMHgxYiB9LAotKwl9LAotKwl7Ci0r CXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwweEZFLAotKwkgIDB4MDEsMHgy MywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKLSsJICAweEVELDB4MzksMHhEOSwweDUw LDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKLSsJeyAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhB QiwweENELDB4RUYgfSwKLSsJeyAweDExLDB4MjUsMHhiMCwweDM1LDB4YmUsMHhhMCwweDgyLDB4 ODYgfSwKLSsJfSwKLSsJfTsKLSsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfZGVzOwotKwotK3Zv aWQgRklQU19jb3JydXB0X2RlcygpCi0rICAgIHsKLSsgICAgY29ycnVwdF9kZXMgPSAxOwotKyAg ICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKLSsgICAgewotKyAgICBpbnQgbiwgcmV0 ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21w YXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQotKwl7 Ci0rCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKwotKwltZW1jcHkocGxhaW50ZXh0LCB0 ZXN0czJbbl0ucGxhaW50ZXh0LCBzaXplb2YocGxhaW50ZXh0KSk7Ci0rCWlmIChjb3JydXB0X2Rl cykKLSsJCXBsYWludGV4dFswXSsrOwotKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQ X2Rlc19lZGVfZWNiKCksCi0rCQkJCXRlc3RzMltuXS5rZXksIE5VTEwsCi0rCQkJCXBsYWludGV4 dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290byBlcnI7Ci0rCX0KLSsKLSsgICAg LyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJz ICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKLSsJewotKwlpZiAoIWZpcHNfY2lwaGVy X3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAotKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxM LAotKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCi0r CQlnb3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAgICBlcnI6Ci0rICAgIEVWUF9DSVBI RVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkKLSsJICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwotKyAg ICByZXR1cm4gcmV0OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9maXBzX2RyYmdfY3RyLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfY3RyLmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4MzY5NDIwNCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYwkyMDEzLTEwLTA0IDExOjQ4 OjA0LjE4MzY5NDIwNCArMDIwMAotQEAgLTAsMCArMSw0MzYgQEAKLSsvKiBmaXBzL3JhbmQvZmlw c19kcmJnX2N0ci5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2 ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGlj ZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0r I2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsj aW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotK3N0YXRpYyB2b2lkIGluY18xMjgoRFJCR19D VFJfQ1RYICpjY3R4KQotKwl7Ci0rCWludCBpOwotKwl1bnNpZ25lZCBjaGFyIGM7Ci0rCXVuc2ln bmVkIGNoYXIgKnAgPSBjY3R4LT5WICsgMTU7Ci0rCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQot KwkJewotKwkJYyA9ICpwOwotKwkJYysrOwotKwkJKnAgPSBjOwotKwkJaWYgKGMpCi0rCQkJcmV0 dXJuOwotKwkJcC0tOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX1hPUihEUkJHX0NU Ul9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsK LSsJc2l6ZV90IGksIG47Ci0rCS8qIEFueSB6ZXJvIHBhZGRpbmcgd2lsbCBoYXZlIG5vIGVmZmVj dCBvbiB0aGUgcmVzdWx0IGFzIHdlCi0rCSAqIGFyZSBYT1JpbmcuIFNvIGp1c3QgcHJvY2VzcyBo b3dldmVyIG11Y2ggaW5wdXQgd2UgaGF2ZS4KLSsJICovCi0rCi0rCWlmICghaW4gfHwgIWlubGVu KQotKwkJcmV0dXJuOwotKwotKwlpZiAoaW5sZW4gPCBjY3R4LT5rZXlsZW4pCi0rCQluID0gaW5s ZW47Ci0rCWVsc2UKLSsJCW4gPSBjY3R4LT5rZXlsZW47Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCBu OyBpKyspCi0rCQljY3R4LT5LW2ldIF49IGluW2ldOwotKwlpZiAoaW5sZW4gPD0gY2N0eC0+a2V5 bGVuKQotKwkJcmV0dXJuOwotKwotKwluID0gaW5sZW4gLSBjY3R4LT5rZXlsZW47Ci0rCS8qIFNo b3VsZCBuZXZlciBoYXBwZW4gKi8KLSsJaWYgKG4gPiAxNikKLSsJCW4gPSAxNjsKLSsJZm9yIChp ID0gMDsgaSA8IDE2OyBpKyspCi0rCQljY3R4LT5WW2ldIF49IGluW2kgKyBjY3R4LT5rZXlsZW5d OwotKwl9Ci0rCi0rLyogUHJvY2VzcyBhIGNvbXBsZXRlIGJsb2NrIHVzaW5nIEJDQyBhbGdvcml0 aG0gb2YgU1BQIDgwMC05MCAxMC40LjMgKi8KLSsKLStzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2Nr KERSQkdfQ1RSX0NUWCAqY2N0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICppbikKLSsJewotKwlpbnQgaTsKLSsJZm9yIChpID0gMDsgaSA8IDE2OyBpKysp Ci0rCQlvdXRbaV0gXj0gaW5baV07Ci0rCUFFU19lbmNyeXB0KG91dCwgb3V0LCAmY2N0eC0+ZGZf a3MpOwotKyNpZiAwCi0rZnByaW50ZihzdGRlcnIsICJCQ0MgaW4rb3V0XG4iKTsKLStCSU9fZHVt cF9mcChzdGRlcnIsIGluLCAxNik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBvdXQsIDE2KTsKLSsj ZW5kaWYKLSsJfQotKwotKy8qIEhhbmRsZSBzZXZlcmFsIEJDQyBvcGVyYXRpb25zIGZvciBhcyBt dWNoIGRhdGEgYXMgd2UgbmVlZCBmb3IgSyBhbmQgWCAqLwotK3N0YXRpYyB2b2lkIGN0cl9CQ0Nf YmxvY2tzKERSQkdfQ1RSX0NUWCAqY2N0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4pCi0rCXsK LSsJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgaW4pOwotKwljdHJfQkNDX2Jsb2NrKGNj dHgsIGNjdHgtPktYICsgMTYsIGluKTsKLSsJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKLSsJCWN0 cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAzMiwgaW4pOwotKwl9Ci0rLyogSW5pdGlhbGlz ZSBCQ0MgYmxvY2tzOiB0aGVzZSBoYXZlIHRoZSB2YWx1ZSAwLDEsMiBpbiBsZWZ0bW9zdCBwb3Np dGlvbnM6Ci0rICogc2VlIDEwLjQuMiBzdGFnZSA3LgotKyAqLwotK3N0YXRpYyB2b2lkIGN0cl9C Q0NfaW5pdChEUkJHX0NUUl9DVFggKmNjdHgpCi0rCXsKLSsJbWVtc2V0KGNjdHgtPktYLCAwLCA0 OCk7Ci0rCW1lbXNldChjY3R4LT5ibHRtcCwgMCwgMTYpOwotKwljdHJfQkNDX2Jsb2NrKGNjdHgs IGNjdHgtPktYLCBjY3R4LT5ibHRtcCk7Ci0rCWNjdHgtPmJsdG1wWzNdID0gMTsKLSsJY3RyX0JD Q19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBjY3R4LT5ibHRtcCk7Ci0rCWlmIChjY3R4LT5r ZXlsZW4gIT0gMTYpCi0rCQl7Ci0rCQljY3R4LT5ibHRtcFszXSA9IDI7Ci0rCQljdHJfQkNDX2Js b2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsKLSsJCX0KLSsJfQotKwotKy8q IFByb2Nlc3Mgc2V2ZXJhbCBibG9ja3MgaW50byBCQ0MgYWxnb3JpdGhtLCBzb21lIHBvc3NpYmx5 IHBhcnRpYWwgKi8KLStzdGF0aWMgdm9pZCBjdHJfQkNDX3VwZGF0ZShEUkJHX0NUUl9DVFggKmNj dHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsKLSsJ aWYgKCFpbiB8fCAhaW5sZW4pCi0rCQlyZXR1cm47Ci0rCS8qIElmIHdlIGhhdmUgcGFydGlhbCBi bG9jayBoYW5kbGUgaXQgZmlyc3QgKi8KLSsJaWYgKGNjdHgtPmJsdG1wX3BvcykKLSsJCXsKLSsJ CXNpemVfdCBsZWZ0ID0gMTYgLSBjY3R4LT5ibHRtcF9wb3M7Ci0rCQkvKiBJZiB3ZSBub3cgaGF2 ZSBhIGNvbXBsZXRlIGJsb2NrIHByb2Nlc3MgaXQgKi8KLSsJCWlmIChpbmxlbiA+PSBsZWZ0KQot KwkJCXsKLSsJCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBsZWZ0 KTsKLSsJCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7Ci0rCQkJY2N0eC0+Ymx0 bXBfcG9zID0gMDsKLSsJCQlpbmxlbiAtPSBsZWZ0OwotKwkJCWluICs9IGxlZnQ7Ci0rCQkJfQot KwkJfQotKwkvKiBQcm9jZXNzIHplcm8gb3IgbW9yZSBjb21wbGV0ZSBibG9ja3MgKi8KLSsJd2hp bGUgKGlubGVuID49IDE2KQotKwkJewotKwkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgaW4pOwotKwkJ aW4gKz0gMTY7Ci0rCQlpbmxlbiAtPSAxNjsKLSsJCX0KLSsJLyogQ29weSBhbnkgcmVtYWluaW5n IHBhcnRpYWwgYmxvY2sgdG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KLSsJaWYgKGlubGVuID4g MCkKLSsJCXsKLSsJCW1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGlu bGVuKTsKLSsJCWNjdHgtPmJsdG1wX3BvcyArPSBpbmxlbjsKLSsJCX0KLSsJfQotKwotK3N0YXRp YyB2b2lkIGN0cl9CQ0NfZmluYWwoRFJCR19DVFJfQ1RYICpjY3R4KQotKwl7Ci0rCWlmIChjY3R4 LT5ibHRtcF9wb3MpCi0rCQl7Ci0rCQltZW1zZXQoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9w b3MsIDAsIDE2IC0gY2N0eC0+Ymx0bXBfcG9zKTsKLSsJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNj dHgtPmJsdG1wKTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyB2b2lkIGN0cl9kZihEUkJHX0NUUl9D VFggKmNjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAot KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKLSsJCQljb25zdCB1 bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4pCi0rCXsKLSsJc2l6ZV90IGlubGVuOwot Kwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+Ymx0bXA7Ci0rCXN0YXRpYyB1bnNpZ25lZCBjaGFy IGM4MCA9IDB4ODA7Ci0rCi0rCWN0cl9CQ0NfaW5pdChjY3R4KTsKLSsJaWYgKCFpbjEpCi0rCQlp bjFsZW4gPSAwOwotKwlpZiAoIWluMikKLSsJCWluMmxlbiA9IDA7Ci0rCWlmICghaW4zKQotKwkJ aW4zbGVuID0gMDsKLSsJaW5sZW4gPSBpbjFsZW4gKyBpbjJsZW4gKyBpbjNsZW47Ci0rCS8qIElu aXRpYWxpc2UgTHx8TiBpbiB0ZW1wb3JhcnkgYmxvY2sgKi8KLSsJKnArKyA9IChpbmxlbiA+PiAy NCkgJiAweGZmOwotKwkqcCsrID0gKGlubGVuID4+IDE2KSAmIDB4ZmY7Ci0rCSpwKysgPSAoaW5s ZW4gPj4gOCkgJiAweGZmOwotKwkqcCsrID0gaW5sZW4gJiAweGZmOwotKwkvKiBOQiBrZXlsZW4g aXMgYXQgbW9zdCAzMiBieXRlcyAqLwotKwkqcCsrID0gMDsKLSsJKnArKyA9IDA7Ci0rCSpwKysg PSAwOwotKwkqcCA9ICh1bnNpZ25lZCBjaGFyKSgoY2N0eC0+a2V5bGVuICsgMTYpICYgMHhmZik7 Ci0rCWNjdHgtPmJsdG1wX3BvcyA9IDg7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMSwgaW4x bGVuKTsKLSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4yLCBpbjJsZW4pOwotKwljdHJfQkNDX3Vw ZGF0ZShjY3R4LCBpbjMsIGluM2xlbik7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsICZjODAsIDEp OwotKwljdHJfQkNDX2ZpbmFsKGNjdHgpOwotKwkvKiBTZXQgdXAga2V5IEsgKi8KLSsJQUVTX3Nl dF9lbmNyeXB0X2tleShjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICogOCwgJmNjdHgtPmRmX2t4a3Mp OwotKwkvKiBYIGZvbGxvd3Mga2V5IEsgKi8KLSsJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyBjY3R4 LT5rZXlsZW4sIGNjdHgtPktYLCAmY2N0eC0+ZGZfa3hrcyk7Ci0rCUFFU19lbmNyeXB0KGNjdHgt PktYLCBjY3R4LT5LWCArIDE2LCAmY2N0eC0+ZGZfa3hrcyk7Ci0rCWlmIChjY3R4LT5rZXlsZW4g IT0gMTYpCi0rCQlBRVNfZW5jcnlwdChjY3R4LT5LWCArIDE2LCBjY3R4LT5LWCArIDMyLCAmY2N0 eC0+ZGZfa3hrcyk7Ci0rI2lmIDAKLStmcHJpbnRmKHN0ZGVyciwgIk91dHB1dCBvZiBjdHJfZGY6 XG4iKTsKLStCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKyAxNik7 Ci0rI2VuZGlmCi0rCX0KLSsKLSsvKiBOQiB0aGUgbm8tZGYgIFVwZGF0ZSBpbiBTUDgwMC05MCBz cGVjaWZpZXMgYSBjb25zdGFudCBpbnB1dCBsZW5ndGgKLSsgKiBvZiBzZWVkbGVuLCBob3dldmVy IG90aGVyIHVzZXMgb2YgdGhpcyBhbGdvcml0aG0gcGFkIHRoZSBpbnB1dCB3aXRoCi0rICogemVy b2VzIGlmIG5lY2Vzc2FyeSBhbmQgaGF2ZSB1cCB0byB0d28gcGFyYW1ldGVycyBYT1JlZCB0b2dl dGhlciwKLSsgKiBoYW5kbGUgYm90aCBjYXNlcyBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCi0r ICovCi0rCi0rc3RhdGljIHZvaWQgY3RyX1VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmluMiwgc2l6ZV90IGluMmxlbiwKLSsJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBz aXplX3Qgbm9uY2VsZW4pCi0rCXsKLSsJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3Ry OwotKwkvKiBrcyBpcyBhbHJlYWR5IHNldHVwIGZvciBjb3JyZWN0IGtleSAqLwotKwlpbmNfMTI4 KGNjdHgpOwotKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOwotKwkv KiBJZiBrZXlsZW4gbG9uZ2VyIHRoYW4gMTI4IGJpdHMgbmVlZCBleHRyYSBlbmNyeXB0ICovCi0r CWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCi0rCQl7Ci0rCQlpbmNfMTI4KGNjdHgpOwotKwkJQUVT X2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SyArIDE2LCAmY2N0eC0+a3MpOwotKwkJfQotKwlpbmNf MTI4KGNjdHgpOwotKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5WLCAmY2N0eC0+a3MpOwot KwkvKiBJZiAxOTIgYml0IGtleSBwYXJ0IG9mIFYgaXMgb24gZW5kIG9mIEsgKi8KLSsJaWYgKGNj dHgtPmtleWxlbiA9PSAyNCkKLSsJCXsKLSsJCW1lbWNweShjY3R4LT5WICsgOCwgY2N0eC0+Viwg OCk7Ci0rCQltZW1jcHkoY2N0eC0+ViwgY2N0eC0+SyArIDI0LCA4KTsKLSsJCX0KLSsKLSsJaWYg KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQotKwkJewotKwkJLyogSWYgbm8g aW5wdXQgcmV1c2UgZXhpc3RpbmcgZGVyaXZlZCB2YWx1ZSAqLwotKwkJaWYgKGluMSB8fCBub25j ZSB8fCBpbjIpCi0rCQkJY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVuLCBub25jZSwgbm9uY2VsZW4s IGluMiwgaW4ybGVuKTsKLSsJCS8qIElmIHRoaXMgYSByZXVzZSBpbnB1dCBpbjFsZW4gIT0gMCAq LwotKwkJaWYgKGluMWxlbikKLSsJCQljdHJfWE9SKGNjdHgsIGNjdHgtPktYLCBkY3R4LT5zZWVk bGVuKTsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJY3RyX1hPUihjY3R4LCBpbjEsIGluMWxlbik7 Ci0rCQljdHJfWE9SKGNjdHgsIGluMiwgaW4ybGVuKTsKLSsJCX0KLSsKLSsJQUVTX3NldF9lbmNy eXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKLSsjaWYgMAotK2Zw cmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHVwZGF0ZSBpczpcbiIpOwotK0JJT19kdW1wX2ZwKHN0 ZGVyciwgY2N0eC0+SywgY2N0eC0+a2V5bGVuKTsKLStCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgt PlYsIDE2KTsKLSsjZW5kaWYKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfaW5zdGFudGlh dGUoRFJCR19DVFggKmRjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3Qg ZW50bGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4s Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCi0rCXsKLSsJ RFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKwltZW1zZXQoY2N0eC0+SywgMCwg c2l6ZW9mKGNjdHgtPkspKTsKLSsJbWVtc2V0KGNjdHgtPlYsIDAsIHNpemVvZihjY3R4LT5WKSk7 Ci0rCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5r cyk7Ci0rCWN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIHBlcnMsIHBlcnNsZW4sIG5vbmNl LCBub25jZWxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9y ZXNlZWQoRFJCR19DVFggKmRjdHgsIAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6 ZV90IGVudGxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxl bikKLSsJewotKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBhZGluLCBhZGlubGVuLCBO VUxMLCAwKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX2dlbmVy YXRlKERSQkdfQ1RYICpkY3R4LAotKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxl biwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKLSsJewot KwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rCWlmIChhZGluICYmIGFkaW5s ZW4pCi0rCQl7Ci0rCQljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5V TEwsIDApOwotKwkJLyogVGhpcyBtZWFucyB3ZSByZXVzZSBkZXJpdmVkIHZhbHVlICovCi0rCQlp ZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCi0rCQkJewotKwkJCWFkaW4g PSBOVUxMOwotKwkJCWFkaW5sZW4gPSAxOwotKwkJCX0KLSsJCX0KLSsJZWxzZQotKwkJYWRpbmxl biA9IDA7Ci0rCi0rCWZvciAoOzspCi0rCQl7Ci0rCQlpbmNfMTI4KGNjdHgpOwotKwkJaWYgKCEo ZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKLSsJCQl7 Ci0rCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgZGN0eC0+bGIsICZjY3R4LT5rcyk7Ci0rCQkJZGN0 eC0+bGJfdmFsaWQgPSAxOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmIChvdXRsZW4gPCAx NikKLSsJCQl7Ci0rCQkJLyogVXNlIEsgYXMgdGVtcCBzcGFjZSBhcyBpdCB3aWxsIGJlIHVwZGF0 ZWQgKi8KLSsJCQlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOwotKwkJ CWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgY2N0eC0+SykpCi0rCQkJCXJldHVybiAw OwotKwkJCW1lbWNweShvdXQsIGNjdHgtPkssIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQot KwkJQUVTX2VuY3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3MpOwotKwkJaWYgKCFmaXBzX2Ry YmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQotKwkJCXJldHVybiAwOwotKwkJb3V0ICs9IDE2Owot KwkJb3V0bGVuIC09IDE2OwotKwkJaWYgKG91dGxlbiA9PSAwKQotKwkJCWJyZWFrOwotKwkJfQot KwotKwljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOwot KwotKwlyZXR1cm4gMTsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfdW5pbnN0YW50 aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwltZW1zZXQoJmRjdHgtPmQuY3RyLCAwLCBzaXpl b2YoRFJCR19DVFJfQ1RYKSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGZpcHNfZHJiZ19j dHJfaW5pdChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0 eC0+ZC5jdHI7Ci0rCi0rCXNpemVfdCBrZXlsZW47Ci0rCi0rCXN3aXRjaCAoZGN0eC0+dHlwZSkK LSsJCXsKLSsJCWNhc2UgTklEX2Flc18xMjhfY3RyOgotKwkJa2V5bGVuID0gMTY7Ci0rCQlicmVh azsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY3RyOgotKwkJa2V5bGVuID0gMjQ7Ci0rCQlicmVh azsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY3RyOgotKwkJa2V5bGVuID0gMzI7Ci0rCQlicmVh azsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gLTI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmluc3Rh bnRpYXRlID0gZHJiZ19jdHJfaW5zdGFudGlhdGU7Ci0rCWRjdHgtPnJlc2VlZCA9IGRyYmdfY3Ry X3Jlc2VlZDsKLSsJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2N0cl9nZW5lcmF0ZTsKLSsJZGN0eC0+ dW5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX3VuaW5zdGFudGlhdGU7Ci0rCi0rCWNjdHgtPmtleWxl biA9IGtleWxlbjsKLSsJZGN0eC0+c3RyZW5ndGggPSBrZXlsZW4gKiA4OwotKwlkY3R4LT5ibG9j a2xlbmd0aCA9IDE2OwotKwlkY3R4LT5zZWVkbGVuID0ga2V5bGVuICsgMTY7Ci0rCi0rCWlmIChk Y3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKLSsJCXsKLSsJCS8qIGRmIGluaXRp YWxpc2F0aW9uICovCi0rCQlzdGF0aWMgdW5zaWduZWQgY2hhciBkZl9rZXlbMzJdID0KLSsJCQl7 Ci0rCQkJMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAotKwkJCTB4MDgs MHgwOSwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwKLSsJCQkweDEwLDB4MTEsMHgxMiww eDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsCi0rCQkJMHgxOCwweDE5LDB4MWEsMHgxYiwweDFjLDB4 MWQsMHgxZSwweDFmIAotKwkJCX07Ci0rCQkvKiBTZXQga2V5IHNjaGVkdWxlIGZvciBkZl9rZXkg Ki8KLSsJCUFFU19zZXRfZW5jcnlwdF9rZXkoZGZfa2V5LCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgt PmRmX2tzKTsKLSsKLSsJCWRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0eC0+a2V5bGVuOwotKwkJZGN0 eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCQlkY3R4LT5taW5fbm9uY2UgPSBk Y3R4LT5taW5fZW50cm9weSAvIDI7Ci0rCQlkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5H VEg7Ci0rCQlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCWRjdHgtPm1heF9h ZGluID0gRFJCR19NQVhfTEVOR1RIOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlkY3R4LT5taW5f ZW50cm9weSA9IGRjdHgtPnNlZWRsZW47Ci0rCQlkY3R4LT5tYXhfZW50cm9weSA9IGRjdHgtPnNl ZWRsZW47Ci0rCQkvKiBOb25jZSBub3QgdXNlZCAqLwotKwkJZGN0eC0+bWluX25vbmNlID0gMDsK LSsJCWRjdHgtPm1heF9ub25jZSA9IDA7Ci0rCQlkY3R4LT5tYXhfcGVycyA9IGRjdHgtPnNlZWRs ZW47Ci0rCQlkY3R4LT5tYXhfYWRpbiA9IGRjdHgtPnNlZWRsZW47Ci0rCQl9Ci0rCi0rCWRjdHgt Pm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0Owot KwotKwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19oYXNoLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5j LmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODM2OTQyMDQgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTgz Njk0MjA0ICswMjAwCi1AQCAtMCwwICsxLDM3OCBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdf aGFzaC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVu c3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5n QE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwot KyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyog VGhpcyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQuMSAqLwotKwotK3N0YXRpYyBpbnQg aGFzaF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXpl X3QgaW4zbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluNCwgc2l6ZV90IGluNGxlbikK LSsJewotKwlFVlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQuaGFzaC5tY3R4OwotKwl1bnNpZ25l ZCBjaGFyICp2dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7Ci0rCXVuc2lnbmVkIGNoYXIgdG1wWzZd OwotKwkvKiBTdGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBh bHdheXMgbGVzcyB0aGFuCi0rCSAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hl Y2sgbGVuZ3RoLgotKwkgKi8KLSsJc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47Ci0rCXRt cFswXSA9IDE7Ci0rCXRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsKLSsJdG1w WzJdID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOwotKwl0bXBbM10gPSAoKG91dGxlbiAq IDgpID4+IDgpICYgMHhmZjsKLSsJdG1wWzRdID0gKG91dGxlbiAqIDgpICYgMHhmZjsKLSsJaWYg KCFpbjEpCi0rCQl7Ci0rCQl0bXBbNV0gPSAodW5zaWduZWQgY2hhcilpbjFsZW47Ci0rCQlpbjEg PSB0bXAgKyA1OwotKwkJaW4xbGVuID0gMTsKLSsJCX0KLSsJZm9yICg7OykKLSsJCXsKLSsJCWlm ICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkpCi0rCQkJcmV0dXJuIDA7 Ci0rCQlpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCi0rCQkJcmV0dXJuIDA7 Ci0rCQlpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEsIGluMWxlbikpCi0r CQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW4yICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIs IGluMmxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0 ZShtY3R4LCBpbjMsIGluM2xlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW40ICYmICFGSVBT X2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAo b3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCi0rCQkJewotKwkJCWlmICghRklQU19kaWdlc3Rm aW5hbChtY3R4LCB2dG1wLCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5KG91dCwg dnRtcCwgb3V0bGVuKTsKLSsJCQlPUEVOU1NMX2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5n dGgpOwotKwkJCXJldHVybiAxOwotKwkJCX0KLSsJCWVsc2UgaWYoIUZJUFNfZGlnZXN0ZmluYWwo bWN0eCwgb3V0LCBOVUxMKSkKLSsJCQlyZXR1cm4gMDsKLSsKLSsJCW91dGxlbiAtPSBkY3R4LT5i bG9ja2xlbmd0aDsKLSsJCWlmIChvdXRsZW4gPT0gMCkKLSsJCQlyZXR1cm4gMTsKLSsJCXRtcFsw XSsrOwotKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKwkJfQotKwl9Ci0rCi0rCi0rLyog QWRkIGFuIHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1 bHQgaW4gYnVmLiBGb3IKLSsgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5l dmVyIGV4Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0eF9h ZGRfYnVmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCi0rCQkJCXVuc2lnbmVk IGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsKLSsJc2l6ZV90IGkgPSBpbmxlbjsKLSsJY29u c3QgdW5zaWduZWQgY2hhciAqcTsKLSsJdW5zaWduZWQgY2hhciBjLCAqcDsKLSsJcCA9IGJ1ZiAr IGRjdHgtPnNlZWRsZW47Ci0rCXEgPSBpbiArIGlubGVuOwotKwotKwlPUEVOU1NMX2Fzc2VydChp IDw9IGRjdHgtPnNlZWRsZW4pOwotKwotKwkvKiBTcGVjaWFsIGNhc2U6IHplcm8gbGVuZ3RoLCBq dXN0IGluY3JlbWVudCBidWZmZXIgKi8KLSsJaWYgKGkpCi0rCQljID0gMDsKLSsJZWxzZSAKLSsJ CWMgPSAxOwotKwotKwl3aGlsZSAoaSkKLSsJCXsKLSsJCWludCByOwotKwkJcC0tOwotKwkJcS0t OwotKwkJciA9ICpwICsgKnEgKyBjOwotKwkJLyogQ2FycnkgKi8KLSsJCWlmIChyID4gMHhmZikK LSsJCQljID0gMTsKLSsJCWVsc2UKLSsJCQljID0gMDsKLSsJCSpwID0gciAmIDB4ZmY7Ci0rCQlp LS07Ci0rCQl9Ci0rCi0rCWkgPSBkY3R4LT5zZWVkbGVuIC0gaW5sZW47Ci0rCi0rCS8qIElmIG5v dCBhZGRpbmcgd2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJyaWVzICovCi0rCWlmIChjICYm IGkpCi0rCQl7Ci0rCQlkbwotKwkJCXsKLSsJCQlwLS07Ci0rCQkJYyA9ICpwOwotKwkJCWMrKzsK LSsJCQkqcCA9IGM7Ci0rCQkJaWYoYykKLSsJCQkJcmV0dXJuOwotKwkJCX0gd2hpbGUoaS0tKTsK LSsJCX0KLSsJfQotKwotKy8qIEZpbmFsaXNlIGFuZCBhZGQgaGFzaCB0byBWICovCi0rCQotK3N0 YXRpYyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlpZiAoIUZJUFNfZGln ZXN0ZmluYWwoJmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhhc2gudnRtcCwgTlVMTCkpCi0r CQkJcmV0dXJuIDA7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGRjdHgtPmQuaGFzaC5WLCBkY3R4LT5k Lmhhc2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0 YXRpYyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG91dGxlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsK LSsJaWYgKG91dGxlbiA9PSAwKQotKwkJcmV0dXJuIDE7Ci0rCW1lbWNweShoY3R4LT52dG1wLCBo Y3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsJZm9yKDs7KQotKwkJewotKwkJRklQU19kaWdlc3Rp bml0KCZoY3R4LT5tY3R4LCBoY3R4LT5tZCk7Ci0rCQlGSVBTX2RpZ2VzdHVwZGF0ZSgmaGN0eC0+ bWN0eCwgaGN0eC0+dnRtcCwgZGN0eC0+c2VlZGxlbik7Ci0rCQlpZiAoIShkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlGSVBTX2Rp Z2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7Ci0rCQkJZGN0eC0+bGJfdmFs aWQgPSAxOwotKwkJCX0KLSsJCWVsc2UgaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQot KwkJCXsKLSsJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1wLCBOVUxM KTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhjdHgtPnZ0bXApKQotKwkJ CQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBoY3R4LT52dG1wLCBvdXRsZW4pOwotKwkJCXJl dHVybiAxOwotKwkJCX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0 eC0+bWN0eCwgb3V0LCBOVUxMKTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgs IG91dCkpCi0rCQkJCXJldHVybiAwOwotKwkJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsK LSsJCQlpZiAob3V0bGVuID09IDApCi0rCQkJCXJldHVybiAxOwotKwkJCW91dCArPSBkY3R4LT5i bG9ja2xlbmd0aDsKLSsJCQl9Ci0rCQljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT52dG1wLCBOVUxM LCAwKTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2luc3RhbnRpYXRlKERS QkdfQ1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRf bGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwK LSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQotKwl7Ci0r CURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwlpZiAoIWhhc2hfZGYoZGN0 eCwgaGN0eC0+ViwgCi0rCQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBw c3RyX2xlbiwKLSsJCQlOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIWhhc2hfZGYoZGN0 eCwgaGN0eC0+QywgCi0rCQkJTlVMTCwgMCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKLSsJCQlO VUxMLCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwotKyNpZmRlZiBIQVNIX0RSQkdfVFJB Q0UKLSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKLSsJaGV4 cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsJaGV4cHJpbnQoc3RkZXJy LCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LSsJCi0rc3RhdGljIGludCBkcmJnX2hhc2hfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJRFJCR19IQVNIX0NUWCAq aGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCS8qIFYgYWJvdXQgdG8gYmUgdXBkYXRlZCBzbyB1c2Ug QyBhcyBvdXRwdXQgaW5zdGVhZCAqLwotKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywKLSsJ CQlOVUxMLCAxLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAotKwkJCWVudCwgZW50X2xlbiwgYWRp biwgYWRpbl9sZW4pKQotKwkJcmV0dXJuIDA7Ci0rCW1lbWNweShoY3R4LT5WLCBoY3R4LT5DLCBk Y3R4LT5zZWVkbGVuKTsKLSsJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIE5VTEwsIDAsCi0r CQkJaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCi0rCQlyZXR1cm4g MDsKLSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVy IHJlc2VlZDpcbiIpOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4p OwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgot KwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdf Q1RYICpkY3R4LAotKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSsJewotKwlEUkJH X0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJRVZQX01EX0NUWCAqbWN0eCA9ICZo Y3R4LT5tY3R4OwotKwl1bnNpZ25lZCBjaGFyIHRtcFs0XTsKLSsJaWYgKGFkaW4gJiYgYWRpbl9s ZW4pCi0rCQl7Ci0rCQl0bXBbMF0gPSAyOwotKwkJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwg aGN0eC0+bWQpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgs IHRtcCwgMSkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwg aGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdl c3RVcGRhdGUobWN0eCwgYWRpbiwgYWRpbl9sZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFj dHhfYWRkX21kKGRjdHgpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWhhc2hfZ2VuKGRj dHgsIG91dCwgb3V0bGVuKSkKLSsJCXJldHVybiAwOwotKwotKwl0bXBbMF0gPSAzOwotKwlpZiAo IUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFF VlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFFVlBf RGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCWlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsJCXJldHVybiAwOwotKwotKwljdHhfYWRk X2J1ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsKLSsJdG1wWzBd ID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7Ci0rCXRtcFsxXSA9IChkY3R4 LT5yZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOwotKwl0bXBbMl0gPSAoZGN0eC0+cmVzZWVk X2NvdW50ZXIgPj4gOCkgJiAweGZmOwotKwl0bXBbM10gPSBkY3R4LT5yZXNlZWRfY291bnRlciAm IDB4ZmY7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRtcCwgNCk7Ci0rI2lmZGVmIEhB U0hfRFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBnZW5lcmF0ZTpcbiIp OwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKwloZXhwcmlu dChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKwlyZXR1cm4gMTsK LSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRj dHgpCi0rCXsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhhc2gubWN0eCk7Ci0rCU9Q RU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5oYXNoLCBzaXplb2YoRFJCR19IQVNIX0NUWCkpOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4 KQotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0 eC0+ZC5oYXNoOwotKwltZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOwotKwlp ZiAoIW1kKQotKwkJcmV0dXJuIC0yOwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQlj YXNlIE5JRF9zaGExOgotKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7Ci0rCQlicmVhazsKLSsKLSsJ CWNhc2UgTklEX3NoYTIyNDoKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOwotKwkJYnJlYWs7Ci0r Ci0rCQlkZWZhdWx0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAyNTY7Ci0rCQlicmVhazsKLSsJCX0K LSsKLSsJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfaW5zdGFudGlhdGU7Ci0rCWRjdHgt PnJlc2VlZCA9IGRyYmdfaGFzaF9yZXNlZWQ7Ci0rCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19oYXNo X2dlbmVyYXRlOwotKwlkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX3VuaW5zdGFudGlh dGU7Ci0rCi0rCWRjdHgtPmQuaGFzaC5tZCA9IG1kOwotKwlFVlBfTURfQ1RYX2luaXQoJmhjdHgt Pm1jdHgpOwotKwotKwkvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4MDAtOTAgMTAuMSB0YWJs ZSAyICovCi0rCi0rCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rCWlm IChkY3R4LT5ibG9ja2xlbmd0aCA+IDMyKQotKwkJZGN0eC0+c2VlZGxlbiA9IDExMTsKLSsJZWxz ZQotKwkJZGN0eC0+c2VlZGxlbiA9IDU1OwotKwotKwotKwlkY3R4LT5taW5fZW50cm9weSA9IGRj dHgtPnN0cmVuZ3RoIC8gODsKLSsJZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7 Ci0rCi0rCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKLSsJZGN0eC0+ bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKwlkY3R4LT5tYXhfcGVycyA9IERSQkdf TUFYX0xFTkdUSDsKLSsJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rCWRj dHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0 OwotKwotKwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1h Yy5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODM2OTQyMDQgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCTIwMTMtMTAtMDQgMTE6NDg6MDQu MTgzNjk0MjA0ICswMjAwCi1AQCAtMCwwICsxLDI4MSBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2Ry YmdfaG1hYy5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBv cGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5z aW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLStzdGF0 aWMgaW50IGRyYmdfaG1hY191cGRhdGUoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAq aW4yLCBzaXplX3QgaW4ybGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVf dCBpbjNsZW4KLSsJCQkpCi0rCXsKLSsJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzAgPSAwLCBjMSA9 IDE7Ci0rCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwlITUFDX0NUWCAq aGN0eCA9ICZobWFjLT5oY3R4OwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5L LCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlm ICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0 dXJuIDA7Ci0rCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMwLCAxKSkKLSsJCXJldHVybiAwOwot KwlpZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCi0rCQlyZXR1 cm4gMDsKLSsJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQot KwkJcmV0dXJuIDA7Ci0rCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4z bGVuKSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+Sywg TlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+ SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCXJl dHVybiAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rCQly ZXR1cm4gMDsKLSsKLSsJaWYgKCFpbjFsZW4gJiYgIWluMmxlbiAmJiAhaW4zbGVuKQotKwkJcmV0 dXJuIDE7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2Nr bGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0 ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYg KCFITUFDX1VwZGF0ZShoY3R4LCAmYzEsIDEpKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjFsZW4g JiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAo aW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rCQlyZXR1cm4gMDsK LSsJaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQotKwkJcmV0 dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKLSsJCXJl dHVybiAwOwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9j a2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghSE1BQ19VcGRh dGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0dXJuIDA7Ci0rCi0r CWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwot KwlyZXR1cm4gMTsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX2luc3RhbnRpYXRl KERSQkdfQ1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBl bnRfbGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xl biwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQotKwl7 Ci0rCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwltZW1zZXQoaG1hYy0+ SywgMCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwltZW1zZXQoaG1hYy0+ViwgMSwgZGN0eC0+Ymxv Y2tsZW5ndGgpOwotKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKLSsJCQllbnQsIGVudF9s ZW4sIG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuKSkKLSsJCXJldHVybiAwOwotKwot KyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UKLSsJZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgaW5z dGFudGlhdGU6XG4iKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xl bmd0aCk7Ci0rCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOwot KyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX3Jlc2Vl ZChEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3Qg ZW50X2xlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVu KQotKwl7Ci0rCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAotKwkJCWVudCwgZW50X2xlbiwg YWRpbiwgYWRpbl9sZW4sIE5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNf RFJCR19UUkFDRQotKwl7Ci0rCQlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsK LSsJCWZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHJlc2VlZDpcbiIpOwotKwkJaGV4cHJpbnQo c3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rCQloZXhwcmludChzdGRlcnIs IGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJfQotKyNlbmRpZgotKwlyZXR1cm4gMTsK LSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAot KwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSsJewotKwlEUkJHX0hNQUNfQ1RYICpo bWFjID0gJmRjdHgtPmQuaG1hYzsKLSsJSE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKLSsJ Y29uc3QgdW5zaWduZWQgY2hhciAqVnRtcCA9IGhtYWMtPlY7Ci0rCWlmIChhZGluX2xlbiAmJiAh ZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwKLSsJCQkJCQlOVUxMLCAwLCBO VUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFITUFDX0lu aXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsCi0rCQkJCQkJCWhtYWMtPm1k LCBOVUxMKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgVnRtcCwg ZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCEoZGN0eC0+eGZsYWdz ICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKLSsJCQl7Ci0rCQkJaWYgKCFI TUFDX0ZpbmFsKGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJZGN0 eC0+bGJfdmFsaWQgPSAxOwotKwkJCVZ0bXAgPSBkY3R4LT5sYjsKLSsJCQljb250aW51ZTsKLSsJ CQl9Ci0rCQllbHNlIGlmIChvdXRsZW4gPiBkY3R4LT5ibG9ja2xlbmd0aCkKLSsJCQl7Ci0rCQkJ aWYgKCFITUFDX0ZpbmFsKGhjdHgsIG91dCwgTlVMTCkpCi0rCQkJCXJldHVybiAwOwotKwkJCWlm ICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJ VnRtcCA9IG91dDsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJewotKwkJCWlmICghSE1BQ19GaW5hbCho Y3R4LCBobWFjLT5WLCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBobWFjLT5WKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5KG91 dCwgaG1hYy0+Viwgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0rCQlvdXQgKz0gZGN0eC0+ YmxvY2tsZW5ndGg7Ci0rCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQl9Ci0rCWlm ICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCwgTlVMTCwg MCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRy YmdfaG1hY191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCUhNQUNfQ1RYX2Ns ZWFudXAoJmRjdHgtPmQuaG1hYy5oY3R4KTsKLSsJT1BFTlNTTF9jbGVhbnNlKCZkY3R4LT5kLmht YWMsIHNpemVvZihEUkJHX0hNQUNfQ1RYKSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGZp cHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJY29uc3QgRVZQX01EICpt ZCA9IE5VTEw7Ci0rCURSQkdfSE1BQ19DVFggKmhjdHggPSAmZGN0eC0+ZC5obWFjOwotKwlkY3R4 LT5zdHJlbmd0aCA9IDI1NjsKLSsJc3dpdGNoIChkY3R4LT50eXBlKQotKwkJewotKwkJY2FzZSBO SURfaG1hY1dpdGhTSEExOgotKwkJbWQgPSBFVlBfc2hhMSgpOwotKwkJZGN0eC0+c3RyZW5ndGgg PSAxMjg7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgotKwkJbWQg PSBFVlBfc2hhMjI0KCk7Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyNTY6Ci0rCQltZCA9IEVWUF9zaGEyNTYoKTsKLSsJCWJy ZWFrOwotKwotKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEzODQ6Ci0rCQltZCA9IEVWUF9zaGEzODQo KTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSBOSURfaG1hY1dpdGhTSEE1MTI6Ci0rCQltZCA9IEVW UF9zaGE1MTIoKTsKLSsJCWJyZWFrOwotKwotKwkJZGVmYXVsdDoKLSsJCWRjdHgtPnN0cmVuZ3Ro ID0gMDsKLSsJCXJldHVybiAtMjsKLSsJCX0KLSsgICAgICAgIGRjdHgtPmluc3RhbnRpYXRlID0g ZHJiZ19obWFjX2luc3RhbnRpYXRlOwotKyAgICAgICAgZGN0eC0+cmVzZWVkID0gZHJiZ19obWFj X3Jlc2VlZDsKLSsgICAgICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19obWFjX2dlbmVyYXRlOwot KyAgICAgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOwot KwlITUFDX0NUWF9pbml0KCZoY3R4LT5oY3R4KTsKLSsJaGN0eC0+bWQgPSBtZDsKLSsJZGN0eC0+ YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsJZGN0eC0+c2VlZGxlbiA9IE1fRVZQ X01EX3NpemUobWQpOwotKwotKyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJl bmd0aCAvIDg7Ci0rICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsK LSsKLSsgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKLSsg ICAgICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgICAgIGRj dHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOwotKyAgICAgICAgZGN0eC0+bWF4X2FkaW4g PSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rICAgICAgICBkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2 OwotKyAgICAgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7Ci0rCi0rCXJldHVybiAx OwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGli LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMKLS0tLSBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcwkyMDEzLTEwLTA0 IDExOjQ4OjA0LjE4NDY5NDIyNiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19saWIuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4NDY5NDIyNiArMDIwMAotQEAg LTAsMCArMSw1NzggQEAKLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0r I2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBTdXBwb3J0IGZyYW1ld29yayBmb3Ig U1A4MDAtOTAgRFJCR3MgKi8KLSsKLStpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgs IGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rCXsKLSsJaW50IHJ2OwotKwltZW1zZXQo ZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVT X1VOSU5JVElBTElTRUQ7Ci0rCWRjdHgtPnhmbGFncyA9IGZsYWdzOwotKwlkY3R4LT50eXBlID0g dHlwZTsKLSsKLSsJZGN0eC0+aWZsYWdzID0gMDsKLSsJZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9 IDA7Ci0rCWRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tf aW50ZXJ2YWwgPSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKLSsKLSsJcnYgPSBmaXBzX2RyYmdfaGFz aF9pbml0KGRjdHgpOwotKwotKwlpZiAocnYgPT0gLTIpCi0rCQlydiA9IGZpcHNfZHJiZ19jdHJf aW5pdChkY3R4KTsKLSsJaWYgKHJ2ID09IC0yKQotKwkJcnYgPSBmaXBzX2RyYmdfaG1hY19pbml0 KGRjdHgpOwotKwotKwlpZiAocnYgPD0gMCkKLSsJCXsKLSsJCWlmIChydiA9PSAtMikKLSsJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1VOU1VQUE9SVEVEX0RSQkdfVFlQ RSk7Ci0rCQllbHNlCi0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9F UlJPUl9JTklUSUFMSVNJTkdfRFJCRyk7Ci0rCQl9Ci0rCi0rCS8qIElmIG5vdCBpbiB0ZXN0IG1v ZGUgcnVuIHNlbGZ0ZXN0cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5cGUgKi8KLSsKLSsJaWYgKCEo ZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKQotKwkJewotKwkJaWYgKCFGSVBTX2RyYmdf aGVhbHRoX2NoZWNrKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf SU5JVCwgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJ CX0KLSsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0rRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50 IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykKLSsJewotKwlEUkJHX0NUWCAqZGN0eDsKLSsJZGN0 eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEUkJHX0NUWCkpOwotKwlpZiAoIWRjdHgpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfTkVXLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7 Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsKLSsJaWYgKHR5cGUgPT0gMCkKLSsJCXsKLSsJCW1l bXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKLSsJCWRjdHgtPnR5cGUgPSAwOwotKwkJ ZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsJCXJldHVybiBkY3R4 OwotKwkJfQotKwotKwlpZiAoRklQU19kcmJnX2luaXQoZGN0eCwgdHlwZSwgZmxhZ3MpIDw9IDAp Ci0rCQl7Ci0rCQlPUEVOU1NMX2ZyZWUoZGN0eCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsJ CQotKwlyZXR1cm4gZGN0eDsKLSsJfQotKwotK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFgg KmRjdHgpCi0rCXsKLSsJaWYgKGRjdHgtPnVuaW5zdGFudGlhdGUpCi0rCQlkY3R4LT51bmluc3Rh bnRpYXRlKGRjdHgpOwotKwkvKiBEb24ndCBmcmVlIHVwIGRlZmF1bHQgRFJCRyAqLwotKwlpZiAo ZGN0eCA9PSBGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSkKLSsJCXsKLSsJCW1lbXNldChkY3R4LCAw LCBzaXplb2YoRFJCR19DVFgpKTsKLSsJCWRjdHgtPnR5cGUgPSAwOwotKwkJZGN0eC0+c3RhdHVz ID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJT1BF TlNTTF9jbGVhbnNlKCZkY3R4LT5kLCBzaXplb2YoZGN0eC0+ZCkpOwotKwkJT1BFTlNTTF9mcmVl KGRjdHgpOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHNpemVfdCBmaXBzX2dldF9lbnRyb3B5KERS QkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNp emVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICp0b3V0 LCAqcDsKLSsJc2l6ZV90IGJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbiwgcnY7Ci0rCWlmICgh ZGN0eC0+Z2V0X2VudHJvcHkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKGRjdHgtPnhmbGFncyAmIERS QkdfRkxBR19URVNUIHx8ICFibCkKLSsJCXJldHVybiBkY3R4LT5nZXRfZW50cm9weShkY3R4LCBw b3V0LCBlbnRyb3B5LCBtaW5fbGVuLCBtYXhfbGVuKTsKLSsJcnYgPSBkY3R4LT5nZXRfZW50cm9w eShkY3R4LCAmdG91dCwgZW50cm9weSArIGJsLAotKwkJCQltaW5fbGVuICsgYmwsIG1heF9sZW4g KyBibCk7Ci0rCWlmICh0b3V0ID09IE5VTEwpCi0rCQlyZXR1cm4gMDsKLSsJKnBvdXQgPSB0b3V0 ICsgYmw7Ci0rCWlmIChydiA8IChtaW5fbGVuICsgYmwpIHx8IChydiAlIGJsKSkKLSsJCXJldHVy biAwOwotKwkvKiBDb21wYXJlIGNvbnNlY3V0aXZlIGJsb2NrcyBmb3IgY29udGludW91cyBQUk5H IHRlc3QgKi8KLSsJZm9yIChwID0gdG91dDsgcCA8IHRvdXQgKyBydiAtIGJsOyBwICs9IGJsKQot KwkJewotKwkJaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpCi0rCQkJewotKwkJCUZJUFNlcnIo RklQU19GX0ZJUFNfR0VUX0VOVFJPUFksIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyk7Ci0r CQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwlydiAtPSBibDsKLSsJaWYgKHJ2ID4gbWF4X2xl bikKLSsJCXJldHVybiBtYXhfbGVuOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStzdGF0aWMgdm9p ZCBmaXBzX2NsZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJCXVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG9sZW4pCi0rCXsKLSsJc2l6ZV90IGJsOwotKwlpZiAoZGN0eC0+eGZs YWdzICYgRFJCR19GTEFHX1RFU1QpCi0rCQlibCA9IDA7Ci0rCWVsc2UKLSsJCWJsID0gZGN0eC0+ ZW50cm9weV9ibG9ja2xlbjsKLSsJLyogQ2FsbCBjbGVhbnVwIHdpdGggb3JpZ2luYWwgYXJndW1l bnRzICovCi0rCWRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4LCBvdXQgLSBibCwgb2xlbiArIGJs KTsKLSsJfQotKwotKwotK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgs Ci0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQotKwl7Ci0r CXNpemVfdCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKm5vbmNl ID0gTlVMTCwgKmVudHJvcHkgPSBOVUxMOwotKwotKyNpZiAwCi0rCS8qIFB1dCBoZXJlIHNvIGVy cm9yIHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCi0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19J TlNUQU5USUFURSwKLSsJCQkJRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkcp OwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTl9FUlJP Ul9TVEFURSk7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19S X0FMUkVBRFlfSU5TVEFOVElBVEVEKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RB TlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZKTsKLSsJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRSk7 Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOU1RBTlRJ QVRFX0VSUk9SKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBT X1JfRFJCR19OT1RfSU5JVElBTElTRUQpOwotKyNlbmRpZgotKwotKwlpbnQgciA9IDA7Ci0rCi0r CWlmIChwZXJzbGVuID4gZGN0eC0+bWF4X3BlcnMpCi0rCQl7Ci0rCQlyID0gRklQU19SX1BFUlNP TkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkc7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYg KCFkY3R4LT5pbnN0YW50aWF0ZSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfRFJCR19OT1RfSU5JVElB TElTRUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJH X1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJewotKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJH X1NUQVRVU19FUlJPUikKLSsJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwotKwkJZWxzZQot KwkJCXIgPSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCi0rCWVudGxlbiA9IGZp cHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAotKwkJCQlkY3R4 LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwotKwotKwlpZiAoZW50bGVuIDwgZGN0 eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCi0rCQl7Ci0rCQly ID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwotKwlpZiAoZGN0eC0+bWF4X25vbmNlID4gMCAmJiBkY3R4LT5nZXRfbm9uY2UpCi0rCQl7Ci0r CQlub25jZWxlbiA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAmbm9uY2UsCi0rCQkJCQlkY3R4LT5z dHJlbmd0aCAvIDIsCi0rCQkJCQlkY3R4LT5taW5fbm9uY2UsIGRjdHgtPm1heF9ub25jZSk7Ci0r Ci0rCQlpZiAobm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2UgfHwgbm9uY2VsZW4gPiBkY3R4LT5t YXhfbm9uY2UpCi0rCQkJewotKwkJCXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRTsK LSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCWlmICghZGN0eC0+aW5zdGFudGlh dGUoZGN0eCwgCi0rCQkJCWVudHJvcHksIGVudGxlbiwKLSsJCQkJbm9uY2UsIG5vbmNlbGVuLAot KwkJCQlwZXJzLCBwZXJzbGVuKSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfRVJST1JfSU5TVEFOVElB VElOR19EUkJHOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCi0rCWRjdHgtPnN0YXR1cyA9IERS QkdfU1RBVFVTX1JFQURZOwotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNF RUQpKQotKwkJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOwotKwotKwllbmQ6Ci0rCi0rCWlmIChl bnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9weSkKLSsJCWZpcHNfY2xlYW51cF9lbnRyb3B5 KGRjdHgsIGVudHJvcHksIGVudGxlbik7Ci0rCi0rCWlmIChub25jZSAmJiBkY3R4LT5jbGVhbnVw X25vbmNlKQotKwkJZGN0eC0+Y2xlYW51cF9ub25jZShkY3R4LCBub25jZSwgbm9uY2VsZW4pOwot KwotKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZKQotKwkJcmV0dXJuIDE7 Ci0rCi0rCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKLSsJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgcik7Ci0rCi0rCXJldHVybiAwOwot KwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKLSsJCQlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbiwgaW50IGhjaGVjaykKLSsJ ewotKwl1bnNpZ25lZCBjaGFyICplbnRyb3B5ID0gTlVMTDsKLSsJc2l6ZV90IGVudGxlbiA9IDA7 Ci0rCWludCByID0gMDsKLSsKLSsjaWYgMAotKwlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwg RklQU19SX05PVF9JTlNUQU5USUFURUQpOwotKwlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwg RklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcpOwotKyNlbmRpZgotKwlpZiAoZGN0eC0+ c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCi0rCQkmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19T VEFUVVNfUkVTRUVEKQotKwkJewotKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19F UlJPUikKLSsJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwotKwkJZWxzZSBpZihkY3R4LT5z dGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCQlyID0gRklQU19SX05PVF9J TlNUQU5USUFURUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFhZGluKQotKwkJYWRp bmxlbiA9IDA7Ci0rCWVsc2UgaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikKLSsJCXsKLSsJ CXIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsJLyogUGVmb3JtIGhl YWx0aCBjaGVjayBvbiBhbGwgcmVzZWVkIG9wZXJhdGlvbnMgaWYgbm90IGEgcHJlZGljdGlvbgot KwkgKiByZXNpc3RhbmNlIHJlcXVlc3QgYW5kIG5vdCBpbiB0ZXN0IG1vZGUuCi0rCSAqLwotKwlp ZiAoaGNoZWNrICYmICEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKQotKwkJewotKwkJ aWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQotKwkJCXsKLSsJCQlyID0gRklQU19S X1NFTEZURVNUX0ZBSUxVUkU7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJfQotKwotKwllbnRs ZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKLSsJ CQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKLSsKLSsJaWYgKGVudGxl biA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KQotKwkJ ewotKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJaWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwgZW50cm9weSwgZW50bGVuLCBhZGlu LCBhZGlubGVuKSkKLSsJCWdvdG8gZW5kOwotKwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRV U19SRUFEWTsKLSsJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKLSsJ CWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKLSsJZW5kOgotKwotKwlpZiAoZW50cm9weSAmJiBk Y3R4LT5jbGVhbnVwX2VudHJvcHkpCi0rCQlmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRy b3B5LCBlbnRsZW4pOwotKwotKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZ KQotKwkJcmV0dXJuIDE7Ci0rCi0rCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFH X05PRVJSKSkKLSsJCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCByKTsKLSsKLSsJcmV0dXJu IDA7Ci0rCX0KLSsKLStpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKLSsJCQlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKLSsJewotKwlyZXR1cm4g ZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7Ci0rCX0KLSsKLStzdGF0aWMgaW50 IGZpcHNfZHJiZ19jaGVjayhEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlpZiAoZGN0eC0+eGZsYWdz ICYgRFJCR19GTEFHX1RFU1QpCi0rCQlyZXR1cm4gMTsKLSsJZGN0eC0+aGVhbHRoX2NoZWNrX2Nu dCsrOwotKwlpZiAoZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA+PSBkY3R4LT5oZWFsdGhfY2hlY2tf aW50ZXJ2YWwpCi0rCQl7Ci0rCQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpCi0r CQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DSEVDSywgRklQU19SX1NFTEZURVNU X0ZBSUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLStpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKLSsJewotKwlpbnQg ciA9IDA7Ci0rCi0rCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJ CXJldHVybiAwOwotKwkJfQotKwotKwlpZiAoIWZpcHNfZHJiZ19jaGVjayhkY3R4KSkKLSsJCXJl dHVybiAwOwotKwotKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCi0rCQkm JiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQotKwkJewotKwkJaWYgKGRjdHgt PnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKLSsJCQlyID0gRklQU19SX0lOX0VSUk9SX1NU QVRFOwotKwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNF RCkKLSsJCQlyID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKG91dGxlbiA+IGRjdHgtPm1heF9yZXF1ZXN0KQotKwkJewotKwkJciA9IEZJUFNf Ul9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlp ZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQotKwkJewotKwkJciA9IEZJUFNfUl9BRERJVElP TkFMX0lOUFVUX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChkY3R4LT5p ZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpCi0rCQlkY3R4LT5nZW5lcmF0ZShkY3R4LCBOVUxM LCBvdXRsZW4sIE5VTEwsIDApOwotKwllbHNlIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+PSBk Y3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0rCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNF RUQ7Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVTRUVEIHx8IHByZWRp Y3Rpb25fcmVzaXN0YW5jZSkKLSsJCXsKLSsJCS8qIElmIHByZWRpY3Rpb24gcmVzaXN0YW5jZSBy ZXF1ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLwotKwkJaW50IGhjaGVjayA9IHByZWRpY3Rp b25fcmVzaXN0YW5jZSA/IDAgOiAxOwotKwkJCi0rCQlpZiAoIWRyYmdfcmVzZWVkKGRjdHgsIGFk aW4sIGFkaW5sZW4sIGhjaGVjaykpCi0rCQkJewotKwkJCXIgPSBGSVBTX1JfUkVTRUVEX0VSUk9S OwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFkaW4gPSBOVUxMOwotKwkJYWRpbmxlbiA9IDA7 Ci0rCQl9Ci0rCi0rCWlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwgb3V0LCBvdXRsZW4sIGFkaW4s IGFkaW5sZW4pKQotKwkJewotKwkJciA9IEZJUFNfUl9HRU5FUkFURV9FUlJPUjsKLSsJCWRjdHgt PnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWlmICgh KGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+ cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQotKwkJCWRjdHgtPnN0YXR1 cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKLSsJCWVsc2UKLSsJCQlkY3R4LT5yZXNlZWRfY291bnRl cisrOwotKwkJfQotKwotKwllbmQ6Ci0rCWlmIChyKQotKwkJewotKwkJaWYgKCEoZGN0eC0+aWZs YWdzICYgRFJCR19GTEFHX05PRVJSKSkKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfR0VO RVJBVEUsIHIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0r aW50IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWludCBy djsKLSsJaWYgKCFkY3R4LT51bmluc3RhbnRpYXRlKQotKwkJcnYgPSAxOwotKwllbHNlCi0rCQly diA9IGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7Ci0rCS8qIEFsdGhvdWdoIHdlJ2QgbGlrZSB0 byBjbGVhbnNlIGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBoYXZlIHRvCi0rCSAqIHRlc3QgdGhl IHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0YS4KLSsJICovCi0rCW1lbXNldCgm ZGN0eC0+ZCwgMCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFU VVNfVU5JTklUSUFMSVNFRDsKLSsJLyogSWYgbWV0aG9kIGhhcyBwcm9ibGVtcyB1bmluc3RhbnRp YXRpbmcsIHJldHVybiBlcnJvciAqLwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19k cmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAoKmdldF9lbnRyb3B5 KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHks IHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVwX2VudHJv cHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAotKwlz aXplX3QgZW50cm9weV9ibG9ja2xlbiwKLSsJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5f bGVuLCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSkKLSsJewotKwlpZiAoZGN0eC0+ c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQlyZXR1cm4gMDsKLSsJZGN0 eC0+ZW50cm9weV9ibG9ja2xlbiA9IGVudHJvcHlfYmxvY2tsZW47Ci0rCWRjdHgtPmdldF9lbnRy b3B5ID0gZ2V0X2VudHJvcHk7Ci0rCWRjdHgtPmNsZWFudXBfZW50cm9weSA9IGNsZWFudXBfZW50 cm9weTsKLSsJZGN0eC0+Z2V0X25vbmNlID0gZ2V0X25vbmNlOwotKwlkY3R4LT5jbGVhbnVwX25v bmNlID0gY2xlYW51cF9ub25jZTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU19kcmJn X3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2FkaW4p KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKLSsJdm9pZCAoKmNsZWFudXBf YWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0r CWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQg bnVtKSwKLSsJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHZv aWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKQotKwl7Ci0rCWlmIChkY3R4LT5zdGF0 dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXJldHVybiAwOwotKwlkY3R4LT5n ZXRfYWRpbiA9IGdldF9hZGluOwotKwlkY3R4LT5jbGVhbnVwX2FkaW4gPSBjbGVhbnVwX2FkaW47 Ci0rCWRjdHgtPnJhbmRfc2VlZF9jYiA9IHJhbmRfc2VlZF9jYjsKLSsJZGN0eC0+cmFuZF9hZGRf Y2IgPSByYW5kX2FkZF9jYjsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSt2b2lkICpGSVBTX2RyYmdf Z2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCXJldHVybiBkY3R4LT5hcHBfZGF0 YTsKLSsJfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCwg dm9pZCAqYXBwX2RhdGEpCi0rCXsKLSsJZGN0eC0+YXBwX2RhdGEgPSBhcHBfZGF0YTsKLSsJfQot KwotK3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KQotKwl7 Ci0rCXJldHVybiBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfZ2V0 X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCXJldHVybiBkY3R4LT5zdHJlbmd0aDsK LSsJfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0 eCwgaW50IGludGVydmFsKQotKwl7Ci0rCWRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IGlu dGVydmFsOwotKwl9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJH X0NUWCAqZGN0eCwgaW50IGludGVydmFsKQotKwl7Ci0rCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9 IGludGVydmFsOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX3N0aWNrID0gMDsKLSsKLSt2b2lk IEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpCi0rCXsKLSsJZHJiZ19zdGljayA9IG9ub2ZmOwot Kwl9Ci0rCi0rLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkgZnVuY3Rpb24gKi8KLStpbnQgZmlw c19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm91 dCkKLSsJewotKwkvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8KLSsJaWYgKGRjdHgtPnhmbGFn cyAmIERSQkdfRkxBR19URVNUKQotKwkJcmV0dXJuIDE7Ci0rCS8qIENoZWNrIGJsb2NrIGlzIHZh bGlkOiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0rCWlmIChkY3R4LT5sYl92YWxpZCA9PSAwKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNfUl9JTlRF Uk5BTF9FUlJPUik7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsJaWYgKGRyYmdfc3RpY2spCi0rCQltZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+ YmxvY2tsZW5ndGgpOwotKwkvKiBDaGVjayBhZ2FpbnN0IGxhc3QgYmxvY2s6IGZhaWwgaWYgbWF0 Y2ggKi8KLSsJaWYgKCFtZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNfUl9EUkJH X1NUVUNLKTsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCXJldHVybiAwOwotKwkJ fQotKwkvKiBTYXZlIGxhc3QgYmxvY2sgZm9yIG5leHQgY29tcGFyaXNvbiAqLwotKwltZW1jcHko ZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwlyZXR1cm4gMTsKLSsJfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKLS0tLSBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODow NC4xODQ2OTQyMjYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfcmFuZC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg0Njk0MjI2ICswMjAwCi1AQCAtMCwwICsx LDE3MiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfcmFuZC5jICovCi0rLyogV3JpdHRlbiBi eSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NM Ci0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgi Ci0rCi0rLyogTWFwcGluZyBvZiBTUDgwMC05MCBEUkJHcyB0byBPcGVuU1NMIFJBTkRfTUVUSE9E ICovCi0rCi0rLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBnbG9iYWwgUFJORyB1c2VkIGF0IGFu eSB0aW1lIGluIE9wZW5TU0wgdXNlIGEgZ2xvYmFsCi0rICogdmFyaWFibGUgdG8gc3RvcmUgY29u dGV4dC4KLSsgKi8KLSsKLStzdGF0aWMgRFJCR19DVFggb3NzbF9kY3R4OwotKwotK0RSQkdfQ1RY ICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCkKLSsJewotKwlyZXR1cm4gJm9zc2xfZGN0eDsK LSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwg aW50IGNvdW50KQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJaW50IHJ2 ID0gMDsKLSsJdW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7Ci0rCXNpemVfdCBhZGlubGVuID0g MDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJZG8gCi0rCQl7Ci0rCQlz aXplX3QgcmNudDsKLSsJCWlmIChjb3VudCA+IChpbnQpZGN0eC0+bWF4X3JlcXVlc3QpCi0rCQkJ cmNudCA9IGRjdHgtPm1heF9yZXF1ZXN0OwotKwkJZWxzZQotKwkJCXJjbnQgPSBjb3VudDsKLSsJ CWlmIChkY3R4LT5nZXRfYWRpbikKLSsJCQl7Ci0rCQkJYWRpbmxlbiA9IGRjdHgtPmdldF9hZGlu KGRjdHgsICZhZGluKTsKLSsJCQlpZiAoYWRpbmxlbiAmJiAhYWRpbikKLSsJCQkJewotKwkJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQllURVMsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FE RElUSU9OQUxfSU5QVVQpOwotKwkJCQlnb3RvIGVycjsKLSsJCQkJfQotKwkJCX0KLSsJCXJ2ID0g RklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwgYWRpbiwgYWRpbmxlbik7Ci0r CQlpZiAoYWRpbikKLSsJCQl7Ci0rCQkJaWYgKGRjdHgtPmNsZWFudXBfYWRpbikKLSsJCQkJZGN0 eC0+Y2xlYW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOwotKwkJCWFkaW4gPSBOVUxMOwot KwkJCX0KLSsJCWlmICghcnYpCi0rCQkJZ290byBlcnI7Ci0rCQlvdXQgKz0gcmNudDsKLSsJCWNv dW50IC09IHJjbnQ7Ci0rCQl9Ci0rCXdoaWxlIChjb3VudCk7Ci0rCXJ2ID0gMTsKLSsJZXJyOgot KwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiBydjsKLSsJfQot KwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBj b3VudCkKLSsJewotKwlpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwgY291bnQpIDw9IDApCi0rCQly ZXR1cm4gLTE7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfc3Rh dHVzKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpbnQgcnY7 Ci0rCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJ2ID0gZGN0eC0+c3RhdHVz ID09IERSQkdfU1RBVFVTX1JFQURZID8gMSA6IDA7Ci0rCUNSWVBUT19yX3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19kcmJn X2NsZWFudXAodm9pZCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCUNS WVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRl KGRjdHgpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCX0KLSsKLStz dGF0aWMgaW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQot Kwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJaWYgKGRjdHgtPnJhbmRfc2Vl ZF9jYikKLSsJCXJldHVybiBkY3R4LT5yYW5kX3NlZWRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbik7 Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfYWRkKGNvbnN0IHZv aWQgKnNlZWQsIGludCBzZWVkbGVuLAotKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQotKwl7Ci0r CURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJaWYgKGRjdHgtPnJhbmRfYWRkX2NiKQot KwkJcmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9lbnRy b3B5KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgcmFu ZF9kcmJnX21ldGggPQotKwl7Ci0rCWZpcHNfZHJiZ19zZWVkLAotKwlmaXBzX2RyYmdfYnl0ZXMs Ci0rCWZpcHNfZHJiZ19jbGVhbnVwLAotKwlmaXBzX2RyYmdfYWRkLAotKwlmaXBzX2RyYmdfcHNl dWRvLAotKwlmaXBzX2RyYmdfc3RhdHVzCi0rCX07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJ UFNfZHJiZ19tZXRob2Qodm9pZCkKLSsJewotKwlyZXR1cm4gJnJhbmRfZHJiZ19tZXRoOwotKwl9 Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlw cwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4NDY5NDIyNiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg0 Njk0MjI2ICswMjAwCi1AQCAtMCwwICsxLDg2MiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdf c2VsZnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVA b3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vu c2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgi Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpbmNsdWRlICJmaXBzX2RyYmdfc2VsZnRl c3QuaCIKLSsKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rCWludCBwb3N0OwotKwlpbnQgbmlkOwotKwl1 bnNpZ25lZCBpbnQgZmxhZ3M7Ci0rCi0rCS8qIEtBVCBkYXRhIGZvciBubyBQUiAqLwotKwljb25z dCB1bnNpZ25lZCBjaGFyICplbnQ7Ci0rCXNpemVfdCBlbnRsZW47Ci0rCWNvbnN0IHVuc2lnbmVk IGNoYXIgKm5vbmNlOwotKwlzaXplX3Qgbm9uY2VsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIg KnBlcnM7Ci0rCXNpemVfdCBwZXJzbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluOwot KwlzaXplX3QgYWRpbmxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50cmVzZWVkOwotKwlz aXplX3QgZW50cmVzZWVkbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGlucmVzZWVkOwot KwlzaXplX3QgYWRpbnJlc2VlZGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7Ci0r CXNpemVfdCBhZGluMmxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0OwotKwlzaXplX3Qg a2F0bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyOwotKwlzaXplX3Qga2F0MmxlbjsK LSsKLSsJLyogS0FUIGRhdGEgZm9yIFBSICovCi0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudF9w cjsKLSsJc2l6ZV90IGVudGxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2VfcHI7 Ci0rCXNpemVfdCBub25jZWxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyc19wcjsK LSsJc2l6ZV90IHBlcnNsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5fcHI7Ci0r CXNpemVfdCBhZGlubGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRwcl9wcjsKLSsJ c2l6ZV90IGVudHBybGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluZ19wcjsKLSsJ c2l6ZV90IGFkaW5nbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOwotKwlz aXplX3QgZW50Z2xlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0X3ByOwotKwlzaXpl X3Qga2F0bGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyX3ByOwotKwlzaXplX3Qg a2F0Mmxlbl9wcjsKLSsKLSsJfSBEUkJHX1NFTEZURVNUX0RBVEE7Ci0rCi0rI2RlZmluZSBtYWtl X2RyYmdfdGVzdF9kYXRhKG5pZCwgZmxhZywgcHIsIHApIHtwLCBuaWQsIGZsYWcgfCBEUkJHX0ZM QUdfVEVTVCwgXAotKwlwciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0 KSwgXAotKwlwciMjX25vbmNlLCBzaXplb2YocHIjI19ub25jZSksIFwKLSsJcHIjI19wZXJzb25h bGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKLSsJ cHIjI19hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dCksIFwKLSsJ cHIjI19lbnRyb3B5aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dHJlc2VlZCks IFwKLSsJcHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxp bnB1dHJlc2VlZCksIFwKLSsJcHIjI19hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19hZGRp dGlvbmFsaW5wdXQyKSwgXAotKwlwciMjX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX2lu dF9yZXR1cm5lZGJpdHMpLCBcCi0rCXByIyNfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19yZXR1 cm5lZGJpdHMpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19wcl9lbnRy b3B5aW5wdXQpLCBcCi0rCXByIyNfcHJfbm9uY2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAot KwlwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nKSwgXAotKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNf cHJfYWRkaXRpb25hbGlucHV0KSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1dHByLCBzaXplb2Yo cHIjI19wcl9lbnRyb3B5aW5wdXRwciksIFwKLSsJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyLCBz aXplb2YocHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyKSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1 dHByMiwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAotKwlwciMjX3ByX2ludF9y ZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMpLCBcCi0rCXByIyNf cHJfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9yZXR1cm5lZGJpdHMpLCBcCi0rCX0KLSsK LSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBwciwgcCkgXAotKwltYWtlX2Ry YmdfdGVzdF9kYXRhKG5pZCwgRFJCR19GTEFHX0NUUl9VU0VfREYsIHByLCBwKQotKwotKyNkZWZp bmUgbWFrZV9kcmJnX3Rlc3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHByLCBwKSBcCi0rCW1ha2VfZHJi Z190ZXN0X2RhdGEoKGN1cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIsIHApCi0rCi0rc3RhdGljIERS QkdfU0VMRlRFU1RfREFUQSBkcmJnX3Rlc3RbXSA9IHsKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YV9k ZihOSURfYWVzXzEyOF9jdHIsIGFlc18xMjhfdXNlX2RmLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3Rf ZGF0YV9kZihOSURfYWVzXzE5Ml9jdHIsIGFlc18xOTJfdXNlX2RmLCAwKSwKLSsJbWFrZV9kcmJn X3Rlc3RfZGF0YV9kZihOSURfYWVzXzI1Nl9jdHIsIGFlc18yNTZfdXNlX2RmLCAxKSwKLSsJbWFr ZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzEyOF9jdHIsIDAsIGFlc18xMjhfbm9fZGYsIDApLAot KwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMTkyX2N0ciwgMCwgYWVzXzE5Ml9ub19kZiwg MCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18yNTZfY3RyLCAwLCBhZXNfMjU2X25v X2RmLCAxKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMSwgMCwgc2hhMSwgMCksCi0r CW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTIyNCwgMCwgc2hhMjI0LCAwKSwKLSsJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfc2hhMjU2LCAwLCBzaGEyNTYsIDEpLAotKwltYWtlX2RyYmdfdGVz dF9kYXRhKE5JRF9zaGEzODQsIDAsIHNoYTM4NCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX3NoYTUxMiwgMCwgc2hhNTEyLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1h Y1dpdGhTSEExLCAwLCBobWFjX3NoYTEsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9o bWFjV2l0aFNIQTIyNCwgMCwgaG1hY19zaGEyMjQsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRh KE5JRF9obWFjV2l0aFNIQTI1NiwgMCwgaG1hY19zaGEyNTYsIDEpLAotKwltYWtlX2RyYmdfdGVz dF9kYXRhKE5JRF9obWFjV2l0aFNIQTM4NCwgMCwgaG1hY19zaGEzODQsIDApLAotKwltYWtlX2Ry YmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTUxMiwgMCwgaG1hY19zaGE1MTIsIDApLAotKwl7 MCwwLDB9Ci0rCX07Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJY29uc3QgdW5zaWduZWQg Y2hhciAqZW50OwotKwlzaXplX3QgZW50bGVuOwotKwlpbnQgZW50Y250OwotKwljb25zdCB1bnNp Z25lZCBjaGFyICpub25jZTsKLSsJc2l6ZV90IG5vbmNlbGVuOwotKwlpbnQgbm9uY2VjbnQ7Ci0r CX0gVEVTVF9FTlQ7Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRj dHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwlU RVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rCSpwb3V0ID0gKHVu c2lnbmVkIGNoYXIgKil0LT5lbnQ7Ci0rCXQtPmVudGNudCsrOwotKwlyZXR1cm4gdC0+ZW50bGVu OwotKwl9Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNp Z25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJVEVTVF9FTlQg KnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKwkqcG91dCA9ICh1bnNpZ25lZCBj aGFyICopdC0+bm9uY2U7Ci0rCXQtPm5vbmNlY250Kys7Ci0rCXJldHVybiB0LT5ub25jZWxlbjsK LSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX3NpbmdsZV9rYXQoRFJCR19DVFggKmRjdHgs IERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCi0rCQkJCQkJCQlpbnQgcXVpY2spCi0rCXsKLSsJVEVT VF9FTlQgdDsKLSsJaW50IHJ2ID0gMDsKLSsJc2l6ZV90IGFkaW5sZW47Ci0rCXVuc2lnbmVkIGNo YXIgcmFuZG91dFsxMDI0XTsKLSsKLSsJLyogSW5pdGlhbCB0ZXN0IHdpdGhvdXQgUFIgKi8KLSsK LSsJLyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNv bmFsaXNhdGlvbgotKwkgKiBzdHJpbmcuCi0rCSAqLwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbml0 KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFGSVBTX2Ry Ymdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDAp KQotKwkJcmV0dXJuIDA7Ci0rCi0rCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwot KwotKwl0LmVudCA9IHRkLT5lbnQ7Ci0rCXQuZW50bGVuID0gdGQtPmVudGxlbjsKLSsJdC5ub25j ZSA9IHRkLT5ub25jZTsKLSsJdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbjsKLSsJdC5lbnRjbnQg PSAwOwotKwl0Lm5vbmNlY250ID0gMDsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUo ZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBOb3Rl IGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwgaW5wdXQgdmFsdWVzCi0rCSAqIGln bm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1Y2UgYWRpbmxlbgotKwkgKiB0 byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGluLgotKwkgKi8KLSsJaWYgKCFm aXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFn cykpCi0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW4gLyAyOwotKwllbHNlCi0rCQlhZGlubGVuID0g dGQtPmFkaW5sZW47Ci0rCi0rCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRw dXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCi0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRj dHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCBhZGlubGVuKSkKLSsJ CWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQsIHRkLT5rYXRsZW4p KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9O T1BSX1RFU1QxX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwkvKiBJZiBhYmJyZXZp YXRlZCBQT1NUIGVuZCBvZiB0ZXN0ICovCi0rCWlmIChxdWljaykKLSsJCXsKLSsJCXJ2ID0gMTsK LSsJCWdvdG8gZXJyOwotKwkJfQotKwkvKiBSZXNlZWQgRFJCRyB3aXRoIHRlc3QgZW50cm9weSBh bmQgYWRkaXRpb25hbCBpbnB1dCAqLwotKwl0LmVudCA9IHRkLT5lbnRyZXNlZWQ7Ci0rCXQuZW50 bGVuID0gdGQtPmVudHJlc2VlZGxlbjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfcmVzZWVkKGRjdHgs IHRkLT5hZGlucmVzZWVkLCB0ZC0+YWRpbnJlc2VlZGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJ LyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVk IGRhdGEgKi8KLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dDJsZW4sIDAsCi0rCQkJCXRkLT5hZGluMiwgdGQtPmFkaW4ybGVuKSkKLSsJCWdvdG8gZXJyOwot KwotKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+a2F0MmxlbikpCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDJf RkFJTFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCi0rCUZJUFNfZHJiZ191bmluc3RhbnRp YXRlKGRjdHgpOwotKwotKwkvKiBOb3cgdGVzdCB3aXRoIFBSICovCi0rCi0rCS8qIEluc3RhbnRp YXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KLSsJ ICogc3RyaW5nLgotKwkgKi8KLSsJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0 ZC0+ZmxhZ3MpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3Mo ZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwot KwotKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKLSsKLSsJdC5lbnQgPSB0ZC0+ ZW50X3ByOwotKwl0LmVudGxlbiA9IHRkLT5lbnRsZW5fcHI7Ci0rCXQubm9uY2UgPSB0ZC0+bm9u Y2VfcHI7Ci0rCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW5fcHI7Ci0rCXQuZW50Y250ID0gMDsK LSsJdC5ub25jZWNudCA9IDA7Ci0rCi0rCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgs IHRkLT5wZXJzX3ByLCB0ZC0+cGVyc2xlbl9wcikpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogTm93 IGdlbmVyYXRlIHdpdGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJvcHkgYXMgdGhpcyB3aWxs Ci0rCSAqIHBlcmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBl eHBlY3RlZCB2YWx1ZS4KLSsJICovCi0rCi0rCXQuZW50ID0gdGQtPmVudHByX3ByOwotKwl0LmVu dGxlbiA9IHRkLT5lbnRwcmxlbl9wcjsKLSsKLSsJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYg c29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcwotKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhl IGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KLSsJICogdG8gaGFsZiB0byBlbnN1cmUgaW52 YWxpZCBkYXRhIGlzIGZlZCBpbi4KLSsJICovCi0rCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQ U19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQotKwkJYWRpbmxlbiA9IHRk LT5hZGlubGVuX3ByIC8gMjsKLSsJZWxzZQotKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOwot KwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3ByLCAx LAotKwkJCQl0ZC0+YWRpbl9wciwgYWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1l bWNtcChyYW5kb3V0LCB0ZC0+a2F0X3ByLCB0ZC0+a2F0bGVuX3ByKSkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSk7 Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCi0rCS8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3aXRoIFBS OiBzdXBwbHkgbmV3IGVudHJvcHkgYWdhaW4uCi0rCSAqIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4 cGVjdGVkIHZhbHVlLgotKwkgKi8KLSsKLSsJdC5lbnQgPSB0ZC0+ZW50Z19wcjsKLSsJdC5lbnRs ZW4gPSB0ZC0+ZW50Z2xlbl9wcjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwg cmFuZG91dCwgdGQtPmthdDJsZW5fcHIsIDEsCi0rCQkJCXRkLT5hZGluZ19wciwgdGQtPmFkaW5n bGVuX3ByKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQy X3ByLCB0ZC0+a2F0Mmxlbl9wcikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf U0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJ fQotKwkvKiBBbGwgT0ssIHRlc3QgY29tcGxldGUgKi8KLSsJcnYgPSAxOwotKwotKwllcnI6Ci0r CWlmIChydiA9PSAwKQotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwllcnIyOgotKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShkY3R4KTsKLSsJCi0rCXJldHVybiBydjsKLSsKLSsJfQotKwotKy8qIEluaXRpYWxpc2UgYSBE UkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KLSsKLStzdGF0aWMgaW50IGRvX2RyYmdfaW5p dChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwgVEVTVF9FTlQgKnQpCi0r CXsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQot KwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVz dF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlGSVBT X2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsIHQpOwotKwotKwl0LT5lbnQgPSB0ZC0+ZW50OwotKwl0 LT5lbnRsZW4gPSB0ZC0+ZW50bGVuOwotKwl0LT5ub25jZSA9IHRkLT5ub25jZTsKLSsJdC0+bm9u Y2VsZW4gPSB0ZC0+bm9uY2VsZW47Ci0rCXQtPmVudGNudCA9IDA7Ci0rCXQtPm5vbmNlY250ID0g MDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBJbml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBE UkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KLStzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCi0rCQkJCQkJCQlU RVNUX0VOVCAqdCkKLSsJewotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgdCkpCi0rCQly ZXR1cm4gMDsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRk LT5wZXJzbGVuKSkKLSsJCXJldHVybiAwOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotKy8qIFRo aXMgZnVuY3Rpb24gcGVyZm9ybXMgZXh0ZW5zaXZlIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVk IGJ5IFNQODAwLTkwLgotKyAqIEluZHVjZSBzZXZlcmFsIGZhaWx1cmUgbW9kZXMgYW5kIGNoZWNr IGFuIGVycm9yIGNvbmRpdGlvbiBpcyBzZXQuCi0rICogVGhpcyBmdW5jdGlvbiBhbG9uZyB3aXRo IGZpcHNfZHJiZ19zaW5nbGVfa2F0IHBlZm9ybXMgdGhlIGhlYWx0aCBjaGVja2luZwotKyAqIG9w ZXJhdGlvbi4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhEUkJH X0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCkKLSsJewotKwl1bnNpZ25lZCBjaGFy IHJhbmRvdXRbMTAyNF07Ci0rCVRFU1RfRU5UIHQ7Ci0rCXNpemVfdCBpOwotKwl1bnNpZ25lZCBp bnQgcmVzZWVkX2NvdW50ZXJfdG1wOwotKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNo YXIgKilkY3R4OwotKwotKwkvKiBJbml0aWFsaXNlIERSQkcgKi8KLSsKLSsJaWYgKCFkb19kcmJn X2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBEb24ndCByZXBvcnQg aW5kdWNlZCBlcnJvcnMgKi8KLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsK LSsJLyogUGVyc29uYWxpc2F0aW9uIHN0cmluZyB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IGRldGVj dGlvbiBvZiB0b28gbGFyZ2UgcGVyc29ubGlzYXRpb24gc3RyaW5nICovCi0rCi0rCWlmIChGSVBT X2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIGRjdHgtPm1heF9wZXJzICsgMSkgPiAw KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf UEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r Ci0rCS8qIEVudHJvcHkgc291cmNlIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZW50cm9weSBzb3Vy Y2UgZmFpbHVyZSBkZXRlY2lvbjogaS5lLiByZXR1cm5zIG5vIGRhdGEgKi8KLSsKLSsJdC5lbnRs ZW4gPSAwOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0 ZC0+cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwot KwkJfQotKwotKwkvKiBUcnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQg RFJCRyAqLwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRs ZW4sIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVD VEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxB R19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElB VEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghZG9fZHJiZ19pbml0KGRj dHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxB R19OT0VSUjsKLSsKLSsJLyogVGVzdCBpbnN1ZmZpY2llbnQgZW50cm9weSAqLwotKwotKwl0LmVu dGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50 aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRF Q1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZM QUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJ QVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IHRvbyBtdWNoIGVu dHJvcHkgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8g ZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwl0LmVudGxl biA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0 ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RF RCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdf Tk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRF X0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBOb25jZSB0ZXN0cyAqLwotKwot KwkvKiBUZXN0IHRvbyBzbWFsbCBub25jZSAqLwotKwotKwlpZiAoZGN0eC0+bWluX25vbmNlKQot KwkJewotKwotKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVy cjsKLSsKLSsJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCQl0Lm5vbmNl bGVuID0gZGN0eC0+bWluX25vbmNlIC0gMTsKLSsKLSsJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlh dGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQkJewotKwkJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNU RUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOwotKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCQl7 Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNU QU5USUFURV9FUlJPUik7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJfQotKwotKwkvKiBU ZXN0IHRvbyBsYXJnZSBub25jZSAqLwotKwotKwlpZiAoZGN0eC0+bWF4X25vbmNlKQotKwkJewot KwotKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsKLSsK LSsJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCQl0Lm5vbmNlbGVuID0g ZGN0eC0+bWF4X25vbmNlICsgMTsKLSsKLSsJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0 eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOwot KwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05P RVJSOwotKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCQl7Ci0rCQkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFU RV9FUlJPUik7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJfQotKwotKwkvKiBJbnN0YW50 aWF0ZSB3aXRoIHZhbGlkIGRhdGEuICovCi0rCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwotKwkvKiBDaGVjayBnZW5lcmF0aW9uIGlzIG5v dyBPSyAqLwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0 bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0rCi0r CWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCS8qIFJlcXVlc3QgdG9vIG11 Y2ggZGF0YSBmb3Igb25lIHJlcXVlc3QgKi8KLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4 LCByYW5kb3V0LCBkY3R4LT5tYXhfcmVxdWVzdCArIDEsIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+ YWRpbmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwot KwkJfQotKwotKwkvKiBUcnkgdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJaWYgKEZJ UFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+ YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RF RCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3Rh bmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKLSsJICogZmFpbHVyZS4KLSsJICov Ci0rCi0rCXQuZW50bGVuID0gMDsKLSsKLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBy YW5kb3V0LCB0ZC0+a2F0bGVuLCAxLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9Q WV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkJCi0rCWRjdHgtPmlm bGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRl KGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsKLSsJ LyogSW5zdGFudGlhdGUgYWdhaW4gd2l0aCB2YWxpZCBkYXRhICovCi0rCi0rCWlmICghZG9fZHJi Z19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwkvKiBUZXN0IHJl c2VlZCBjb3VudGVyIHdvcmtzICovCi0rCS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAq LwotKwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKLSsJLyogU2V0 IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLwotKwlkY3R4LT5yZXNlZWRfY291 bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKLSsKLSsJLyogR2VuZXJhdGUgb3V0cHV0IGFu ZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCi0rCXQuZW50 Y250ID0gMDsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwlp ZiAodC5lbnRjbnQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAq LwotKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkK LSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JF U0VFRF9DT1VOVEVSX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxh Z3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIENo ZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNl Ci0rCSAqIGZhaWx1cmUuCi0rCSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWRjdHgtPmlm bGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwg cmFuZG91dCwgdGQtPmthdGxlbiwgMSwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJP UFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJCQotKwlkY3R4LT5p ZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50 aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0r Ci0rCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJy OwotKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCi0rCS8qIFNhdmUgaW5pdGlhbCBy ZXNlZWQgY291bnRlciAqLwotKwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291 bnRlcjsKLSsJLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLwotKwlk Y3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKLSsKLSsJLyogR2Vu ZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVz ZWVkICovCi0rCXQuZW50Y250ID0gMDsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwg cmFuZG91dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAodC5lbnRjbnQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1Jf UkVTRUVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBo YXMgYmVlbiByZXNldCAqLwotKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2Nv dW50ZXJfdG1wICsgMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0r CQl9Ci0rCi0rCS8qIEV4cGxpY2l0IHJlc2VlZCB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IGV4cGxp Y2l0IHJlc2VlZCB3aXRoIHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCi0rCWlmICghZG9f ZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdz IHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQt PmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRF VEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2Vl ZCB3aXRoIGVudHJvcHkgc291cmNlIGZhaWx1cmUgKi8KLSsKLSsJdC5lbnRsZW4gPSAwOwotKwot KwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkK LSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VO VFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290 byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIG11Y2gg ZW50cm9weSAqLwotKwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290 byBlcnI7Ci0rCi0rCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50 bGVuID0gZGN0eC0+bWF4X2VudHJvcHkgKyAxOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChk Y3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7 Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRl c3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5ICovCi0rCi0rCWlmICgh ZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZs YWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9w eSAtIDE7Ci0rCi0rCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRp bmxlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJP Uik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJcCA9ICh1bnNpZ25lZCBjaGFyICopJmRjdHgt PmQ7Ci0rCS8qIFN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0byBjaGVjayB1bmluc3RhbnRpYXRlIHJl YWxseSB6ZXJvZXMKLSsJICogdGhlIGRhdGEuLi4KLSsJICovCi0rCWZvciAoaSA9IDA7IGkgPCBz aXplb2YoZGN0eC0+ZCk7IGkrKykKLSsJCXsKLSsJCWlmICgqcCAhPSAwKQotKwkJCXsKLSsJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRF X1pFUk9JU0VfRVJST1IpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCXArKzsKLSsJCX0KLSsK LSsJcmV0dXJuIDE7Ci0rCi0rCWVycjoKLSsJLyogQSByZWFsIGVycm9yIGFzIG9wcG9zZWQgdG8g YW4gaW5kdWNlZCBvbmU6IHVuZGVybHlpbmcgZnVuY3Rpb24gd2lsbAotKwkgKiBpbmRpY2F0ZSB0 aGUgZXJyb3IuCi0rCSAqLwotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIp KQotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRlVOQ1RJ T05fRVJST1IpOwotKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJcmV0dXJuIDA7 Ci0rCi0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwg dW5zaWduZWQgaW50IGZsYWdzKQotKwl7Ci0rCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rCWZs YWdzIHw9IERSQkdfRkxBR19URVNUOwotKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9 IDA7IHRkKyspCi0rCQl7Ci0rCQlpZiAodGQtPm5pZCA9PSBuaWQgJiYgdGQtPmZsYWdzID09IGZs YWdzKQotKwkJCXsKLSsJCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkK LSsJCQkJcmV0dXJuIDA7Ci0rCQkJcmV0dXJuIGZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0 ZCk7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMDsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfaGVh bHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWludCBydjsKLSsJRFJCR19DVFggKnRj dHggPSBOVUxMOwotKwl0Y3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJZmlwc19wb3N0X3N0 YXJ0ZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOwotKwlpZiAo IXRjdHgpCi0rCQlyZXR1cm4gMDsKLSsJcnYgPSBmaXBzX2RyYmdfa2F0KHRjdHgsIGRjdHgtPnR5 cGUsIGRjdHgtPnhmbGFncyk7Ci0rCWlmICh0Y3R4KQotKwkJRklQU19kcmJnX2ZyZWUodGN0eCk7 Ci0rCWlmIChydikKLSsJCWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50 eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsJZWxzZQotKwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RF U1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWlmICghcnYpCi0rCQlkY3R4 LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsJZWxzZQotKwkJZGN0eC0+aGVhbHRoX2No ZWNrX2NudCA9IDA7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Ry Ymcodm9pZCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eDsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0 ZDsKLSsJaW50IHJ2ID0gMTsKLSsJZGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rCWlmICgh ZGN0eCkKLSsJCXJldHVybiAwOwotKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7 IHRkKyspCi0rCQl7Ci0rCQlpZiAodGQtPnBvc3QgIT0gMSkKLSsJCQljb250aW51ZTsKLSsJCWlm ICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3Mp KQotKwkJCXJldHVybiAxOwotKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwg MSkpCi0rCQkJewotKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQs ICZ0ZC0+ZmxhZ3MpOwotKwkJCXJ2ID0gMDsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAo IWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkK LSsJCQlyZXR1cm4gMDsKLSsJCX0KLSsJRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rCXJldHVybiBy djsKLSsJfQotKwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpCi0rCXsKLSsJ RFJCR19DVFggKmRjdHg7Ci0rCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rCWludCBydiA9IDE7 Ci0rCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwotKwlpZiAoIWRjdHgpCi0rCQlyZXR1cm4g MDsKLSsJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQotKwkJewotKwkJ aWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFn cykpCi0rCQkJcmV0dXJuIDE7Ci0rCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRk LCAwKSkKLSsJCQl7Ci0rCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5p ZCwgJnRkLT5mbGFncyk7Ci0rCQkJcnYgPSAwOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlm ICghZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKSkKLSsJCQl7Ci0rCQkJZmlwc19wb3N0 X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7Ci0rCQkJcnYgPSAw OwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19U RVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlG SVBTX2RyYmdfZnJlZShkY3R4KTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCi0tLS0gb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcwkyMDEzLTEwLTA0IDExOjQ4 OjA0LjE4NTY5NDI0OSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19zZWxmdGVzdC5oCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg1Njk0MjQ5ICswMjAwCi1AQCAt MCwwICsxLDIzMzUgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rLyogU2VsZnRlc3QgYW5kIGhl YWx0aCBjaGVjayBkYXRhIGZvciB0aGUgU1A4MDAtOTAgRFJCRyAqLwotKwotKyNkZWZpbmUgX19m aXBzX2NvbnN0c2VnCi0rCi0rLyogQUVTLTEyOCB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9w eWlucHV0W10gPQotKwl7Ci0rCTB4NjEsMHg1MiwweDdjLDB4ZTMsMHgyMywweDdkLDB4MGEsMHgw NywweDEwLDB4MGMsMHg1MCwweDMzLAotKwkweGM4LDB4ZGIsMHhmZiwweDEyCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2Vf ZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg1MSwweDBkLDB4ODUsMHg3NywweGVkLDB4MjIsMHg5 NywweDI4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0r CTB4NTksMHg5ZiwweGJiLDB4Y2QsMHhkNSwweDI1LDB4NjksMHhiNSwweGNiLDB4YjUsMHgwMyww eGZlLAotKwkweGQ3LDB4ZDcsMHgwMSwweDY3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlu cHV0W10gPQotKwl7Ci0rCTB4ZWYsMHg4OCwweDc2LDB4MDEsMHhhZiwweDNjLDB4ZmUsMHg4Yiww eGFmLDB4MjYsMHgwNiwweDllLAotKwkweDlhLDB4NDcsMHgwOCwweDc2Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZf cHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhlMiwweDc2LDB4ZjksMHhmNiwweDNhLDB4 YmEsMHgxMCwweDlmLDB4YmYsMHg0NywweDBlLDB4NTEsCi0rCTB4MDksMHhmYiwweGEzLDB4YjYK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZDQsMHg5OCww eDhhLDB4NDYsMHg4MCwweDRjLDB4ZGIsMHhhMywweDU5LDB4MDIsMHg1NywweDUyLAotKwkweDY2 LDB4MWMsMHhlYSwweDViCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJ ewotKwkweDg4LDB4OGMsMHg5MSwweGQ2LDB4YmUsMHg1NiwweDZlLDB4MDgsMHg5YSwweDYyLDB4 MmIsMHgxMSwKLSsJMHgzZiwweDVlLDB4MzEsMHgwNgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlp bnB1dHByMltdID0KLSsJewotKwkweGMwLDB4NWMsMHg2YiwweDk4LDB4MDEsMHgwZCwweDU4LDB4 MTgsMHg1MSwweDE4LDB4OTYsMHhhZSwKLSsJMHhhNywweGUzLDB4YTgsMHg2NwotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGNmLDB4MDEsMHhhYywweDIyLDB4MzEs MHgwNiwweDhlLDB4ZmMsMHhjZSwweDU2LDB4ZWEsMHgyNCwKLSsJMHgwZiwweDM4LDB4NDMsMHhj NgotKwl9OwotKwotKwotKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlp bnB1dFtdID0KLSsJewotKwkweDFmLDB4OGUsMHgzNCwweDgyLDB4MGMsMHhiNywweGJlLDB4YzUs MHgwMSwweDNlLDB4ZDAsMHhhMywKLSsJMHg5ZCwweDdkLDB4MWMsMHg5YgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X25vbmNlW10gPQotKwl7Ci0rCTB4ZDUsMHg0ZCwweGJkLDB4NGEsMHg5MywweDdmLDB4YjgsMHg5 NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGFiLDB4 ZDYsMHgzZiwweDA0LDB4ZmUsMHgyNywweDZiLDB4MmQsMHhkNywweGMzLDB4MWMsMHhmMywKLSsJ MHgzOCwweDY2LDB4YmEsMHgxYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJ ewotKwkweGZlLDB4ZjQsMHgwOSwweGE4LDB4YjcsMHg3MywweDI3LDB4OWMsMHg1ZiwweGE3LDB4 ZWEsMHg0NiwKLSsJMHhiNSwweGUyLDB4YjIsMHg0MQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2ludF9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHg0MiwweGU0LDB4NGUsMHg3YiwweDI3LDB4ZGQsMHhjYiwweGJj LDB4MGEsMHhjZiwweGE2LDB4NjcsCi0rCTB4ZTcsMHg1NywweDExLDB4YjQKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9k Zl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgxNCwweDI2LDB4NjksMHhkOSwweGYz LDB4NjUsMHgwMywweGQ2LDB4NmIsMHhiOSwweDQ0LDB4MGIsCi0rCTB4YzcsMHhjNCwweDllLDB4 MzkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg1NSww eDJlLDB4NjAsMHg5YSwweDA1LDB4NzIsMHg4YSwweGE4LDB4ZWYsMHgyMiwweDgxLDB4NWEsCi0r CTB4YzgsMHg5MywweGZhLDB4ODQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQot Kwl7Ci0rCTB4M2MsMHg0MCwweGM4LDB4YzQsMHgxNiwweDBjLDB4MjEsMHhhNCwweDM3LDB4MmMs MHg4ZiwweGE1LAotKwkweDA2LDB4MGMsMHgxNSwweDJjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4ZTEsMHgzZSwweDk5LDB4OTgsMHg4NiwweDY3LDB4MGIsMHg2Myww eDdiLDB4YmUsMHgzZiwweDg4LAotKwkweDQ2LDB4ODEsMHhjNywweDE5Ci0rCX07Ci0rCi0rCi0r LyogQUVTLTE5MiB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0r CTB4MmIsMHg0ZSwweDhiLDB4ZTEsMHhmMSwweDM0LDB4ODAsMHg1NiwweDgxLDB4ZjksMHg3NCww eGVjLAotKwkweDE3LDB4NDQsMHgyYSwweGYxLDB4MTQsMHhiMCwweGJmLDB4OTcsMHgzOSwweGI3 LDB4MDQsMHg3ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4ZDYsMHg5ZCww eGViLDB4MTQsMHg0ZSwweDZjLDB4MzAsMHgxZSwweDM5LDB4NTUsMHg3MywweGQwLAotKwkweGQx LDB4ODAsMHg3OCwweGZhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQotKwl7Ci0rCTB4ZmMsMHg0MywweDRhLDB4ZjgsMHg5YSwweDU1LDB4YjMsMHg1MywweDgzLDB4 ZTIsMHgxOCwweDE2LAotKwkweDBjLDB4ZGMsMHhjZCwweDVlLDB4NGYsMHhhMCwweDAzLDB4MDEs MHgyYiwweDlmLDB4ZTQsMHhkNSwKLSsJMHg3ZCwweDQ5LDB4ZjAsMHg0MSwweDllLDB4M2QsMHg5 OSwweDA0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4NWUs MHg5ZiwweDQ5LDB4NmYsMHgyMSwweDhiLDB4MWQsMHgzMiwweGQ1LDB4ODQsMHg1YywweGFjLAot KwkweGFmLDB4ZGYsMHhlNCwweDc5LDB4OWUsMHhhZiwweGE5LDB4ODIsMHhkMCwweGY4LDB4NGYs MHhjYiwKLSsJMHg2OSwweDEwLDB4MGEsMHg3ZSwweDgxLDB4NTcsMHhiNSwweDM2Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91 c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhkNCwweDgxLDB4MGMsMHhkNyww eDY2LDB4MzksMHhlYywweDQyLDB4NTMsMHg4NywweDQxLDB4YTUsCi0rCTB4MWUsMHg3ZCwweDgw LDB4OTEsMHg4ZSwweGJiLDB4ZWQsMHhhYywweDE0LDB4MDIsMHgxYSwweGQ1Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGRmLDB4MWQsMHgzOSwweDQ1LDB4 N2MsMHg5YiwweGM2LDB4MmIsMHg3ZCwweDhjLDB4OTMsMHhlOSwKLSsJMHgxOSwweDMwLDB4NmIs MHg2NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgwMCww eDcxLDB4MjcsMHg0ZSwweGQzLDB4MTQsMHhmMSwweDIwLDB4N2YsMHg0YSwweDQxLDB4MzIsCi0r CTB4MmEsMHg5NywweDExLDB4NDMsMHg4ZiwweDRhLDB4MTUsMHg3YiwweDliLDB4NTEsMHg3OSww eGRhLAotKwkweDQ5LDB4M2QsMHhkZSwweGU4LDB4YmMsMHg5MywweDkxLDB4OTkKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3Vz ZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHg5MCwweGVlLDB4NzYsMHhhMSww eDQ1LDB4OGQsMHhiNywweDQwLDB4YjAsMHgxMSwweGJmLDB4ZDAsCi0rCTB4NjUsMHhkNywweDNj LDB4N2MsMHg0ZiwweDIwLDB4M2YsMHg0ZSwweDExLDB4OWQsMHhiMywweDVlCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjQsMHgzYiwweDIwLDB4YTQsMHgzNyww eDY2LDB4YmEsMHg3MiwweDM5LDB4M2YsMHhjZiwweDNjLAotKwkweDdlLDB4MWEsMHgyYiwweDgz Ci0rCX07Ci0rCi0rCi0rLyogQUVTLTE5MiB1c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlu cHV0W10gPQotKwl7Ci0rCTB4OGQsMHg3NCwweGE0LDB4NTAsMHgxYSwweDAyLDB4NjgsMHgwYyww eDJhLDB4NjksMHhjNCwweDgyLAotKwkweDNiLDB4YmIsMHhkYSwweDBlLDB4N2YsMHg3NywweGEz LDB4MTcsMHg3OCwweDU3LDB4YjIsMHg3YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX25vbmNlW10gPQotKwl7Ci0r CTB4NzUsMHhkNSwweDFmLDB4YWMsMHhhNCwweDhkLDB4NDIsMHg3OCwweGQ3LDB4NjksMHg4Niww eDlkLAotKwkweDc3LDB4ZDcsMHg0MSwweDBlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQotKwl7Ci0rCTB4NGUsMHgzMywweDQxLDB4M2MsMHg5YywweGMyLDB4ZDIsMHg1 MywweGFmLDB4OTAsMHhlYSwweGNmLAotKwkweDE5LDB4NTAsMHgxZSwweGU2LDB4NmYsMHg2Myww eGM4LDB4MzIsMHgyMiwweGRjLDB4MDcsMHg2NSwKLSsJMHg5YywweGQzLDB4ZjgsMHgzMCwweDll LDB4ZWQsMHgzNSwweDcwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0r CTB4NWQsMHg4YiwweDhjLDB4YzEsMHhkZiwweDBlLDB4MDIsMHg3OCwweGZiLDB4MTksMHhiOCww eDY5LAotKwkweDc4LDB4NGUsMHg5YywweDUyLDB4YmMsMHhjNywweDIwLDB4YzksMHhlNiwweDVl LDB4NzcsMHgyMiwKLSsJMHgyOCwweDNkLDB4MGMsMHg5ZSwweDY4LDB4YTgsMHg0NSwweGQ3Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGQ1LDB4ZTcsMHgwOCww eGM1LDB4MTksMHg5OSwweGQ1LDB4MzEsMHgwMywweDBhLDB4NzQsMHhiNiwKLSsJMHhiNywweGVk LDB4ZTksMHhlYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkw eDljLDB4MjYsMHhkYSwweGYxLDB4YWMsMHhkOSwweDVhLDB4ZDYsMHhhOCwweDY1LDB4ZjUsMHgw MiwKLSsJMHg4ZiwweGRjLDB4YTIsMHgwOSwweDU0LDB4YTYsMHhlMiwweGE0LDB4ZGUsMHgzMiww eGUwLDB4MDEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJ MHg5YiwweDkwLDB4YjAsMHgzYSwweDBlLDB4M2EsMHg4MCwweDA3LDB4NGEsMHhmNCwweGRhLDB4 NzYsCi0rCTB4MjgsMHgzMCwweDNjLDB4ZWUsMHg1NCwweDFiLDB4OTQsMHg1OSwweDUxLDB4NDMs MHg1NiwweDc3LAotKwkweGFmLDB4ODgsMHhkZCwweDYzLDB4ODksMHg0NywweDA2LDB4NjUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4M2MsMHgxMSwweDY0LDB4 N2EsMHg5NiwweGY1LDB4ZDgsMHhiOCwweGFlLDB4ZDYsMHg3MCwweDRlLAotKwkweDE2LDB4OTYs MHhkZSwweGU5LDB4NjIsMHhiYywweGVlLDB4MjgsMHgyZiwweDI2LDB4YTYsMHhmMCwKLSsJMHg1 NiwweGVmLDB4YTMsMHhmMSwweDZiLDB4YTEsMHhiMSwweDc3Ci0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4MGIsMHhlMiwweDU2LDB4MDMsMHgxZSwweGRiLDB4MmMsMHg2 ZCwweDdmLDB4MWIsMHgxNSwweDU4LAotKwkweDFhLDB4ZjksMHgxMywweDI4Ci0rCX07Ci0rCi0r Ci0rLyogQUVTLTI1NiB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4NjEsMHg2OCwweGZjLDB4MWEsMHhmMCwweGI1LDB4OTUsMHg2YiwweDg1LDB4MDksMHg5 YiwweDc0LAotKwkweDNmLDB4MTMsMHg3OCwweDQ5LDB4M2IsMHg4NSwweGVjLDB4OTMsMHgxMyww eDNiLDB4YTksMHg0ZiwKLSsJMHg5NiwweGFiLDB4MmMsMHhlNCwweGM4LDB4OGYsMHhkZCwweDZh Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhZCwweGQyLDB4YmIsMHhiYSww eGI3LDB4NjUsMHg4OSwweGMzLDB4MjEsMHg2YywweDU1LDB4MzMsCi0rCTB4MmIsMHgzNiwweGZm LDB4YTQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJ MHg2ZSwweGNhLDB4ZTcsMHgyMCwweDcyLDB4ZDMsMHg4NCwweDVhLDB4MzIsMHhkMywweDRiLDB4 MjQsCi0rCTB4NzIsMHhjNCwweDYzLDB4MmIsMHg5ZCwweDEyLDB4MjQsMHgwYywweDIzLDB4MjYs MHg4ZSwweDgzLAotKwkweDE2LDB4MzcsMHgwYiwweGQxLDB4MDYsMHg0ZiwweDY4LDB4NmQKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg3ZSwweDA4LDB4NGEs MHhiYiwweGUzLDB4MjEsMHg3YywweGM5LDB4MjMsMHhkMiwweGY4LDB4YjAsCi0rCTB4NzMsMHg5 OCwweGJhLDB4ODQsMHg3NCwweDIzLDB4YWIsMHgwNiwweDhhLDB4ZTIsMHgyMiwweGQzLAotKwkw eDdiLDB4Y2UsMHg5YiwweGQyLDB4NGEsMHg3NiwweGI4LDB4ZGUKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDBiLDB4MjMsMHhhZiwweGRmLDB4ZjEsMHg2Miww eGQ3LDB4ZDMsMHg0MywweDk3LDB4ZjgsMHg3NywKLSsJMHgwNCwweGE4LDB4NDIsMHgyMCwweGJk LDB4ZjYsMHgwZiwweGMxLDB4MTcsMHgyZiwweDlmLDB4NTQsCi0rCTB4YmIsMHg1NiwweDE3LDB4 ODYsMHg2OCwweDBlLDB4YmEsMHhhOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHgzMSwweDhlLDB4YWQsMHhhZiwweDQwLDB4ZWIsMHg2YiwweDc0LDB4MzEs MHg0NiwweDgwLDB4YzcsCi0rCTB4MTcsMHhhYiwweDNjLDB4N2EKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OTQsMHg2YiwweGM5LDB4OWYsMHhhYiwweDhk LDB4YzUsMHhlYywweDcxLDB4ODgsMHgxZCwweDAwLAotKwkweDhjLDB4ODksMHg2OCwweGU0LDB4 YzgsMHgwNywweDc3LDB4MzYsMHgxNywweDZkLDB4NzksMHg3OCwKLSsJMHhjNywweDA2LDB4NGUs MHg5OSwweDA0LDB4MjgsMHgyOSwweGMzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHIy W10gPQotKwl7Ci0rCTB4YmYsMHg2YywweDU5LDB4MmEsMHgwZCwweDQ0LDB4MGYsMHhhZSwweDlh LDB4NWUsMHgwMywweDczLAotKwkweGQ4LDB4YTYsMHhlMSwweGNmLDB4MjUsMHg2MSwweDM4LDB4 MjQsMHg4NiwweDllLDB4NTMsMHhlOCwKLSsJMHhhNCwweGRmLDB4NTYsMHhmNCwweDA2LDB4MDcs MHg5YywweDBmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjIs MHg0YSwweGI0LDB4YjgsMHhiNiwweGVlLDB4N2QsMHhiMSwweDllLDB4YzksMHhmOSwweGEwLAot KwkweGQ5LDB4ZTIsMHg5NywweDAwCi0rCX07Ci0rCi0rCi0rLyogQUVTLTI1NiB1c2UgZGYgTm8g UFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl91c2VfZGZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YTUsMHgzZSwweDM3LDB4MTAs MHgxNywweDQzLDB4OTEsMHg5MywweDU5LDB4MWUsMHg0NywweDUwLAotKwkweDg3LDB4YWEsMHhk ZCwweGQ1LDB4YzEsMHhjMywweDg2LDB4Y2QsMHhjYSwweDBkLDB4ZGIsMHg2OCwKLSsJMHhlMCww eDAyLDB4ZDgsMHgwZiwweGRjLDB4NDAsMHgxYSwweDQ3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfbm9uY2VbXSA9 Ci0rCXsKLSsJMHhhOSwweDRkLDB4YTUsMHg1YSwweGZkLDB4YzUsMHgwYywweGU1LDB4MWMsMHg5 YSwweDNiLDB4OGEsCi0rCTB4NGMsMHg0NCwweDg0LDB4NDAKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg4YiwweDUyLDB4YTIsMHg0YSwweDkzLDB4YzMs MHg0ZSwweGE3LDB4MWUsMHgxYywweGE3LDB4MDUsCi0rCTB4ZWIsMHg4MiwweDliLDB4YTYsMHg1 ZCwweGU0LDB4ZDQsMHhlMCwweDdmLDB4YTMsMHhkOCwweDZiLAotKwkweDM3LDB4ODQsMHg1Ziww eGYxLDB4YzcsMHhkNSwweGY2LDB4ZDIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHgyMCwweGY0LDB4MjIsMHhlZCwweGY4LDB4NWMsMHhhMSwweDZhLDB4MDEsMHhj ZiwweGJlLDB4NWYsCi0rCTB4OGQsMHg2YywweDk0LDB4N2YsMHhhZSwweDEyLDB4YTgsMHg1Nyww eGRiLDB4MmEsMHhhOSwweGJmLAotKwkweGM3LDB4YjMsMHg2NSwweDgxLDB4ODAsMHg4ZCwweDBk LDB4NDYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NGUsMHg0 NCwweGZkLDB4ZjMsMHg5ZSwweDI5LDB4YTIsMHhiOCwweDBmLDB4NWQsMHg2YywweGUxLAotKwkw eDI4LDB4MGMsMHgzYiwweGMxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4ZGQsMHg0MCwweGU1LDB4OTgsMHg3YiwweDI3LDB4MTYsMHg3MywweDE1LDB4Njgs MHhkMiwweDc2LAotKwkweGJmLDB4MGMsMHg2NywweDE1LDB4NzUsMHg3OSwweDAzLDB4ZDMsMHhk ZSwweGRlLDB4OTEsMHg0NiwKLSsJMHg0MiwweGRkLDB4ZDQsMHg2NywweGM4LDB4NzksMHhjOCww eDFlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4N2Ys MHhkOCwweDFmLDB4YmQsMHgyYSwweGI1LDB4MWMsMHgxMSwweDVkLDB4ODMsMHg0ZSwweDk5LAot KwkweGY2LDB4NWMsMHhhNSwweDQwLDB4MjAsMHhlZCwweDM4LDB4OGUsMHhkNSwweDllLDB4ZTAs MHg3NSwKLSsJMHg5MywweGZlLDB4MTIsMHg1ZSwweDVkLDB4NzMsMHhmYiwweDc1Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGNkLDB4MmMsMHhmZiwweDE0LDB4 NjksMHgzZSwweDRjLDB4OWUsMHhmZCwweGZlLDB4MjYsMHgwZCwKLSsJMHhlOSwweDg2LDB4MDAs MHg0OSwweDMwLDB4YmEsMHhiMSwweGM2LDB4NTAsMHg1NywweDc3LDB4MmEsCi0rCTB4NjIsMHgz OSwweDJjLDB4M2IsMHg3NCwweGViLDB4YzksMHgwZAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3JldHVybmVkYml0 c1tdID0KLSsJewotKwkweDRmLDB4NzgsMHhiZSwweGI5LDB4NGQsMHg5NywweDhjLDB4ZTksMHhk MCwweDk3LDB4ZmUsMHhhZCwKLSsJMHhmYSwweGZkLDB4MzUsMHg1ZQotKwl9OwotKwotKwotKy8q IEFFUy0xMjggbm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg5 YSwweDI1LDB4NjUsMHgxMCwweDY3LDB4ZDUsMHhiNiwweDZiLDB4NzAsMHhhMSwweGIzLDB4YTQs Ci0rCTB4NDMsMHg5NSwweDgwLDB4YzAsMHg4NCwweDBhLDB4NzksMHhiMCwweDg4LDB4NzQsMHhm MiwweGJmLAotKwkweDMxLDB4NmMsMHgzMywweDM4LDB4MGIsMHgwMCwweGIyLDB4NWEKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NzgsMHg0NywweDZiLDB4ZjcsMHg5MCwweDhl LDB4ODcsMHhmMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7 Ci0rCTB4ZjcsMHgyMiwweDFkLDB4M2EsMHhiZSwweDFkLDB4Y2EsMHgzMiwweDFiLDB4YmQsMHg4 NywweDBjLAotKwkweDUxLDB4MjQsMHgxOSwweGVlLDB4YTMsMHgyMywweDA5LDB4NjMsMHgzMyww eDNkLDB4YTgsMHgwYywKLSsJMHgxYywweGZhLDB4NDIsMHg4OSwweGNjLDB4NmYsMHhhMCwweGE4 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHhjOSwweGUwLDB4 ODAsMHhiZiwweDhjLDB4NDUsMHg1OCwweDM5LDB4ZmYsMHgwMCwweGFiLDB4MDIsCi0rCTB4NGMs MHgzZSwweDNhLDB4OTUsMHg5YiwweDgwLDB4YTgsMHgyMSwweDJhLDB4ZWUsMHhiYSwweDczLAot KwkweGIxLDB4ZDksMHhjZiwweDI4LDB4ZjYsMHg4ZiwweDliLDB4MTIKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3By X2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4NGMsMHhhOCwweGM1LDB4ZjAsMHg1OSwweDll LDB4YTYsMHg4ZCwweDI2LDB4NTMsMHhkNywweDhhLAotKwkweGE5LDB4ZDgsMHhmNywweGVkLDB4 YjIsMHhmOSwweDEyLDB4NDIsMHhlMSwweGU1LDB4YmQsMHhlNywKLSsJMHhlNywweDFkLDB4NzQs MHg5OSwweDAwLDB4OWQsMHgzMSwweDNlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4ZTIsMHhhYywweDIwLDB4ZjAsMHg4MCwweGU3LDB4YmMsMHg3ZSwweDlj LDB4N2IsMHg2NSwweDcxLAotKwkweGFmLDB4MTksMHgzMiwweDE2Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MzIsMHg3ZiwweDM4LDB4OGIsMHg3MywweDBh LDB4NzgsMHg4MywweGRjLDB4MzAsMHhiZSwweDlmLAotKwkweDEwLDB4MWYsMHhmNSwweDFmLDB4 Y2EsMHgwMCwweGI1LDB4MGQsMHhkNiwweDlkLDB4NjAsMHg4MywKLSsJMHg1MSwweDU0LDB4N2Qs MHgzOCwweDIzLDB4M2EsMHg1MiwweDUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJb XSA9Ci0rCXsKLSsJMHgxOCwweDYxLDB4NTMsMHg1NiwweGVkLDB4ZWQsMHhkNywweDIwLDB4ZmIs MHg3MSwweDA0LDB4N2EsCi0rCTB4YjIsMHhhYywweGMxLDB4MjgsMHhjZCwweGYyLDB4YzIsMHhm YywweGFhLDB4YjEsMHgwNiwweDA3LAotKwkweGU5LDB4NDYsMHg5NSwweDAyLDB4NDgsMHgwMSww eDc4LDB4ZjkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDI5LDB4 YzgsMHgxYiwweDE1LDB4YjEsMHhkMSwweGMyLDB4ZjYsMHg3MSwweDg2LDB4NjgsMHgzMywKLSsJ MHg1NywweDgyLDB4MzMsMHhhZgotKwl9OwotKwotKwotKy8qIEFFUy0xMjggbm8gZGYgTm8gUFIg ICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhjOSwweGM1LDB4NzksMHhiYywweGU4 LDB4YzUsMHgxOSwweGQ4LDB4YmMsMHg2NiwweDczLDB4NjcsCi0rCTB4ZjYsMHhkMywweDcyLDB4 YWEsMHhhNiwweDE2LDB4YjgsMHg1MCwweGI3LDB4NDcsMHgzYSwweDQyLAotKwkweGFiLDB4ZjQs MHgxNiwweGIyLDB4OTYsMHhkMiwweGI2LDB4NjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX25vbmNlW10gPQotKwl7 Ci0rCTB4NWYsMHhiZiwweDk3LDB4MGMsMHg0YiwweGE0LDB4ODcsMHgxMwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4Y2UsMHhmYiwweDdiLDB4M2YsMHhk NCwweDZiLDB4MjksMHgwZCwweDY5LDB4MDYsMHhmZiwweGJiLAotKwkweGYyLDB4ZTUsMHhjNiww eDZjLDB4MGEsMHgxMCwweGEwLDB4Y2YsMHgxYSwweDQ4LDB4YzcsMHg4YiwKLSsJMHgzYywweDE2 LDB4ODgsMHhlZCwweDUwLDB4MTMsMHg4MSwweGNlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5w dXRbXSA9Ci0rCXsKLSsJMHg0YiwweDIyLDB4NDYsMHgxOCwweDAyLDB4N2IsMHhkMiwweDFiLDB4 MjIsMHg0MiwweDdjLDB4MzcsCi0rCTB4ZDksMHhmNiwweGU4LDB4OWIsMHgxMiwweDMwLDB4NWYs MHhlOSwweDkwLDB4ZTgsMHgwOCwweDI0LAotKwkweDRmLDB4MDYsMHg2NiwweGRiLDB4MTksMHgy YiwweDEzLDB4OTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgy ZSwweDk2LDB4NzAsMHg2NCwweGZhLDB4ZGYsMHhkZiwweDU3LDB4YjUsMHg4MiwweGVlLDB4ZDYs Ci0rCTB4ZWQsMHgzZSwweDY1LDB4YzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtd ID0KLSsJewotKwkweDI2LDB4YzAsMHg3MiwweDE2LDB4M2EsMHg0YiwweGI3LDB4OTksMHhkNCww eDA3LDB4YWYsMHg2NiwKLSsJMHg2MiwweDM2LDB4OTYsMHhhNCwweDUxLDB4MTcsMHhmYSwweDA3 LDB4OGIsMHgxNywweDVlLDB4YTEsCi0rCTB4MmYsMHgzYywweDEwLDB4ZTcsMHg5MCwweGQwLDB4 NDYsMHgwMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4 ODMsMHgzOSwweDM3LDB4N2IsMHgwMiwweDA2LDB4ZDIsMHgxMiwweDEzLDB4OGQsMHg4YiwweGYy LAotKwkweGYwLDB4ZjYsMHgyNiwweGViLDB4YTQsMHgyMiwweDdiLDB4YzIsMHhlNywweGJhLDB4 NzksMHhlNCwKLSsJMHgzYiwweDc3LDB4NWQsMHg0ZCwweDQ3LDB4YjIsMHgyZCwweGI0Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MGIsMHhiOSwweDY3LDB4Mzcs MHhkYiwweDgzLDB4ZGYsMHhjYSwweDgxLDB4OGIsMHhmOSwweDNmLAotKwkweGYxLDB4MTEsMHgx YiwweDJmLDB4ZjAsMHg2MSwweGE2LDB4ZGYsMHhiYSwweGEzLDB4YjEsMHhhYywKLSsJMHhkMyww eGU2LDB4MDksMHhiOCwweDJjLDB4NmEsMHg2NywweGQ2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHgxZSwweGE3LDB4YTQsMHhlNCwweGUxLDB4YTYsMHg3YywweDY5LDB4 OWEsMHg0NCwweDZjLDB4MzYsCi0rCTB4ODEsMHgzNywweDE5LDB4ZDQKLSsJfTsKLSsKLSsKLSsv KiBBRVMtMTkyIG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4 OWQsMHgyYywweGQyLDB4NTUsMHg2NiwweGVhLDB4ZTAsMHhiZSwweDE4LDB4YjcsMHg3NiwweGU3 LAotKwkweDczLDB4MzUsMHhkOCwweDFmLDB4YWQsMHgzYSwweGUzLDB4ODEsMHgwZSwweDkyLDB4 ZDAsMHg2MSwKLSsJMHhjOSwweDEyLDB4MjYsMHhmNiwweDFjLDB4ZGYsMHhmZSwweDQ3LDB4YWEs MHhmZSwweDdkLDB4NWEsCi0rCTB4MTcsMHgxZiwweDhkLDB4OWEKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX25v bmNlW10gPQotKwl7Ci0rCTB4NDQsMHg4MiwweGVkLDB4ZTgsMHg0YywweDI4LDB4NWEsMHgxNCww eGZmLDB4ODgsMHg4ZCwweDE5LAotKwkweDYxLDB4NWMsMHhlZSwweDBmCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9w cl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg0NywweGQ3LDB4OWIsMHg5OSww eGFhLDB4Y2IsMHhlNywweGQyLDB4NTcsMHg2NiwweDJjLDB4ZTEsCi0rCTB4NzgsMHhkNiwweDJj LDB4ZWEsMHhhMywweDIzLDB4NWYsMHgyYSwweGMxLDB4M2EsMHhmMCwweGE0LAotKwkweDIwLDB4 M2IsMHhmYSwweDA3LDB4ZDUsMHgwNSwweDAyLDB4ZTQsMHg1NywweDAxLDB4YjYsMHgxMCwKLSsJ MHg1NywweDJlLDB4ZTcsMHg1NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQot Kwl7Ci0rCTB4NGIsMHg3NCwweDBiLDB4NDAsMHhjZSwweDZiLDB4YzIsMHg2YSwweDI0LDB4YjQs MHhmMywweGFkLAotKwkweDdhLDB4YTUsMHg3YSwweGEyLDB4MTUsMHhlMiwweGM4LDB4NjEsMHgx NSwweGM2LDB4YjcsMHg4NSwKLSsJMHg2OSwweDExLDB4YWQsMHg3YiwweDE0LDB4ZDIsMHhmNiww eDEyLDB4YTEsMHg5NSwweDVkLDB4M2YsCi0rCTB4ZTIsMHhkMCwweDBjLDB4MmYKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4MGMsMHg5YywweGFkLDB4MDUsMHhl ZSwweGFlLDB4NDgsMHgyMywweDg5LDB4NTksMHhhMSwweDk0LAotKwkweGQ3LDB4ZDgsMHg3NSww eGQ1LDB4NTQsMHg5MywweGM3LDB4NGEsMHhkOSwweDI2LDB4ZGUsMHhlYiwKLSsJMHhiYSwweGIw LDB4N2UsMHgzMCwweDFkLDB4NWYsMHg2OSwweDQwLDB4OWMsMHgzYiwweDE3LDB4NTgsCi0rCTB4 MWQsMHgzMCwweGIzLDB4NzgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHhmNywweDkzLDB4YjAsMHg2ZCwweDc3LDB4ODMsMHhkNSwweDM4LDB4MDEsMHhlMSww eDUyLDB4NDAsCi0rCTB4N2UsMHgzZSwweDBjLDB4MjYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhiYywweDRiLDB4MzcsMHg0NCwweDFjLDB4YzUsMHg0NSww eDVmLDB4OGYsMHg1MSwweDYyLDB4OGEsCi0rCTB4ODUsMHgzMCwweDFkLDB4N2MsMHhlNCwweGNm LDB4ZjcsMHg0NCwweGNlLDB4MzIsMHgzZSwweDU3LAotKwkweDk1LDB4YTQsMHgyYSwweGRmLDB4 ZmQsMHg5ZSwweDM4LDB4NDEsMHhiMywweGY2LDB4YzUsMHhlZSwKLSsJMHgwYywweDRiLDB4ZWUs MHg2ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4ZWMsMHhh ZiwweGY2LDB4NGYsMHhiMSwweGEwLDB4NTQsMHhiNSwweDViLDB4ZTMsMHg0NiwweGIwLAotKwkw eDc2LDB4NWEsMHg3YywweDNmLDB4N2IsMHg5NCwweDY5LDB4MjEsMHg1MSwweDAyLDB4ZTUsMHg5 ZiwKLSsJMHgwNCwweDU5LDB4MDIsMHg5OCwweGM2LDB4NDMsMHgyYywweGNjLDB4MjYsMHg0Yyww eDg3LDB4NmIsCi0rCTB4OGUsMHgwYSwweDgzLDB4ZGYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweDc0LDB4NDUsMHhmYiwweDUzLDB4ODQsMHg5NiwweGJlLDB4ZmYs MHgxNSwweGNjLDB4NDEsMHg5MSwKLSsJMHhiOSwweGExLDB4MjEsMHg2OAotKwl9OwotKwotKwot Ky8qIEFFUy0xOTIgbm8gZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJ MHgzYywweDdkLDB4YjUsMHhlMCwweDU0LDB4ZDksMHg2ZSwweDhjLDB4YTksMHg4NiwweGNlLDB4 NGUsCi0rCTB4NmIsMHhhZiwweGViLDB4MmYsMHhlNywweDc1LDB4ZTAsMHg4YiwweGE0LDB4M2Is MHgwNywweGZlLAotKwkweGJlLDB4MzMsMHg3NSwweDkzLDB4ODAsMHgyNywweGI1LDB4MjksMHg0 NywweDhiLDB4YzcsMHgyOCwKLSsJMHg5NCwweGMzLDB4NTksMHg2MwotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfbm9u Y2VbXSA9Ci0rCXsKLSsJMHg0MywweGYxLDB4N2QsMHhiOCwweGMzLDB4ZmUsMHhkMCwweDIzLDB4 NmIsMHhiNCwweDkyLDB4ZGIsCi0rCTB4MjksMHhmZCwweDQ1LDB4NzEKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDlmLDB4MjQsMHgyOSwweDk5LDB4OWUs MHgwMSwweGFiLDB4ZTksMHgxOSwweGQ4LDB4MjMsMHgwOCwKLSsJMHhiNywweGQ2LDB4N2UsMHg4 YywweGMwLDB4OWUsMHg3ZiwweDZlLDB4NWIsMHgzMywweDIwLDB4OTYsCi0rCTB4MGIsMHgyMyww eDJjLDB4YTUsMHg2YSwweGY4LDB4MWIsMHgwNCwweDI2LDB4ZGIsMHgyZSwweDJiLAotKwkweDNi LDB4ODgsMHhjZSwweDM1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJ MHg5NCwweGU5LDB4N2MsMHgzZCwweGE3LDB4ZGIsMHg2MCwweDgzLDB4MWYsMHg5OCwweDNmLDB4 MGIsCi0rCTB4ODgsMHg1OSwweDU3LDB4NTEsMHg4OCwweDlmLDB4NzYsMHg0OSwweDlmLDB4YTYs MHhkYSwweDcxLAotKwkweDFkLDB4MGQsMHg0NywweDE2LDB4NjMsMHhjNSwweDY4LDB4ZTQsMHg1 ZCwweDM5LDB4NjksMHhiMywKLSsJMHgzZSwweGJlLDB4ZDQsMHg4ZQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfaW50 X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGY5LDB4ZDcsMHhhZCwweDY5LDB4YWIsMHg4Ziww eDIzLDB4NTYsMHg3MCwweDE3LDB4NGYsMHgyYSwKLSsJMHg0NSwweGU3LDB4NGEsMHhjNQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4YTYsMHg3MSwweDZhLDB4 M2QsMHhiYSwweGQxLDB4ZTgsMHg2NiwweGE2LDB4ZWYsMHhiMiwweDBlLAotKwkweGE4LDB4OWMs MHhhYSwweDRlLDB4YWYsMHgxNywweDg5LDB4NTAsMHgwMCwweGRhLDB4YTEsMHhiMSwKLSsJMHgw YiwweGE0LDB4ZDksMHgzNSwweDg5LDB4YzgsMHhlNSwweGIwLDB4ZDksMHhiNywweGM0LDB4MzMs Ci0rCTB4OWIsMHhjYiwweDdlLDB4NzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2Vl ZFtdID0KLSsJewotKwkweDI3LDB4MjEsMHhmYywweGMyLDB4YmQsMHhmMywweDNjLDB4Y2UsMHhj MywweGNhLDB4YzEsMHgwMSwKLSsJMHhlMCwweGZmLDB4OTMsMHgxMiwweDdkLDB4NTQsMHg0Miww eGUzLDB4OWYsMHgwMywweGRmLDB4MjcsCi0rCTB4MDQsMHgwNywweDNjLDB4NTMsMHg3ZiwweGE4 LDB4NjYsMHhjOCwweDk3LDB4NGIsMHg2MSwweDQwLAotKwkweDVkLDB4N2EsMHgyNSwweDc5Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MmQsMHg4ZSwweDE2LDB4 NWQsMHgwYiwweDlmLDB4ZWIsMHhhYSwweGQ2LDB4ZWMsMHgyOCwweDcxLAotKwkweDdjLDB4MGIs MHhjMSwweDFkLDB4ZDQsMHg0NCwweDE5LDB4NDcsMHhmZCwweDFkLDB4N2MsMHhlNSwKLSsJMHhm MywweDI3LDB4ZTEsMHhiNiwweDcyLDB4MGEsMHhlMCwweGVjLDB4MGUsMHhjZCwweGVmLDB4MWEs Ci0rCTB4OTEsMHg2YSwweGUzLDB4NWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweGU1LDB4ZGEsMHhiOCwweGUwLDB4NjMsMHg1OSwweDVhLDB4Y2MsMHgzZCwweGRjLDB4 OWYsMHhlOCwKLSsJMHg2NiwweDY3LDB4MmMsMHg5MgotKwl9OwotKwotKwotKy8qIEFFUy0yNTYg bm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxNSwweGM3LDB4 NWQsMHhjYiwweDQxLDB4NGIsMHgxNiwweDAxLDB4M2EsMHhkMSwweDQ0LDB4ZTgsCi0rCTB4MjIs MHgzMiwweGM2LDB4OWMsMHgzZiwweGU3LDB4NDMsMHhmNSwweDlhLDB4ZDMsMHhlYSwweGYyLAot KwkweGQ3LDB4NGUsMHg2ZSwweDZhLDB4NTUsMHg3MywweDQwLDB4ZWYsMHg4OSwweGFkLDB4MGQs MHgwMywKLSsJMHg5NiwweDdlLDB4NzgsMHg4MSwweDJmLDB4OTEsMHgxYiwweDQ0LDB4YjAsMHgw MiwweGJhLDB4MWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4ZGMsMHhlNCww eGQ0LDB4MjcsMHg3YSwweDkwLDB4ZDcsMHg5OSwweDQzLDB4YTEsMHgzYywweDMwLAotKwkweGNj LDB4NGIsMHhlZSwweDJlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 Ci0rCXsKLSsJMHhlMywweGU2LDB4YjksMHgxMSwweGU0LDB4N2EsMHhhNCwweDQwLDB4NmIsMHhm OCwweDczLDB4ZjcsCi0rCTB4N2UsMHhlYywweGM3LDB4YjksMHg5NywweGJmLDB4ZjgsMHgyNSww eDdiLDB4YmUsMHgxMSwweDliLAotKwkweDViLDB4NmEsMHgwYywweDJlLDB4MmIsMHgwMSwweDUx LDB4Y2QsMHg0MSwweDRiLDB4NmIsMHhhYywKLSsJMHgzMSwweGE4LDB4MGIsMHhmNywweGU2LDB4 NTksMHg0MiwweGI4LDB4MDMsMHgwYywweGY4LDB4MDYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9u YWxpbnB1dFtdID0KLSsJewotKwkweDZhLDB4OWYsMHgwMCwweDkxLDB4YWUsMHhmZSwweGNmLDB4 ODQsMHg5OSwweGNlLDB4YjEsMHg0MCwKLSsJMHg2ZCwweDVkLDB4MzMsMHgyOCwweDg0LDB4ZjQs MHg4YywweDYzLDB4NGMsMHg3ZSwweGJkLDB4MmMsCi0rCTB4ODAsMHg3NiwweGVlLDB4NWEsMHhh YSwweDE1LDB4MDcsMHgzMSwweGQ4LDB4YmIsMHg4YywweDY5LAotKwkweDlkLDB4OWQsMHhiYyww eDdlLDB4NDksMHhhZSwweGVjLDB4MzksMHg2YiwweGQxLDB4MWYsMHg3ZQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZf cHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhmMywweGI5LDB4NzUsMHg5YywweGJkLDB4 ODgsMHhlYSwweGEyLDB4NTAsMHhhZCwweGQ2LDB4MTYsCi0rCTB4MWEsMHgxMiwweDNjLDB4ODYs MHg2OCwweGFmLDB4NmYsMHhiZSwweDE5LDB4ZjIsMHhlZSwweGNjLAotKwkweGE1LDB4NzAsMHg4 NCwweDUzLDB4NTAsMHhjYiwweDlmLDB4MTQsMHhhOSwweGU1LDB4ZWUsMHhiOSwKLSsJMHg0OCww eDQ1LDB4NDAsMHhlMiwweGM3LDB4YzksMHg5YSwweDc0LDB4ZmYsMHg4YywweDk5LDB4MWYKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyZSwweGYyLDB4NDUs MHg0YywweDYyLDB4MmUsMHgwYSwweGI5LDB4NmIsMHhhMiwweGZkLDB4NTYsCi0rCTB4NzksMHg2 MCwweDkzLDB4Y2YKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJ MHhhZiwweDY5LDB4MjAsMHhlOSwweDNiLDB4MzcsMHg5ZCwweDNmLDB4YjQsMHg4MCwweDAyLDB4 N2EsCi0rCTB4MjUsMHg3ZCwweGI4LDB4ZGUsMHg3MSwweGM1LDB4MDYsMHgwYywweGI0LDB4ZTIs MHg4ZiwweDM1LAotKwkweGQ4LDB4MTQsMHgwZCwweDdmLDB4NzYsMHg2MywweDRlLDB4YjUsMHhl ZSwweGU5LDB4NmYsMHgzNCwKLSsJMHhjNywweDVmLDB4NTYsMHgxNCwweDRhLDB4ZTgsMHg3Myww eDk1LDB4NWIsMHgxYywweGI5LDB4Y2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltd ID0KLSsJewotKwkweGU1LDB4YjAsMHgyZSwweDdlLDB4NTIsMHgzMCwweGUzLDB4NjMsMHg4Miww eGI2LDB4NDQsMHhkMywKLSsJMHgyNSwweDE5LDB4MDUsMHgyNCwweDlhLDB4OWYsMHg1ZiwweDI3 LDB4NmEsMHgyOSwweGFiLDB4ZmEsCi0rCTB4MDcsMHhhMiwweDQyLDB4MGYsMHhjNSwweGE4LDB4 OTQsMHg3YywweDE3LDB4N2IsMHg4NSwweDgzLAotKwkweDBjLDB4MjUsMHgwZSwweDYzLDB4MGIs MHhlOSwweDEyLDB4NjAsMHhjZCwweGVmLDB4ODAsMHgwZgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4NWUsMHhmMiwweDI2LDB4ZWYsMHg5ZiwweDU4LDB4NWQsMHhk NSwweDRhLDB4MTAsMHhmZSwweGE3LAotKwkweDJkLDB4NWYsMHg0YSwweDQ2Ci0rCX07Ci0rCi0r Ci0rLyogQUVTLTI1NiBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweGZiLDB4Y2YsMHgxYiwweDYxLDB4MTYsMHg4OSwweDc4LDB4MjMsMHhmNSwweGQ4LDB4OTYs MHhlMywKLSsJMHg0ZSwweDY0LDB4MGIsMHgyOSwweDlhLDB4M2YsMHhmOCwweGE1LDB4ZWQsMHhm MiwweGZlLDB4ZGIsCi0rCTB4MTYsMHhjYSwweDdmLDB4MTAsMHhmYSwweDVlLDB4MTgsMHg3Niww eDJjLDB4NjMsMHg1ZSwweDk2LAotKwkweGNmLDB4YjMsMHhkNiwweGZjLDB4YWYsMHg5OSwweDM5 LDB4MjgsMHg5YywweDYxLDB4ZTgsMHhiMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfbm9uY2VbXSA9Ci0rCXsKLSsJ MHgxMiwweDk2LDB4ZjAsMHg1MiwweGYzLDB4OGQsMHg4MSwweGNmLDB4ZGUsMHg4NiwweGYyLDB4 OTksCi0rCTB4NDMsMHg5NiwweGI5LDB4ZjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KLSsJewotKwkweDYzLDB4MGQsMHg3OCwweGY1LDB4OTAsMHg4ZSwweDMyLDB4NDcs MHhiMCwweDRkLDB4MzcsMHg2MCwKLSsJMHgwOSwweDk2LDB4YmMsMHhiZiwweDk3LDB4N2EsMHg2 MiwweDE0LDB4NDUsMHhiZCwweDhkLDB4Y2MsCi0rCTB4NjksMHhmYiwweDAzLDB4ZTEsMHg4MCww eDFjLDB4YzcsMHhlMiwweDJhLDB4ZjksMHgzNywweDNmLAotKwkweDY2LDB4NGQsMHg2MiwweGQ5 LDB4MTAsMHhlMCwweGFkLDB4YzgsMHg5YSwweGYwLDB4YTgsMHg2ZAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRk aXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4MzYsMHhjNiwweDEzLDB4NjAsMHhiYiwweDE0LDB4 YWQsMHgyMiwweGIwLDB4MzgsMHhhYywweGE2LAotKwkweDE4LDB4MTYsMHg5MywweDI1LDB4ODYs MHhiNywweGRjLDB4ZGMsMHgzNiwweDk4LDB4MmIsMHhmOSwKLSsJMHg2OCwweDMzLDB4ZDMsMHhj NiwweGZmLDB4Y2UsMHg4ZCwweDE1LDB4NTksMHg4MiwweDc2LDB4ZWQsCi0rCTB4NmYsMHg4ZCww eDQ5LDB4NzQsMHgyZiwweGRhLDB4ZGMsMHgxZiwweDE3LDB4ZDAsMHhkZSwweDE3Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9u b19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MTYsMHgyZiwweDhlLDB4M2YsMHgy MSwweDdhLDB4MWMsMHgyMCwweDU2LDB4ZDEsMHg5MiwweGY2LAotKwkweGQyLDB4MjUsMHg3NSww eDBlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg5MSwweDc5 LDB4NzYsMHhlZSwweGUwLDB4Y2YsMHg5ZSwweGMyLDB4ZDUsMHhkNCwweDIzLDB4OWIsCi0rCTB4 MTIsMHg4YywweDdlLDB4MGEsMHhiNywweGQyLDB4OGIsMHhkNiwweDdjLDB4YTMsMHhjNiwweGU1 LAotKwkweDBlLDB4YWEsMHhjNywweDZiLDB4YWUsMHgwZCwweGZhLDB4NTMsMHgwNiwweDc5LDB4 YTEsMHhlZCwKLSsJMHg0ZCwweDZhLDB4MGUsMHhkOCwweDlkLDB4YmUsMHgxYiwweDMxLDB4OTMs MHg3YiwweGVjLDB4ZmIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJ ewotKwkweGQyLDB4NDYsMHg1MCwweDIyLDB4MTAsMHgxNCwweDYzLDB4ZjcsMHhlYSwweDBmLDB4 YjksMHg3ZSwKLSsJMHgwZCwweGUxLDB4OTQsMHgwNywweGFmLDB4MDksMHg0NCwweDMxLDB4ZWEs MHg2NCwweGE0LDB4MTgsCi0rCTB4NWIsMHhmOSwweGQ4LDB4YzIsMHhmYSwweDAzLDB4NDcsMHhj NSwweDM5LDB4NDMsMHhkNSwweDNiLAotKwkweDYyLDB4ODYsMHg2NCwweGVhLDB4MmMsMHg3Myww eDhjLDB4YWUsMHg5ZCwweDk4LDB4OTgsMHgyOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0 MltdID0KLSsJewotKwkweDhjLDB4YWIsMHgxOCwweGY4LDB4YzMsMHhlYywweDE4LDB4NWMsMHhi MywweDFlLDB4OWQsMHhiZSwKLSsJMHgzZiwweDAzLDB4YjQsMHgwMCwweDk4LDB4OWQsMHhhZSww eGViLDB4ZjQsMHg5NCwweGY4LDB4NDIsCi0rCTB4OGYsMHhlMywweDM5LDB4MDcsMHhlMSwweGM5 LDB4YWQsMHgwYiwweDFmLDB4ZWQsMHhjMCwweGJhLAotKwkweGY2LDB4ZDEsMHhlYywweDI3LDB4 ODYsMHg3YiwweGQ2LDB4NTUsMHg5YiwweDYwLDB4YTUsMHhjNgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4ZWYsMHhkMiwweGQ4LDB4NWMsMHhkYywweDYyLDB4MjUsMHg5 ZiwweGFhLDB4MWUsMHgyYywweDY3LAotKwkweGY2LDB4MDIsMHgzMiwweGUyCi0rCX07Ci0rCi0r Ci0rLyogU0hBLTEgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhkMiwweDM2LDB4YTUs MHgyNywweDMxLDB4NzMsMHhkZCwweDExLDB4NGYsMHg5MywweGJkLDB4ZTIsCi0rCTB4MzEsMHhh NSwweDkxLDB4MTMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4YjUsMHhiMywweDYwLDB4ZWYs MHhmNywweDYzLDB4MzEsMHhmMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7 Ci0rCTB4ZDQsMHhiYiwweDAyLDB4MTAsMHhiMiwweDcxLDB4ZGIsMHg4MSwweGQ2LDB4ZjAsMHg0 MiwweDYwLAotKwkweGRhLDB4ZWEsMHg3NywweDUyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHg0ZCwweGQyLDB4NmMsMHg4NywweGZiLDB4MmMsMHg0ZiwweGE2LDB4OGQsMHgx NiwweDYzLDB4MjIsCi0rCTB4NmEsMHg1MSwweGUzLDB4ZjgKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHBy W10gPQotKwl7Ci0rCTB4YzksMHg4MywweDllLDB4MTYsMHhmNiwweDFjLDB4MGYsMHhiMiwweGVj LDB4NjAsMHgzMSwweGE5LAotKwkweGNiLDB4YTksMHgzNiwweDdhCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4YTgsMHgxMywweDRmLDB4ZjQsMHgzMSwweDAyLDB4NDQsMHhl MywweGQzLDB4M2QsMHg2MSwweDllLAotKwkweGU1LDB4YzYsMHgzZSwweDg5LDB4YjUsMHg5Yiww eDBmLDB4MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhmOSwweGU4LDB4 ZDIsMHg3MiwweDEzLDB4MzQsMHg5NSwweDZmLDB4MTUsMHg0OSwweDQ3LDB4OTksCi0rCTB4MTYs MHgwMywweDE5LDB4NDcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDRlLDB4 OGMsMHg0OSwweDliLDB4NGEsMHg1YywweDliLDB4OWMsMHgzYSwweGVlLDB4ZmIsMHhkMiwKLSsJ MHhhZSwweGNkLDB4OGMsMHhjNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NTAs MHhiNCwweGI0LDB4Y2QsMHg2OCwweDU3LDB4ZmMsMHgyZSwweGMxLDB4NTIsMHhjYywweGY2LAot KwkweDY4LDB4YTQsMHg4MSwweGVkLDB4N2UsMHhlNCwweDFkLDB4ODcKLSsJfTsKLSsKLSsKLSsv KiBTSEEtMSBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGE5LDB4NDcsMHgxYiwweDI5 LDB4MmQsMHgxYywweDA1LDB4ZGYsMHg3NiwweGQwLDB4NjIsMHhmOSwKLSsJMHhlMiwweDdmLDB4 NGMsMHg3YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfbm9uY2VbXSA9Ci0rCXsKLSsJMHg1MywweDIzLDB4MjQsMHhlMywweGVjLDB4 MGMsMHg1NCwweDE0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg3YSww eDg3LDB4YTEsMHhhYywweDFjLDB4ZmQsMHhhYiwweGFlLDB4ZjcsMHhkNiwweGZiLDB4NzYsCi0r CTB4MjgsMHhlYywweDZkLDB4Y2EKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGZj LDB4OTIsMHgzNSwweGQ2LDB4N2UsMHhiNywweDI0LDB4NjUsMHhmZCwweDEyLDB4MjcsMHgzNSwK LSsJMHhjMCwweDcyLDB4Y2EsMHgyOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eDU3LDB4ODgsMHg4MiwweGU1LDB4MjUsMHhhNSwweDJjLDB4NGEsMHgwNiwweDIwLDB4NmMsMHg3 MiwKLSsJMHg1NSwweDYxLDB4ZGQsMHg5MCwweDcxLDB4OWYsMHg5NSwweGVhCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg2OSwweGE1LDB4NDAsMHg2MiwweDk4LDB4NDcsMHg1 NiwweDczLDB4NGEsMHg4ZiwweDYwLDB4OTYsCi0rCTB4ZDYsMHg5OSwweDI3LDB4ZWQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGU1LDB4NDAsMHg0ZSwweGJkLDB4NTAs MHgwMCwweGY1LDB4MTUsMHhhNiwweGVlLDB4NDUsMHhkYSwKLSsJMHg4NCwweDNkLDB4ZDQsMHhj MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDExLDB4NTEsMHgxNCwweGYwLDB4 MDksMHgxYiwweDRlLDB4NTYsMHgwZCwweGU5LDB4ZjYsMHgxZSwKLSsJMHg1MiwweDY1LDB4Y2Qs MHg5NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTFfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YTEsMHg5YywweDk0LDB4NmUsMHgy OSwweGUxLDB4MzMsMHgwZCwweDMyLDB4ZDYsMHhhYSwweGNlLAotKwkweDcxLDB4M2YsMHg1Miww eDcyLDB4OGIsMHg0MiwweGE4LDB4ZDcKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMjI0IFBSICAqLwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9l bnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxMiwweDY5LDB4MzIsMHg0ZiwweDgzLDB4YTYsMHhm NSwweDE0LDB4ZTMsMHg0OSwweDNlLDB4NzUsCi0rCTB4M2UsMHhkZSwweGFkLDB4YTEsMHgyOSww eGMzLDB4ZjMsMHgxOSwweDIwLDB4YjUsMHg0YywweGQ5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX25vbmNlW10gPQotKwl7 Ci0rCTB4NmEsMHg3OCwweGQwLDB4ZWIsMHhiYiwweDVhLDB4ZjAsMHhlZSwweGU4LDB4YzMsMHhi YSwweDcxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGQ1LDB4 YjgsMHhiNiwweGJjLDB4YzEsMHg1YiwweDYwLDB4MzEsMHgzYywweGY1LDB4ZTUsMHhjMCwKLSsJ MHg4ZSwweDUyLDB4N2EsMHhiZCwweGVhLDB4NDcsMHhhOSwweDVmLDB4OGYsMHhmOSwweDhiLDB4 YWUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4MWYsMHg1NSwweGVjLDB4 YWUsMHgxNiwweDEyLDB4ODQsMHhiYSwweDg0LDB4MTYsMHgxOSwweDg4LAotKwkweDhlLDB4Yjgs MHgzMywweDI1LDB4NTQsMHhmZiwweGNhLDB4NzksMHhhZiwweDA3LDB4MjUsMHg1MAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9w cl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDkyLDB4YTMsMHgzMiwweGE4LDB4OWEsMHgw YSwweDU4LDB4N2MsMHgxZCwweDVhLDB4N2UsMHhlMSwKLSsJMHhiMiwweDczLDB4YWIsMHgwZSww eDE2LDB4NzksMHgyMywweGQzLDB4MjksMHg4OSwweDgxLDB4ZTEKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfaW50X3JldHVy bmVkYml0c1tdID0KLSsJewotKwkweGYzLDB4MzgsMHg5MSwweDQwLDB4MzcsMHg3YSwweDUxLDB4 NzIsMHg0MiwweDc0LDB4NzgsMHgwYSwKLSsJMHg2OSwweGZkLDB4YTYsMHg0NCwweDQzLDB4NDUs MHg2YywweDBjLDB4NWEsMHgxOSwweGZmLDB4ZjEsCi0rCTB4NTQsMHg2MCwweGVlLDB4NmEKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDc1LDB4ZjMsMHgwNCwweDI1LDB4 ZGQsMHgzNiwweGE4LDB4MzcsMHg0NiwweGFlLDB4MGMsMHg1MiwKLSsJMHgwNSwweDc5LDB4NGMs MHgyNiwweGRiLDB4ZTksMHg3MSwweDE2LDB4NGMsMHgwYSwweGYyLDB4NjAKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50 cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4ZWEsMHhjNSwweDAzLDB4MGEsMHg0ZiwweGIwLDB4 MzgsMHg4ZCwweDIzLDB4ZDQsMHhjOCwweDc3LAotKwkweGUyLDB4NmQsMHg5YywweDBiLDB4NDQs MHhmNywweDJkLDB4NWIsMHhiZiwweDVkLDB4MmEsMHgxMQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHg2MCwweDUwLDB4MmIsMHhlNywweDg2LDB4ZDgsMHgyNiwweDczLDB4ZTMs MHgxZCwweDk1LDB4MjAsCi0rCTB4YjMsMHgyYywweDMyLDB4MWMsMHhmNSwweGNlLDB4NTcsMHhh NiwweDY3LDB4MmIsMHhkYywweDRlLAotKwkweGRkLDB4MTEsMHg0YywweGM0Ci0rCX07Ci0rCi0r Ci0rLyogU0hBLTIyNCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YjIsMHgxYyww eDc3LDB4NGQsMHhmNiwweGQzLDB4YjYsMHg0MCwweGI3LDB4MzAsMHgzZSwweDI5LAotKwkweGIw LDB4ODUsMHgxYywweGJlLDB4NGEsMHhlYSwweDZiLDB4NWEsMHhiNSwweDhhLDB4OTcsMHhlYgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTIyNF9ub25jZVtdID0KLSsJewotKwkweDQyLDB4MDIsMHgwYSwweDFjLDB4OTgsMHg5YSwweDc3 LDB4OWUsMHg5ZiwweDgwLDB4YmEsMHhlMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 Ci0rCXsKLSsJMHg5OCwweGI4LDB4MDQsMHg0MSwweGZjLDB4YzEsMHg1ZCwweGM1LDB4ZTksMHhi OSwweDA4LDB4ZGEsCi0rCTB4ZjksMHhmYSwweDBkLDB4OTAsMHhjZSwweGRmLDB4MWQsMHgxMCww eGE5LDB4OGQsMHg1MCwweDBjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDlh LDB4OGQsMHgzOSwweDQ5LDB4NDIsMHhkNSwweDBiLDB4YWUsMHhlMSwweGFmLDB4YjcsMHgwMCwK LSsJMHgwMiwweGZhLDB4OTYsMHhiMSwweGE1LDB4MWQsMHgyZCwweDI1LDB4NzgsMHhlZSwweDgz LDB4M2YKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGU0LDB4ZjUsMHg1Myww eDc5LDB4NWEsMHg5NywweDU4LDB4MDYsMHgwOCwweGJhLDB4N2IsMHhmYSwKLSsJMHhmMCwweDgz LDB4MDUsMHg4YywweDIyLDB4YzAsMHhjOSwweGRiLDB4MTUsMHhlNywweGRlLDB4MjAsCi0rCTB4 NTUsMHgyMiwweDlhLDB4YWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4 NjcsMHgwOSwweDQ4LDB4YWEsMHgwNywweDE2LDB4OTksMHg4OSwweDdmLDB4NmQsMHhhMCwweGU1 LAotKwkweDhmLDB4ZGYsMHhiYywweGRiLDB4ZmUsMHhlNSwweDZjLDB4N2EsMHg5NSwweDRhLDB4 NjYsMHgxNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgwZiwweDRi LDB4MWMsMHg2ZiwweGI3LDB4ZTMsMHg0NywweGU1LDB4NWQsMHg3ZCwweDM4LDB4ZDYsCi0rCTB4 MjgsMHg5YiwweGViLDB4NTUsMHg2MywweDA5LDB4M2UsMHg3YywweDU2LDB4ZWEsMHhmOCwweDE5 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgyZCwweDI2LDB4N2MsMHgzNyww eGU0LDB4N2EsMHgyOCwweDVlLDB4NWEsMHgzYywweGFmLDB4M2QsCi0rCTB4NWEsMHg4ZSwweDU1 LDB4YTIsMHgxYSwweDZlLDB4YzAsMHhlNSwweGY2LDB4MjEsMHhkMywweGY2Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3JldHVy bmVkYml0c1tdID0KLSsJewotKwkweDRkLDB4ODMsMHgzNSwweGRmLDB4NjcsMHhhOSwweGZjLDB4 MTcsMHhkYSwweDcwLDB4Y2MsMHg4YiwKLSsJMHg3ZiwweDc3LDB4YWUsMHhhMiwweDVmLDB4Yjks MHg3ZSwweDc0LDB4NGMsMHgyNiwweGMxLDB4N2EsCi0rCTB4M2IsMHhhNywweDVjLDB4OTMKLSsJ fTsKLSsKLSsKLSsvKiBTSEEtMjU2IFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhj ZSwweDQ5LDB4MDAsMHg3YSwweDU2LDB4ZTMsMHg2NywweDhmLDB4ZTEsMHhiNiwweGE3LDB4ZDQs Ci0rCTB4NGYsMHgwOCwweDdhLDB4MWIsMHgwMSwweGY0LDB4ZmEsMHg2YiwweGVmLDB4YjcsMHhl NSwweGViLAotKwkweDA3LDB4M2QsMHgxMSwweDBkLDB4YzgsMHhlYSwweDJiLDB4ZmUKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf cHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg3MywweDQxLDB4YzgsMHg5MiwweDk0LDB4ZTIsMHhjNSww eDVmLDB4OTMsMHhmZCwweDM5LDB4NWQsCi0rCTB4MmIsMHg5MSwweDRkLDB4MzgKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NTAsMHg2ZCwweDAxLDB4MDEsMHgw NywweDVhLDB4ODAsMHgzNSwweDdhLDB4NTYsMHgxYSwweDU2LAotKwkweDJmLDB4OWEsMHgwYiww eDM1LDB4YjIsMHhiMSwweGM5LDB4ZTUsMHhjYSwweDY5LDB4NjEsMHg0OCwKLSsJMHhmZiwweGZi LDB4MGYsMHhkOSwweDRiLDB4NzksMHgxZCwweGJhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtd ID0KLSsJewotKwkweDIwLDB4YjgsMHhkZiwweDQ0LDB4NzcsMHg1YSwweGI4LDB4ZDMsMHhiZiww eGY2LDB4Y2YsMHhhYywKLSsJMHg1ZSwweGE2LDB4OTYsMHg2MiwweDczLDB4NDQsMHg0MCwweDRh LDB4MzAsMHhmYiwweDM4LDB4YTUsCi0rCTB4N2IsMHgwZCwweGU0LDB4MGQsMHhjNiwweGU0LDB4 OWEsMHgxZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDA0LDB4YzQsMHg2 NSwweGY0LDB4ZDMsMHhiZiwweDgzLDB4NGIsMHhhYiwweGM4LDB4NDEsMHhhOCwKLSsJMHhjMiww eGUwLDB4NDQsMHg2MywweDc3LDB4NGMsMHg2ZiwweDZjLDB4NDksMHg0NiwweGZmLDB4OTQsCi0r CTB4MTcsMHhlYSwweGU2LDB4MWEsMHg5ZCwweDVlLDB4NjYsMHg3OAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9pbnRfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MDcsMHg0ZCwweGFjLDB4OWIsMHg4NiwweGNhLDB4NGEs MHhhYSwweDZlLDB4N2EsMHgwMywweGEyLAotKwkweDVkLDB4MTAsMHhlYSwweDBiLDB4ZjksMHg4 MywweGNjLDB4ZDEsMHhmYywweGUyLDB4MDcsMHhjNywKLSsJMHgwNiwweDM0LDB4NjAsMHg2Ziww eDgzLDB4OTQsMHg5OSwweDc2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJ MHg4OSwweDRlLDB4NDUsMHg4YywweDExLDB4ZjksMHhiYywweDViLDB4YWMsMHg3NCwweDhiLDB4 NGIsCi0rCTB4NWYsMHhmNywweDE5LDB4ZjMsMHhmNSwweDI0LDB4NTQsMHgxNCwweGQxLDB4MTUs MHhiMSwweDQzLAotKwkweDEyLDB4YTQsMHg1ZiwweGQ0LDB4ZWMsMHhmYywweGNkLDB4MDkKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4MGUsMHhlYiwweDFmLDB4ZDcsMHhm YywweGQxLDB4OWQsMHhkNCwweDA1LDB4MzYsMHg4YiwweGIyLAotKwkweGZiLDB4ZTQsMHhmNCww eDUxLDB4MGMsMHg4NywweDliLDB4MDIsMHg0NCwweGQ1LDB4OTIsMHg0ZCwKLSsJMHg0NCwweGZl LDB4MWEsMHgwMywweDQzLDB4NTYsMHhiZCwweDg2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0K LSsJewotKwkweDAyLDB4YWEsMHhiNiwweDFkLDB4N2UsMHgyYSwweDQwLDB4MDMsMHg2OSwweDJk LDB4NDksMHhhMywKLSsJMHg0MSwweGU3LDB4NDQsMHgwYiwweGFmLDB4N2IsMHg4NSwweGU0LDB4 NWYsMHg1MywweDNiLDB4NjQsCi0rCTB4YmMsMHg4OSwweGM4LDB4ODIsMHhkNCwweDc4LDB4Mzcs MHhhMgotKwl9OwotKwotKwotKy8qIFNIQS0yNTYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KLSsJ ewotKwkweDViLDB4MWIsMHhlYywweDRkLDB4YTksMHgzOCwweDc0LDB4NWEsMHgzNCwweDBiLDB4 N2IsMHhjNSwKLSsJMHhlNSwweGQ3LDB4NjYsMHg3YywweGJjLDB4ODIsMHhiOSwweDBlLDB4MmQs MHgxZiwweDkyLDB4ZDcsCi0rCTB4YzEsMHhiYywweDY3LDB4NjksMHhlYywweDZiLDB4MDMsMHgz YwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTI1Nl9ub25jZVtdID0KLSsJewotKwkweGE0LDB4MGMsMHhkOCwweDljLDB4NjEsMHhkOCww eGMzLDB4NTQsMHhmZSwweDUzLDB4YzksMHhlNSwKLSsJMHg1ZCwweDZmLDB4NmQsMHgzNQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1 Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgyMiwweDVlLDB4NjIsMHg5Myww eDQyLDB4ODMsMHg3OCwweDI0LDB4ZDgsMHg0MCwweDhjLDB4ZGUsCi0rCTB4NmYsMHhmOSwweGE0 LDB4N2EsMHhjNSwweGE3LDB4M2IsMHg4OCwweGEzLDB4ZWUsMHg0MiwweDIwLAotKwkweGZkLDB4 NjEsMHg1NiwweGM2LDB4NGMsMHgxMywweDQxLDB4OWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0W10g PQotKwl7Ci0rCTB4YmYsMHg3NCwweDViLDB4ZjYsMHhjNSwweDY0LDB4NWUsMHg5OSwweDM0LDB4 OGYsMHhiYywweGE0LAotKwkweGUyLDB4YmQsMHhkOCwweDg1LDB4MjYsMHgzNywweGVhLDB4YmEs MHg0ZiwweGYyLDB4OWEsMHg5YSwKLSsJMHg2NiwweGZjLDB4ZGYsMHg2MywweDI2LDB4MjYsMHgx OSwweDg3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhiMywweGM2LDB4MDcs MHgwNywweGQ2LDB4NzUsMHhmNiwweDJiLDB4ZDYsMHgyMSwweDk2LDB4ZjEsCi0rCTB4YWUsMHhk YiwweDJiLDB4YWMsMHgyNSwweDJhLDB4YWUsMHhhZSwweDQxLDB4NzIsMHgwMywweDVlLAotKwkw eGJmLDB4ZDMsMHg2NCwweGJjLDB4NTksMHhmOSwweGMwLDB4NzYKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0 cmVzZWVkW10gPQotKwl7Ci0rCTB4YmYsMHgyMCwweDMzLDB4NTYsMHgyOSwweGE4LDB4MzcsMHgw NCwweDFmLDB4NzgsMHgzNCwweDNkLAotKwkweDgxLDB4MmEsMHhjOSwweDg2LDB4YzYsMHg3YSww eDJmLDB4ODgsMHg1ZSwweGQ1LDB4YmUsMHgzNCwKLSsJMHg0NiwweDIwLDB4YTQsMHgzNSwweGVi LDB4YzcsMHhlMiwweDlkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkw eDliLDB4YWUsMHgyZCwweDJkLDB4NjEsMHhhNCwweDg5LDB4ZWIsMHg0MywweDQ2LDB4YTcsMHhk YSwKLSsJMHhlZiwweDQwLDB4Y2EsMHg0YSwweDk5LDB4MTEsMHg0MSwweGRjLDB4NWMsMHg5NCww eGU5LDB4YWMsCi0rCTB4ZDQsMHhkMCwweGU2LDB4YmQsMHhmYiwweDAzLDB4OWMsMHhhOAotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1 Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MjMsMHhhYSwweDBjLDB4YmQsMHgyOCww eDMzLDB4ZTIsMHg1MSwweGZjLDB4NzEsMHhkMiwweDE1LAotKwkweDFmLDB4NzYsMHhmZCwweDBk LDB4ZTAsMHhiNywweGI1LDB4ODQsMHg3NSwweDViLDB4YmUsMHhmMywKLSsJMHg1YywweGNhLDB4 YzUsMHgzMCwweGYyLDB4NzUsMHgxZiwweGRhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3JldHVybmVkYml0c1tdID0KLSsJewot KwkweDkwLDB4M2MsMHhjMSwweDEwLDB4OGMsMHgxMiwweDAxLDB4YzYsMHhhNiwweDNhLDB4MGYs MHg0ZCwKLSsJMHhiNiwweDNhLDB4NGYsMHg0MSwweDljLDB4NjEsMHg3NSwweDg0LDB4ZTksMHg3 NCwweDc1LDB4ZmQsCi0rCTB4ZmUsMHhmMiwweDFmLDB4NDMsMHhkOCwweDVlLDB4MjQsMHhhMwot Kwl9OwotKwotKwotKy8qIFNIQS0zODQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkw eDcxLDB4OWQsMHhiMiwweDVhLDB4NzEsMHg2ZCwweDA0LDB4ZTksMHgxZSwweGM3LDB4OTIsMHgy NCwKLSsJMHg2ZSwweDEyLDB4MzMsMHhhOSwweDUyLDB4NjQsMHgzMSwweGVmLDB4NzEsMHhlYiww eDIyLDB4NTUsCi0rCTB4MjgsMHg5NywweDA2LDB4NmEsMHhjMCwweDBjLDB4YTAsMHg3ZQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9wcl9ub25jZVtdID0KLSsJewotKwkweGY1LDB4MGQsMHhmYSwweGIwLDB4ZWMsMHg2YSwweDdj LDB4ZDYsMHhiZCwweDliLDB4MDUsMHhmZCwKLSsJMHgzOCwweDNlLDB4MmUsMHg1NgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9w cl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg3NCwweGFjLDB4N2UsMHg2ZCww eGIxLDB4YTQsMHhlNywweDIxLDB4ZDEsMHgxZSwweDZlLDB4OTYsCi0rCTB4NmQsMHg0ZCwweDUz LDB4NDYsMHg4MiwweDk2LDB4NmUsMHhjZiwweGFhLDB4ODEsMHg4ZCwweDdkLAotKwkweDllLDB4 ZTEsMHgwZiwweDE1LDB4ZWEsMHg0MSwweGJmLDB4ZTMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4ZGEsMHg5NSwweGQ0LDB4ZDAsMHhiOCwweDExLDB4ZDMsMHg0OSwweDI3 LDB4NWQsMHhhOSwweDM5LAotKwkweDY4LDB4ZjMsMHhhOCwweGU5LDB4NWQsMHgxOSwweDhhLDB4 MmIsMHg2NiwweGU4LDB4NjksMHgwNiwKLSsJMHg3YywweDllLDB4MDMsMHhhMSwweDhiLDB4MjYs MHgyZCwweDZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4NDksMHhkZiww eDQ0LDB4MDAsMHhlNCwweDFjLDB4NzUsMHgwYiwweDI2LDB4NWEsMHg1OSwweDY0LAotKwkweDFm LDB4NGUsMHhiMSwweGIyLDB4MTMsMHhmMSwweDIyLDB4NGUsMHhiNCwweDZkLDB4OWEsMHhjYywK LSsJMHhhMCwweDQ4LDB4ZTYsMHhjZiwweDFkLDB4ZDEsMHg5MiwweDBkCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjOCwweDUyLDB4YWUsMHhiZiwweDA0LDB4M2MsMHgy NywweGI3LDB4NzgsMHgxOCwweGFhLDB4OGYsCi0rCTB4ZmYsMHhjZiwweGE0LDB4ZjEsMHhjYyww eGU3LDB4NjgsMHhmYSwweDIyLDB4YTIsMHgxMywweDQ1LAotKwkweGU4LDB4ZGQsMHg4NywweGU2 LDB4ZjIsMHg2ZSwweGRkLDB4YzcsMHg1MiwweDkwLDB4OWYsMHg3YiwKLSsJMHhmYSwweDYxLDB4 MmQsMHg5ZCwweDllLDB4Y2YsMHg5OCwweGFjLDB4NTIsMHg0MCwweGNlLDB4YWYKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJf YWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDYxLDB4N2MsMHgwMywweDlhLDB4M2UsMHg1 MCwweDU3LDB4NjAsMHhjNSwweDgzLDB4YzksMHhiMiwKLSsJMHhkMSwweDg3LDB4ODUsMHg2Niww eDkyLDB4NWQsMHg4NCwweDBlLDB4NTMsMHhmYiwweDcwLDB4MDMsCi0rCTB4NzIsMHhmZCwweGJh LDB4YWUsMHg5YywweDhmLDB4ZjgsMHgxOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0r CXsKLSsJMHhmOCwweGViLDB4ODksMHhiMSwweDhkLDB4NzgsMHhiZSwweDIxLDB4ZTAsMHhiYiww eDlkLDB4YjcsCi0rCTB4OTUsMHgwZSwweGQ5LDB4NDYsMHgwYywweDhjLDB4ZTIsMHg2MywweGI3 LDB4OWQsMHg2NywweDkwLAotKwkweGJkLDB4YzcsMHgwYiwweGE1LDB4Y2UsMHhiMiwweDY1LDB4 ODEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTYsMHg5ZiwweGZlLDB4Njgs MHhkNiwweGI1LDB4NzksMHhmMSwweDA2LDB4NWYsMHhhMywweGJiLAotKwkweDIzLDB4ODUsMHhk OCwweGYwLDB4MjksMHg1YSwweDY4LDB4OWUsMHhmNSwweGY0LDB4YTYsMHgxMiwKLSsJMHhlMCww eDlhLDB4ZTIsMHhhYywweDAwLDB4MWQsMHg5OCwweDI2LDB4ZmMsMHg1MywweDk1LDB4NTMsCi0r CTB4ZTQsMHgzZSwweDE3LDB4ZDUsMHgwOCwweDBiLDB4NzAsMHgzZCwweDY3LDB4OTksMHhhYyww eDY2Ci0rCX07Ci0rCi0rCi0rLyogU0hBLTM4NCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4MDcsMHgxNSwweDI3LDB4MmEsMHhhZiwweDc0LDB4MjQsMHgzNywweGJjLDB4ZDUsMHgx NCwweDY5LAotKwkweGNlLDB4MTEsMHhmZiwweGEyLDB4NmIsMHhiOCwweDA1LDB4NjcsMHgzNCww eGY4LDB4YmQsMHg2ZCwKLSsJMHg2YSwweGNjLDB4Y2QsMHg2MCwweGEzLDB4NjgsMHhjYSwweGY0 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X25vbmNlW10gPQotKwl7Ci0rCTB4NzAsMHgxNywweGMyLDB4NWIsMHg1ZCwweDIyLDB4 MGIsMHgwNiwweDE1LDB4NTQsMHg3OCwweDc3LAotKwkweDQ0LDB4YWYsMHgyZiwweDA5Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDg5LDB4MzksMHgyOCwweGIwLDB4 NjAsMHhlYiwweDNkLDB4ZGMsMHg1NSwweDc1LDB4ODYsMHhlYiwKLSsJMHhhZSwweGEyLDB4OGYs MHhiYywweDFiLDB4NzUsMHhkNCwweGUxLDB4MGYsMHhhYSwweDM4LDB4Y2EsCi0rCTB4NjIsMHg4 YiwweGNiLDB4MmMsMHgyNiwweGY2LDB4YmMsMHhiMQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHgzMCwweDJiLDB4NDIsMHgzNSwweGVmLDB4ZGEsMHg0MCwweDU1LDB4MjgsMHhj NiwweDk1LDB4ZmIsCi0rCTB4NTQsMHgwMSwweDYyLDB4ZDcsMHg4NywweDE0LDB4NDgsMHg2ZCww eDkwLDB4NGMsMHhhOSwweDAyLAotKwkweDU0LDB4NDAsMHgyMiwweGM4LDB4NjYsMHhhNSwweDQ4 LDB4NDgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDgyLDB4YzQsMHhhMSww eDljLDB4MjEsMHhkMiwweGU3LDB4YTUsMHhhNiwweGY2LDB4NWYsMHgwNCwKLSsJMHg1YywweGM3 LDB4MzEsMHg5ZCwweDhkLDB4NTksMHg3NCwweDUwLDB4MTksMHg4OSwweDJmLDB4NjMsCi0rCTB4 ZDUsMHhiNywweDdlLDB4ZWIsMHgxNSwweGUzLDB4NzAsMHg4MywweGExLDB4MjQsMHg1OSwweGZh LAotKwkweDJjLDB4NTYsMHhmNiwweDg4LDB4M2EsMHg5MiwweDkzLDB4YTEsMHhmYiwweDc5LDB4 YzEsMHg3YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgzOSwweGE2LDB4 ZTgsMHg1YywweDgyLDB4MTcsMHg3MSwweDI2LDB4NTcsMHg0ZiwweDlmLDB4YzIsCi0rCTB4NTUs MHhmZiwweDVjLDB4OWIsMHg1MywweDFhLDB4ZDEsMHg1ZiwweGJjLDB4NjIsMHhlNCwweDI3LAot KwkweDJkLDB4MzIsMHhmMCwweGU0LDB4NTIsMHg4YywweGM1LDB4MGMKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25h bGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4OGQsMHhjYiwweDhkLDB4Y2UsMHgwOCwweGVhLDB4 ODAsMHhlOCwweDliLDB4NjEsMHhhOCwweDBmLAotKwkweGFmLDB4NDksMHgyMCwweDllLDB4NzQs MHhjYiwweDU3LDB4ODAsMHg0MiwweGIwLDB4ODQsMHg1ZSwKLSsJMHgzMCwweDJhLDB4NjcsMHgw OCwweGY0LDB4ZTMsMHg0MCwweDIyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJ MHg3YywweDhmLDB4YzIsMHhhZSwweDIyLDB4NGEsMHhkNiwweGY2LDB4MDUsMHhhNCwweDdhLDB4 ZWEsCi0rCTB4YmIsMHgyNSwweGQwLDB4YjcsMHg1YSwweGQ2LDB4Y2YsMHg5ZCwweGYzLDB4NmMs MHhlMiwweGIyLAotKwkweDRlLDB4YjQsMHhiZCwweGY0LDB4ZTUsMHg0MCwweDgwLDB4OTQKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEz ODRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4OWUsMHg3ZSwweGZiLDB4NTksMHhiYiwweGFh LDB4M2MsMHhmNywweGUxLDB4ZjgsMHg3NiwweGRkLAotKwkweDYzLDB4NWYsMHhhZiwweDIzLDB4 ZDYsMHg2NCwweDYxLDB4YzAsMHg5YSwweDA5LDB4NDcsMHhjOSwKLSsJMHgzMywweGRmLDB4NmQs MHg1NSwweDkxLDB4MzQsMHg3OSwweDcwLDB4YzQsMHg5OSwweDZlLDB4NTQsCi0rCTB4MDksMHg2 NCwweDIxLDB4MWEsMHhiZCwweDFlLDB4ODAsMHg0MCwweDM0LDB4YWQsMHhmYSwweGQ3Ci0rCX07 Ci0rCi0rCi0rLyogU0hBLTUxMiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTMs MHhmNywweDYxLDB4NzUsMHg2NSwweDI4LDB4YTIsMHg1OSwweDEzLDB4NWEsMHg0YSwweDRmLAot KwkweDU2LDB4NjAsMHg4YywweDUzLDB4N2QsMHhiMCwweGJkLDB4MDYsMHg0ZiwweGVkLDB4Y2Ms MHhkMiwKLSsJMHhhMiwweGI1LDB4ZmQsMHg1YiwweDNhLDB4YWIsMHhlYywweDI4Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3By X25vbmNlW10gPQotKwl7Ci0rCTB4YmUsMHhhMywweDkxLDB4OTMsMHgxZCwweGMzLDB4MzEsMHgz YSwweDIzLDB4MzMsMHg1MCwweDY3LAotKwkweDg4LDB4YzcsMHhhMiwweGM0Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDFmLDB4NTksMHg0ZCwweDdiLDB4ZTYs MHg0NiwweDkxLDB4NDgsMHhjMSwweDI1LDB4ZmEsMHhmZiwKLSsJMHg4OSwweDEyLDB4NzcsMHgz NSwweGRmLDB4M2UsMHhmNCwweDgwLDB4NWYsMHhkOSwweGIwLDB4MDcsCi0rCTB4MjIsMHg0MSww eGRkLDB4NDgsMHg3OCwweDZiLDB4NzcsMHgyYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHgzMCwweGZmLDB4NjMsMHg2ZiwweGFjLDB4ZDksMHg4NCwweDM5LDB4NmYsMHhl NCwweDk5LDB4Y2UsCi0rCTB4OTEsMHg3ZCwweDdlLDB4YzgsMHg1OCwweGYyLDB4MTIsMHhjMyww eGI2LDB4YWQsMHhkYSwweDIyLAotKwkweDA0LDB4YTAsMHhkMiwweDIxLDB4ZmUsMHhmMiwweDk1 LDB4MWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg2NCwweDU0LDB4MTMs MHhlYywweDRmLDB4NzcsMHhkYSwweGIyLDB4OTIsMHgyZSwweDUyLDB4ODAsCi0rCTB4MTEsMHgx MCwweGMyLDB4ZjgsMHhlNiwweGE3LDB4Y2QsMHg0YiwweGZjLDB4MzIsMHgyZSwweDllLAotKwkw eGViLDB4YmIsMHhiMSwweGJmLDB4MTUsMHg1YywweDczLDB4MDgKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfaW50X3JldHVy bmVkYml0c1tdID0KLSsJewotKwkweGVmLDB4MWUsMHhkYywweDBhLDB4YTQsMHgzNiwweDkxLDB4 OWMsMHgzZCwweDI3LDB4OTcsMHg1MCwKLSsJMHg4ZCwweDM2LDB4MjksMHg4ZCwweGNlLDB4NmEs MHgwYywweGY3LDB4MjEsMHhjMCwweDkxLDB4YWUsCi0rCTB4MGMsMHg5NiwweDcyLDB4YmQsMHg1 MiwweDgxLDB4NTgsMHhmYywweDZkLDB4ZTUsMHhmNywweGE1LAotKwkweGZkLDB4NWQsMHhhNyww eDU4LDB4NjgsMHhjOCwweDk5LDB4NTgsMHg4ZSwweGM4LDB4Y2UsMHg5NSwKLSsJMHgwMSwweDdk LDB4ZmYsMHhhNCwweGM4LDB4ZjcsMHg2MywweGZlLDB4NWYsMHg2OSwweDgzLDB4NTMsCi0rCTB4 ZTIsMHhjNiwweDhiLDB4YzMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkw eGU2LDB4OWIsMHhjNCwweDg4LDB4MzQsMHhjYSwweGVhLDB4MjksMHgyZiwweDk4LDB4MDUsMHhh NCwKLSsJMHhkMywweGMwLDB4N2IsMHgxMSwweGU4LDB4YmIsMHg3NSwweGYyLDB4YmQsMHgyOSww eGI3LDB4NDAsCi0rCTB4MjUsMHg3ZiwweGMxLDB4YjcsMHhiMSwweGYxLDB4MjUsMHg2MQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgyMywweDZkLDB4ZmYsMHhkZSwweGZi LDB4ZDEsMHhiYSwweDMzLDB4MTgsMHhlNiwweGJlLDB4YjUsCi0rCTB4NDgsMHg3NywweDZkLDB4 N2YsMHhhNywweGUxLDB4NGQsMHg0OCwweDFlLDB4M2MsMHhhNywweDM0LAotKwkweDFhLDB4Yzgs MHg2MCwweGRiLDB4OGYsMHg5OSwweDE1LDB4OTkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4NzAsMHgyNywweDMxLDB4ZGIsMHg5MiwweDcwLDB4MjEsMHhmZSwweDE2LDB4YjYs MHhjOCwweDUxLAotKwkweDM0LDB4ODcsMHg2NSwweGQwLDB4NGUsMHhmZCwweGZlLDB4NjgsMHhl YywweGFjLDB4ZGMsMHg5MywKLSsJMHg0MSwweDM4LDB4OTIsMHg5MCwweGI0LDB4OTQsMHhmOSww eDBkLDB4YTQsMHhmNywweDRlLDB4ODAsCi0rCTB4OTIsMHg2NywweDQ4LDB4NDAsMHhhNywweDA4 LDB4YzcsMHhiYywweDY2LDB4MDAsMHhmZCwweGY3LAotKwkweDRjLDB4OGIsMHgxNywweDZlLDB4 ZDEsMHg4ZiwweDliLDB4ZjMsMHg2ZiwweGY2LDB4MzQsMHhkZCwKLSsJMHg2NywweGY3LDB4Njgs MHhkZAotKwl9OwotKwotKwotKy8qIFNIQS01MTIgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dFtdID0KLSsJ ewotKwkweGI2LDB4MGIsMHhiNywweGJjLDB4ODQsMHg1NiwweGY2LDB4MTIsMHhhZiwweDQ1LDB4 NjcsMHgxNywKLSsJMHg3YywweGQxLDB4YjIsMHg3OCwweDJiLDB4YTAsMHhmMiwweGJlLDB4YjYs MHg2ZCwweDhiLDB4NTYsCi0rCTB4YzYsMHhiYywweDRkLDB4ZTEsMHhmNywweGJlLDB4Y2UsMHhi ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9ub25jZVtdID0KLSsJewotKwkweDlkLDB4ZWQsMHhjMCwweGU1LDB4NWEsMHg5OCww eDZhLDB4Y2IsMHg1MSwweDdkLDB4NzYsMHgzMSwKLSsJMHg1YSwweDY0LDB4ZjAsMHhmNwotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhjMiwweDZkLDB4YTMsMHhjMyww eDA2LDB4NzQsMHhlNSwweDAxLDB4NWMsMHgxMCwweDE3LDB4YzcsCi0rCTB4YWYsMHg4MywweDlk LDB4NTksMHg4ZCwweDJkLDB4MjksMHgzOCwweGM1LDB4NTksMHg3MCwweDhiLAotKwkweDQ2LDB4 NDgsMHgyZCwweGNmLDB4MzYsMHg3ZCwweDU5LDB4YzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0W10g PQotKwl7Ci0rCTB4ZWMsMHg4YywweGQ0LDB4ZjcsMHg2MSwweDZlLDB4MGQsMHg5NSwweDc5LDB4 YjcsMHgyOCwweGFkLAotKwkweDVmLDB4NjksMHg3NCwweDVmLDB4MmQsMHgzNiwweDA2LDB4OGEs MHg2YiwweGFjLDB4NTQsMHg5NywKLSsJMHhjNCwweGExLDB4MTIsMHg4NSwweDBhLDB4ZGYsMHg0 YiwweDM0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4NCwweDJmLDB4MWYs MHg2OCwweDZhLDB4YTMsMHhhZCwweDFlLDB4ZmIsMHhmNCwweDE1LDB4YmQsCi0rCTB4ZGUsMHgz OCwweGQ0LDB4MzAsMHg4MCwweDUxLDB4ZTksMHhkMywweGM3LDB4MjAsMHg4OCwweGU5LAotKwkw eGY1LDB4Y2MsMHhkZiwweDU3LDB4NWMsMHg0NywweDJmLDB4NTcsMHgzYywweDVmLDB4MTMsMHg1 NiwKLSsJMHhjYywweGM1LDB4NGYsMHg4NCwweGY4LDB4MTAsMHg0MSwweGQ1LDB4N2UsMHg1OCww eDZlLDB4MTksCi0rCTB4MTksMHg5ZSwweGFmLDB4YzIsMHgyMiwweDU4LDB4NDEsMHg1MCwweDc5 LDB4YzIsMHhkOCwweDA0LAotKwkweDI4LDB4ZDQsMHgzOSwweDlhCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1 dHJlc2VlZFtdID0KLSsJewotKwkweGZhLDB4N2YsMHg0NiwweDUxLDB4ODMsMHg2MiwweDk4LDB4 MTYsMHg5YSwweDE5LDB4YTIsMHg0OSwKLSsJMHhhOSwweGU2LDB4NGEsMHhkOCwweDg1LDB4ZTcs MHhkNCwweDNiLDB4MmMsMHg4MiwweGM1LDB4ODIsCi0rCTB4YmYsMHgxMSwweGY5LDB4OWUsMHhi YywweGQwLDB4MDEsMHhlZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJ MHhiOSwweDEyLDB4ZTAsMHg0ZiwweGY3LDB4YTcsMHhjNCwweGQ4LDB4ZDAsMHg4ZSwweDk5LDB4 MjksCi0rCTB4N2MsMHg5YSwweGU5LDB4Y2YsMHhjNCwweDZjLDB4ZjgsMHhjMywweGE3LDB4NDEs MHg4MywweGQ2LAotKwkweDJlLDB4ZmEsMHhiOCwweDVlLDB4OGUsMHg2YiwweDc4LDB4MjAKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1 MTJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGQ3LDB4MDcsMHg1MiwweGI5LDB4ODMs MHgyYywweDAzLDB4NzEsMHhlZSwweGM5LDB4YzAsMHg4NSwKLSsJMHhlMSwweDU3LDB4YjIsMHhj ZCwweDNhLDB4ZjAsMHhjOSwweDM0LDB4MjQsMHg0MSwweDFjLDB4NDIsCi0rCTB4OTksMHhiMiww eDg0LDB4ZTksMHgxNywweGQyLDB4NzYsMHg5MgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsK LSsJMHgzNiwweDE3LDB4NWQsMHg5OCwweDJiLDB4NjUsMHgyNSwweDhlLDB4YzgsMHgyOSwweGRm LDB4MjcsCi0rCTB4MDUsMHgzNiwweDI2LDB4MTIsMHg4YSwweDY4LDB4NzQsMHgyNywweDM3LDB4 ZDQsMHg3ZiwweDMyLAotKwkweGIxLDB4MTIsMHhkNiwweDg1LDB4ODMsMHhlYiwweDJlLDB4YTAs MHhlZCwweDRiLDB4YjUsMHg3YiwKLSsJMHg2ZiwweDM5LDB4M2MsMHg3MSwweDc3LDB4MDIsMHgx MiwweGNjLDB4MmMsMHgzYSwweDhlLDB4NjMsCi0rCTB4ZGYsMHg0YSwweGJkLDB4NmYsMHg2ZSww eDJlLDB4ZWQsMHgwYSwweDg1LDB4YTUsMHgyZiwweGEyLAotKwkweDY4LDB4ZGUsMHg0MiwweGI1 Ci0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtMSBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0W10gPQot Kwl7Ci0rCTB4MjYsMHg1ZiwweDM2LDB4MTQsMHhmZiwweDNkLDB4ODMsMHhmYSwweDczLDB4NWUs MHg3NSwweGRjLAotKwkweDJjLDB4MTgsMHgxNywweDFiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX25vbmNlW10gPQot Kwl7Ci0rCTB4YzgsMHhlMywweDU3LDB4YTUsMHg3YiwweDc0LDB4ODYsMHg2ZQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9w cl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg2ZSwweGRiLDB4MGQsMHhmZSww eDdkLDB4YWMsMHg3OSwweGQwLDB4YTUsMHgzYSwweDQ4LDB4ODUsCi0rCTB4ODAsMHhlMiwweDdm LDB4MmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4MzEsMHhjZCww eDVlLDB4NDMsMHhkYywweGZiLDB4N2EsMHg3OSwweGNhLDB4ODgsMHhkZSwweDFmLAotKwkweGQ3 LDB4YmIsMHg0MiwweDA5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4 N2MsMHgyMywweDk1LDB4MzgsMHgwMCwweDk1LDB4YzEsMHg3OCwweDFmLDB4OGYsMHhkNywweDYz LAotKwkweDIzLDB4ODcsMHgyYSwweGVkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHhiYiwweDM0LDB4ZTcsMHg5MywweGEzLDB4MDIsMHgyYywweDRhLDB4ZDAsMHg4 OSwweGRhLDB4N2YsCi0rCTB4ZWQsMHhmNCwweDRjLDB4ZGUsMHgxNywweGVjLDB4ZTUsMHg2Ywot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4NDksMHhiYywweDJkLDB4 MmMsMHhiNywweDMyLDB4Y2IsMHgyMCwweGRmLDB4ZjUsMHg3NywweDU4LAotKwkweGEwLDB4NGIs MHg5MywweDZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDNjLDB4 YWEsMHhiMCwweDIxLDB4NDIsMHhiMCwweGRkLDB4MzQsMHhmMCwweDE2LDB4N2YsMHgwYywKLSsJ MHgwZiwweGZmLDB4MmUsMHhhZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHg4ZSwweGNiLDB4YTMsMHg2NCwweGIyLDB4YjgsMHgzMywweDZjLDB4NjQsMHgzYiwweDc4LDB4 MTYsCi0rCTB4OTksMHgzNSwweGM4LDB4MzAsMHhjYiwweDNlLDB4YTAsMHhkOAotKwl9OwotKwot KwotKy8qIEhNQUMgU0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDMy LDB4OWEsMHgyYSwweDg3LDB4N2IsMHg4OSwweDdjLDB4ZjYsMHhjYiwweDk1LDB4ZDUsMHg0MCwK LSsJMHgxNywweGZlLDB4NDcsMHg3MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9ub25jZVtdID0KLSsJewotKwkweDE2LDB4 ZDgsMHhlMCwweGM3LDB4NTIsMHhjZiwweDRhLDB4MjUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQotKwl7Ci0rCTB4MzUsMHgzNSwweGE5LDB4YTUsMHg0MCwweGJlLDB4OWIsMHhk MSwweDU2LDB4ZGQsMHg0NCwweDAwLAotKwkweDcyLDB4ZjcsMHhkMywweDVlCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2Fk ZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDFiLDB4MmMsMHg4NCwweDJkLDB4NGEsMHg4OSww eDhmLDB4NjksMHgxOSwweGYxLDB4ZjMsMHhkYiwKLSsJMHhiYiwweGUzLDB4YWEsMHhlYQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4Y2YsMHhmYSwweDdkLDB4NzIsMHgw ZiwweGU2LDB4YzcsMHg5NiwweGEwLDB4NjksMHgzMSwweDExLAotKwkweDliLDB4MGIsMHgxYSww eDIwLDB4MWYsMHgzZiwweGFhLDB4ZDEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4OTAsMHg3NSwweDE1LDB4MDQsMHg5NSwweGYxLDB4YmEsMHg4MSwweDBjLDB4Mzcs MHg5NCwweDZmLAotKwkweDg2LDB4NTIsMHg2ZCwweDljCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1 dHJlc2VlZFtdID0KLSsJewotKwkweDViLDB4NDAsMHhiYSwweDVmLDB4MTcsMHg3MCwweGYwLDB4 NGIsMHhkZiwweGM5LDB4OTcsMHg5MiwKLSsJMHg3OSwweGM1LDB4ODIsMHgyOAotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OTcsMHhjOCwweDgwLDB4OTAsMHhiMywweGFh LDB4NmUsMHg2MCwweGVhLDB4ODMsMHg3YSwweGUzLAotKwkweDhhLDB4Y2EsMHhhNCwweDdmCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGExX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDkwLDB4YmQsMHgwNSwweDU2LDB4NmQs MHhiNSwweDIyLDB4ZDUsMHhiOSwweDVhLDB4MjksMHgyZCwKLSsJMHhlOSwweDBiLDB4ZTEsMHhh YywweGRlLDB4MjcsMHgwYiwweGIwCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtMjI0IFBSICAq LwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjI0X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDE3LDB4MzIsMHgyYiwweDJlLDB4NmYs MHgxYiwweDljLDB4NmQsMHgzMSwweGUwLDB4MzQsMHgwNywKLSsJMHhjZiwweGVkLDB4ZjYsMHhi NiwweDVhLDB4NzYsMHg0YywweGJjLDB4NjIsMHg4NSwweDAxLDB4OTAKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9u b25jZVtdID0KLSsJewotKwkweDM4LDB4YmYsMHg1ZiwweDIwLDB4YjMsMHg2OCwweDJmLDB4NDMs MHg2MSwweDA1LDB4OGYsMHgyMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KLSsJewotKwkweGMwLDB4YzksMHg0NSwweGFjLDB4OGQsMHgyNywweDc3LDB4MDgsMHgwYiww eDE3LDB4NmQsMHhlZCwKLSsJMHhjMSwweDdkLDB4ZDUsMHgwNywweDlkLDB4NmUsMHhmOCwweDIz LDB4MmEsMHgyMiwweDEzLDB4YmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHhhNCwweDNjLDB4ZTcsMHgzYiwweGVhLDB4MTksMHg0NSwweDMyLDB4YzIsMHg4Myww eDZkLDB4MjEsCi0rCTB4OGEsMHhjMCwweGVlLDB4NjcsMHg0NSwweGRlLDB4MTMsMHg3ZCwweDlk LDB4NjEsMHgwMCwweDNiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJ MHgxNSwweDA1LDB4NzQsMHg0YSwweDdmLDB4OGQsMHg1YywweDYwLDB4MTYsMHhlNSwweDdiLDB4 YWQsCi0rCTB4ZjUsMHg0MSwweDhmLDB4NTUsMHg2MCwweGM0LDB4MDksMHhlZSwweDFlLDB4MTEs MHg4MSwweGFiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDZm LDB4ZjUsMHg5YSwweGUyLDB4NTQsMHg1MywweDMwLDB4M2QsMHg1YSwweDI3LDB4MjksMHgzOCwK LSsJMHgyNywweGYyLDB4MGQsMHgwNSwweGU5LDB4MjYsMHhjYiwweDE2LDB4YzMsMHg1MSwweDVm LDB4MTMsCi0rCTB4NDEsMHhmZSwweDk5LDB4ZjIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5w dXQyW10gPQotKwl7Ci0rCTB4NzMsMHg4MSwweDg4LDB4ODQsMHg4ZiwweGVkLDB4NmYsMHgxMCww eDlmLDB4OTMsMHhiZiwweDE3LAotKwkweDM1LDB4N2MsMHhlZiwweGQ1LDB4OGQsMHgyNiwweGE2 LDB4N2EsMHhlOCwweDA5LDB4MzYsMHg0ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltd ID0KLSsJewotKwkweGU2LDB4Y2YsMHhjZiwweDdlLDB4MTIsMHhlNSwweDQzLDB4ZDIsMHgzOCww eGQ4LDB4MjQsMHg2ZiwKLSsJMHg1YSwweDM3LDB4NjgsMHhiZiwweDRmLDB4YTAsMHhmZiwweGQ1 LDB4NjEsMHg4YSwweDkzLDB4ZTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsK LSsJMHhhZiwweGY5LDB4ZDgsMHgxOSwweDkxLDB4MzAsMHg4MiwweDZmLDB4YTksMHgxZSwweDlk LDB4ZDcsCi0rCTB4ZjMsMHg1MCwweGUwLDB4YzcsMHhkNSwweDY0LDB4OTYsMHg3ZCwweDRjLDB4 NGQsMHg3OCwweDAzLAotKwkweDZkLDB4ZDgsMHg5ZSwweDcyCi0rCX07Ci0rCi0rCi0rLyogSE1B QyBTSEEtMjI0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDExLDB4ODIs MHhmZCwweGQ5LDB4NDIsMHhmNCwweGZhLDB4YzgsMHhmMiwweDQxLDB4ZTYsMHg1NCwKLSsJMHgw MSwweGFlLDB4MjIsMHg2ZSwweGM2LDB4YWYsMHhhZiwweGQwLDB4YTYsMHhiMiwweGUyLDB4NmQK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9ub25jZVtdID0KLSsJewotKwkweGE5LDB4NDgsMHhkNywweDkyLDB4MzksMHg3 ZSwweDJhLDB4ZGMsMHgzMCwweDFmLDB4MGUsMHgyYgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KLSsJewotKwkweDExLDB4ZDUsMHhmNCwweGJkLDB4NjcsMHg4YywweDMxLDB4 Y2YsMHhhMywweDNmLDB4MWUsMHg2YiwKLSsJMHhhOCwweDA3LDB4MDIsMHgwYiwweGM4LDB4MmUs MHg2YywweDY0LDB4NDEsMHg1YiwweGM4LDB4MzcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRb XSA9Ci0rCXsKLSsJMHg2OCwweDE4LDB4YzIsMHgwNiwweGViLDB4M2UsMHgwNCwweDk1LDB4NDQs MHg1ZSwweGZiLDB4ZTYsCi0rCTB4NDEsMHhjMSwweDVjLDB4Y2MsMHg0MCwweDJmLDB4YjcsMHhk MiwweDBmLDB4ZjMsMHg2YiwweGU3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDdmLDB4NDUsMHhjNywweDVkLDB4MzIsMHhlNiwweDE3LDB4NjAsMHhiYSwweGRjLDB4 YjgsMHg0MiwKLSsJMHgxYiwweDljLDB4ZjEsMHhmYSwweDNiLDB4NGQsMHgyOSwweDU0LDB4YzYs MHg5MCwweGZmLDB4NWMsCi0rCTB4Y2QsMHhkNiwweGE5LDB4Y2MKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhjNCwweDhlLDB4MzcsMHg5NSwweDY5LDB4NTMsMHgy OCwweGQ3LDB4MzcsMHhiYiwweDcwLDB4OTUsCi0rCTB4MWMsMHgwNywweDFkLDB4ZDksMHhiNyww eGU2LDB4MWIsMHhiYiwweGZlLDB4NDEsMHhlYiwweGM5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlu cHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NTMsMHgxNywweGExLDB4NmEsMHhmYSwweDc3LDB4NDcs MHhiMCwweDk1LDB4NTYsMHg5YSwweDIwLAotKwkweDU3LDB4ZGUsMHg1YywweDg5LDB4OWYsMHg3 ZiwweGUyLDB4ZGUsMHgxNywweDNhLDB4NTAsMHgyMwotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1 dDJbXSA9Ci0rCXsKLSsJMHgzYSwweDMyLDB4ZjksMHg4NSwweDBjLDB4YzEsMHhlZCwweDc2LDB4 MmQsMHhkZiwweDQwLDB4YzMsCi0rCTB4MDYsMHgyMiwweDY2LDB4ZDQsMHg5YSwweDlhLDB4ZmYs MHg1YSwweDdlLDB4N2EsMHhmMywweDk2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcmV0dXJuZWRiaXRzW10gPQotKwl7 Ci0rCTB4NDMsMHhiNCwweDU3LDB4NWMsMHgzOCwweDI1LDB4OWQsMHhhZSwweGVjLDB4OTYsMHhk MSwweDg1LAotKwkweDNhLDB4ODQsMHg4ZCwweGZlLDB4NjgsMHhkNSwweDBlLDB4NWMsMHg4Ziww eDY1LDB4YTUsMHg0ZSwKLSsJMHg0NSwweDg0LDB4YTgsMHg5NAotKwl9OwotKwotKwotKy8qIEhN QUMgU0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg0ZCwweGIw LDB4NDMsMHhkOCwweDM0LDB4NGIsMHgxMCwweDcwLDB4YjEsMHg4YiwweGVkLDB4ZWEsCi0rCTB4 MDcsMHg5MiwweDlmLDB4NmMsMHg3OSwweDMxLDB4YWYsMHg4MSwweDI5LDB4ZWIsMHg2ZSwweGNh LAotKwkweDMyLDB4NDgsMHgyOCwweGU3LDB4MDIsMHg1ZCwweGE2LDB4YTYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9ub25jZVtdID0KLSsJewotKwkweDNhLDB4YWUsMHgxNSwweGE5LDB4OTksMHhkYywweGU0LDB4 NjcsMHgzNCwweDNiLDB4NzAsMHgxNSwKLSsJMHhhYSwweGQzLDB4MzAsMHg5YQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2 X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDEzLDB4MWQsMHgyNCwweDA0 LDB4YjAsMHgxOCwweDgxLDB4MTUsMHgyMSwweDUxLDB4MmEsMHgyNCwKLSsJMHg1MiwweDYxLDB4 YmUsMHg2NCwweDgyLDB4NmIsMHg1NSwweDJmLDB4ZTIsMHhmMSwweDQwLDB4N2QsCi0rCTB4NzEs MHhkOCwweDAxLDB4ODYsMHgxNSwweGI3LDB4OGIsMHhiNQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9u YWxpbnB1dFtdID0KLSsJewotKwkweDhmLDB4YTYsMHg1NCwweDVmLDB4YjEsMHhkMCwweGQ4LDB4 YzMsMHhlNywweDBjLDB4MTUsMHhhOSwKLSsJMHgyMywweDZlLDB4ZmUsMHhmYiwweDkzLDB4Zjcs MHgzYSwweGJkLDB4NTksMHgwMSwweGZhLDB4MTgsCi0rCTB4OGUsMHhlOSwweDFhLDB4YTksMHg3 OCwweGZjLDB4NzksMHgwYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0r CTB4Y2YsMHgyNCwweGI5LDB4ZWIsMHhiMywweGQ0LDB4Y2QsMHgxNywweDM3LDB4MzgsMHg3NSww eDc5LAotKwkweDE1LDB4Y2IsMHgyZCwweDc1LDB4NTEsMHhmMSwweGNjLDB4YWEsMHgzMiwweGE0 LDB4YTcsMHgzNiwKLSsJMHg3YywweDVjLDB4ZTQsMHg0NywweGYxLDB4M2UsMHgxZCwweGU1Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDUyLDB4NDIsMHhmYSww eGViLDB4ODUsMHhlMCwweDMwLDB4MjIsMHg3OSwweDAwLDB4MTYsMHhiMiwKLSsJMHg4OCwweDJm LDB4MTQsMHg2YSwweGI3LDB4ZmMsMHhiNywweDUzLDB4ZGMsMHg0YSwweDEyLDB4ZWYsCi0rCTB4 NTQsMHhkNiwweDMzLDB4ZTksMHgyMCwweGQ2LDB4ZmQsMHg1NgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0 aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhmNCwweGY2LDB4NDksMHhhMSwweDJkLDB4NjQsMHgy YiwweDMwLDB4NTgsMHhmOCwweGJkLDB4YjgsCi0rCTB4NzUsMHhlYiwweGJiLDB4NWUsMHgxYyww eDliLDB4ODEsMHg2YSwweGRhLDB4MTQsMHg4NiwweDZlLAotKwkweGQwLDB4ZGEsMHgxOCwweGI3 LDB4ODgsMHhmYiwweDU5LDB4ZjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0r CXsKLSsJMHgyMSwweGNkLDB4NmUsMHg0NiwweGFkLDB4OTksMHgwNywweDE3LDB4YjQsMHgzZCww eDc2LDB4MGEsCi0rCTB4ZmYsMHg1YiwweDUyLDB4NTAsMHg3OCwweGRmLDB4MWYsMHgyNCwweDA2 LDB4MGQsMHgzZiwweDc0LAotKwkweGE5LDB4YzksMHgzNywweGNmLDB4ZDgsMHgyNiwweDI1LDB4 OTEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhhNywweGFmLDB4MmYs MHgyOSwweGUwLDB4M2EsMHg3MiwweDk1LDB4OTYsMHgxYywweGE5LDB4ZjAsCi0rCTB4NGEsMHgx NywweDRkLDB4NjYsMHgwNiwweDEwLDB4YmYsMHgzOSwweDg5LDB4ODgsMHhiOCwweDkxLAotKwkw eDM3LDB4MTgsMHg5OSwweGNmLDB4OGMsMHg1MywweDNiLDB4N2UKLSsJfTsKLSsKLSsKLSsvKiBI TUFDIFNIQS0yNTYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4OTYsMHhi NywweDUzLDB4MjIsMHgxZSwweDUyLDB4MmEsMHg5NiwweGIxLDB4MTUsMHgzYywweDM1LAotKwkw eDVhLDB4OGIsMHhkMywweDRhLDB4YTYsMHg2YywweDgzLDB4MGEsMHg3ZCwweGEzLDB4MjMsMHgz ZCwKLSsJMHg0MywweGExLDB4MDcsMHgyYywweDJkLDB4ZTMsMHg4MSwweGNjCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZf bm9uY2VbXSA9Ci0rCXsKLSsJMHhmMSwweGFjLDB4OTcsMHhjYiwweDVlLDB4MDYsMHg0OCwweGQy LDB4OTQsMHhiZSwweDE1LDB4MmUsCi0rCTB4YzcsMHhmYywweGMyLDB4MDEKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg5OCwweGM1LDB4MWUsMHgzNSwweDVl LDB4ODksMHgwZCwweGNlLDB4NjQsMHg2ZCwweDE4LDB4YTcsCi0rCTB4NWEsMHhjNiwweGYzLDB4 ZTcsMHhkNiwweDllLDB4YzAsMHhlYSwweGI3LDB4M2EsMHg4ZCwweDY1LAotKwkweGI4LDB4ZWIs MHgxMCwweGQ3LDB4NTcsMHgxOCwweGEwLDB4MzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRb XSA9Ci0rCXsKLSsJMHgxYiwweDEwLDB4YWYsMHhhYywweGQwLDB4NjUsMHg5NSwweGFkLDB4MDQs MHhhZCwweDAzLDB4MWMsCi0rCTB4ZTAsMHg0MCwweGQ2LDB4M2UsMHgxYywweDQ2LDB4NTMsMHgz OSwweDdjLDB4ZTIsMHhiYywweGRhLAotKwkweDhjLDB4YTIsMHgzMywweGE3LDB4OWEsMHgyNiww eGQzLDB4MjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YmEsMHg2 MSwweDBlLDB4NTUsMHhmZSwweDExLDB4OGEsMHg5ZSwweDBmLDB4ODAsMHhkZiwweDFkLAotKwkw eDAzLDB4MGEsMHhmZSwweDE1LDB4OTQsMHgyOCwweDRiLDB4YmEsMHhmNCwweDlmLDB4NTEsMHgy NSwKLSsJMHg4OCwweGU1LDB4NGUsMHhmYiwweGFmLDB4Y2UsMHg2OSwweDkwCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZf ZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NjIsMHg3ZiwweDFlLDB4NmIsMHhlOCww eDhlLDB4ZTEsMHgzNSwweDdkLDB4OWIsMHg0ZiwweGM3LAotKwkweGVjLDB4YzgsMHhhYywweGVm LDB4NmIsMHgxMywweDllLDB4MDUsMHg1NiwweGMxLDB4MDgsMHhmOSwKLSsJMHgyZiwweDBmLDB4 MjcsMHg5YywweGQ0LDB4MTUsMHhlZCwweDJkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0cmVz ZWVkW10gPQotKwl7Ci0rCTB4YzcsMHg3NiwweDZlLDB4YTksMHhkMiwweGIyLDB4NzYsMHg0MCww eDgyLDB4MjUsMHgyYywweGIzLAotKwkweDZmLDB4YWMsMHhlOSwweDc0LDB4ZWYsMHg4ZiwweDNj LDB4OGUsMHhjZCwweGYxLDB4YmYsMHhiMywKLSsJMHg0OSwweDc3LDB4MzQsMHg4OCwweDUyLDB4 MzYsMHhlNiwweDJlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDhk LDB4YjgsMHgwYywweGQxLDB4YmYsMHg3MCwweGY2LDB4MTksMHhjMywweDQxLDB4ODAsMHg5ZiwK LSsJMHhlMSwweGE1LDB4YTQsMHgxZiwweDJjLDB4MjYsMHhiMSwweGU1LDB4ZDgsMHhlYiwweGJl LDB4ZjgsCi0rCTB4ZGYsMHg4OCwweDZhLDB4ODksMHhkNiwweDA1LDB4ZDgsMHg5ZAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjU2X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDQzLDB4MTIsMHgyYSwweDJjLDB4NDAsMHg1 MywweDJlLDB4N2MsMHg2NiwweDM0LDB4YWMsMHhjMywKLSsJMHg0MywweGUzLDB4ZTAsMHg2YSww eGZjLDB4ZmEsMHhlYSwweDg3LDB4MjEsMHgxZiwweGUyLDB4MjYsCi0rCTB4YzQsMHhmOSwweDA5 LDB4OWEsMHgwZCwweDZlLDB4N2YsMHhlMAotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTM4NCBQ UiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg2OSwweDgxLDB4OTgsMHg4OCww eDQ0LDB4ZjUsMHhkNiwweDJlLDB4MDAsMHgwOCwweDNiLDB4YzUsCi0rCTB4ZmIsMHhkNywweDhl LDB4NmYsMHgyMywweGY4LDB4NmQsMHgwOSwweGQ2LDB4ODUsMHg0OSwweGQxLAotKwkweGY4LDB4 NmQsMHhhNCwweDU4LDB4NTQsMHhmZCwweDg4LDB4YTkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9ub25jZVtdID0K LSsJewotKwkweDZlLDB4MzgsMHg4MSwweGNhLDB4YjcsMHhlOCwweDZlLDB4NjYsMHg0OSwweDhh LDB4YjIsMHg1OSwKLSsJMHhlZSwweDE2LDB4YzksMHhkZQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGZlLDB4NGMsMHhkOSwweGY0LDB4NzgsMHgzYiww eDA4LDB4NDEsMHg4ZCwweDhmLDB4NTUsMHhjNCwKLSsJMHg0MywweDU2LDB4YjYsMHgxMiwweDM2 LDB4NmIsMHgzMCwweGI3LDB4NWUsMHhlMSwweGI5LDB4NDcsCi0rCTB4MDQsMHhiMSwweDRlLDB4 YTksMHgwMCwweGExLDB4NTIsMHhhMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0K LSsJewotKwkweDg5LDB4ZTksMHhjYywweDhmLDB4MjcsMHgzYywweDI2LDB4ZDEsMHg5NSwweGM4 LDB4N2QsMHgwZiwKLSsJMHg1YiwweDFhLDB4ZjAsMHg3OCwweDM5LDB4NTYsMHg2ZiwweGE0LDB4 MjMsMHhlNywweGQxLDB4ZGEsCi0rCTB4N2MsMHg2NiwweDMzLDB4YTAsMHg5MCwweGM5LDB4OTIs MHg4OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4YmUsMHgzZCww eDdjLDB4MGQsMHhjYSwweGRhLDB4N2MsMHg0OSwweGI4LDB4MTIsMHgzNiwweGMwLAotKwkweGRi LDB4YWQsMHgzNSwweGE4LDB4YzcsMHgwYiwweDJhLDB4MmMsMHg2OSwweDZkLDB4MjUsMHg1NiwK LSsJMHg2MywweDgyLDB4MTEsMHgzZSwweGE3LDB4MzMsMHg3MCwweDcyCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJf aW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDgyLDB4M2QsMHhlNiwweDU0LDB4ODAsMHg0 MiwweGY4LDB4YmEsMHg5MCwweDRmLDB4MDYsMHhhNiwKLSsJMHhkMiwweDdmLDB4YmYsMHg3OSww eDdjLDB4MTIsMHg3ZCwweGE2LDB4YTIsMHg2NiwweGU4LDB4YTYsCi0rCTB4YzAsMHhkNiwweDRh LDB4NTUsMHhiZiwweGQ4LDB4MGEsMHhjNSwweGY4LDB4MDMsMHg4OCwweGRkLAotKwkweDhlLDB4 ODcsMHhkMSwweDVhLDB4NDgsMHgyNiwweDcyLDB4MmEsMHg4ZSwweGNmLDB4ZWUsMHhiYQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg4ZiwweGZmLDB4ZDksMHg4 NCwweGJiLDB4ODUsMHgzYSwweDY2LDB4YTEsMHgyMSwweGNlLDB4YjIsCi0rCTB4M2EsMHgzYSww eDE3LDB4MjIsMHgxOSwweGFlLDB4YzcsMHhiNiwweDYzLDB4ODEsMHhkNSwweGZmLAotKwkweDBk LDB4YzgsMHhlMSwweGFmLDB4NTcsMHhkMiwweGNiLDB4NjAKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhkNywweGZiLDB4YzksMHhlOCwweGUyLDB4ZjIsMHhhYSww eDRjLDB4YjgsMHg1MSwweDJmLDB4ZTEsCi0rCTB4MjIsMHhiYSwweGYzLDB4ZGEsMHgwYSwweDE5 LDB4NzYsMHg3MSwweDU3LDB4YjIsMHgxZCwweDk0LAotKwkweDA5LDB4NjksMHg2YywweGQzLDB4 OTcsMHg1MSwweDgxLDB4ODcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHhlNiwweDE5LDB4MjgsMHhhOCwweDIxLDB4Y2UsMHg1ZSwweGRiLDB4MjQsMHg3OSwweDhjLDB4 NzYsCi0rCTB4NWQsMHg3MywweGIyLDB4ZGYsMHhhYywweGVmLDB4ODUsMHhhNywweDNiLDB4MTks MHgwOSwweDhiLAotKwkweDdmLDB4OTgsMHgyOCwweGE5LDB4OTMsMHhkOCwweDdhLDB4YWQsMHg1 NSwweDhiLDB4MjQsMHg5ZCwKLSsJMHhlNiwweDk4LDB4ZmUsMHg0NywweGQ1LDB4NDgsMHhjMSww eDIzLDB4ZDgsMHgxZCwweDYyLDB4NzUKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0zODQgTm8g UFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YzMsMHg1NiwweDJiLDB4MWQsMHhj MiwweGJiLDB4YTgsMHhmMCwweGFlLDB4MWIsMHgwZCwweGQzLAotKwkweDVhLDB4NmMsMHhkYSww eDU3LDB4OGUsMHhhNSwweDhhLDB4MGQsMHg2YywweDRiLDB4MTgsMHhiMSwKLSsJMHgwNCwweDNl LDB4YjQsMHg5OSwweDM1LDB4YzQsMHhjMCwweDVmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfbm9uY2VbXSA9Ci0rCXsK LSsJMHhjNSwweDQ5LDB4MWUsMHg2NiwweDI3LDB4OTIsMHhiZSwweGVjLDB4YjUsMHgxZSwweDRi LDB4YjEsCi0rCTB4MzgsMHhlMywweGViLDB4NjIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9Ci0rCXsKLSsJMHhiZSwweGU3LDB4NmIsMHg1NywweGRlLDB4ODgsMHgxMSwweDk2 LDB4OWIsMHg2ZSwweGVhLDB4ZTUsCi0rCTB4NjMsMHg4MywweDRjLDB4YjYsMHg4ZCwweDY2LDB4 YWEsMHgxZiwweDhiLDB4NTQsMHhlNywweDYyLAotKwkweDZkLDB4NWEsMHhmYywweGJmLDB4OTcs MHhiYSwweGNkLDB4NzcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHhl NSwweDI4LDB4NWYsMHg0MywweGY1LDB4ODMsMHg2ZSwweDBhLDB4ODMsMHg1YywweGUzLDB4ODEs Ci0rCTB4MDMsMHhmMiwweGY4LDB4NzgsMHgwMCwweDdjLDB4OTUsMHg4NywweDE2LDB4ZDYsMHg2 YywweDU4LAotKwkweDMzLDB4NmMsMHg1MywweDM1LDB4MGQsMHg2NiwweGUzLDB4Y2UKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTIsMHgxZiwweGYzLDB4ZGEsMHgw ZCwweDE5LDB4OTksMHg4NywweGM0LDB4OTAsMHhhMiwweDMxLAotKwkweGNhLDB4MmEsMHg4OSww eDU4LDB4NDMsMHg0NCwweGI4LDB4ZGUsMHhjZiwweGE0LDB4YmUsMHgzYiwKLSsJMHg1MywweDI2 LDB4MjIsMHgzMSwweDc2LDB4NDEsMHgyMiwweGI1LDB4YTgsMHg3MCwweDJmLDB4NGIsCi0rCTB4 NjQsMHg5NSwweDRkLDB4NDgsMHg5NiwweDM1LDB4ZTYsMHhiZCwweDNjLDB4MzQsMHhkYiwweDFi Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NzcsMHg2MSwweGJh LDB4YmMsMHhmMiwweGMxLDB4ZjMsMHg0YiwweDg2LDB4NjUsMHhmZCwweDQ4LAotKwkweDBlLDB4 M2MsMHgwMiwweDVlLDB4YTIsMHg3YSwweDZiLDB4N2MsMHhlZCwweDIxLDB4NWUsMHhmOSwKLSsJ MHhjZCwweGNkLDB4NzcsMHgwNywweDJiLDB4YmUsMHhjNSwweDVjCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRp b25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4MTgsMHgyNCwweDVmLDB4YzYsMHg4NCwweGQx LDB4NjcsMHhjMywweDlhLDB4MTEsMHhhNSwweDhjLAotKwkweDA3LDB4MzksMHgyMSwweDgzLDB4 NGQsMHgwNCwweGM0LDB4NmEsMHgyOCwweDE5LDB4Y2YsMHg5MiwKLSsJMHgyMSwweGQ5LDB4OWUs MHg0MSwweDcyLDB4NmMsMHg5ZSwweDYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0K LSsJewotKwkweDk2LDB4NjcsMHg0MSwweDI4LDB4OWIsMHhiNywweDkyLDB4OGQsMHg2NCwweDNi LDB4ZTQsMHhjZiwKLSsJMHg3ZSwweGFhLDB4MWUsMHhiMSwweDRiLDB4MWQsMHgwOSwweDU2LDB4 NjcsMHg5YywweGM2LDB4NmQsCi0rCTB4M2IsMHhlOCwweDkxLDB4OWQsMHhlMSwweDhhLDB4Yjcs MHgzMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMzg0X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUzLDB4NTksMHg2MSww eDM4LDB4OTIsMHhlYywweGUyLDB4M2MsMHhmZiwweGI3LDB4ZGIsMHgxOSwKLSsJMHgwZiwweDVi LDB4OTMsMHg2OCwweDBkLDB4YTQsMHg5NCwweDQwLDB4NzIsMHgwYiwweGUwLDB4ZWQsCi0rCTB4 NGQsMHhjZCwweDY4LDB4YTAsMHgxZSwweGZlLDB4NjcsMHhiMiwweGZhLDB4MjEsMHg1NiwweDc0 LAotKwkweGE0LDB4YWQsMHhjZiwweGI3LDB4NjAsMHg2NiwweDJlLDB4NDAsMHhkZSwweDgyLDB4 Y2EsMHhmYgotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTUxMiBQUiAgKi8KLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5 aW5wdXRbXSA9Ci0rCXsKLSsJMHhhYSwweDllLDB4NDUsMHg2NywweDBlLDB4MDAsMHgyYSwweDY3 LDB4OTgsMHhkNiwweGRhLDB4MGIsCi0rCTB4MGYsMHgxNywweDdlLDB4YWMsMHhmZCwweDI3LDB4 YzQsMHhjYSwweDg0LDB4ZGYsMHhkZSwweGJhLAotKwkweDg1LDB4ZDksMHhiZSwweDhmLDB4ZjMs MHhmZiwweDkxLDB4NGQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9ub25jZVtdID0KLSsJewotKwkweDhjLDB4NDks MHgyZiwweDU4LDB4MWUsMHg3YSwweGRhLDB4NGIsMHg3ZSwweDhhLDB4MzAsMHg3YiwKLSsJMHg4 NiwweGVhLDB4YWYsMHhhMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K LSsJewotKwkweDcxLDB4ZTEsMHhiYiwweGFkLDB4YTcsMHg0YiwweDJlLDB4MzEsMHgzYiwweDBi LDB4ZWMsMHgyNCwKLSsJMHg5OSwweDM4LDB4YmMsMHhhYSwweDA1LDB4NGMsMHg0NiwweDQ0LDB4 ZmEsMHhhZCwweDhlLDB4MDIsCi0rCTB4YzEsMHg3ZSwweGFkLDB4ZWMsMHg1NCwweGE2LDB4ZDAs MHhhZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDNkLDB4NmUs MHhhNiwweGE4LDB4MjksMHgyYSwweGIyLDB4ZjUsMHg5OCwweDQyLDB4ZTQsMHg5MiwKLSsJMHg3 OCwweDIyLDB4NjcsMHhmZCwweDFiLDB4MTUsMHgxZSwweDI5LDB4YWEsMHg3MSwweDNjLDB4M2Ms Ci0rCTB4ZTcsMHgwNSwweDIwLDB4YTksMHgyOSwweGM2LDB4NzUsMHg3MQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3By X2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4YWIsMHhiOSwweDE2LDB4ZDgsMHg1NSwweDM1 LDB4NTQsMHhiNywweDk3LDB4M2YsMHg5NCwweGJjLAotKwkweDJmLDB4N2MsMHg3MCwweGM3LDB4 ZDAsMHhlZCwweGI3LDB4NGIsMHhmNywweGY2LDB4NmMsMHgwMywKLSsJMHgwYywweGIwLDB4MDMs MHhkOCwweGJiLDB4NzEsMHhkOSwweDEwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1td ID0KLSsJewotKwkweDhlLDB4ZDMsMHhmZCwweDUyLDB4OWUsMHg4MywweDA4LDB4NDksMHgxOCww eDZlLDB4MjMsMHg1NiwKLSsJMHg1YywweDQ1LDB4OTMsMHgzNCwweDA1LDB4ZTIsMHg5OCwweDhm LDB4MGMsMHhkNCwweDMyLDB4MGMsCi0rCTB4ZmQsMHhkYSwweDVmLDB4OTIsMHgzYSwweDhjLDB4 ODEsMHhiZCwweGY2LDB4NmMsMHg1NSwweGZkLAotKwkweGI4LDB4MjAsMHhjZSwweDhkLDB4OTcs MHgyNywweGU4LDB4ZTgsMHhlMCwweGIzLDB4ODUsMHg1MCwKLSsJMHhhMiwweGMyLDB4YjIsMHg5 NSwweDFkLDB4NDgsMHhkMywweDdiLDB4NGIsMHg3OCwweDEzLDB4MzUsCi0rCTB4MDUsMHgxNyww eGJlLDB4MGQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4YzMs MHhmYywweDk1LDB4YWEsMHg2OSwweDA2LDB4YWUsMHg1OSwweDQxLDB4Y2UsMHgyNiwweDA4LAot KwkweDI5LDB4NmQsMHg0NSwweGRhLDB4ZTgsMHhiMywweDZjLDB4OTUsMHg2MCwweDBmLDB4NzAs MHgyYywKLSsJMHgxMCwweGJhLDB4MzgsMHg4YywweGNmLDB4MjksMHg5OSwweGFhCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4M2IsMHg5YSwweDI1LDB4Y2UsMHhk NywweGY5LDB4NWMsMHhkMSwweDNhLDB4M2UsMHhhYSwweDcxLAotKwkweDE0LDB4M2UsMHgxOSww eGU4LDB4Y2UsMHhlNiwweGZlLDB4NTEsMHg4NCwweGU5LDB4MWIsMHhmZSwKLSsJMHgzZiwweGE3 LDB4ZjIsMHhmZCwweDc2LDB4NWYsMHg2YSwweGU3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4YjcsMHg4MiwweGE5LDB4NTcsMHg4MSwweDY3LDB4NTMsMHhiNSwweGEx LDB4ZTksMHgzZCwweDM1LAotKwkweGY5LDB4ZTQsMHg5NywweGJlLDB4YTYsMHhjYSwweGYxLDB4 MDEsMHgxMywweDA5LDB4ZTcsMHgyMSwKLSsJMHhjMCwweGVkLDB4OTMsMHg1ZCwweDRiLDB4ZjQs MHhlYiwweDhkLDB4NTMsMHgyNSwweDhhLDB4YzQsCi0rCTB4YjEsMHg2ZiwweDZlLDB4MzcsMHhj ZCwweDJlLDB4YWMsMHgzOSwweGIyLDB4YjYsMHg5OSwweGEzLAotKwkweDgyLDB4MDAsMHhiMCww eDIxLDB4ZjAsMHhjNywweDJmLDB4NGMsMHg3MywweDkyLDB4ZmQsMHgwMCwKLSsJMHhiNiwweGFm LDB4YmMsMHhkMwotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTUxMiBObyBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRy b3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg2ZSwweDg1LDB4ZTYsMHgyNSwweDk2LDB4MjksMHhhNyww eDUyLDB4NWIsMHg2MCwweGJhLDB4YWEsCi0rCTB4ZGUsMHhkYiwweDM2LDB4MGEsMHg1MSwweDlh LDB4MTUsMHhhZSwweDZlLDB4MTgsMHhkMywweGZlLAotKwkweDM5LDB4YjksMHg0YSwweDk2LDB4 ZjgsMHg3NywweGNiLDB4OTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9ub25jZVtdID0KLSsJewotKwkweGUwLDB4YTYs MHg1ZCwweDA4LDB4YzMsMHg3YywweGFlLDB4MjUsMHgyZSwweDgwLDB4ZDEsMHgzZSwKLSsJMHhk OSwweGFmLDB4NDMsMHgzYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJ ewotKwkweDUzLDB4OTksMHg1MiwweDVmLDB4MTEsMHhhOSwweDY0LDB4NjYsMHgyMCwweDVlLDB4 MWIsMHg1ZiwKLSsJMHg0MiwweGIzLDB4ZjQsMHhkYSwweGVkLDB4YmIsMHg2MywweGMxLDB4MjMs MHhhZiwweGQwLDB4MDEsCi0rCTB4OTAsMHgzYiwweGQwLDB4NzgsMHhlNCwweDBiLDB4YTcsMHgy MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDg1LDB4OTAsMHg4MCww eGQzLDB4OTgsMHhmMSwweDUzLDB4NmQsMHg2OCwweDE1LDB4OGYsMHhlNSwKLSsJMHg2MCwweDNm LDB4MTcsMHgyOSwweDU1LDB4OGQsMHgzMywweGIxLDB4NDUsMHg2NCwweDY0LDB4OGQsCi0rCTB4 NTAsMHgyMSwweDg5LDB4YWUsMHhmNiwweGZkLDB4MzIsMHg3MwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2ludF9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyOCwweDU2LDB4MzAsMHg2ZiwweGY0LDB4YTEsMHg0OCww eGUwLDB4YzksMHhmNSwweDc1LDB4OTAsCi0rCTB4Y2MsMHhmYiwweGRmLDB4ZGYsMHg3MSwweDNk LDB4MGEsMHg5YSwweDAzLDB4NjUsMHgzYiwweDE4LAotKwkweDYxLDB4ZTMsMHhkMSwweGRhLDB4 Y2MsMHg0YSwweGZlLDB4NTUsMHgzOCwweGY4LDB4MjEsMHg2YiwKLSsJMHhmYSwweDE4LDB4MDEs MHg0MiwweDM5LDB4MmYsMHg5OSwweDUzLDB4MzgsMHgxNSwweDgyLDB4MzQsCi0rCTB4YzUsMHg5 MywweDkyLDB4YmMsMHg0ZCwweDc1LDB4MWEsMHg1ZiwweDIxLDB4MjcsMHhjYywweGExLAotKwkw eGIxLDB4NTcsMHg2OSwweGU4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4OGMsMHg1MiwweDdlLDB4NzcsMHg3MiwweDNmLDB4YTMsMHgwNCwweDk3LDB4MTAsMHg5 YiwweDQxLAotKwkweGJkLDB4ZTgsMHhmZiwweDg5LDB4ZWQsMHg4MCwweGUzLDB4YmQsMHhhYSww eDEyLDB4MmQsMHhjYSwKLSsJMHg3NSwweDgyLDB4MzYsMHg3NywweDg4LDB4Y2QsMHhhNiwweDcz Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4N2UsMHgzMiww eGUzLDB4NjksMHg2OSwweDA3LDB4MzQsMHhhMiwweDE2LDB4YTIsMHg1ZCwweDFhLAotKwkweDEw LDB4OTEsMHhkMywweGUyLDB4MjEsMHhhMiwweGEzLDB4ZGQsMHhjZCwweDBjLDB4MDksMHg4NiwK LSsJMHgxMSwweGUxLDB4NTAsMHhmZiwweDVjLDB4YjcsMHhlYiwweDVjCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRk aXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDdmLDB4NzgsMHg2NiwweGQ4LDB4ZmIsMHg2Nyww eGNmLDB4OGQsMHg4YywweDA4LDB4MzAsMHhhNSwKLSsJMHhmOCwweDdkLDB4Y2YsMHg0NCwweDU5 LDB4Y2UsMHhmOCwweGRmLDB4NTgsMHhkMywweDYwLDB4Y2IsCi0rCTB4YTgsMHg2MCwweGI5LDB4 MDcsMHhjNCwweGIxLDB4OTUsMHg0OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3JldHVybmVkYml0c1tdID0KLSsJewot KwkweGRmLDB4YTcsMHgzNiwweGQ0LDB4ZGMsMHg1ZCwweDRkLDB4MzEsMHhhZCwweDY5LDB4NDYs MHg5ZiwKLSsJMHhmMSwweDdjLDB4ZDcsMHgzYiwweDRmLDB4NTUsMHhmMiwweGQ3LDB4YjksMHg5 ZCwweGFkLDB4N2EsCi0rCTB4NzksMHgwOCwweDU5LDB4YTUsMHhkYywweDc0LDB4ZjUsMHg5Yiww eDczLDB4ZDIsMHgxMywweDI1LAotKwkweDBiLDB4ODEsMHgwOCwweDA4LDB4MjUsMHhmYiwweDM5 LDB4ZjIsMHhmMCwweGEzLDB4YTQsMHg4ZCwKLSsJMHhlZiwweDA1LDB4OWUsMHhiOCwweGM3LDB4 NTIsMHhlNCwweDBlLDB4NDIsMHhhYSwweDdjLDB4NzksCi0rCTB4YzIsMHhkNiwweGZkLDB4YTUK LSsJfTsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHNhX3Nl bGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5m aXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg1Njk0MjQ5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4 NTY5NDI0OSArMDIwMAotQEAgLTAsMCArMSwxOTMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsg Ki8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8y MDQ4X3BbXSA9IHsKLSsJMHhhOCwweDUzLDB4NzgsMHhkOCwweGZkLDB4M2YsMHg4ZCwweDcyLDB4 ZWMsMHg3NCwweDE4LDB4MDgsCi0rCTB4MGQsMHhhMiwweDEzLDB4MTcsMHhlNCwweDNlLDB4YzQs MHhiNiwweDJiLDB4YTgsMHhjOCwweDYyLAotKwkweDNiLDB4N2UsMHg0ZCwweDA0LDB4NDQsMHgx ZCwweGQxLDB4YTAsMHg2NSwweDg2LDB4NjIsMHg1OSwKLSsJMHg2NCwweDkzLDB4Y2EsMHg4ZSww eDllLDB4OGYsMHhiYiwweDdlLDB4MzQsMHhhYSwweGRkLDB4YjYsCi0rCTB4MmUsMHg1ZCwweDY3 LDB4YjYsMHhkMCwweDlhLDB4NmUsMHg2MSwweGI3LDB4NjksMHhlNywweGMzLAotKwkweDUyLDB4 YWEsMHgyYiwweDEwLDB4ZTIsMHgwYywweGEwLDB4NjMsMHg2OSwweDYzLDB4YjUsMHg1MiwKLSsJ MHgzZSwweDg2LDB4NDcsMHgwZCwweGVjLDB4YmIsMHhlZCwweGEwLDB4MjcsMHhlNywweDk3LDB4 ZTcsCi0rCTB4YjYsMHg3NiwweDM1LDB4ZDQsMHhkNCwweDljLDB4MzAsMHg3MCwweDBlLDB4NzQs MHhhZiwweDhhLAotKwkweDBmLDB4ZjEsMHg1NiwweGE4LDB4MDEsMHhhZiwweDU3LDB4YTIsMHg2 ZSwweDcwLDB4NzgsMHhmMSwKLSsJMHhkOCwweDJmLDB4NzQsMHg5MCwweDhlLDB4Y2IsMHg2ZCww eDA3LDB4ZTcsMHgwYiwweDM1LDB4MDMsCi0rCTB4ZWUsMHhkOSwweDRmLDB4YTMsMHgyYywweGYx LDB4N2EsMHg3ZiwweGMzLDB4ZDYsMHhjZiwweDQwLAotKwkweGRjLDB4N2IsMHgwMCwweDgzLDB4 MGUsMHg2YSwweDI1LDB4NjYsMHhkYywweDA3LDB4M2UsMHgzNCwKLSsJMHgzMywweDEyLDB4NTEs MHg3YywweDZhLDB4YTUsMHgxNSwweDJiLDB4NGIsMHhmZSwweGNkLDB4MmUsCi0rCTB4NTUsMHgx ZiwweGVlLDB4MzQsMHg2MywweDE4LDB4YTEsMHg1MywweDQyLDB4M2MsMHg5OSwweDZiLAotKwkw eDBkLDB4NWQsMHhjYiwweDkxLDB4MDIsMHhhZSwweGRkLDB4MzgsMHg3OSwweDg2LDB4MTYsMHhm MSwKLSsJMHhmMSwweGUwLDB4ZDYsMHhjNCwweDAzLDB4NTIsMHg1YiwweDFmLDB4OWIsMHgzZCww eDRkLDB4YzcsCi0rCTB4NjYsMHhkZSwweDJkLDB4ZmMsMHg0YSwweDU2LDB4ZDcsMHhiOCwweGJh LDB4NTksMHg2MywweGQ2LAotKwkweDBmLDB4M2UsMHgxNiwweDMxLDB4ODgsMHg3MCwweGFkLDB4 NDMsMHg2OSwweDUyLDB4ZTUsMHg1NywKLSsJMHg2NSwweDM3LDB4NGUsMHhhYiwweDg1LDB4ZTgs MHhlYywweDE3LDB4ZDYsMHhiOSwweGE0LDB4NTQsCi0rCTB4N2IsMHg5YiwweDVmLDB4MjcsMHg1 MiwweGYzLDB4MTAsMHg1YiwweGU4LDB4MDksMHhiMiwweDNhLAotKwkweDJjLDB4OGQsMHg3NCww eDY5LDB4ZGIsMHgwMiwweGUyLDB4NGQsMHg1OSwweDIzLDB4OTQsMHhhNywKLSsJMHhkYiwweGEw LDB4NjksMHhlOQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3Rf MjA0OF9xW10gPSB7Ci0rCTB4ZDIsMHg3NywweDA0LDB4NGUsMHg1MCwweGY1LDB4YTQsMHhlMyww eGY1LDB4MTAsMHhhNSwweDBhLAotKwkweDBiLDB4ODQsMHhmZCwweGZmLDB4YmMsMHhhMCwweDQ3 LDB4ZWQsMHgyNywweDYwLDB4MjAsMHg1NiwKLSsJMHg3NCwweDQxLDB4YTAsMHhhNQotK307Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9nW10gPSB7Ci0rCTB4 MTMsMHhkNywweDU0LDB4ZTIsMHgxZiwweGQyLDB4NDEsMHg2NSwweDVkLDB4YTgsMHg5MSwweGM1 LAotKwkweDIyLDB4YTYsMHg1YSwweDcyLDB4YTgsMHg5YiwweGRjLDB4NjQsMHhlYywweDliLDB4 NTQsMHhhOCwKLSsJMHgyMSwweGVkLDB4NGEsMHg4OSwweDhiLDB4NDksMHgwZSwweDBjLDB4NGYs MHhjYiwweDcyLDB4MTksCi0rCTB4MmEsMHg0YSwweDIwLDB4ZjUsMHg0MSwweGYzLDB4ZjIsMHg5 MiwweDUzLDB4OTksMHhmMCwweGJhLAotKwkweGVjLDB4ZjksMHgyOSwweGFhLDB4ZmIsMHhmNyww eDlkLDB4ZmUsMHg0MywweDMyLDB4MzksMHgzYiwKLSsJMHgzMiwweGNkLDB4MmUsMHgyZiwweGNm LDB4MjcsMHgyZiwweDMyLDB4YTYsMHgyNywweDQzLDB4NGEsCi0rCTB4MGQsMHhmMiwweDQyLDB4 YjcsMHg1YiwweDQxLDB4NGQsMHhmMywweDcyLDB4MTIsMHgxZSwweDUzLAotKwkweGE1LDB4NTMs MHhmMiwweDIyLDB4ZjgsMHgzNiwweGIwLDB4MDAsMHhmMCwweDE2LDB4NDgsMHg1YiwKLSsJMHg2 YiwweGQwLDB4ODksMHg4NCwweDUxLDB4ODAsMHgxZCwweGNkLDB4OGQsMHhlNiwweDRjLDB4ZDUs Ci0rCTB4MzYsMHg1NiwweDk2LDB4ZmYsMHhjNSwweDMyLDB4ZDUsMHgyOCwweGM1LDB4MDYsMHg2 MiwweDBhLAotKwkweDk0LDB4MmEsMHgwMywweDA1LDB4MDQsMHg2ZCwweDhmLDB4MTgsMHg3Niww eDM0LDB4MWYsMHgxZSwKLSsJMHg1NywweDBiLDB4YzMsMHg5NywweDRiLDB4YTYsMHhiOSwweGE0 LDB4MzgsMHhlOSwweDcwLDB4MjMsCi0rCTB4MDIsMHhhMiwweGU2LDB4ZTYsMHg3YiwweGZkLDB4 MDYsMHhkMywweDJiLDB4YzYsMHg3OSwweDk2LAotKwkweDIyLDB4NzEsMHhkNywweGI0LDB4MGMs MHhkNywweDJmLDB4MzgsMHg2ZSwweDY0LDB4ZTAsMHhkNywKLSsJMHhlZiwweDg2LDB4Y2EsMHg4 YywweGE1LDB4ZDEsMHg0MiwweDI4LDB4ZGMsMHgyYSwweDRmLDB4MTYsCi0rCTB4ZTMsMHgxOCww eDk4LDB4ODYsMHhiNSwweDk5LDB4MDYsMHg3NCwweGY0LDB4MjAsMHgwZiwweDNhLAotKwkweDRj LDB4ZjYsMHg1YSwweDNmLDB4MGQsMHhkYiwweGExLDB4ZmEsMHg2NywweDJkLDB4ZmYsMHgyZiwK LSsJMHg1ZSwweDE0LDB4M2QsMHgxMCwweGU0LDB4ZTksMHg3YSwweGU4LDB4NGYsMHg2ZCwweGEw LDB4OTUsCi0rCTB4MzUsMHhkNSwweGI5LDB4ZGYsMHgyNSwweDkxLDB4ODEsMHhhNywweDliLDB4 NjMsMHhiMCwweDY5LAotKwkweGU5LDB4NDksMHg5NywweDJiLDB4MDIsMHhiYSwweDM2LDB4YjMs MHg1OCwweDZhLDB4YWIsMHg3ZSwKLSsJMHg0NSwweGYzLDB4MjIsMHhmOCwweDJlLDB4NGUsMHg4 NSwweGNhLDB4M2EsMHhiOCwweDU1LDB4OTEsCi0rCTB4YjMsMHhjMiwweGE5LDB4NjYKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHViX2tleVtdID0g ewotKwkweDI0LDB4NTIsMHhmMywweGNjLDB4YmUsMHg5ZSwweGQ1LDB4Y2EsMHg3ZCwweGM3LDB4 NGMsMHg2MCwKLSsJMHgyYiwweDk5LDB4MjIsMHg2ZSwweDhmLDB4MmYsMHhhYiwweDM4LDB4ZTcs MHhkNywweGRkLDB4ZmIsCi0rCTB4NzUsMHg1MywweDliLDB4MTcsMHgxNSwweDVlLDB4OWYsMHhj ZiwweGQxLDB4YWIsMHhhNSwweDY0LAotKwkweGViLDB4ODUsMHgzNSwweGQ4LDB4MTIsMHhjOSww eGMyLDB4ZGMsMHhmOSwweDcyLDB4ODQsMHg0NCwKLSsJMHgxYiwweGM0LDB4ODIsMHgyNCwweDM2 LDB4MjQsMHhjNywweGY0LDB4NTcsMHg1OCwweDBjLDB4MWMsCi0rCTB4MzgsMHhhNSwweDdjLDB4 NDYsMHhjNCwweDU3LDB4MzksMHgyNCwweDcwLDB4ZWQsMHhiNSwweDJjLAotKwkweGI1LDB4YTYs MHhlMCwweDNmLDB4ZTYsMHgyOCwweDdiLDB4YjYsMHhmNCwweDlhLDB4NDIsMHhhMiwKLSsJMHgw NiwweDVhLDB4MDUsMHg0ZiwweDAzLDB4MDgsMHgzOSwweGRmLDB4MWYsMHhkMywweDE0LDB4OWMs Ci0rCTB4NGMsMHhhMCwweDUzLDB4MWQsMHhkOCwweGNhLDB4OGEsMHhhYSwweDljLDB4YzcsMHgz MywweDcxLAotKwkweDkzLDB4MzgsMHg3MywweDQ4LDB4MzMsMHg2MSwweDE4LDB4MjIsMHg0NSww eDQ1LDB4ZTgsMHg4YywKLSsJMHg4MCwweGZmLDB4ZDgsMHg3NiwweDVkLDB4NzQsMHgzNiwweDAz LDB4MzMsMHhjYywweGFiLDB4OTksCi0rCTB4NzIsMHg3NywweDliLDB4NjUsMHgyNSwweGE2LDB4 NWIsMHhkZCwweDBkLDB4MTAsMHhjNiwweDc1LAotKwkweGMxLDB4MDksMHhiYiwweGQzLDB4ZTUs MHhiZSwweDRkLDB4NzIsMHhlZiwweDZlLDB4YmEsMHg2ZSwKLSsJMHg0MywweDhkLDB4NTIsMHgy NiwweDIzLDB4N2QsMHhiOCwweDg4LDB4MzcsMHg5YywweDVmLDB4Y2MsCi0rCTB4NDcsMHhhMyww eDg0LDB4N2YsMHhmNiwweDM3LDB4MTEsMHhiYSwweGVkLDB4NmQsMHgwMywweGFmLAotKwkweGU4 LDB4MWUsMHg2OSwweDRhLDB4NDEsMHgzYiwweDY4LDB4MGIsMHhkMywweDhhLDB4YjQsMHg5MCwK LSsJMHgzZiwweDgzLDB4NzAsMHhhNywweDA3LDB4ZWYsMHg1NSwweDFkLDB4NDksMHg0MSwweDAy LDB4NmQsCi0rCTB4OTUsMHg3OSwweGQ2LDB4OTEsMHhkZSwweDhlLDB4ZGEsMHhhMSwweDYxLDB4 MDUsMHhlYiwweDlkLAotKwkweGJhLDB4M2MsMHgyZiwweDRjLDB4MWIsMHhlYywweDUwLDB4ODIs MHg3NSwweGFhLDB4MDIsMHgwNywKLSsJMHhlMiwweDUxLDB4YjUsMHhlYywweGNiLDB4MjgsMHg2 YSwweDRiLDB4MDEsMHhkNCwweDQ5LDB4ZDMsCi0rCTB4MGEsMHhjYiwweDY3LDB4MzcsMHgxNyww eGEwLDB4ZDIsMHhmYiwweDNiLDB4NTAsMHhjOCwweDkzLAotKwkweGY3LDB4ZGEsMHhiMSwweDRm Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3ByaXZf a2V5W10gPSB7Ci0rCTB4MGMsMHg0YiwweDMwLDB4ODksMHhkMSwweGI4LDB4NjIsMHhjYiwweDNj LDB4NDMsMHg2NCwweDkxLAotKwkweGYwLDB4OTEsMHg1NCwweDcwLDB4YzUsMHgyNywweDk2LDB4 ZTMsMHhhYywweGJlLDB4ZTgsMHgwMCwKLSsJMHhlYywweDU1LDB4ZjYsMHhjYwotK307Ci0rCi0r c3RhdGljIGludCBjb3JydXB0X2RzYTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQotKyAg ICB7Ci0rICAgIGNvcnJ1cHRfZHNhID0gMTsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0 X2RzYSgpCi0rCXsKLSsJRFNBICpkc2EgPSBOVUxMOwotKwlFVlBfUEtFWSAqcGsgPSBOVUxMOwot KwlpbnQgcmV0ID0gMDsKLSsKLSsJZHNhID0gRFNBX25ldygpOwotKwotKwlpZihkc2EgPT0gTlVM TCkKLSsJCWdvdG8gZXJyOwotKwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHAsIGRz YV90ZXN0XzIwNDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHEsIGRzYV90ZXN0 XzIwNDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIGcsIGRzYV90ZXN0XzIwNDgp OwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHB1Yl9rZXksIGRzYV90ZXN0XzIwNDgp OwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHByaXZfa2V5LCBkc2FfdGVzdF8yMDQ4 KTsKLSsKLSsJaWYgKGNvcnJ1cHRfZHNhKQotKwkJQk5fc2V0X2JpdChkc2EtPnB1Yl9rZXksIDIw NDcpOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7 Ci0rCi0rCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7Ci0rCi0rCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAotKwkJCQkJTlVMTCwgMCwgRVZQX3NoYTI1Nigp LCAwLAotKwkJCQkJIkRTQSBTSEEyNTYiKSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwot KwllcnI6Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChkc2Ep Ci0rCQlEU0FfZnJlZShkc2EpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHNfZW5jLmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4NTY5NDI0OSArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMJMjAxMy0xMC0wNCAxMTo0ODow NC4xODU2OTQyNDkgKzAyMDAKLUBAIC0wLDAgKzEsMTkxIEBACi0rLyogZmlwZS9ldnAvZmlwc19l bmMuYyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlw dHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2th Z2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNv IGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFy eSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBh cwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlz dHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29k ZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5j bHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHly aWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcn cywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJl IG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJv ZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUg YXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJl IGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgot KyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRo ZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAg RXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9n cmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQot KyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAq IDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZh dGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRp b24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBj cnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVS SUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERB TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsg KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgot KyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJs aWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUg Y2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICog Y29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtp bmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsK LStjb25zdCBFVlBfQ0lQSEVSICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKQotKwl7Ci0r CXN3aXRjaCAobmlkKQotKwkJewotKwkJY2FzZSBOSURfYWVzXzEyOF9jYmM6Ci0rCQlyZXR1cm4g RVZQX2Flc18xMjhfY2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2NjbToKLSsJCXJldHVy biBFVlBfYWVzXzEyOF9jY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2ZiMToKLSsJCXJl dHVybiBFVlBfYWVzXzEyOF9jZmIxKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoK LSsJCXJldHVybiBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhf Y2ZiODoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MTI4X2N0cjoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Fl c18xMjhfZWNiOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2VjYigpOwotKwotKwkJY2FzZSBOSURf YWVzXzEyOF9nY206Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfZ2NtKCk7Ci0rCi0rCQljYXNlIE5J RF9hZXNfMTI4X29mYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9vZmIoKTsKLSsKLSsJCWNh c2UgTklEX2Flc18xMjhfeHRzOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOwotKwotKwkJ Y2FzZSBOSURfYWVzXzE5Ml9jYmM6Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJfY2JjKCk7Ci0rCi0r CQljYXNlIE5JRF9hZXNfMTkyX2NjbToKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jY20oKTsKLSsK LSsJCWNhc2UgTklEX2Flc18xOTJfY2ZiMToKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxKCk7 Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2NmYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9j ZmIxMjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY2ZiODoKLSsJCXJldHVybiBFVlBfYWVz XzE5Ml9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKLSsJCXJldHVybiBFVlBf YWVzXzE5Ml9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfZWNiOgotKwkJcmV0dXJuIEVW UF9hZXNfMTkyX2VjYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9nY206Ci0rCQlyZXR1cm4g RVZQX2Flc18xOTJfZ2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKLSsJCXJl dHVybiBFVlBfYWVzXzE5Ml9vZmIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2JjOgotKwkJ cmV0dXJuIEVWUF9hZXNfMjU2X2NiYygpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jY206Ci0r CQlyZXR1cm4gRVZQX2Flc18yNTZfY2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NmYjE6 Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9j ZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMTI4KCk7Ci0rCi0rCQljYXNlIE5JRF9h ZXNfMjU2X2NmYjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwotKwkJY2FzZSBO SURfYWVzXzI1Nl9jdHI6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7Ci0rCi0rCQljYXNl IE5JRF9hZXNfMjU2X2VjYjoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9lY2IoKTsKLSsKLSsJCWNh c2UgTklEX2Flc18yNTZfZ2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2djbSgpOwotKwotKwkJ Y2FzZSBOSURfYWVzXzI1Nl9vZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfb2ZiKCk7Ci0r Ci0rCQljYXNlIE5JRF9hZXNfMjU2X3h0czoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl94dHMoKTsK LSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfZWNiOgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlKCk7Ci0r Ci0rCQljYXNlIE5JRF9kZXNfZWRlM19lY2I6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzKCk7Ci0r Ci0rCQljYXNlIE5JRF9kZXNfZWRlM19jYmM6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NiYygp OwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiMToKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNf Y2ZiMSgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6Ci0rCQlyZXR1cm4gRVZQX2Rl c19lZGUzX2NmYjY0KCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlM19jZmI4OgotKwkJcmV0dXJu IEVWUF9kZXNfZWRlM19jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlM19vZmI2NDoKLSsJ CXJldHVybiBFVlBfZGVzX2VkZTNfb2ZiKCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlX2NiYzoK LSsJCXJldHVybiBFVlBfZGVzX2VkZV9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfY2Zi NjQ6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2ZiNjQoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19l ZGVfb2ZiNjQ6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGVfb2ZiKCk7Ci0rCi0rCQlkZWZhdWx0Ogot KwkJcmV0dXJuIE5VTEw7Ci0rCi0rCQl9Ci0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHMu aAotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTMtMTAtMDQg MTE6NDg6MDQuMTg2Njk0MjcxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Zmlwcy5oCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg2Njk0MjcxICswMjAwCi1AQCAtMCwwICsxLDI3 OSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPHN0 ZGFyZy5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2Vycm9yIEZJUFMgaXMgZGlzYWJs ZWQuCi0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1 c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLStzdHJ1Y3QgZHNhX3N0OwotK3N0cnVj dCByc2Ffc3Q7Ci0rc3RydWN0IGV2cF9wa2V5X3N0OwotK3N0cnVjdCBlbnZfbWRfc3Q7Ci0rc3Ry dWN0IGVudl9tZF9jdHhfc3Q7Ci0rc3RydWN0IGV2cF9jaXBoZXJfc3Q7Ci0rc3RydWN0IGV2cF9j aXBoZXJfY3R4X3N0OwotK3N0cnVjdCBkaF9tZXRob2Q7Ci0rc3RydWN0IENNQUNfQ1RYX3N0Owot K3N0cnVjdCBobWFjX2N0eF9zdDsKLSsKLStpbnQgRklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9u b2ZmLCBjb25zdCBjaGFyICphdXRoKTsKLStpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKTsKLStj b25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Qodm9p ZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0 X3NoYTEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKLStpbnQgRklQU19z ZWxmdGVzdF9zaGEyKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lkKTsKLStpbnQg RklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20o dm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cyh2b2lkKTsKLStpbnQgRklQU19zZWxm dGVzdF9hZXModm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOwotK2ludCBGSVBT X3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7Ci0rdm9p ZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9yc2Eo dm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0 X2RzYV9rZXlnZW4odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOwotK3ZvaWQg RklQU19jb3JydXB0X3JuZyh2b2lkKTsKLSt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpOwotK3Zv aWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZik7Ci0rdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50 IG9ub2ZmKTsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRl c3RfeDkzMSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9obWFjKHZvaWQpOwotK2ludCBGSVBT X3NlbGZ0ZXN0X2RyYmcodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCk7 Ci0raW50IEZJUFNfc2VsZnRlc3RfY21hYyh2b2lkKTsKLSsKLSt2b2lkIEZJUFNfZ2V0X3RpbWV2 ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3RyKTsKLSsKLSsjZGVmaW5l IEZJUFNfRVJST1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBc Ci0rCQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdvcml0aG0gZXJyb3IgaWdub3Jl ZCIpOwotKwotK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5X3N0 ICpwa2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJCQlj b25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29uc3Qg c3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0rCQkJY29u c3QgY2hhciAqZmFpbF9zdHIpOwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBf Y2lwaGVyX2N0eF9zdCAqY3R4LAotKwkJCWNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBo ZXIsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKml2LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKLSsJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAotKwkJCWludCBsZW4pOwotKwotK3ZvaWQgZmlwc19z ZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKLSsKLStjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBT X2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKLSsKLStjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9z dCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7Ci0rCi0rCi0rLyogQkVHSU4gRVJST1Ig Q09ERVMgKi8KLSsvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0 aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2lu dCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotKyAqLwot K3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOwotKwotKy8qIEVycm9yIGNvZGVzIGZv ciB0aGUgRklQUyBmdW5jdGlvbnMuICovCi0rCi0rLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2Rl ZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJCQkgMTAwCi0rI2RlZmluZSBGSVBTX0Zf REhfSU5JVAkJCQkJIDE0OAotKyNkZWZpbmUgRklQU19GX0RSQkdfUkVTRUVECQkJCSAxNjIKLSsj ZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMDEKLSsjZGVmaW5lIEZJUFNf Rl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJ R04JCQkJIDEwMgotKyNkZWZpbmUgRklQU19GX0RTQV9ET19WRVJJRlkJCQkJIDEwMwotKyNkZWZp bmUgRklQU19GX0VDREhfQ09NUFVURV9LRVkJCQkJIDE2MwotKyNkZWZpbmUgRklQU19GX0VDRFNB X0RPX1NJR04JCQkJIDE2NAotKyNkZWZpbmUgRklQU19GX0VDRFNBX0RPX1ZFUklGWQkJCQkgMTY1 Ci0rI2RlZmluZSBGSVBTX0ZfRUNfS0VZX0dFTkVSQVRFX0tFWQkJCSAxNjYKLSsjZGVmaW5lIEZJ UFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKLSsjZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNU SU5JVF9FWAkJCSAxMjUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQQkJCQkgMTA0Ci0r I2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0FfUFJORwkJCSAxNTEKLSsjZGVmaW5lIEZJUFNf Rl9GSVBTX0NIRUNLX0VDCQkJCSAxNDIKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDX1BS TkcJCQkgMTUyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJ CSAxMDUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkgMTA2Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19DSEVDS19SU0FfUFJORwkJCSAxNTAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NJ UEhFUgkJCQkgMTYwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJJTklUCQkJCSAxNDMKLSsj ZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUl9DVFhfQ1RSTAkJCSAxNjEKLSsjZGVmaW5lIEZJUFNf Rl9GSVBTX0RJR0VTVEZJTkFMCQkJCSAxNTgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVElO SVQJCQkJIDEyOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUVVBEQVRFCQkJIDE1OQotKyNk ZWZpbmUgRklQU19GX0ZJUFNfRFJCR19CWVRFUwkJCQkgMTMxCi0rI2RlZmluZSBGSVBTX0ZfRklQ U19EUkJHX0NIRUNLCQkJCSAxNDYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVT VAkJCSAxMzIKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0sJCQkgMTM2Ci0r I2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFCQkJIDEzNAotKyNkZWZpbmUgRklQU19G X0ZJUFNfRFJCR19JTklUCQkJCSAxMzUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFO VElBVEUJCQkgMTM4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX05FVwkJCQkgMTM5Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19EUkJHX1JFU0VFRAkJCQkgMTQwCi0rI2RlZmluZSBGSVBTX0ZfRklQ U19EUkJHX1NJTkdMRV9LQVQJCQkgMTQxCi0rI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sJ CS8qIHVudXNlZCAqLwkgMTA3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfU0lHTl9ESUdFU1QJ CQkgMTU0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfVkVSSUZZX0RJR0VTVAkJCSAxNTUKLSsj ZGVmaW5lIEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZCQkJCSAxNDcKLSsjZGVmaW5lIEZJUFNfRl9G SVBTX01PREVfU0VUCQkvKiB1bnVzZWQgKi8JIDEwOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9E VUxFX01PREVfU0VUCQkJIDEwOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVf VEVTVAkJCSAxMDkKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQURECQkJCSAxMzcKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEyMgotKyNkZWZpbmUgRklQU19GX0ZJUFNf UkFORF9QU0VVRE9fQllURVMJCQkgMTY3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFRUQJ CQkJIDE2OAotKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRVRfTUVUSE9ECQkJIDEyNgotKyNk ZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMJCQkJIDEyNwotKyNkZWZpbmUgRklQU19GX0ZJ UFNfUlNBX1NJR05fRElHRVNUCQkJIDE1NgotKyNkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1ZFUklG WV9ESUdFU1QJCQkgMTU3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMJCQkgMTEw Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNCQkJIDE0NQotKyNkZWZpbmUg RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTQkJCSAxMjkKLSsjZGVmaW5lIEZJUFNfRl9GSVBT X1NFTEZURVNUX0FFU19YVFMJCQkgMTQ0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9D TUFDCQkJIDEzMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQotKyNk ZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgotKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfRUNEU0EJCQkgMTMzCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9I TUFDCQkJIDExMwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HCS8qIHVudXNlZCAq LwkgMTE0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExCQkJIDExNQotKyNkZWZp bmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMQkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBT X1NFVF9QUk5HX0tFWQkJCSAxNTMKLSsjZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMK LSsjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTE2Ci0rI2RlZmluZSBGSVBT X0ZfUlNBX0VBWV9JTklUCQkJCSAxNDkKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVf REVDUllQVAkJCSAxMTcKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJ CSAxMTgKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJIDExOQotKyNk ZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkgMTIwCi0rI2RlZmluZSBGSVBT X0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEyMQotKyNkZWZpbmUgRklQU19GX1NTTEVB WV9SQU5EX0JZVEVTCS8qIHVudXNlZCAqLwkgMTIyCi0rCi0rLyogUmVhc29uIGNvZGVzLiAqLwot KyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRAkgMTUwCi0r I2RlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORwkJIDEyNQotKyNkZWZpbmUg RklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVECQkJIDEzNAotKyNkZWZpbmUgRklQU19SX0FVVEhF TlRJQ0FUSU9OX0ZBSUxVUkUJCQkgMTUxCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhF CQkvKiB1bnVzZWQgKi8JIDEwMwotKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdF U1QJLyogdW51c2VkICovCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURF TkNFCQkJIDExNAotKyNkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VECQkJIDE1Mgot KyNkZWZpbmUgRklQU19SX0RSQkdfU1RVQ0sJCQkJIDEwMwotKyNkZWZpbmUgRklQU19SX0VOVFJP UFlfRVJST1JfVU5ERVRFQ1RFRAkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9FTlRST1BZX05PVF9S RVFVRVNURURfRk9SX1JFU0VFRAkJIDEwNQotKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfU09VUkNF X1NUVUNLCQkJIDE0MgotKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJ IDExNQotKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMjcKLSsj ZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxfSU5QVVQJIDEyNAotKyNk ZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWQkJCSAxMjIKLSsjZGVmaW5lIEZJ UFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFCQkJIDE0MAotKyNkZWZpbmUgRklQU19SX0VYRV9E SUdFU1RfRE9FU19OT1RfTUFUQ0ggICAvKiB1bnVzZWQgKi8JIDEwNQotKyNkZWZpbmUgRklQU19S X0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkgMTEwCi0rI2RlZmluZSBGSVBTX1JfRklOR0VS UFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSsjZGVmaW5lIEZJUFNf Ul9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDExMgotKyNkZWZp bmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKLSsjZGVmaW5lIEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfUl9GVU5DVElPTl9FUlJP UgkJCQkgMTE2Ci0rI2RlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJST1IJCQkJIDEzNwotKyNkZWZp bmUgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQJCSAxMTgKLSsjZGVmaW5lIEZJUFNf Ul9JTlNUQU5USUFURV9FUlJPUgkJCSAxMTkKLSsjZGVmaW5lIEZJUFNfUl9JTlNVRkZJQ0lFTlRf U0VDVVJJVFlfU1RSRU5HVEgJCSAxMjAKLSsjZGVmaW5lIEZJUFNfUl9JTlRFUk5BTF9FUlJPUgkJ CQkgMTIxCi0rI2RlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RICQkJIDEwOQotKyNkZWZp bmUgRklQU19SX0lOVkFMSURfUEFSQU1FVEVSUwkJCSAxNDQKLSsjZGVmaW5lIEZJUFNfUl9JTl9F UlJPUl9TVEFURQkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJCQkgMTA4 Ci0rI2RlZmluZSBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRAkJCSAxNDkKLSsjZGVmaW5l IEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMAotKyNkZWZpbmUgRklQU19SX05PUFJfVEVT VDFfRkFJTFVSRQkJCSAxNDUKLSsjZGVmaW5lIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUJCQkg MTQ2Ci0rI2RlZmluZSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRAkJCQkgMTI2Ci0rI2RlZmluZSBG SVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX1JfUEVSU09O QUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQJCSAxMjgKLSsjZGVmaW5lIEZJUFNfUl9QRVJTT05B TElTQVRJT05fU1RSSU5HX1RPT19MT05HCQkgMTI5Ci0rI2RlZmluZSBGSVBTX1JfUFJOR19TVFJF TkdUSF9UT09fTE9XCQkJIDE0MwotKyNkZWZpbmUgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUJCQkJ IDE0NwotKyNkZWZpbmUgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUJCQkJIDE0OAotKyNkZWZpbmUg RklQU19SX1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQJCSAxMzAKLSsjZGVmaW5lIEZJ UFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRwkJIDEzMQotKyNkZWZpbmUgRklQU19SX1JF U0VFRF9DT1VOVEVSX0VSUk9SCQkJIDEzMgotKyNkZWZpbmUgRklQU19SX1JFU0VFRF9FUlJPUgkJ CQkgMTMzCi0rI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IJLyogdW51c2VkICovCSAx MTUKLSsjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNgot KyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCi0rI2RlZmluZSBGSVBTX1Jf U0VMRlRFU1RfRkFJTFVSRQkJCQkgMTM1Ci0rI2RlZmluZSBGSVBTX1JfU1RSRU5HVEhfRVJST1Jf VU5ERVRFQ1RFRAkJIDEzNgotKyNkZWZpbmUgRklQU19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3Ci0r I2RlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUgkJCSAxNDEKLSsjZGVmaW5lIEZJUFNf Ul9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IJCSAxMzgKLSsjZGVmaW5lIEZJUFNfUl9VTlNV UFBPUlRFRF9EUkJHX1RZUEUJCQkgMTM5Ci0rI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExB VEZPUk0JCQkgMTEzCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMK LS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBz CTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg2Njk0MjcxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODY2 OTQyNzEgKzAyMDAKLUBAIC0wLDAgKzEsMTM3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0eXBl ZGVmIHN0cnVjdCB7Ci0rCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOwotKwljb25zdCBjaGFy ICprZXksICppdjsKLSsJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwotK30g SE1BQ19LQVQ7Ci0rCi0rc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7 CUVWUF9zaGExLAotKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9m aXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAot KwkiU2FtcGxlICMyIiwKLSsJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4 MTksCi0rCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAotKwkgIDB4 YzYsMHhjNywweDVkLDB4MjQgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyMjQsCi0rCS8qIGp1 c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFC QyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4 NTAsMHhmYiwKLSsJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCi0r CSAgMHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAotKwkgIDB4OGMsMHg4 ZCwweDEyLDB4YzcgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyNTYsCi0rCSIwMTIzNDU2Nzg5 Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0 MSwweGVhLDB4NDMsMHgwOSwKLSsJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4 LDB4MzQsCi0rCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAotKwkg IDB4MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9Ci0rICAgIH0sCi0rICAg IHsJRVZQX3NoYTM4NCwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIs Ci0rCXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAotKwkgIDB4OWEs MHgxZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKLSsJICAweGI3LDB4MTgsMHgwNiww eGE1LDB4NzcsMHhjZCwweDQ5LDB4MDQsCi0rCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4 NTEsMHg1MSwweDlmLAotKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1 MCwKLSsJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQotKyAgICB9 LAotKyAgICB7CUVWUF9zaGE1MTIsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1w bGUgIzIiLAotKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKLSsJ ICAweDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCi0rCSAgMHg0NCwweGQ1 LDB4YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAotKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIs MHhjMCwweDkwLDB4NzcsMHg2OCwKLSsJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSww eDJjLDB4MmYsCi0rCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAot KwkgIDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKLSsJICAweGJkLDB4 NGYsMHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQotKyAgICB9LAotK307Ci0rCi0raW50 IEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIHVuc2lnbmVk IGludCAgICBvdXRsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpF XTsKLSsgICAgY29uc3QgRVZQX01EICAgKm1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsK LSsgICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBd KTsgbisrLHQrKykKLSsJewotKwltZCA9ICgqdC0+YWxnKSgpOwotKwlITUFDKG1kLHQtPmtleSxz dHJsZW4odC0+a2V5KSwKLSsJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQt Pml2KSwKLSsJCW91dCwmb3V0bGVuKTsKLSsKLSsJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRs ZW4pKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsg ICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlw c19sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBz CTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg2Njk0MjcxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAxMy0xMC0wNCAxMTo0ODowNC4xODY2OTQyNzEgKzAy MDAKLUBAIC0wLDAgKzEsNzEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewot KyNlbmRpZgotKwotKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkzMgotKyNkZWZp bmUgZmlwc19sb2FkX2tleV9jb21wb25lbnQoa2V5LCBjb21wLCBwcmUpIFwKLSsJa2V5LT5jb21w ID0gQk5fYmluMmJuKHByZSMjXyMjY29tcCwgc2l6ZW9mKHByZSMjXyMjY29tcCksIGtleS0+Y29t cCk7IFwKLSsJaWYgKCFrZXktPmNvbXApIFwKLSsJCWdvdG8gZXJyCi0rCi0rI2RlZmluZSBmaXBz X3Bvc3Rfc3RhcnRlZChpZCwgc3ViaWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3Rfc3VjY2Vz cyhpZCwgc3ViaWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwg ZXgpIDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJpZCwgZXgpIDEKLSsjZGVm aW5lIGZpcHNfcG9zdF9zdGF0dXMoKSAxCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsj ZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNf bWQuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfbWQuYwotLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQu MTg2Njk0MjcxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19tZC5j CTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg2Njk0MjcxICswMjAwCi1AQCAtMCwwICsxLDE0NSBAQAot Ky8qIGZpcHMvZXZwL2ZpcHNfbWQuYyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsg KiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0 aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAq IAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVy Y2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhl YXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2Rl IGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhh c2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1 bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVk IGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIg aXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCBy ZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGlu Ci0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2Fn ZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmli dXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2Vk LgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHBy b2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFs KSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29m dHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAg IFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMg ZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGlj IHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmlj IGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRp cmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRn ZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot KyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24g dGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZh dGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5u b3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRp b24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICov Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3Vu ZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgot KyAqLwotKwotKy8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZlcnNpb25zIG9mIERpZ2VzdCBv cGVyYXRpb25zICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8 c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0 cy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStjb25zdCBFVlBfTUQgKkZJUFNfZ2V0 X2RpZ2VzdGJ5bmlkKGludCBuaWQpCi0rCXsKLSsJc3dpdGNoIChuaWQpCi0rCQl7Ci0rCQljYXNl IE5JRF9zaGExOgotKwkJcmV0dXJuIEVWUF9zaGExKCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEyMjQ6 Ci0rCQlyZXR1cm4gRVZQX3NoYTIyNCgpOwotKwotKwkJY2FzZSBOSURfc2hhMjU2OgotKwkJcmV0 dXJuIEVWUF9zaGEyNTYoKTsKLSsKLSsJCWNhc2UgTklEX3NoYTM4NDoKLSsJCXJldHVybiBFVlBf c2hhMzg0KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGE1MTI6Ci0rCQlyZXR1cm4gRVZQX3NoYTUxMigp OwotKwotKwkJZGVmYXVsdDoKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKwl9Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Zmlwc19wb3N0LmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4NjY5NDI3MSArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIwMTMtMTAtMDQgMTE6NDg6 MDQuMTg2Njk0MjcxICswMjAwCi1AQCAtMCwwICsxLDIwNSBAQAotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoK LSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KgotKyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5n Lmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsv KiBQb3dlciBvbiBzZWxmIHRlc3QgKFBPU1QpIHN1cHBvcnQgZnVuY3Rpb25zICovCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsvKiBS dW4gYWxsIHNlbGZ0ZXN0cyAqLwotK2ludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpCi0rCXsKLSsJaW50 IHJ2ID0gMTsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkKLSsJCXJ2ID0gMDsKLSsJaWYg KCFGSVBTX3NlbGZ0ZXN0X3g5MzEoKSkKLSsJCXJ2ID0gMDsKLSsgICAgCWlmICghRklQU19zZWxm dGVzdF9zaGExKCkpCi0rCQlydiA9IDA7Ci0rICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMigp KQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfaG1hYygpKQotKwkJcnYgPSAwOwot KwlpZiAoIUZJUFNfc2VsZnRlc3RfY21hYygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2Vs ZnRlc3RfYWVzKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9hZXNfY2NtKCkp Ci0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9hZXNfZ2NtKCkpCi0rCQlydiA9IDA7 Ci0rCWlmICghRklQU19zZWxmdGVzdF9hZXNfeHRzKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQ U19zZWxmdGVzdF9kZXMoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgp KQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfZHNhKCkpCi0rCQlydiA9IDA7Ci0r CXJldHVybiBydjsKLSsJfQotKwotKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0 aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKLSsgKiBzdXBwbGllZCBpbiB0YnMgdXNp bmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0Ci0rICogZmxhZ3Mg bWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAotKyAq IGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5z d2VyIHRlc3QKLSsgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmlj YXRpb24gcHVycG9zZXMgaW4gY2FzZQotKyAqIG9mIGZhaWx1cmUuIElmICJwa2V5IiBpcyBOVUxM IGp1c3QgcGVyZm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgotKyAqLwotKwotK2ludCBmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5z aWduZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50 IG1kX2ZsYWdzLAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQotKwl7CQotKwlpbnQgcmV0ID0g MDsKLSsJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKLSsJdW5zaWdu ZWQgaW50IHNpZ2xlbjsKLSsJRVZQX01EX0NUWCBtY3R4OwotKwlFVlBfTURfQ1RYX2luaXQoJm1j dHgpOwotKwotKwlpZiAoZGlnZXN0ID09IE5VTEwpCi0rCQlkaWdlc3QgPSBFVlBfc2hhMjU2KCk7 Ci0rCi0rCWlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCi0rCQkmJiAoUlNBX3NpemUo cGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKQotKwkJewotKwkJc2lnID0gT1BFTlNT TF9tYWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKLSsJCWlmICghc2lnKQotKwkJCXsK LSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9D X0ZBSUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsKLSsJaWYgKHRic2xlbiA9 PSAtMSkKLSsJCXRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7Ci0rCi0rCWlmIChtZF9mbGFn cykKLSsJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFncyk7Ci0rCi0rCWlmICgh RVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJ aWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQotKwkJZ290byBlcnJvcjsK LSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4sIHBrZXkpKQotKwkJZ290 byBlcnJvcjsKLSsKLSsJaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChr YXQsIHNpZywga2F0bGVuKSkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUVWUF9WZXJpZnlJ bml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBf VmVyaWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlyZXQg PSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5KTsKLSsKLSsJZXJyb3I6 Ci0rCWlmIChzaWcgIT0gc2lndG1wKQotKwkJT1BFTlNTTF9mcmVlKHNpZyk7Ci0rCUVWUF9NRF9D VFhfY2xlYW51cCgmbWN0eCk7Ci0rCWlmIChyZXQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9GQUlMVVJFKTsKLSsJCWlm IChmYWlsX3N0cikKLSsJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIp OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6 ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJl c3VsdAotKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGgg b3JpZ2luYWwgcGxhaW50ZXh0LgotKyAqLwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9D SVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKLSsJCQljb25zdCB1bnNp Z25lZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhl cnRleHQsCi0rCQkJaW50IGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFY X0NJUEhFUl9URVNUX1NJWkVdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhF Ul9URVNUX1NJWkVdOwotKwotKwlPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVS X1RFU1RfU0laRSk7Ci0rCW1lbXNldChwbHRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0la RSk7Ci0rCW1lbXNldChjaXRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCi0r CWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0g MCkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQs IGxlbikgPD0gMCkKLSsJCXJldHVybiAwOwotKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0 LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhl ciwgTlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhl cihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChtZW1j bXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlyZXR1cm4gMTsKLSsJ fQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5k LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwotLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODow NC4xODc2OTQyOTQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3Jh bmQuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4NzY5NDI5NCArMDIwMAotQEAgLTAsMCArMSw0NTcg QEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0r ICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0 cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgot KyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0r ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgot KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS Ci0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKgotKyAqIFRoaXMgaXMgYSBGSVBT IGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCi0rICovCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsvKiBJZiB3 ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29u J3QKLSsgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3 aXRoIHN0cmljdCBjb21waWxlcnMKLSsgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8K LSsjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKLSsjZGVmaW5lIF9YT1BFTl9TT1VSQ0Vf RVhURU5ERUQgMQotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaWYgIShkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMy KSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpKQotKyMgaW5jbHVkZSA8c3lzL3RpbWUu aD4KLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQotKyMgaW5jbHVk ZSA8dGltZS5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaWZuZGVmIE9QRU5T U0xfU1lTX1dJTjMyCi0rIyBpZmRlZiBPUEVOU1NMX1VOSVNURAotKyMgIGluY2x1ZGUgT1BFTlNT TF9VTklTVEQKLSsjIGVsc2UKLSsjICBpbmNsdWRlIDx1bmlzdGQuaD4KLSsjIGVuZGlmCi0rI2Vu ZGlmCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj aW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3ZvaWQg Kk9QRU5TU0xfc3RkZXJyKHZvaWQpOwotKwotKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSAkxNgot KwotKwotKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8KLSsKLSt0eXBlZGVmIHN0 cnVjdCAKLSsJewotKwlpbnQgc2VlZGVkOwotKwlpbnQga2V5ZWQ7Ci0rCWludCB0ZXN0X21vZGU7 Ci0rCWludCBzZWNvbmQ7Ci0rCWludCBlcnJvcjsKLSsJdW5zaWduZWQgbG9uZyBjb3VudGVyOwot KwlBRVNfS0VZIGtzOwotKwlpbnQgdnBvczsKLSsJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtl eSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KLSsJdW5zaWduZWQgY2hhciB0bXBfa2V5W0FF U19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07Ci0r CXVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgbGFz dFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJfSBGSVBTX1BSTkdfQ1RYOwotKwotK3N0YXRpYyBGSVBT X1BSTkdfQ1RYIHNjdHg7Ci0rCi0rc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7Ci0rCi0r dm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQotKwl7Ci0rCWZpcHNfcHJuZ19mYWlsID0g b25vZmY7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCi0rCXsKLSsJRklQU194 OTMxX3N0aWNrKDEpOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQo RklQU19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJY3R4LT5rZXll ZCA9IDA7Ci0rCWN0eC0+dGVzdF9tb2RlID0gMDsKLSsJY3R4LT5jb3VudGVyID0gMDsKLSsJY3R4 LT5zZWNvbmQgPSAwOwotKwljdHgtPmVycm9yID0gMDsKLSsJY3R4LT52cG9zID0gMDsKLSsJT1BF TlNTTF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCU9QRU5TU0xfY2xlYW5z ZSgmY3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKLSsJfQotKwkKLSsKLStzdGF0aWMgaW50IGZp cHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCi0rCXsKLSsJaWYgKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWSwgRklQ U19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKGtleWxlbiAh PSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQotKwkJewotKwkJLyogZXJyb3I6 IGludmFsaWQga2V5IHNpemUgKi8KLSsJCXJldHVybiAwOwotKwkJfQotKwlBRVNfc2V0X2VuY3J5 cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKLSsJaWYgKGtleWxlbiA9PSAxNikK LSsJCXsKLSsJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOwotKwkJY3R4LT5rZXllZCA9 IDI7Ci0rCQl9Ci0rCWVsc2UKLSsJCWN0eC0+a2V5ZWQgPSAxOwotKwljdHgtPnNlZWRlZCA9IDA7 Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZp cHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqc2VlZCwgdW5zaWduZWQgaW50IHNlZWRsZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGk7 Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJCXJldHVybiAwOwotKwkvKiBJbiB0ZXN0IG1vZGUgc2Vl ZCBpcyBqdXN0IHN1cHBsaWVkIGRhdGEgKi8KLSsJaWYgKGN0eC0+dGVzdF9tb2RlKQotKwkJewot KwkJaWYgKHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQlyZXR1cm4gMDsKLSsJCW1l bWNweShjdHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJY3R4LT5zZWVkZWQgPSAx OwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGll ZCBkYXRhIHdpdGggZXhpc3Rpbmcgc2VlZCAqLwotKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsg aSsrKQotKwkJewotKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOwotKwkJaWYgKGN0 eC0+dnBvcyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQljdHgtPnZwb3MgPSAwOwot KwkJCS8qIFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscwot KyAJCQkgKiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCi0rIAkJ CSAqLyAKLSsJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQotKwkJCQl7Ci0rCQkJCWlmICghbWVtY21w KGN0eC0+dG1wX2tleSwgY3R4LT5WLCAxNikpCi0rCQkJCQl7Ci0rCQkJCQlSQU5EZXJyKFJBTkRf Rl9GSVBTX1NFVF9QUk5HX1NFRUQsCi0rCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9N QVRDSF9LRVkpOwotKwkJCQkJcmV0dXJuIDA7Ci0rCQkJCQl9Ci0rCQkJCU9QRU5TU0xfY2xlYW5z ZShjdHgtPnRtcF9rZXksIDE2KTsKLSsJCQkJY3R4LT5rZXllZCA9IDE7Ci0rCQkJCX0KLSsJCQlj dHgtPnNlZWRlZCA9IDE7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRp YyBpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwlpZiAo Y3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxS QU5EX1JfUFJOR19LRVlFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJY3R4LT50ZXN0X21vZGUg PSAxOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQp Ci0rCXsKLSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7Ci0rCX0KLSsKLStpbnQg RklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21v ZGUoJnNjdHgpOwotKwl9Ci0rCi0rCi0raW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hh ciAqZHQpCi0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFO RF9GX0ZJUFNfWDkzMV9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJl dHVybiAxOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQp Ci0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0rdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5z aWduZWQgbG9uZyAqcGN0cikKLSsJewotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlGSUxF VElNRSBmdDsKLSsjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rICAgICAgICBz dHJ1Y3QgdGltZXNwZWMgdHM7Ci0rI2Vsc2UKLSsJc3RydWN0IHRpbWV2YWwgdHY7Ci0rI2VuZGlm Ci0rCi0rI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJdW5zaWduZWQgbG9uZyBwaWQ7 Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUdldFN5c3RlbVRpbWVB c0ZpbGVUaW1lKCZmdCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0 ZVRpbWUgJiAweGZmKTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0 ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdI aWdoRGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAo KGZ0LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKwlidWZbNF0gPSAodW5zaWduZWQg Y2hhcikgKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKLSsJYnVmWzVdID0gKHVuc2lnbmVkIGNo YXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAodW5zaWdu ZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAo dW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyNlbGlm IGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFM VElNRSwgJnRzKTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9zZWMgJiAweGZm KTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDgpICYgMHhmZik7 Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAxNikgJiAweGZmKTsK LSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOwot KwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X25zZWMgJiAweGZmKTsKLSsJYnVmWzVd ID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0g PSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10g PSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDI0KSAmIDB4ZmYpOwotKyNlbHNlCi0r CWdldHRpbWVvZmRheSgmdHYsTlVMTCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYu dHZfc2VjICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+ PiA4KSAmIDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4g MTYpICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAy NCkgJiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhm Zik7Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZm KTsKLSsJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZm KTsKLSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZm KTsKLSsjZW5kaWYKLSsJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpICgqcGN0ciAmIDB4ZmYpOwot KwlidWZbOV0gPSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiA4KSAmIDB4ZmYpOwotKwlidWZb MTBdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlsxMV0g PSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiAyNCkgJiAweGZmKTsKLSsKLSsJKCpwY3RyKSsr OwotKwotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXBpZD0odW5zaWduZWQg bG9uZylnZXRwaWQoKTsKLSsJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7 Ci0rCWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKLSsJYnVm WzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzE1XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKLSsjZW5kaWYKLSsgICAgfQot KwotK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQl1bnNpZ25l ZCBjaGFyICpvdXQsIHVuc2lnbmVkIGludCBvdXRsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBS W0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFy IHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCWlmIChjdHgtPmVycm9yKQotKwkJ ewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VSUk9SKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRf Rl9GSVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlm ICghY3R4LT5zZWVkZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9S X1BSTkdfTk9UX1NFRURFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJZm9yICg7OykKLSsJCXsK LSsJCWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJRklQU19nZXRfdGltZXZlYyhjdHgtPkRULCAm Y3R4LT5jb3VudGVyKTsKLSsJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKLSsJ CWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1wW2ldID0gSVtp XSBeIGN0eC0+VltpXTsKLSsJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOwotKwkJZm9y IChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBSW2ldIF4g SVtpXTsKLSsJCUFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7Ci0rCQkvKiBDb250 aW51b3VzIFBSTkcgdGVzdCAqLwotKwkJaWYgKGN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQlpZiAo Zmlwc19wcm5nX2ZhaWwpCi0rCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5H VEgpOwotKwkJCWlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCi0r CQkJCXsKLSsJICAgIAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVD Syk7Ci0rCQkJCWN0eC0+ZXJyb3IgPSAxOwotKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7 Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJfQotKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwg QUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlpZiAoIWN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQljdHgt PnNlY29uZCA9IDE7Ci0rCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQkJY29udGludWU7Ci0r CQkJfQotKwotKwkJaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQlt ZW1jcHkob3V0LCBSLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsKLSsJCW1lbWNweShv dXQsIFIsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7Ci0r CQlvdXRsZW4gLT0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LSsKLStpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQg a2V5bGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7Ci0rCUNS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwot K2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFO RF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCXJldHVybiBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtl eWxlbik7Ci0rCX0KLSsKLStpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50 IHNlZWRsZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19S QU5EKTsKLSsJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsK LSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9 Ci0rCi0rCi0raW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3Vu dCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwot KwlyZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOwotKwlDUllQVE9fd191bmxvY2so Q1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU194OTMx X3N0YXR1cyh2b2lkKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xP Q0tfUkFORCk7Ci0rCXJldCA9IHNjdHguc2VlZGVkOwotKwlDUllQVE9fcl91bmxvY2soQ1JZUFRP X0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfeDkzMV9yZXNl dCh2b2lkKQotKwl7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWZpcHNf cmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JB TkQpOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpz ZWVkLCBpbnQgc2VlZGxlbikKLSsJewotKwlGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qg dm9pZCAqc2VlZCwgaW50IHNlZWRsZW4sCi0rCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCi0rCXsK LSsJRklQU194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0r c3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRoPQotKyAgICB7Ci0rICAgIGZp cHNfZG9fcmFuZF9zZWVkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0rICAgIEZJUFNfeDkzMV9y ZXNldCwKLSsgICAgZmlwc19kb19yYW5kX2FkZCwKLSsgICAgRklQU194OTMxX2J5dGVzLAotKyAg ICBGSVBTX3g5MzFfc3RhdHVzCi0rICAgIH07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNf eDkzMV9tZXRob2Qodm9pZCkKLSt7Ci0rICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOwotK30KLSsK LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5o LmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQu MTg3Njk0Mjk0ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5k LmgJMjAxMy0xMC0wNCAxMTo0ODowNC4xODc2OTQyOTQgKzAyMDAKLUBAIC0wLDAgKzEsMTQ1IEBA Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lmbmRlZiBIRUFERVJfRklQU19SQU5E X0gKLSsjZGVmaW5lIEhFQURFUl9GSVBTX1JBTkRfSAotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Fl cy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLStpbnQg RklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKTsK LStpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKLStpbnQgRklQ U194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG91dGxlbik7Ci0rCi0raW50IEZJ UFNfeDkzMV90ZXN0X21vZGUodm9pZCk7Ci0rdm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCk7Ci0r aW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwotKwotK2ludCBGSVBTX3g5 MzFfc3RhdHVzKHZvaWQpOwotKwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9k KHZvaWQpOwotKwotK3R5cGVkZWYgc3RydWN0IGRyYmdfY3R4X3N0IERSQkdfQ1RYOwotKy8qIERS QkcgZXh0ZXJuYWwgZmxhZ3MgKi8KLSsvKiBGbGFnIGZvciBDVFIgbW9kZSBvbmx5OiB1c2UgZGVy aXZhdGlvbiBmdW5jdGlvbiBjdHJfZGYgKi8KLSsjZGVmaW5lCURSQkdfRkxBR19DVFJfVVNFX0RG CQkweDEKLSsvKiBQUk5HIGlzIGluIHRlc3Qgc3RhdGUgKi8KLSsjZGVmaW5lCURSQkdfRkxBR19U RVNUCQkJMHgyCi0rCi0rRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVk IGludCBmbGFncyk7Ci0raW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlw ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLStpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdf Q1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xl bik7Ci0raW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKLStpbnQgRklQU19kcmJnX2dlbmVyYXRlKERS QkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJaW50 IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBz aXplX3QgYWRpbmxlbik7Ci0rCi0raW50IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4KTsKLSt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KTsKLSsKLStpbnQg RklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAoKmdldF9l bnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVu dHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVw X2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4p LAotKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKLSsJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJH X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVf dCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJH X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSk7Ci0rCi0raW50IEZJ UFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAoKmdl dF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCi0rCXZvaWQgKCpj bGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9s ZW4pLAotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1 ZiwgaW50IG51bSksCi0rCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAotKwkJCQlj b25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSk7Ci0rCi0rdm9pZCAqRklQ U19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKLSt2b2lkIEZJUFNfZHJiZ19zZXRf YXBwX2RhdGEoRFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2RhdGEpOwotK3NpemVfdCBGSVBTX2Ry YmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKLStpbnQgRklQU19kcmJnX2dldF9z dHJlbmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0rdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVy dmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOwotK3ZvaWQgRklQU19kcmJnX3NldF9y ZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7Ci0rCi0raW50IEZJ UFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgpOwotKwotK0RSQkdfQ1RYICpGSVBT X2dldF9kZWZhdWx0X2RyYmcodm9pZCk7Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19t ZXRob2Qodm9pZCk7Ci0rCi0rCi0raW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRf TUVUSE9EICptZXRoKTsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qo dm9pZCk7Ci0rCi0rdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKTsKLSsKLStpbnQg RklQU19yYW5kX3N0cmVuZ3RoKHZvaWQpOwotKwotKy8qIDEuMC4wIGNvbXBhdCBmdW5jdGlvbnMg Ki8KLStpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBT X1JBTkRfU0laRV9UIGtleWxlbik7Ci0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1 ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pOwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQg Y2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7Ci0raW50IEZJUFNfcmFuZF90ZXN0 X21vZGUodm9pZCk7Ci0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7Ci0raW50IEZJUFNfcmFu ZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwotK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQp OwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpOwotKwotKyNpZmRl ZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4NzY5NDI5 NCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAky MDEzLTEwLTA0IDExOjQ4OjA0LjE4NzY5NDI5NCArMDIwMAotQEAgLTAsMCArMSwyMTkgQEAKLSsv KiBmaXBzL3JhbmQvZmlwc19yYW5kX2xjbC5oICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVu IE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVj dC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAg ICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSt0eXBlZGVm IHN0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7Ci0rdHlwZWRlZiBzdHJ1Y3Qg ZHJiZ19obWFjX2N0eF9zdCBEUkJHX0hNQUNfQ1RYOwotK3R5cGVkZWYgc3RydWN0IGRyYmdfY3Ry X2N0eF9zdCBEUkJHX0NUUl9DVFg7Ci0rCi0rLyogODg4IGJpdHMgZnJvbSAxMC4xIHRhYmxlIDIg Ki8KLSsjZGVmaW5lIEhBU0hfUFJOR19NQVhfU0VFRExFTgkxMTEKLSsKLStzdHJ1Y3QgZHJiZ19o YXNoX2N0eF9zdAotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCUVWUF9NRF9DVFggbWN0eDsK LSsJdW5zaWduZWQgY2hhciBWW0hBU0hfUFJOR19NQVhfU0VFRExFTl07Ci0rCXVuc2lnbmVkIGNo YXIgQ1tIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwotKwkvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFn ZTogc2hvdWxkIGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5ndGggKi8KLSsJdW5zaWduZWQg Y2hhciB2dG1wW0hBU0hfUFJOR19NQVhfU0VFRExFTl07Ci0rCX07Ci0rCi0rc3RydWN0IGRyYmdf aG1hY19jdHhfc3QKLSsJewotKwljb25zdCBFVlBfTUQgKm1kOwotKwlITUFDX0NUWCBoY3R4Owot Kwl1bnNpZ25lZCBjaGFyIEtbRVZQX01BWF9NRF9TSVpFXTsKLSsJdW5zaWduZWQgY2hhciBWW0VW UF9NQVhfTURfU0laRV07Ci0rCX07Ci0rCi0rc3RydWN0IGRyYmdfY3RyX2N0eF9zdAotKwl7Ci0r CUFFU19LRVkga3M7Ci0rCXNpemVfdCBrZXlsZW47Ci0rCXVuc2lnbmVkIGNoYXIgS1szMl07Ci0r CXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCS8qIFRlbXAgdmFyaWFibGVzIHVzZWQgYnkgZGVyaXZh dGlvbiBmdW5jdGlvbiAqLwotKwlBRVNfS0VZIGRmX2tzOwotKwlBRVNfS0VZIGRmX2t4a3M7Ci0r CS8qIFRlbXBvcmFyeSBibG9jayBzdG9yYWdlIHVzZWQgYnkgY3RyX2RmICovCi0rCXVuc2lnbmVk IGNoYXIgYmx0bXBbMTZdOwotKwlzaXplX3QgYmx0bXBfcG9zOwotKwl1bnNpZ25lZCBjaGFyIEtY WzQ4XTsKLSsJfTsKLSsKLSsvKiBEUkJHIGludGVybmFsIGZsYWdzICovCi0rCi0rLyogRnVuY3Rp b25zIHNob3VsZG4ndCBjYWxsIGVyciBsaWJyYXJ5ICovCi0rI2RlZmluZQlEUkJHX0ZMQUdfTk9F UlIJCQkweDEKLSsvKiBDdXN0b20gcmVzZWVkIGNoZWNraW5nICovCi0rI2RlZmluZQlEUkJHX0NV U1RPTV9SRVNFRUQJCTB4MgotKwotKy8qIERSQkcgc3RhdHVzIHZhbHVlcyAqLwotKy8qIG5vdCBp bml0aWFsaXNlZCAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRAkwCi0rLyog b2sgYW5kIHJlYWR5IHRvIGdlbmVyYXRlIHJhbmRvbSBiaXRzICovCi0rI2RlZmluZSBEUkJHX1NU QVRVU19SRUFEWQkJMQotKy8qIHJlc2VlZCByZXF1aXJlZCAqLwotKyNkZWZpbmUgRFJCR19TVEFU VVNfUkVTRUVECQkyCi0rLyogZmF0YWwgZXJyb3IgY29uZGl0aW9uICovCi0rI2RlZmluZSBEUkJH X1NUQVRVU19FUlJPUgkJMwotKwotKy8qIEEgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aDogbGFyZ2Vy IHRoYW4gYW55IHJlYXNvbmFibGUgdmFsdWUgdXNlZCBpbiBwcmF0aWNlICovCi0rCi0rI2RlZmlu ZSBEUkJHX01BWF9MRU5HVEgJCQkweDdmZmZmZmYwCi0rLyogTWF4aW11bSBEUkJHIGJsb2NrIGxl bmd0aDogYWxsIG1kIHNpemVzIGFyZSBiaWdnZXIgdGhhbiBjaXBoZXIgYmxvY2tzIHNpemVzCi0r ICogc28gdXNlIG1heCBkaWdlc3QgbGVuZ3RoLgotKyAqLwotKyNkZWZpbmUgRFJCR19NQVhfQkxP Q0sJCQlFVlBfTUFYX01EX1NJWkUKLSsKLSsjZGVmaW5lIERSQkdfSEVBTFRIX0lOVEVSVkFMCQko MSA8PCAyNCkKLSsKLSsvKiBEUkJHIGNvbnRleHQgc3RydWN0dXJlICovCi0rCi0rc3RydWN0IGRy YmdfY3R4X3N0Ci0rCXsKLSsJLyogRmlyc3QgdHlwZXMgY29tbW9uIHRvIGFsbCBpbXBsZW1lbnRh dGlvbnMgKi8KLSsJLyogRFJCRyB0eXBlOiBhIE5JRCBmb3IgdGhlIHVuZGVybHlpbmcgYWxnb3Jp dGhtICovCi0rCWludCB0eXBlOwotKwkvKiBWYXJpb3VzIGV4dGVybmFsIGZsYWdzICovCi0rCXVu c2lnbmVkIGludCB4ZmxhZ3M7Ci0rCS8qIFZhcmlvdXMgaW50ZXJuYWwgdXNlIG9ubHkgZmxhZ3Mg Ki8KLSsJdW5zaWduZWQgaW50IGlmbGFnczsKLSsJLyogVXNlZCBmb3IgcGVyaW9kaWMgaGVhbHRo IGNoZWNrcyAqLwotKwlpbnQgaGVhbHRoX2NoZWNrX2NudCwgaGVhbHRoX2NoZWNrX2ludGVydmFs OwotKwotKwkvKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHNldHVwIGJ5IG1lY2hhbmlz bSBkcmJnX2luaXQoKSBjYWxsICovCi0rCWludCBzdHJlbmd0aDsKLSsJc2l6ZV90IGJsb2NrbGVu Z3RoOwotKwlzaXplX3QgbWF4X3JlcXVlc3Q7Ci0rCi0rCXNpemVfdCBtaW5fZW50cm9weSwgbWF4 X2VudHJvcHk7Ci0rCXNpemVfdCBtaW5fbm9uY2UsIG1heF9ub25jZTsKLSsJc2l6ZV90IG1heF9w ZXJzLCBtYXhfYWRpbjsKLSsJdW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyOwotKwl1bnNpZ25l ZCBpbnQgcmVzZWVkX2ludGVydmFsOwotKwlzaXplX3Qgc2VlZGxlbjsKLSsJaW50IHN0YXR1czsK LSsJLyogQXBwbGljYXRpb24gZGF0YTogdHlwaWNhbGx5IHVzZWQgYnkgdGVzdCBnZXRfZW50cm9w eSAqLwotKwl2b2lkICphcHBfZGF0YTsKLSsJLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3Ry dWN0dXJlcyAqLwotKwl1bmlvbiAKLSsJCXsKLSsJCURSQkdfSEFTSF9DVFggaGFzaDsKLSsJCURS QkdfSE1BQ19DVFggaG1hYzsKLSsJCURSQkdfQ1RSX0NUWCAgY3RyOwotKwkJfSBkOwotKwkvKiBJ bml0aWFsaWFzZSBQUk5HIGFuZCBzZXR1cCBjYWxsYmFja3MgYmVsb3cgKi8KLSsJaW50ICgqaW5p dCkoRFJCR19DVFggKmN0eCwgaW50IG5pZCwgaW50IHNlY3VyaXR5LCB1bnNpZ25lZCBpbnQgZmxh Z3MpOwotKwkvKiBJbnRhbnRpYXRlIFBSTkcgKi8KLSsJaW50ICgqaW5zdGFudGlhdGUpKERSQkdf Q1RYICpjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwK LSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKLSsJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOwotKwkvKiByZXNlZWQg Ki8KLSsJaW50ICgqcmVzZWVkKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4s IHNpemVfdCBhZGlubGVuKTsKLSsJLyogZ2VuZXJhdCBvdXRwdXQgKi8KLSsJaW50ICgqZ2VuZXJh dGUpKERSQkdfQ1RYICpjdHgsCi0rCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxl biwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKwkv KiB1bmluc3RhbnRpYXRlICovCi0rCWludCAoKnVuaW5zdGFudGlhdGUpKERSQkdfQ1RYICpjdHgp OwotKwotKwkvKiBFbnRyb3B5IHNvdXJjZSBibG9jayBsZW5ndGggKi8KLSsJc2l6ZV90IGVudHJv cHlfYmxvY2tsZW47Ci0rCi0rCS8qIGVudHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCi0rCXNp emVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwK LSsJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7Ci0rCS8q IEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggZW50cm9weSBidWZmZXIgKi8KLSsJdm9p ZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBz aXplX3Qgb2xlbik7Ci0rCi0rCS8qIG5vbmNlIGdhdGhlcmluZyBmdW5jdGlvbiAqLwotKwlzaXpl X3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJ CQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsJLyogSW5k aWNhdGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBub25jZSBidWZmZXIgKi8KLSsJdm9pZCAoKmNs ZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9s ZW4pOwotKwotKwkvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIgdGVzdCB0ZW1wb3JhcnkgYXJl YSAqLwotKwkvKiBMYXN0IGJsb2NrICovCQotKwl1bnNpZ25lZCBjaGFyIGxiW0VWUF9NQVhfTURf U0laRV07Ci0rCS8qIHNldCBpZiBsYiBpcyB2YWxpZCAqLwotKwlpbnQgbGJfdmFsaWQ7Ci0rCi0r CS8qIENhbGxiYWNrcyB1c2VkIHdoZW4gY2FsbGVkIHRocm91Z2ggUkFORCBpbnRlcmZhY2UgKi8K LSsJLyogR2V0IGFueSBhZGRpdGlvbmFsIGlucHV0IGZvciBnZW5lcmF0ZSAqLwotKwlzaXplX3Qg KCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpOwotKwl2b2lk ICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvbGVuKTsKLSsJLyogQ2FsbGJhY2sgZm9yIFJBTkRfc2VlZCgpLCBSQU5EX2FkZCgpICovCi0r CWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQg bnVtKTsKLSsJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHZv aWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpOwotKwl9OwotKwotKwotK2ludCBmaXBz X2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0 KERSQkdfQ1RYICpkY3R4KTsKLStpbnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0 eCk7Ci0raW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVk IGludCBmbGFncyk7Ci0raW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBj b25zdCB1bnNpZ25lZCBjaGFyICpvdXQpOwotKwotK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJ UFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpOwotKwotK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVy X3N0ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKLSsKLSsjZGVmaW5lIEZJUFNfZGln ZXN0aW5pdCBFVlBfRGlnZXN0SW5pdAotKyNkZWZpbmUgRklQU19kaWdlc3R1cGRhdGUgRVZQX0Rp Z2VzdFVwZGF0ZQotKyNkZWZpbmUgRklQU19kaWdlc3RmaW5hbCBFVlBfRGlnZXN0RmluYWwKLSsj ZGVmaW5lIE1fRVZQX01EX3NpemUgRVZQX01EX3NpemUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2ZpcHNfcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNf cmFuZF9saWIuYy5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg3Njk0Mjk0ICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCTIwMTMtMTAtMDQgMTE6 NDg6MDQuMTg3Njk0Mjk0ICswMjAwCi1AQCAtMCwwICsxLDE5MSBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUg ImVfb3MuaCIKLSsKLSsvKiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNpbWlsYXIgdG8gUkFORCBm dW5jdGlvbmFsaXR5IGJ1dCB3aXRob3V0Ci0rICogRU5HSU5FIGFuZCBhZGRpdGlvbmFsIGNoZWNr aW5nIGZvciBub24tRklQUyByYW5kIG1ldGhvZHMuCi0rICovCi0rCi0rc3RhdGljIGNvbnN0IFJB TkRfTUVUSE9EICpmaXBzX3JhbmRfbWV0aCA9IE5VTEw7Ci0rc3RhdGljIGludCBmaXBzX2FwcHJv dmVkX3JhbmRfbWV0aCA9IDA7Ci0rc3RhdGljIGludCBmaXBzX3JhbmRfYml0cyA9IDA7Ci0rCi0r LyogQWxsb3dzIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBvZiBiaXRzIGFuZCB1c2Vz IG5vbi1GSVBTIG1ldGhvZHMgKi8KLSt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMp Ci0rCXsKLSsJZmlwc19yYW5kX2JpdHMgPSBuYml0czsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRf c2V0X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKLSsJewotKwlpZiAoIWZpcHNfcmFu ZF9iaXRzKQotKwkJewotKwkJaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQotKwkJCWZp cHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKLSsJCWVsc2UgaWYgKG1ldGggPT0gRklQU194OTMx X21ldGhvZCgpKQotKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMjsKLSsJCWVsc2UKLSsJ CQl7Ci0rCQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOwotKwkJCWlmIChGSVBTX21vZHVs ZV9tb2RlKCkpCi0rCQkJCXsKLSsJCQkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRI T0QsCi0rCQkJCQkJRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQkJCXJldHVybiAwOwotKwkJ CQl9Ci0rCQkJfQotKwkJfQotKwlmaXBzX3JhbmRfbWV0aCA9IG1ldGg7Ci0rCXJldHVybiAxOwot Kwl9Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpCi0r CXsKLSsJcmV0dXJuIGZpcHNfcmFuZF9tZXRoOwotKwl9Ci0rCi0rY29uc3QgUkFORF9NRVRIT0Qg KkZJUFNfcmFuZF9tZXRob2Qodm9pZCkKLSsJewotKwlyZXR1cm4gRklQU19yYW5kX2dldF9tZXRo b2QoKTsKLSsJfQotKwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpCi0rCXsKLSsJaWYgKGZp cHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQotKwkJZmlwc19yYW5kX21l dGgtPmNsZWFudXAoKTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpi dWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5k X21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19SQU5EX1NFRUQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9 Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c2VlZCkKLSsJCWZpcHNf cmFuZF9tZXRoLT5zZWVkKGJ1ZixudW0pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgRklQ U19yYW5kX2FkZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KQotKwl7 Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0FERCwgRklQU19SX05PTl9GSVBTX01F VEhPRCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3Jh bmRfbWV0aC0+YWRkKQotKwkJZmlwc19yYW5kX21ldGgtPmFkZChidWYsbnVtLGVudHJvcHkpOwot Kwl9Ci0rCi0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIEZJUFNfUkFO RF9TSVpFX1QgbnVtKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQ U19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0JZVEVT LCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlw c19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmJ5dGVzKQotKwkJcmV0dXJuIGZpcHNfcmFu ZF9tZXRoLT5ieXRlcyhidWYsbnVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLStpbnQgRklQU19y YW5kX3BzZXVkb19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBudW0pCi0rCXsKLSsJaWYg KCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNf TUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlw c19yYW5kX21ldGgtPnBzZXVkb3JhbmQpCi0rCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPnBzZXVk b3JhbmQoYnVmLG51bSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc3Rh dHVzKHZvaWQpCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21v ZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTLCBG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19y YW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnN0YXR1cykKLSsJCXJldHVybiBmaXBzX3JhbmRf bWV0aC0+c3RhdHVzKCk7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rLyogUmV0dXJuIGluc3RhbnRp YXRlZCBzdHJlbmd0aCBvZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlzIGFuIGludGVybmFsCi0rICog cGFyYW1ldGVyLiBGb3IgWDkuMzEgUFJORyBpdCBpcyA4MCBiaXRzIChmcm9tIFNQODAwLTEzMSku IEFueSBvdGhlcgotKyAqIHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92ZWQgYW5kIHJldHVybnMg MCBpbiBGSVBTIG1vZGUgYW5kIG1heGltdW0KLSsgKiAyNTYgb3V0c2lkZSBGSVBTIG1vZGUuCi0r ICovCi0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQotKwl7Ci0rCWlmIChmaXBzX3Jh bmRfYml0cykKLSsJCXJldHVybiBmaXBzX3JhbmRfYml0czsKLSsJaWYgKGZpcHNfYXBwcm92ZWRf cmFuZF9tZXRoID09IDEpCi0rCQlyZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dl dF9kZWZhdWx0X2RyYmcoKSk7Ci0rCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09 IDIpCi0rCQlyZXR1cm4gODA7Ci0rCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09 IDApCi0rCQl7Ci0rCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKwkJCXJldHVybiAwOwotKwkJ ZWxzZQotKwkJCXJldHVybiAyNTY7Ci0rCQl9Ci0rCXJldHVybiAwOwotKwl9Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwkyMDEzLTEwLTA0IDEx OjQ4OjA0LjE4NzY5NDI5NCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2Zp cHNfcmFuZF9zZWxmdGVzdC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg3Njk0Mjk0ICswMjAwCi1A QCAtMCwwICsxLDE4MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAz IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCi0rCi0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERU WzE2XTsKLSsJdW5zaWduZWQgY2hhciBWWzE2XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJ fSBBRVNfUFJOR19UVjsKLSsKLSsvKiBUaGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFr ZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAqLwotKwotK3N0YXRpYyB1bnNpZ25lZCBj aGFyIGFlc18xMjhfa2V5WzE2XSA9Ci0rCQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAs MHg3MiwweDQyLAotKwkJIDB4ZWQsMHgwNiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07 Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18xMjhfdHYgPSAKLSsJewotKwkJCQkvKiBEVCAq LwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3 LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4Zjl9LAotKwkJCQkvKiBWICovCi0rCQl7 MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDU5LDB4 NTMsMHgxZSwweGQxLDB4M2IsMHhiMCwweGMwLDB4NTUsCi0rCQkgMHg4NCwweDc5LDB4NjYsMHg4 NSwweGMxLDB4MmYsMHg3NiwweDQxfQotKwl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFl c18xOTJfa2V5WzI0XSA9Ci0rCQl7MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSww eDZlLAotKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKLSsJCSAw eDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9OwotKwotK3N0YXRpYyBBRVNf UFJOR19UViBhZXNfMTkyX3R2ID0gCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgs MHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCww eDI0LDB4NzgsMHhmMywweDRifSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5 LDB4NzksMHgxZSwweGVmLAotKwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQs MHg5M30KLSsJfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQot KwkJezB4NmQsMHgxNCwweDA2LDB4NmMsMHhiNiwweGQ4LDB4MjEsMHgyZCwKLSsJCSAweDgyLDB4 OGQsMHhmYSwweGYyLDB4N2EsMHgwMywweGI3LDB4OWYsCi0rCQkgMHgwYywweGM3LDB4M2UsMHhj ZCwweDc2LDB4ZWIsMHhlZSwweGI1LAotKwkJIDB4MjEsMHgwNSwweDhjLDB4NGYsMHgzMSwweDdh LDB4ODAsMHhiYn07Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHYgPQotKwl7Ci0r CQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1 LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCi0rCQkJCS8q IFYgKi8KLSsJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkg MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwot KwkJezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywKLSsJCSAweDgyLDB4 NzksMHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9Ci0rCX07Ci0rCi0rdm9pZCBGSVBTX2Nv cnJ1cHRfcm5nKCkKLSsgICAgewotKyAgICBhZXNfMTkyX3R2LlZbMF0rKzsKLSsgICAgfQotKwot KyNkZWZpbmUgZmlwc194OTMxX3Rlc3Qoa2V5LCB0dikgXAotKwlkb194OTMxX3Rlc3Qoa2V5LCBz aXplb2Yga2V5LCAmdHYpCi0rCi0rc3RhdGljIGludCBkb194OTMxX3Rlc3QodW5zaWduZWQgY2hh ciAqa2V5LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5HX1RWICp0dikKLSsJewotKwl1bnNpZ25l ZCBjaGFyIFJbMTZdLCBWWzE2XTsKLSsJaW50IHJ2ID0gMTsKLSsJbWVtY3B5KFYsIHR2LT5WLCBz aXplb2YoVikpOwotKwlpZiAoIUZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKSkKLSsJCXJl dHVybiAwOwotKwlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4s IE5VTEwpKQotKwkJcmV0dXJuIDE7Ci0rCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNU X1g5MzEsIGtleWxlbiwgTlVMTCkpCi0rCQlWWzBdKys7Ci0rCUZJUFNfeDkzMV9zZWVkKFYsIDE2 KTsKLSsJRklQU194OTMxX3NldF9kdCh0di0+RFQpOwotKwlGSVBTX3g5MzFfYnl0ZXMoUiwgMTYp OwotKwlpZiAobWVtY21wKFIsIHR2LT5SLCAxNikpCi0rCQl7Ci0rCQlmaXBzX3Bvc3RfZmFpbGVk KEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpOwotKwkJcnYgPSAwOwotKwkJfQotKwllbHNl IGlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCi0r CQlyZXR1cm4gMDsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfeDkz MSgpCi0rCXsKLSsJaW50IHJ2ID0gMTsKLSsJRklQU194OTMxX3Jlc2V0KCk7Ci0rCWlmICghRklQ U194OTMxX3Rlc3RfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVT VF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlm ICghZmlwc194OTMxX3Rlc3QoYWVzXzEyOF9rZXksYWVzXzEyOF90dikpCi0rCQlydiA9IDA7Ci0r CWlmICghZmlwc194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18xOTJfdHYpKQotKwkJcnYgPSAw OwotKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsJCXJ2 ID0gMDsKLSsJRklQU194OTMxX3Jlc2V0KCk7Ci0rCWlmICghcnYpCi0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX1NFTEZURVNUX1g5MzEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCXJldHVybiBy djsKLSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKQotKwl7Ci0rCXJldHVybiBG SVBTX3NlbGZ0ZXN0X3g5MzEoKTsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kdGVzdC5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODg2OTQzMTYgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxMy0xMC0w NCAxMTo0ODowNC4xODc2OTQyOTQgKzAyMDAKLUBAIC0wLDAgKzEsMjUwIEBACi0rLyogQ29weXJp Z2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVt ZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4K LSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRo IE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1l cmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRo ZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NM IGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlz dHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhj ZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0r ICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkg Q29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQu Ci0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNo b3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRz IG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0 ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlv biAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0 b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5 cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0 IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBh cmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUg YW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20g Ci0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBp bmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAq IAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycg QU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK LSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2Vu Y2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZl cnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4g IGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRl ciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1 YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5j bHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsg ICAgcHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9 Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERUWzE2 XTsKLSsJdW5zaWduZWQgY2hhciBWWzE2XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJfSBB RVNfUFJOR19NQ1Q7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rf a2V5WzE2XSA9Ci0rCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIsMHhmMywweDM0LDB4YjUsCi0r CSAweGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9OwotKwotK3N0YXRpYyBj b25zdCBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4 NjMsMHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKLSsJIDB4NjcsMHhjOSwweDI1 LDB4ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCi0rCQkJLyogViAqLwotKwl7MHg1NywweDJjLDB4 OGUsMHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAotKwkgMHg3ZSwweDc0LDB4ZmIsMHhkZCwweGM0 LDB4OTUsMHgwMSwweGQxfSwKLSsJCQkvKiBSICovCi0rCXsweDQ4LDB4ZTksMHhiZCwweDBkLDB4 MDYsMHhlZSwweDE4LDB4ZmIsCi0rCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4YzMsMHhmYywweDli LDB4NzN9Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX21jdF9r ZXlbMjRdID0KLSsJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3MywKLSsJ IDB4NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwKLSsJIDB4YmMsMHgzNSww eDUxLDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5H X01DVCBhZXNfMTkyX21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg4NCwweGNlLDB4MjIs MHg3ZCwweDkxLDB4NWEsMHhhMywweGM5LAotKwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4 NjMsMHgxNSwweDUyfSwKLSsJCQkvKiBWICovCi0rCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTks MHg5ZSwweDkwLDB4NjQsCi0rCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4 NmR9LAotKwkJCS8qIFIgKi8KLSsJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYs MHgyMSwKLSsJIDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQotKwl7 MHg5YiwweDA1LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAotKwkgMHhhNiwweDNhLDB4 YTgsMHhjYiwweDRlLDB4NzEsMHhiMiwweGUwLAotKwkgMHhiOCwweDdlLDB4ZjEsMHgzNywweGI2 LDB4YjQsMHhmNiwweDZkLAotKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSww eDUwfTsKLSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0gewot KwkJCS8qIERUICovCi0rCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUs Ci0rCSAweDYyLDB4NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAotKwkJCS8qIFYg Ki8KLSsJezB4NGYsMHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKLSsJIDB4M2Us MHgwZSwweDU2LDB4NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCi0rCQkJLyogUiAqLwotKwl7MHhj OCwweDg3LDB4YzIsMHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAotKwkgMHhlNywweGYzLDB4OGIs MHhkNywweDViLDB4ZDUsMHhmMSwweDhkfQotK307Ci0rCi0rc3RhdGljIHZvaWQgZHVtcChjb25z dCB1bnNpZ25lZCBjaGFyICpiLGludCBuKQotKyAgICB7Ci0rICAgIHdoaWxlKG4tLSA+IDApCi0r CXsKLSsJcHJpbnRmKCIgJTAyeCIsKmIrKyk7Ci0rCX0KLSsgICAgfQotKwotK3N0YXRpYyB2b2lk IGNvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIg KmV4cGVjdGVkLAotKwkJICAgIGludCBuKQotKyAgICB7Ci0rICAgIGludCBpOwotKwotKyAgICBm b3IoaT0wIDsgaSA8IG4gOyArK2kpCi0rCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKLSsJ ICAgIHsKLSsJICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOwotKwkgICAgZHVt cChyZXN1bHQsbik7Ci0rCSAgICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOwot KwkgICAgZHVtcChleHBlY3RlZCxuKTsKLSsJICAgIHB1dGNoYXIoJ1xuJyk7Ci0rCSAgICBFWElU KDEpOwotKwkgICAgfQotKyAgICB9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcnVuX3Rlc3QoY29uc3Qg dW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAotKwkJCQkJCQljb25zdCBBRVNfUFJOR19N Q1QgKnR2KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRbMTZdOwotKyAg ICBpbnQgaSwgajsKLSsgICAgRklQU194OTMxX3Jlc2V0KCk7Ci0rICAgIEZJUFNfeDkzMV90ZXN0 X21vZGUoKTsKLSsgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKyAgICBGSVBT X3g5MzFfc2VlZCh0di0+ViwgMTYpOwotKyAgICBtZW1jcHkoZHQsIHR2LT5EVCwgMTYpOwotKyAg ICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKLSsJewotKyAgICAJRklQU194OTMxX3NldF9k dChkdCk7Ci0rCUZJUFNfeDkzMV9ieXRlcyhidWYsIDE2KTsKLSsJLyogSW5jcmVtZW50IERUICov Ci0rCWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCXsKLSsJCWR0W2pdKys7Ci0rCQlpZiAo ZHRbal0pCi0rCQkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsKLSsgICAgY29tcGFyZShidWYsdHYtPlIs IDE2KTsKLSsgICAgfQotKwotK2ludCBtYWluKCkKLSsJewotKwlydW5fdGVzdChhZXNfMTI4X21j dF9rZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEg ZG9uZVxuIik7Ci0rCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90 dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVz XzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcg dGVzdCAzIGRvbmVcbiIpOwotKwlyZXR1cm4gMDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMJMjAxMy0xMC0wNCAxMTo0 ODowNC4xODg2OTQzMTYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBz X3JzYV9zZWxmdGVzdC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg4Njk0MzE2ICswMjAwCi1AQCAt MCwwICsxLDQ0NCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzLTIw MDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuW10gPQotKyJceDAw XHhCQlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThc eDcxIgotKyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZc eEYwXHg3NFx4NTRceEY1IgotKyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJc eDYxXHhFQVx4NDhceENFXHhFQlx4NkZceENEIgotKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBc eEUxXHhFQ1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgotKyJceDdGXHhBRlx4Qjhc eEUwXHhBM1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgotKyJc eDg0XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4 OThceDM5IgotKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4 OUFceDQxXHhGNlx4QzFceDY4IgotKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4 NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgotKyJceENCIjsKLSsKLStzdGF0aWMgaW50 IGNvcnJ1cHRfcnNhOwotKwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7 Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNc eDQxXHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0Zc eDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIK LSsiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4 MzlceDI2XHg2OSIKLSsiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4 RENceEI4XHgyRVx4QzlceDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4 Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4 NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4 OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5 NCIKLSsiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhD OFx4NUJceDFDXHhCMyIKLSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHBbXSA9Ci0rIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgx XHgwQlx4MTBceEExXHhCNVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZE XHhBNFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIz XHg2RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVC XHgyNVx4MjFceDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUi Ci0rIlx4OTkiOwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJc eDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4 RDFceEQ5IgotKyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4 MjBceDM1XHgwMlx4OEJceDlEIgotKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4 OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4 NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRD XHhBNlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsi XHhFQlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJc eEIxXHgzRSIKLSsiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFc eEY3XHg2OVx4MkVceDlBXHgyRSIKLSsiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFc eDc0XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGRtcTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1 XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhB XHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgw XHgzRlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQi Ci0rIlx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThc eDM2XHhEQVx4M0QiOwotKyAgICAKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFt cFtdID0KLSsiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVC XHhEQlx4QUVceDk0XHgyMyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUw XHg5M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRG XHg1OFx4ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBG XHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsi XHhGNyI7Ci0rCi0rICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5u KTsKLSsgICAgaWYgKGNvcnJ1cHRfcnNhKQotKwlCTl9zZXRfYml0KGtleS0+biwgMTAyNCk7Ci0r ICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5LT5lKTsKLSsgICAga2V5 LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOwotKyAgICBrZXktPnAgPSBC Tl9iaW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7Ci0rICAgIGtleS0+cSA9IEJOX2JpbjJi bihxLCBzaXplb2YocSktMSwga2V5LT5xKTsKLSsgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRt cDEsIHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOwotKyAgICBrZXktPmRtcTEgPSBCTl9iaW4y Ym4oZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7Ci0rICAgIGtleS0+aXFtcCA9IEJO X2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsKLSsgICAgcmV0dXJuIDE7 Ci0rICAgIH0KLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQotKyAgICB7Ci0rICAgIGNvcnJ1 cHRfcnNhID0gMTsKLSsgICAgfQotKwotKy8qIEtub3duIEFuc3dlciBUZXN0IChLQVQpIGRhdGEg Zm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZwotKyAqIGthdF90YnMuCi0rICov Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9wZW5TU0wgRklQ UyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKLSsgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4 OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCi0rICAweDAxLCAw eDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkw LCAweEJCLAotKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhF OCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywKLSsgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4 ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCi0rICAweDdGLCAw eDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQw LCAweEE3LAotKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhF MywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKLSsgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4 NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCi0rICAweDBBLCAw eEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3 LCAweDMxLAotKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhF NiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKLSsgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4 MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCi0rICAweDI2LCAw eEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5Ci0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKLSsgIDB4MzksIDB4 NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgs IDB4QTcsCi0rICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgy LCAweDk4LCAweDA4LCAweDk1LCAweEZBLAotKyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2 MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKLSsgIDB4MzAsIDB4 OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMs IDB4ODksCi0rICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2 LCAweENDLCAweDg2LCAweDA1LCAweEVFLAotKyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgx NiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKLSsgIDB4MTUsIDB4 NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIsIDB4RDEs IDB4QjUsCi0rICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQyLCAweEJE LCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAotKyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhG NCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKLSsgIDB4QzgsIDB4 NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUsIDB4QzAs IDB4MDAsCi0rICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMw Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZb XSA9IHsKLSsgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQs IDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCi0rICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcx LCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAotKyAgMHg3QiwgMHhD NSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3Mywg MHgyOCwKLSsgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAs IDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCi0rICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4 LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAotKyAgMHhBQiwgMHhG NSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwg MHhCQSwKLSsgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDks IDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCi0rICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkw LCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAotKyAgMHgyMSwgMHhC NywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwg MHg2RCwKLSsgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTks IDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCi0rICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4 LCAweDFFLCAweDJELCAweDFDCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1BTU19TSEEzODRbXSA9IHsKLSsgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQs IDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCi0rICAweEVDLCAweDFD LCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAw eDVFLAotKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwg MHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKLSsgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMs IDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCi0rICAweDZGLCAweDAy LCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAw eDZDLAotKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwg MHhGMywgMHhBQywgMHg0RiwgMHhGQiwKLSsgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYs IDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCi0rICAweDNBLCAweEJF LCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAw eDg5LAotKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywg MHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKLSsgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUs IDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCi0rICAweDQ4LCAweDQ0 LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCi0rfTsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKLSsgIDB4MDcsIDB4MUUs IDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMsIDB4 OEMsCi0rICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAw eDhGLCAweDEyLCAweDUzLCAweDlBLAotKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhDMSwg MHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKLSsgIDB4NEIsIDB4RjMs IDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4MjMsIDB4 MzksCi0rICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAw eDY3LCAweDVGLCAweEZFLCAweEQ3LAotKyAgMHg3QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwg MHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKLSsgIDB4NTcsIDB4RTMs IDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4ODUsIDB4 MTMsCi0rICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAw eDlBLCAweDZBLCAweDM5LCAweDYzLAotKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwg MHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKLSsgIDB4NzYsIDB4RjIs IDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4QzIsIDB4 ODgsCi0rICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKLSsg IDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4 NUMsIDB4RjIsIDB4NEMsCi0rICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAw eEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAotKyAgMHhFNywgMHhGRCwgMHg2MCwg MHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKLSsg IDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4 M0QsIDB4MUUsIDB4RjgsCi0rICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAw eEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAotKyAgMHgyMCwgMHgyMiwgMHhCRSwg MHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKLSsg IDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4 Q0EsIDB4MkUsIDB4NEUsCi0rICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAw eDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAotKyAgMHgzNSwgMHgwNywgMHgxMSwg MHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKLSsg IDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4 NEIsIDB4MkYsIDB4OTUsCi0rICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAw eDQ2LCAweEI0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NI QTIyNFtdID0gewotKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1Riwg MHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKLSsgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQs IDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCi0rICAweDVC LCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAw eEM1LCAweDg5LAotKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywg MHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKLSsgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEs IDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCi0rICAweEVF LCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAw eEE5LCAweENDLAotKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwg MHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKLSsgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYs IDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCi0rICAweDU4 LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAweDY2LCAw eEU2LCAweDM1LAotKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3Mywg MHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKLSsgIDB4NDAsIDB4MjEsIDB4ODksIDB4OEIs IDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfU0hBMjU2W10gPSB7Ci0rICAweDBELCAweDU1LCAweEUyLCAweEFBLCAweDgx LCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAotKyAgMHhFNywgMHgz QiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwg MHgyMywKLSsgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMs IDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCi0rICAweDk4LCAweDJELCAweDY5LCAweDg0LCAweEJG LCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAotKyAgMHgyQywgMHg0 NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwg MHgxOCwKLSsgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMs IDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCi0rICAweEJFLCAweDIyLCAweEM3LCAweEQzLCAweEVD LCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAotKyAgMHg3QywgMHg4 NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwg MHgzOCwKLSsgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0Ms IDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCi0rICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFC LCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAotKyAgMHhCRCwgMHg0 NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKLSsgIDB4MUQsIDB4RTMsIDB4 NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYs Ci0rICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYz LCAweDU2LCAweDQ3LCAweEM3LAotKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhG OSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKLSsgIDB4QTcsIDB4NjUsIDB4 NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUs Ci0rICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4 LCAweDdGLCAweEI2LCAweENGLAotKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhC MSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKLSsgIDB4MUIsIDB4MkIsIDB4 QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMs Ci0rICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhG LCAweDhCLCAweDlDLCAweENELAotKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgx QywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKLSsgIDB4MTYsIDB4MjgsIDB4 MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQs Ci0rICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0gewotKyAg MHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1 MSwgMHg1RCwgMHhDRiwKLSsgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4 NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCi0rICAweDE1LCAweEVBLCAweDVDLCAw eEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAotKyAg MHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1 NCwgMHg5RiwgMHhEOCwKLSsgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMsIDB4 ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCi0rICAweDgwLCAweEUyLCAweEJDLCAw eERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAweDZCLAotKyAg MHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgx RCwgMHg0NywgMHhFNiwKLSsgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4 NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCi0rICAweDZGLCAweDBFLCAweDJCLCAw eDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAweDJELAotKyAg MHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5 OCwgMHg2NSwgMHg5MSwKLSsgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4 QUIsIDB4ODQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkz MV9TSEExW10gPSB7Ci0rICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAweDgwLCAweEI2 LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAotKyAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4 MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKLSsgIDB4 ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQs IDB4QjgsIDB4QUMsCi0rICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4 LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAotKyAgMHg3MCwgMHhGQiwgMHg1RSwgMHhF NywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKLSsgIDB4 NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEs IDB4MTEsIDB4MTksCi0rICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYz LCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAotKyAgMHg2RiwgMHg0QywgMHgzQywgMHgz NywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKLSsgIDB4 NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEs IDB4RUQsIDB4NzYsCi0rICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJB LCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAotKyAgMHhBMywgMHgyOSwgMHg4MCwgMHg3 MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0gewotKyAgMHg3RSwgMHhBMiwgMHg3NywgMHhG RSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKLSsgIDB4 RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIs IDB4MUMsIDB4REQsCi0rICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAw LCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAotKyAgMHgxNiwgMHg3NiwgMHg2OCwgMHhG NiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKLSsgIDB4 QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4Qjgs IDB4RjAsIDB4NEIsCi0rICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVC LCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAotKyAgMHhBRCwgMHg0RSwgMHg0OSwgMHgy QywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKLSsgIDB4 N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQs IDB4QTAsIDB4OEMsCi0rICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5 LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAotKyAgMHgyMSwgMHhFRCwgMHg4RCwgMHhC QywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKLSsgIDB4 RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsKLSsgIDB4 NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0Is IDB4RUMsIDB4N0IsCi0rICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVGLCAweEQ4 LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAotKyAgMHhFNiwgMHg0RiwgMHg1RSwgMHgw QSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhFMywKLSsgIDB4 RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEs IDB4NjMsIDB4RjYsCi0rICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENG LCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAotKyAgMHhEOCwgMHg2OSwgMHhFOSwgMHhB QiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwKLSsgIDB4 M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAs IDB4NDEsIDB4NzksCi0rICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUz LCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAotKyAgMHgwRSwgMHgwOSwgMHhFRSwgMHgy RSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwKLSsgIDB4 RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMs IDB4QzYsIDB4NkQsCi0rICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1 LCAweDI4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFf U0hBNTEyW10gPSB7Ci0rICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2 LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAotKyAgMHhGQywgMHhBMSwgMHhBQSwgMHhD QiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKLSsgIDB4 RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUs IDB4NzcsIDB4RDcsCi0rICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2 LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAotKyAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2 NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKLSsgIDB4 NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMs IDB4RDIsIDB4QUYsCi0rICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0 LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAotKyAgMHhDRSwgMHg4QSwgMHg2RiwgMHhB MSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKLSsgIDB4 OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQs IDB4RkIsIDB4N0MsCi0rICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDky LCAweDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAotKyAgMHg2MCwgMHg4MywgMHgxOCwgMHg4 OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMwotK307Ci0rCi0rCi0raW50IEZJUFNfc2VsZnRlc3Rf cnNhKCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJUlNBICprZXk7Ci0rCUVWUF9QS0VZICpwayA9 IE5VTEw7Ci0rCi0rCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwot KwlzZXRyc2FrZXkoa2V5KTsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJ CWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOwotKwotKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKLSsJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKLSsJCQkJRVZQX3No YTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEExIFBLQ1MjMSIp KQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGth dF9SU0FfU0hBMjI0KSwKLSsJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BL Q1MxLAotKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK LSsJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCi0rCQkJCUVWUF9z aGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEyNTYgUEtD UyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMzg0LCBzaXpl b2Yoa2F0X1JTQV9TSEEzODQpLAotKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19Q QURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKLSsJCQkJ RVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTUx MiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1Nf U0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEExIFBTUyIpKQotKwkJZ290byBlcnI7Ci0r CWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ri cykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEy MjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQki UlNBIFNIQTIyNCBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9Q U1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1Nigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEyNTYgUFNTIikpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9mKGthdF9S U0FfUFNTX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsCi0rCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJ CQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLAotKwkJCQlF VlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTUxMiBQ U1MiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hB MSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKLSsJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEExIFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwkv KiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0 X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAotKwkJCUVWUF9z aGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBMjU2IFg5MzEi KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMzg0LCBzaXpl b2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCi0rCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEzODQgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEy KSwKLSsJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNB IFNIQTUxMiBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJy OgotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsJZWxzZSBpZiAoa2V5KQotKwkJ UlNBX2ZyZWUoa2V5KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZiAvKiBkZWYgT1BF TlNTTF9GSVBTICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3Jz YV94OTMxZy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcu YwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcwky MDEzLTEwLTA0IDExOjQ4OjA0LjE4ODY5NDMxNiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODg2OTQzMTYg KzAyMDAKLUBAIC0wLDAgKzEsMjgyIEBACi0rLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8KLSsv KiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkK LSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNT TCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25m b3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBm b3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwg YmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0 IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGgg dGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMK LSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBz dWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUg cmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMg WW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0 aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9y bSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1 bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4K LSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcg KGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2Fu IGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWlu ZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3Ug aW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVv ZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlv dSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBg QVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAq IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBU aGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFp bGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBj aGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQg cHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRo ZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8dGltZS5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsK LStleHRlcm4gaW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKTsKLSsjZW5kaWYKLSsKLSsvKiBY OS4zMSBSU0Ega2V5IGRlcml2YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KLSsKLStpbnQgUlNBX1g5 MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnEx LCBCSUdOVU0gKnEyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwg Y29uc3QgQklHTlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpY cTIsIGNvbnN0IEJJR05VTSAqWHEsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2Ip Ci0rCXsKLSsJQklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOwotKwlC Tl9DVFggKmN0eD1OVUxMLCpjdHgyPU5VTEw7Ci0rCi0rCWlmICghcnNhKSAKLSsJCWdvdG8gZXJy OwotKwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KSAKLSsJCWdvdG8gZXJyOwot KwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsKLSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIxID0g Qk5fQ1RYX2dldChjdHgpOwotKwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjMgPSBCTl9DVFhf Z2V0KGN0eCk7Ci0rCi0rCWlmIChyMyA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghcnNh LT5lKQotKwkJewotKwkJcnNhLT5lID0gQk5fZHVwKGUpOwotKwkJaWYgKCFyc2EtPmUpCi0rCQkJ Z290byBlcnI7Ci0rCQl9Ci0rCWVsc2UKLSsJCWUgPSByc2EtPmU7Ci0rCi0rCS8qIElmIG5vdCBh bGwgcGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgotKwkgKiBU aGlzIGFsbG93cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVycy4K LSsJICovCi0rCi0rCWlmIChYcCAmJiAhcnNhLT5wKQotKwkJewotKwkJcnNhLT5wID0gQk5fbmV3 KCk7Ci0rCQlpZiAoIXJzYS0+cCkKLSsJCQlnb3RvIGVycjsKLSsKLSsJCWlmICghQk5fWDkzMV9k ZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCi0rCQkJCQlYcCwgWHAxLCBYcDIsIGUsIGN0 eCwgY2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoWHEgJiYgIXJzYS0+cSkKLSsJ CXsKLSsJCXJzYS0+cSA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnEpCi0rCQkJZ290byBlcnI7 Ci0rCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAotKwkJCQkJ WHEsIFhxMSwgWHEyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYg KCFyc2EtPnAgfHwgIXJzYS0+cSkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NU WF9mcmVlKGN0eCk7Ci0rCQlyZXR1cm4gMjsKLSsJCX0KLSsKLSsJLyogU2luY2UgYm90aCBwcmlt ZXMgYXJlIHNldCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVtYWluaW5nIAotKwkgKiBjb21w b25lbnRzLgotKwkgKi8KLSsKLSsJLyogY2FsY3VsYXRlIG4gKi8KLSsJcnNhLT5uPUJOX25ldygp OwotKwlpZiAocnNhLT5uID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tdWwocnNh LT5uLHJzYS0+cCxyc2EtPnEsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUg ZCAqLwotKwlpZiAoIUJOX3N1YihyMSxyc2EtPnAsQk5fdmFsdWVfb25lKCkpKQotKwkJZ290byBl cnI7CS8qIHAtMSAqLwotKwlpZiAoIUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKQot KwkJZ290byBlcnI7CS8qIHEtMSAqLwotKwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQotKwkJ Z290byBlcnI7CS8qIChwLTEpKHEtMSkgKi8KLSsKLSsJaWYgKCFCTl9nY2QocjMsIHIxLCByMiwg Y3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBj dHgpKQotKwkJZ290byBlcnI7CS8qIExDTSgocC0xKShxLTEpKSAqLwotKwotKwljdHgyID0gQk5f Q1RYX25ldygpOwotKwlpZiAoIWN0eDIpCi0rCQlnb3RvIGVycjsKLSsKLSsJcnNhLT5kPUJOX21v ZF9pbnZlcnNlKE5VTEwscnNhLT5lLHIwLGN0eDIpOwkvKiBkICovCi0rCWlmIChyc2EtPmQgPT0g TlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KLSsJ cnNhLT5kbXAxPUJOX25ldygpOwotKwlpZiAocnNhLT5kbXAxID09IE5VTEwpCi0rCQlnb3RvIGVy cjsKLSsJaWYgKCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQotKwkJZ290byBlcnI7 Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLwotKwlyc2EtPmRtcTE9Qk5fbmV3KCk7 Ci0rCWlmIChyc2EtPmRtcTEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21vZChy c2EtPmRtcTEscnNhLT5kLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRl IGludmVyc2Ugb2YgcSBtb2QgcCAqLwotKwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVMTCxy c2EtPnEscnNhLT5wLGN0eDIpOwotKwotKwllcnI6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlCTl9D VFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQotKwlpZiAoY3R4MikKLSsJ CUJOX0NUWF9mcmVlKGN0eDIpOwotKwkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vz c2Z1bCAqLwotKwlpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxMKQotKwkJcmV0dXJuIDE7Ci0r Ci0rCXJldHVybiAwOwotKwotKwl9Ci0rCi0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChS U0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0r CWludCBvayA9IDA7Ci0rCUJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCTl9DVFgg KmN0eCA9IE5VTEw7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkg JiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmIAotKwkJKGJpdHMg PCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkgICAgewotKwkgICAgRklQ U2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9LRVlfVE9PX1NIT1JU KTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlpZiAoYml0cyAmIDB4ZmYpCi0rCSAg ICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19S X0lOVkFMSURfS0VZX0xFTkdUSCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JT QV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkg ICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0rCWN0eCA9IEJOX0NUWF9uZXcoKTsK LSsJaWYgKCFjdHgpCi0rCQlnb3RvIGVycm9yOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJ WHAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCVhxID0gQk5fQ1RYX2dldChjdHgpOwotKwlpZiAoIUJO X1g5MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0cywgY3R4KSkKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCXJzYS0+cCA9IEJOX25ldygpOwotKwlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJaWYgKCFyc2Et PnAgfHwgIXJzYS0+cSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCS8qIEdlbmVyYXRlIHR3byBwcmlt ZXMgZnJvbSBYcCwgWHEgKi8KLSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJz YS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJ CWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhxLAotKwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3Rv IGVycm9yOwotKwotKwkvKiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBj YWxsIHdpbGwganVzdCBkZXJpdmUKLSsJICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgotKwkg Ki8KLSsKLSsJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLAotKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCi0r CQlnb3RvIGVycm9yOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoIWZpcHNfY2hlY2tf cnNhKHJzYSkpCi0rCSAgICBnb3RvIGVycm9yOwotKyNlbmRpZgotKwotKwlvayA9IDE7Ci0rCi0r CWVycm9yOgotKwlpZiAoY3R4KQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RY X2ZyZWUoY3R4KTsKLSsJCX0KLSsKLSsJaWYgKG9rKQotKwkJcmV0dXJuIDE7Ci0rCi0rCXJldHVy biAwOwotKwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3No YV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2Vs ZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0 LmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4ODY5NDMxNiArMDIwMAotKysrIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJMjAxMy0xMC0wNCAxMTo0ODow NC4xODg2OTQzMTYgKzAyMDAKLUBAIC0wLDAgKzEsMTQwIEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+ Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RbXVs2MF09 Ci0rICAgIHsKLSsgICAgIiIsCi0rICAgICJhYmMiLAotKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2Vm Z2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCi0rICAgIH07Ci0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hBX0RJR0VTVF9MRU5HVEhdPQotKyAgICB7 Ci0rICAgIHsgMHhkYSwweDM5LDB4YTMsMHhlZSwweDVlLDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1 NSwKLSsgICAgICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5MCwweGFmLDB4ZDgsMHgwNyww eDA5IH0sCi0rICAgIHsgMHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4 YmEsMHgzZSwKLSsgICAgICAweDI1LDB4NzEsMHg3OCwweDUwLDB4YzIsMHg2YywweDljLDB4ZDAs MHhkOCwweDlkIH0sCi0rICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0NCwweDFjLDB4M2IsMHhkMiww eDZlLDB4YmEsMHhhZSwKLSsgICAgICAweDRhLDB4YTEsMHhmOSwweDUxLDB4MjksMHhlNSwweGU1 LDB4NDYsMHg3MCwweGYxIH0sCi0rICAgIH07Ci0rCi0rc3RhdGljIGludCBjb3JydXB0X3NoYTsK LSsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKLSsgICAgewotKyAgICBjb3JydXB0X3NoYSA9 IDE7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKLSsgICAgewotKyAgICBp bnQgbjsKLSsKLSsgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7 ICsrbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJ RVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKStjb3JydXB0X3NoYSxtZCwgTlVMTCwg RVZQX3NoYTEoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkKLSsJ ICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwl9Ci0rICAgIHJldHVy biAxOwotKyAgICB9Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTI1Nltd ID0geyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAweDFmLCAweDMwLAotKwkJ CQkJICAgIDB4ZmMgfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhMjU2W10g PSB7IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEsIDB4NjgsIDB4NWIsCi0rCQkJ CQkgICAgMHg5ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhiYiwgMHg3NSwgMHhiZiwgMHgwMSwKLSsJ CQkJCSAgICAweDE3LCAweDBjLCAweDg0LCAweDAwLCAweDAxLCAweDdhLCAweDk0LCAweDgzLAot KwkJCQkJICAgIDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4ODgsIDB4OGEg fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhNTEyW10gPSB7IDB4Mzcs IDB4ZDEsIDB4MzUsIDB4OWQsIDB4MTgsIDB4NDEsIDB4ZTksIDB4YjcsCi0rCQkJCQkgICAgMHg2 ZCwgMHg5YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZCB9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGRpZ19zaGE1MTJbXSA9IHsgMHgxMSwgMHgxMywgMHhjNCwgMHgxOSwgMHhl ZCwgMHgyYiwgMHgxZCwgMHgxNiwKLSsJCQkJCSAgICAweDExLCAweGViLCAweDliLCAweGJlLCAw eGYwLCAweDdmLCAweGNmLCAweDQ0LAotKwkJCQkJICAgIDB4OGIsIDB4ZDcsIDB4NTcsIDB4YmQs IDB4OGQsIDB4YTksIDB4MjUsIDB4YjAsCi0rCQkJCQkgICAgMHg0NywgMHgyNSwgMHhkNiwgMHg2 YywgMHg5YSwgMHg1NCwgMHg3ZiwgMHg4ZiwKLSsJCQkJCSAgICAweDBiLCAweDUzLCAweDFhLCAw eDEwLCAweDY4LCAweDMyLCAweDAzLCAweDM4LAotKwkJCQkJICAgIDB4ODIsIDB4YzQsIDB4ODcs IDB4YzQsIDB4ZWEsIDB4MGUsIDB4ZDEsIDB4MDQsCi0rCQkJCQkgICAgMHhhOSwgMHg5OCwgMHhj MSwgMHgwNSwgMHhhMywgMHhmMywgMHhmOCwgMHhiMSwKLSsJCQkJCSAgICAweGFmLCAweGJjLCAw eGQ5LCAweDc4LCAweDdlLCAweGVlLCAweDNkLCAweDQzIH07Ci0rCi0raW50IEZJUFNfc2VsZnRl c3Rfc2hhMih2b2lkKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5H VEhdOwotKwotKwlFVlBfRGlnZXN0KG1zZ19zaGEyNTYsIHNpemVvZihtc2dfc2hhMjU2KSwgbWQs IE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChkaWdfc2hhMjU2LCBtZCwg c2l6ZW9mKGRpZ19zaGEyNTYpKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9T RVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCUVW UF9EaWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBtZCwgTlVMTCwgRVZQX3No YTUxMigpLCBOVUxMKTsKLSsJaWYobWVtY21wKGRpZ19zaGE1MTIsIG1kLCBzaXplb2YoZGlnX3No YTUxMikpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfc3Rh bmRhbG9uZV9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3N0YW5k YWxvbmVfaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFs b25lX2htYWMuYy5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTg4Njk0MzE2ICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwkyMDEzLTEw LTA0IDExOjQ4OjA0LjE4ODY5NDMxNiArMDIwMAotQEAgLTAsMCArMSwxODAgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3Rk bGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xj b25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgotKwotKyNpZm5kZWYgRklQU0NBTklTVEVSX08KLStpbnQgRklQU19zZWxmdGVzdF9mYWls ZWQoKSB7IHJldHVybiAwOyB9Ci0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KLSt2b2lk IE9QRU5TU0xfY2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9Ci0rI2VuZGlmCi0rCi0rI2lm CWRlZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9J WDg2KSB8fCBcCi0rCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCi0rCWRlZmluZWQoX194ODZfNjQp IHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChf TV9YNjQpCi0rCi0rdW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKLSsjZW5kaWYK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1 Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtl eSkKLSsgICAgewotKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsg ICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25l ZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NC TE9DSykKLSsJewotKwlTSEEyNTZfSW5pdChtZF9jdHgpOwotKwlTSEEyNTZfVXBkYXRlKG1kX2N0 eCxrZXksbGVuKTsKLSsJU0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0rCWxlbj1TSEEyNTZf RElHRVNUX0xFTkdUSDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXltZCxrZXksbGVuKTsK LSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7Ci0r Ci0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09 MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKLSsgICAgU0hBMjU2X1Vw ZGF0ZShtZF9jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IEhN QUNfTUFYX01EX0NCTE9DSyA7IGkrKykKLSsJcGFkW2ldPTB4NWNea2V5bWRbaV07Ci0rICAgIFNI QTI1Nl9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2X0NC TE9DSyk7Ci0rICAgIH0KLSsKLStzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIg Km1kLFNIQTI1Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKLSsgICAgewotKyAgICB1 bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIFNIQTI1Nl9G aW5hbChidWYsbWRfY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1 Zik7Ci0rICAgIFNIQTI1Nl9GaW5hbChtZCxvX2N0eCk7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLSsK LStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJw VWt2YXJQIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2MgPCAyKQotKwl7 Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7 Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5Iikp Ci0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4g Ki8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlGSUxFICpmPWZv cGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNpZ25l ZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQot KwkgICAgewotKwkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0K LSsKLSsJaG1hY19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAg IHsKLSsJICAgIGNoYXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6 ZW9mIGJ1ZixmKTsKLSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkK LSsJCSAgICB7Ci0rCQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMjU2X1VwZGF0ZSgm bWRfY3R4LGJ1ZixsKTsKLSsJICAgIH0KLSsJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7 Ci0rCi0rCWlmIChiaW5hcnkpCi0rCSAgICB7Ci0rCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJR0VT VF9MRU5HVEgsMSxzdGRvdXQpOwotKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZp bGUgKi8KLSsJICAgIH0KLSsKLSsvKglwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7 ICovCi0rCWZvcihpPTAgOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEggOyArK2kpCi0rCSAgICBw cmludGYoIiUwMngiLG1kW2ldKTsKLSsJcHJpbnRmKCJcbiIpOwotKwl9Ci0rI2VuZGlmCi0rICAg IHJldHVybiAwOwotKyAgICB9Ci0rCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v Zmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2Zp cHNfdGVzdF9zdWl0ZS5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc190ZXN0 X3N1aXRlLmMuZmlwcwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4OTY5NDMzOSArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTMtMTAtMDQgMTE6 NDg6MDQuMTg5Njk0MzM5ICswMjAwCi1AQCAtMCwwICsxLDU4OCBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICoKLSsgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0 ZXN0IGRyaXZlciBmb3IgdGhlIEZJUFMtMTQwIHRlc3RpbmcKLSsgKiBsYWIgcGVyZm9ybWluZyBG SVBTLTE0MCB2YWxpZGF0aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCi0rICog T3BlblNTTCBsaWJyYXJ5IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3Jh cGhpYwotKyAqIGZ1bmN0aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRl ZCBieSBkZWxpYmVyYXRlbHkKLSsgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUg aGFzaAotKyAqCi0rICogQ29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCi0rICoKLSsgKi8K LSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0 eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9kaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsKLSsjaWZuZGVmIE9Q RU5TU0xfRklQUwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rICAgIHsKLSsg ICAgcHJpbnRmKCJObyBGSVBTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rICAgIH0K LSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191 dGwuaCIKLSsKLSsvKiBBRVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2 ZXJpZnkgcmVzdWx0IG1hdGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0Ci0rKi8KLStzdGF0aWMgaW50 IEZJUFNfYWVzX3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hh ciBwbHRtcFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFy IGtleVsxNl0gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKLSsJ dW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOwotKwlFVlBfQ0lQ SEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9 IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAx Nik7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxM LCBrZXksIE5VTEwsIDApIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBw bHRtcCwgY2l0bXAsIDE2KTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCi0r CQlnb3RvIGVycjsKLSsJcmV0ID0gMTsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVw KCZjdHgpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rc3RhdGljIGludCBGSVBTX2RlczNfdGVz dCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOwot Kwl1bnNpZ25lZCBjaGFyIGNpdG1wWzhdOwotKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsg MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCi0rCQkgICAgICAg ICAgICAgIDE5LDIwLDIxLDIyLDIzLDI0fTsKLSsgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 W10gPSB7ICdlJywgJ3QnLCAnYScsICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07Ci0rCUVWUF9D SVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJaWYgKEVWUF9D aXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEp IDw9IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0 LCA4KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxO VUxMLCBrZXksIE5VTEwsIDApIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4 LCBwbHRtcCwgY2l0bXAsIDgpOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQot KwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51 cCgmY3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKy8qCi0rICogRFNBOiBnZW5lcmF0ZSBr ZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQg RklQU19kc2FfdGVzdChpbnQgYmFkKQotKyAgICB7Ci0rICAgIERTQSAqZHNhID0gTlVMTDsKLSsg ICAgRVZQX1BLRVkgcGs7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRs YyI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzYwXTsKLSsgICAgdW5zaWduZWQgaW50IHNsZW47 Ci0rICAgIGludCByID0gMDsKLSsgICAgRVZQX01EX0NUWCBtY3R4OwotKwotKyAgICBFUlJfY2xl YXJfZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAgZHNhID0gRFNB X25ldygpOwotKyAgICBpZiAoIWRzYSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVy YXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCWdv dG8gZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJZ290byBlbmQ7Ci0r ICAgIGlmIChiYWQpCi0rCSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwotKyAg ICBway50eXBlID0gRVZQX1BLRVlfRFNBOwotKyAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsKLSsg ICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3Rv IGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3Qp IC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1Ziwg JnNsZW4sICZwaykpCi0rCWdvdG8gZW5kOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4 KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1Zl cmlmeVVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCi0rCWdvdG8gZW5kOwot KyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVu ZDoKLSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGRzYSkKLSsgIAkg IERTQV9mcmVlKGRzYSk7Ci0rICAgIGlmIChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1 cm4gMTsKLSsgICAgfQotKwotKy8qCi0rICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2 ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChp bnQgYmFkKQotKyAgICB7Ci0rICAgIFJTQSAqa2V5OwotKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0 X3B0ZXh0W10gPSAiZXRhb25yaXNoZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsK LSsgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIEVWUF9NRF9D VFggbWN0eDsKLSsgICAgRVZQX1BLRVkgcGs7Ci0rICAgIGludCByID0gMDsKLSsKLSsgICAgRVJS X2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAgIGtleSA9 IFJTQV9uZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQot KwlyZXR1cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0Ff Z2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJO X2ZyZWUoYm4pOwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsK LSsKLSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsgICAgcGsucGtleS5yc2EgPSBrZXk7 Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkK LSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0 LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9T aWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCi0rCWdvdG8gZW5kOwotKwotKyAgICBp ZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsJZ290byBl bmQ7Ci0rICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVv ZihpbnB1dF9wdGV4dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIHIgPSBFVlBfVmVyaWZ5Rmlu YWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKLSsgICAgZW5kOgotKyAgICBFVlBfTURfQ1RYX2Ns ZWFudXAoJm1jdHgpOwotKyAgICBpZiAoa2V5KQotKyAgCSAgICBSU0FfZnJlZShrZXkpOwotKyAg ICBpZiAociAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsv KiBTSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBG SVBTX3NoYTFfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJ R0VTVF9MRU5HVEhdID0KLSsgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywg MHgxYSwgMHgxZSwgMHg4ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgx ZSwgMHgyYywgMHhlOCwgMHhiMywgMHhjNSwgMHgxOCB9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0 cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1Rf TEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2Vz dChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJu IDA7Ci0rICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMjU2OiBnZW5lcmF0ZSBo YXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNv bXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkK LSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0g PQotKwl7MHhmNSwgMHg1MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDli LCAweDkzLCAweGM5LCAweDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkxLAotKwkgMHg2LCAweGVj LCAweDhlLCAweDExLCAweDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAw eGU2LCAweDUwLCAweDRmLCAweDQ3LCAweDU3fTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9 ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xF TkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qo c3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJu IDA7Ci0rICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBNTEyOiBnZW5lcmF0ZSBo YXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNv bXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkK LSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0g PQotKwl7MHg5OSwgMHhjOSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhk ZiwgMHg4OCwgMHg1ZiwgMHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKLSsJIDB4MTYsIDB4 MWYsIDB4M2QsIDB4ZjQsIDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIs IDB4ZDAsIDB4ZTcsIDB4MGIsIDB4OTQsIDB4NGEsCi0rCSAweDQ1LCAweGQyLCAweDZjLCAweDRm LCAweDIwLCAweDA2LCAweGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAw eGQ5LCAweDQwLCAweDIyLAotKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwg MHgyNywgMHhmZSwgMHhiZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhh M307Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVu c2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5V TEwsIEVWUF9zaGE1MTIoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRp Z2VzdCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsg ICAgfQotKwotKy8qIEhNQUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFs dWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsq LwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTFfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWdu ZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0g IlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVd ID0KLSsJezB4NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4 MGEsIDB4ZWEsIDB4ZWEsIDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCi0rCSAweGIyLCAw eGZiLCAweGVjLCAweGM2fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9T SVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9y KCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVv ZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZh bCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rLyogSE1BQy1TSEEyMjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStz dGF0aWMgaW50IEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K LSsJezB4NzUsIDB4NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUs IDB4ZmYsIDB4YmUsIDB4MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCi0rCSAweGU1LCAweDYy LCAweDQ5LCAweGI2LCAweDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAw eDE5fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAg dW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlm ICghSE1BQyhFVlBfc2hhMjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91 dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFD LVNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUg dG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQg RklQU19obWFjX3NoYTI1Nl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtd ID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQi OwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhlOSwg MHgxNywgMHhjMSwgMHg3YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgz NiwgMHgwMiwgMHhmNSwgMHg3MiwgMHgzMywgMHg4NywKLSsJIDB4OWYsIDB4YzYsIDB4NmUsIDB4 N2IsIDB4N2UsIDB4YTgsIDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYs IDB4ZGEsIDB4MjQsIDB4ZjR9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01E X1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixz aXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQs a2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIEhNQUMtU0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1 ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyov Ci0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2ln bmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9 ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpF XSA9Ci0rCXsweGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAw eGI2LCAweDYzLCAweDA4LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAotKwkgMHhlMiwg MHhkZiwgMHhmOCwgMHhmZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgx YiwgMHhhYywgMHhiMCwgMHgwNywgMHgzOSwgMHgwOCwKLSsJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4 MTEsIDB4NzYsIDB4ZDYsIDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4Yjgs IDB4OWIsIDB4ODgsIDB4MWN9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01E X1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixz aXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQs a2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIEhNQUMtU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1 ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyov Ci0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2ln bmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9 ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpF XSA9Ci0rCXsweGNkLCAweDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAw eDIzLCAweGFmLCAweGYzLCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAotKwkgMHhmNywg MHhkMSwgMHg1MSwgMHg5NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhj MSwgMHhhZCwgMHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKLSsJIDB4ZDcsIDB4NzksIDB4MGEsIDB4 YTUsIDB4ZWEsIDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEs IDB4N2YsIDB4ZWIsIDB4OWMsCi0rCSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4 LCAweGRmLCAweGVlLCAweDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAw eDUzfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAg dW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlm ICghSE1BQyhFVlBfc2hhNTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91 dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsKLSsvKiBE SDogZ2VuZXJhdGUgc2hhcmVkIHBhcmFtZXRlcnMKLSsqLwotK3N0YXRpYyBpbnQgZGhfdGVzdCgp Ci0rICAgIHsKLSsgICAgREggKmRoOwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgZGgg PSBGSVBTX2RoX25ldygpOwotKyAgICBpZiAoIWRoKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKCFE SF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKLSsJcmV0dXJuIDA7 Ci0rICAgIEZJUFNfZGhfZnJlZShkaCk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyog WmVyb2l6ZQotKyovCi0rc3RhdGljIGludCBaZXJvaXplKCkKLSsgICAgewotKyAgICBSU0EgKmtl eTsKLSsgICAgQklHTlVNICpibjsKLSsgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAot Kwl7IDB4NDgsIDB4NTAsIDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUs IDB4NDcsIDB4N2YsIDB4ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKLSsgICAgaW50IGks IG47Ci0rCi0rICAgIGtleSA9IEZJUFNfcnNhX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwot KyAgICBpZiAoIWtleSB8fCAhYm4pCi0rCXJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwg NjU1MzcpOwotKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwp KQotKwlyZXR1cm4gMDsKLSsgICAgQk5fZnJlZShibik7Ci0rICAgIAotKyAgICBuID0gQk5fbnVt X2J5dGVzKGtleS0+ZCk7Ci0rICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2 YXRlIGtleVxuIiwgbik7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5n OlxuIik7Ci0rICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsgICAgQk5fcmFuZChr ZXktPmQsbio4LC0xLDApOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5n OlxuIik7Ci0rICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsKLSsgICAgcHJpbnRm KCJcdGNoYXIgYnVmZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBm b3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtl eVtpXSk7Ci0rICAgICAgICBwcmludGYoIlxuIik7Ci0rICAgIFJBTkRfYnl0ZXModXNlcmtleSwg c2l6ZW9mIHVzZXJrZXkpOwotKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92 ZXJ3cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkp OyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIp OwotKwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3N0YXRpYyBpbnQgRXJyb3I7Ci0rY29u c3QgY2hhciAqIEZhaWwoY29uc3QgY2hhciAqbXNnKQotKyAgICB7Ci0rICAgIGRvX3ByaW50X2Vy cm9ycygpOwotKyAgICBFcnJvcisrOwotKyAgICByZXR1cm4gbXNnOyAKLSsgICAgfQotKwotK2lu dCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rCi0rICAgIGludCBkb19jb3Jy dXB0X3JzYV9rZXlnZW4gPSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOwotKyAgICBpbnQg YmFkX3JzYSA9IDAsIGJhZF9kc2EgPSAwOwotKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKLSsg ICAgaW50IG5vX2V4aXQgPSAwOwotKwotKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBw bGljYXRpb25cblxuIik7Ci0rCi0rICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZp bGUsIGlmIGFueSAqLwotKyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOwotKwotKyAg ICBpZiAoYXJndlsxXSkgewotKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLwotKyAg ICAgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgImFlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19j b3JydXB0X2FlcygpOwotKyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlw dGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJkZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsK LSsgICAgICAgICAgICBwcmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJkc2EiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKLSsgICAgICAg ICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24g d2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChh cmd2WzFdLCAicnNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7Ci0rICAg ICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0 aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoYXJndlsxXSwgInJzYWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdl bmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxu Iik7Ci0rCSAgICBiYWRfcnNhID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBl bHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgewotKwkgICAgZG9fY29ycnVw dF9yc2Ffa2V5Z2VuID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50 ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1 cHRlZCBrZXlnZW4uLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0s ICJkc2FrZXkiKSkgewotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAg YmFkX2RzYSA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2WzFdLCAiZHNha2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdl biA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2Vu Li4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7 Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKLSsgICAgICAgICAgICBwcmludGYo IlNIQS0xIGhhc2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsJfSBlbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJybmciKSkgewotKwkgICAgRklQU19jb3JydXB0X3JuZygpOwotKwl9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikpIHsKLSsJICAgIGRvX3JuZ19zdGlj ayA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBz dHVjayBjb250aW51b3VzIHRlc3QuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAg ICAgICBwcmludGYoIkJhZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOwotKyAgICAgICAg ICAgIGV4aXQoMSk7Ci0rICAgICAgICB9Ci0rCWlmICghbm9fZXhpdCkgewotKyAgICAgICAgCWlm ICghRklQU19tb2RlX3NldCgxKSkgewotKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAg ICAgIAkgICAgcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKLSsJCSAgICBl eGl0KDEpOwotKwkJfQotKyAgICAgICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nl c3NmdWxcbiIpOwotKyAgICAgICAgCWV4aXQoMCk7Ci0rCX0KLSsgICAgfQotKwotKyAgICAvKiBO b24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRm KCIxLiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Ci0r ICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsgICAgcHJp bnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBQb3dlci11cCBzZWxmIHRlc3QKLSsgICAgKi8KLSsgICAgRVJSX2NsZWFyX2Vy cm9yKCk7Ci0rICAgIHByaW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIp OwotKyAgICBpZiAoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rICAgICAgICBwcmludGYoRmFpbCgiRkFJTEVEIVxuIikpOwotKwlleGl0KDEpOwotKwl9Ci0r ICAgIHByaW50Zigic3VjY2Vzc2Z1bFxuIik7Ci0rICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXln ZW4pCi0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRv X2NvcnJ1cHRfcnNhX2tleWdlbikKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdl bigpOwotKyAgICBpZiAoZG9fcm5nX3N0aWNrKQotKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNr KCk7Ci0rCi0rICAgIC8qIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAg cHJpbnRmKCIzLiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50Zigg RklQU19hZXNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsK LSsKLSsgICAgLyogUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24K LSsgICAgKi8KLSsgICAgcHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRp b24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkg PyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBERVMt Q0JDIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjUuIERFUy1F Q0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19kZXMzX3Rl c3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8q IERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KLSsgICAgKi8KLSsg ICAgcHJpbnRmKCI2LiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9u Li4uIik7Ci0rICAgIHByaW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS0xIGhhc2gKLSsgICAg Ki8KLSsgICAgcHJpbnRmKCI3YS4gU0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNf c2hhMV90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwot KyAgICAvKiBTSEEtMjU2IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBo YXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxc biIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTUxMiBoYXNoCi0rICAg ICovCi0rICAgIHByaW50ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJ UFNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTEgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdkLiBI TUFDLVNIQS0xIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkg PyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFD LVNIQS0yMjQgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFz aC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjU2IGhh c2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKLSsg ICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCi0rICAgICov Ci0rICAgIHByaW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7Ci0rICAgIHByaW50Zigg RklQU19obWFjX3NoYTM4NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQh XG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmlu dGYoIjdoLiBITUFDLVNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19z aGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsK LSsgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0r ICAgIHByaW50ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3Qu Li5cbiIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7 Ci0rICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJ ICAgIDogRmFpbCgiZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAgLyogWmVyb2l6 YXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOwotKyAg ICBwcmludGYoIFplcm9pemUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJICAg IDogRmFpbCgiXHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOwotKwotKyAgICBwcmludGYoIlxu QWxsIHRlc3RzIGNvbXBsZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOwotKyAgICByZXR1 cm4gRXJyb3IgPyAxIDogMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMJ MjAxMy0xMC0wNCAxMTo0ODowNC4xODk2OTQzMzkgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZmlwcy9NYWtlZmlsZQkyMDEzLTEwLTA0IDExOjQ4OjA0LjE4OTY5NDMzOSArMDIwMAot QEAgLTAsMCArMSwzNDAgQEAKLSsjCi0rIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0r IwotKwotK0RJUj0JZmlwcwotK1RPUD0JLi4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxB Rz0tZwotK01BS0VGSUxFPQlNYWtlZmlsZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNM VURFUykgJChDRkxBRykKLSsKLStHRU5FUkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3Vp dGUuYyBmaXBzX3JhbmR0ZXN0LmMKLStBUFBTPQotKwotK1BST0dSQU09IGZpcHNfc3RhbmRhbG9u ZV9obWFjCi0rRVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQotKwotK0xJQj0kKFRPUCkvbGliY3J5 cHRvLmEKLStMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZp cHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ff c2VsZnRlc3QuYyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5j ICBmaXBzX3JhbmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlwc19wb3N0LmMgZmlwc19k cmJnX2N0ci5jIGZpcHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMuYyBcCi0rICAgIGZpcHNf ZHJiZ19saWIuYyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFu ZF9saWIuYyBcCi0rICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5j Ci0rCi0rTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBz X2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZpcHNfcnNhX3Nl bGZ0ZXN0Lm8gZmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAg Zmlwc19yYW5kLm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJi Z19jdHIubyBmaXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAotKyAgICBmaXBzX2Ry YmdfbGliLm8gZmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRf bGliLm8gXAotKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubwot KwotK0xJQkNSWVBUTz0tTC4uIC1sY3J5cHRvCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19zdGFu ZGFsb25lX2htYWMuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFERVI9 CSQoRVhIRUFERVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSsK LSt0b3A6Ci0rCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3Vi X2FsbCkKLSsKLSthbGw6CWxpYiBleGUKLSsKLStsaWI6CSQoTElCT0JKKQotKwkkKEFSKSAkKExJ QikgJChMSUJPQkopCi0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotKwlA dG91Y2ggbGliCi0rCi0rZXhlOgkkKEVYRSkKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkv dXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQo UEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVB REVSKQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1Qp Ci0rCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsK LStpbnN0YWxsOgotKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkg dG9wIE1ha2VmaWxlLi4uCi0rCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQk aGVhZGVybGlzdCA7IFwKLSsJZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5T VEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BS RUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwot K3RhZ3M6Ci0rCWN0YWdzICQoU1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURM SU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFL RURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFL RURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAk KExJQlNSQykKLSsKLStkY2xlYW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxF VEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5u ZXcKLSsJbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1m ICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0r Ci0rJChFWEUpOiAkKFBST0dSQU0pLm8KLSsJRklQU19TSEFfQVNNPSIiOyBmb3IgaSBpbiAkKFNI QTFfQVNNX09CSikgc2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4v c2hhLyQkaSIgOyBkb25lOyBcCi0rCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKFBST0dSQU0pLm8g JCRGSVBTX1NIQV9BU00KLSsKLSsjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVw ZW5kIGRlcGVuZHMgb24gaXQuCi0rCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0r Zmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFu ZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzLmMgZmlwc19sb2NsLmgKLStm aXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfYWVzX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK LStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAot K2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAot K2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlw c19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19h ZXNfc2VsZnRlc3QuYwotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19kZXNfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o Ci0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCBmaXBzX2Rlc19zZWxmdGVzdC5jCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNf ZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfY3RyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgK LStmaXBzX2RyYmdfY3RyLm86IGZpcHNfZHJiZ19jdHIuYyBmaXBzX3JhbmRfbGNsLmgKLStmaXBz X2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK LStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19k cmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJn X2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaGFzaC5jCi0rZmlwc19kcmJnX2hhc2gubzogZmlwc19y YW5kX2xjbC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlw c19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3Jh bmQuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19o bWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19obWFj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2htYWMuYwotK2ZpcHNfZHJi Z19obWFjLm86IGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2Ry YmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvaG1hYy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBz X2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJi Z19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmgKLStmaXBzX2RyYmdfbGliLm86IGZpcHNfZHJiZ19saWIuYyBmaXBzX2xv Y2wuaCBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJi Z19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r Zmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBz X2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCBmaXBzX2RyYmdfcmFuZC5jCi0rZmlwc19kcmJnX3JhbmQubzogZmlwc19yYW5kX2xjbC5o Ci0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv aG1hYy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5o Ci0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAot K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBm aXBzX2RyYmdfc2VsZnRlc3QuYwotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiBmaXBzX2RyYmdfc2Vs ZnRlc3QuaCBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19kc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kc2Ffc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHNhX3NlbGZ0ZXN0LmMKLStmaXBz X2RzYV9zZWxmdGVzdC5vOiBmaXBzX2xvY2wuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2Zp cHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19obWFjX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX2htYWNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2htYWNfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfaG1hY19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2htYWNfc2VsZnRlc3QuYwot K2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfcG9z dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3Bvc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBz X2xvY2wuaCBmaXBzX3Bvc3QuYwotK2ZpcHNfcmFuZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Flcy5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2Zp cHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3Jh bmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlw c19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oCi0rZmlwc19yYW5kLm86IGZpcHNfbG9jbC5oIGZpcHNfcmFuZC5jCi0r Zmlwc19yYW5kX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5o Ci0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19yYW5kX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNf cmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcmFuZF9saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JhbmRfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0r Zmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBz X3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oCi0rZmlwc19yYW5kX2xpYi5vOiBmaXBzX3JhbmRfbGliLmMKLStm aXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX3JhbmRfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNf cmFuZC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFj LmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK LStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAot K2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0r Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o Ci0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o Ci0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStm aXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0r Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNf bG9jbC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IGZpcHNfcmFuZF9zZWxmdGVzdC5jCi0rZmlw c19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3JzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcnNhLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oIGZpcHNfcnNhX3NlbGZ0ZXN0LmMKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfcnNhX3g5MzFnLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0r Zmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCBmaXBzX3JzYV94OTMxZy5jCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3No YV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3NoYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBz X3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3No YV9zZWxmdGVzdC5jCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vaG1hYy9obWFjLmMu ZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vaG1hYy9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9obWFjL2htYWMuYwkyMDEzLTEwLTA0IDEx OjQ4OjA0LjE4OTY5NDMzOSArMDIwMAotQEAgLTgxLDExICs4MSw2IEBAIGludCBITUFDX0luaXRf ZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAJCQlFVlBlcnIoRVZQX0ZfSE1BQ19JTklUX0VY LCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0gCQkJcmV0dXJuIDA7Ci0gCQkJfQotLQkJLyog T3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwK LS0JCSAqIHZpYSBGSVBTX2htYWNfaW5pdF9leCgpLgotLQkJICovCi0tCQlpZiAoIWltcGwgJiYg IWN0eC0+aV9jdHguZW5naW5lKQotLQkJCXJldHVybiBGSVBTX2htYWNfaW5pdF9leChjdHgsIGtl eSwgbGVuLCBtZCwgTlVMTCk7Ci0gCQl9Ci0gI2VuZGlmCi0gCi1AQCAtOTksNiArOTQsMTMgQEAg aW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bwotIAotIAlpZiAoa2V5ICE9 IE5VTEwpCi0gCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9kZSgpICYm ICEobWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKLSsJCSYmICghKGN0eC0+bWRfY3R4LmZs YWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5pX2N0 eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsJCSB8fCAhKGN0eC0+ b19jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSkKLSsJCQlnb3Rv IGVycjsKLSsjZW5kaWYKLSAJCXJlc2V0PTE7Ci0gCQlqPUVWUF9NRF9ibG9ja19zaXplKG1kKTsK LSAJCU9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKLUBAIC0xNTUs MTAgKzE1Nyw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAotIAot IGludCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh LCBzaXplX3QgbGVuKQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2Rl KCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJcmV0dXJuIEZJUFNfaG1hY191cGRhdGUoY3R4 LCBkYXRhLCBsZW4pOwotLSNlbmRpZgotIAlyZXR1cm4gRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5t ZF9jdHgsZGF0YSxsZW4pOwotIAl9Ci0gCi1AQCAtMTY2LDEwICsxNjQsNiBAQCBpbnQgSE1BQ19G aW5hbChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjCi0gCXsKLSAJdW5zaWduZWQgaW50IGk7Ci0g CXVuc2lnbmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07Ci0tI2lmZGVmIE9QRU5TU0xfRklQ UwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJcmV0dXJuIEZJ UFNfaG1hY19maW5hbChjdHgsIG1kLCBsZW4pOwotLSNlbmRpZgotIAotIAlpZiAoIUVWUF9EaWdl c3RGaW5hbF9leCgmY3R4LT5tZF9jdHgsYnVmLCZpKSkKLSAJCWdvdG8gZXJyOwotQEAgLTIwOSwx MyArMjAzLDYgQEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQwotIAot IHZvaWQgSE1BQ19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQotIAl7Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJewot LQkJRklQU19obWFjX2N0eF9jbGVhbnVwKGN0eCk7Ci0tCQlyZXR1cm47Ci0tCQl9Ci0tI2VuZGlm Ci0gCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7Ci0gCUVWUF9NRF9DVFhfY2xlYW51 cCgmY3R4LT5vX2N0eCk7Ci0gCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5tZF9jdHgpOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v bWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCTIwMTMtMTAtMDQgMTE6 NDg6MDQuMTg5Njk0MzM5ICswMjAwCi1AQCAtNzYsNyArNzYsNyBAQAotIAkJCSooKGMpKyspPSh1 bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQotIAotIHN0YXRpYyB2b2lkIG1kYzJfYm9k eShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOwotLWZp cHNfbWRfaW5pdChNREMyKQotK25vbmZpcHNfbWRfaW5pdChNREMyKQotIAl7Ci0gCWMtPm51bT0w OwotIAljLT5wYWRfdHlwZT0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kMi9t ZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAxMy0wMi0xMSAxNjoy NjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbWQyL21kMl9k Z3N0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xODk2OTQzMzkgKzAyMDAKLUBAIC02Miw2ICs2Miwx MSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSAKLSBjb25zdCBjaGFyIE1EMl92ZXJzaW9uW109Ik1EMiIgT1BFTlNTTF9W RVJTSU9OX1BURVhUOwotIAotQEAgLTExNiw3ICsxMjEsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0 aW9ucyh2b2lkKQotIAkJcmV0dXJuKCJtZDIoaW50KSIpOwotIAl9Ci0gCi0tZmlwc19tZF9pbml0 KE1EMikKLStub25maXBzX21kX2luaXQoTUQyKQotIAl7Ci0gCWMtPm51bT0wOwotIAltZW1zZXQo Yy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kNC9tZDRfZGdz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMJMjAxMy0w Mi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v bWQ0L21kNF9kZ3N0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xOTA2OTQzNjIgKzAyMDAKLUBAIC03 MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1YKLSAj ZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJ TklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAotIAotLWZpcHNfbWRfaW5pdChN RDQpCi0rbm9uZmlwc19tZF9pbml0KE1ENCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMp KTsKLSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwot LS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMTMtMDItMTEg MTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kNS9t ZDVfZGdzdC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkwNjk0MzYyICswMjAwCi1AQCAtNzEsNyAr NzEsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCi0gI2RlZmlu ZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNkZWZpbmUgSU5JVF9E QVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1maXBzX21kX2luaXQoTUQ1KQot K25vbmZpcHNfbWRfaW5pdChNRDUpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0g CWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vb19maXBz LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vb19maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vb19maXBzLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9vX2ZpcHMuYwkyMDEzLTEwLTA0IDExOjQ4OjA0 LjE5MDY5NDM2MiArMDIwMAotQEAgLTc5LDYgKzc5LDggQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50 IHIpCi0gI2lmbmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNTCi0gI2RlZmluZSBGSVBTX0FVVEhfVVNF Ul9QQVNTCSJEZWZhdWx0IEZJUFMgQ3J5cHRvIFVzZXIgUGFzc3dvcmQiCi0gI2VuZGlmCi0rCWlm IChyICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgLyogY2FuIGJlIGltcGxpY2l0bHkgaW5pdGlhbGl6 ZWQgYnkgT1BFTlNTTF9pbml0KCkgKi8KLSsJCXJldHVybiAxOwotIAlpZiAoIUZJUFNfbW9kdWxl X21vZGVfc2V0KHIsIEZJUFNfQVVUSF9VU0VSX1BBU1MpKQotIAkJcmV0dXJuIDA7Ci0gCWlmIChy KQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL29faW5pdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL29faW5pdC5j LmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vb19pbml0LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xOTA2OTQzNjIgKzAyMDAK LUBAIC01NSwyOCArNTUsNjggQEAKLSAjaW5jbHVkZSA8ZV9vcy5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ Ci0rI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0rI2luY2x1ZGUgPGZjbnRsLmg+Ci0rI2luY2x1ZGUg PHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKwot KyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5h YmxlZCIKLSsKLStzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQotKwl7Ci0rCWNoYXIg YnVmWzJdID0gIjAiOwotKwlpbnQgZmQ7Ci0rCQotKwlpZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNF X0ZJUFNfTU9ERSIpICE9IE5VTEwpCi0rCQl7Ci0rCQlidWZbMF0gPSAnMSc7Ci0rCQl9Ci0rCWVs c2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05MWSkpID49IDAp Ci0rCQl7Ci0rCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5v ID09IEVJTlRSKTsKLSsJCWNsb3NlKGZkKTsKLSsJCX0KLSsJLyogRmFpbHVyZSByZWFkaW5nIHRo ZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKLSsJICogc3dpdGNoaW5nIGlu dG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKLSsJICogb3RoZXJ3 aXNlLiAKLSsJICovCi0rCQotKwlpZiAoYnVmWzBdID09ICcxJykKLSsJCXsKLSsJCUZJUFNfbW9k ZV9zZXQoMSk7Ci0rCQl9Ci0rCX0KLSAjZW5kaWYKLSAKLSAvKiBQZXJmb3JtIGFueSBlc3NlbnRp YWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgotICAqIEN1cnJlbnRseSBvbmx5 IHNldHMgRklQUyBjYWxsYmFja3MKLSAgKi8KLSAKLS12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQot K3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKLSAJewotIAlzdGF0aWMgaW50IGRvbmUg PSAwOwotIAlpZiAoZG9uZSkKLSAJCXJldHVybjsKLSAJZG9uZSA9IDE7Ci0gI2lmZGVmIE9QRU5T U0xfRklQUwotLQlGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQVE9fbG9jaywgQ1JZUFRP X2FkZF9sb2NrKTsKLS0JRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJyb3IsIEVS Ul9hZGRfZXJyb3JfdmRhdGEpOwotLQlGSVBTX3NldF9tYWxsb2NfY2FsbGJhY2tzKENSWVBUT19t YWxsb2MsIENSWVBUT19mcmVlKTsKLSAJUkFORF9pbml0X2ZpcHMoKTsKLSsJaW5pdF9maXBzX21v ZGUoKTsKLSsJaWYgKCFGSVBTX21vZGUoKSkKLSsJCXsKLSsJCS8qIENsZWFuIHVwIHByZW1hdHVy ZWx5IHNldCBkZWZhdWx0IHJhbmQgbWV0aG9kICovCi0rCQlSQU5EX3NldF9yYW5kX21ldGhvZChO VUxMKTsKLSsJCX0KLSAjZW5kaWYKLSAjaWYgMAotIAlmcHJpbnRmKHN0ZGVyciwgIkNhbGxlZCBP UEVOU1NMX2luaXRcbiIpOwotICNlbmRpZgotIAl9Ci0gCi0rdm9pZCBPUEVOU1NMX2luaXQodm9p ZCkKLSsJewotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwl9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9vcGVuc3NsY29uZi5oLmluCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL29wZW5zc2xjb25m LmguaW4uZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkw Njk0MzYyICswMjAwCi1AQCAtMSw1ICsxLDIwIEBACi0gLyogY3J5cHRvL29wZW5zc2xjb25mLmgu aW4gKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECi0rCi0rLyogSW5jbHVk ZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFi bGUgYSBmZWF0dXJlCi0rICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgot KyAqCi0rICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlz LCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCi0rICogaW5zdGVhZDsgd2Ugd2FudCB0byBt YWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3Jp dGhtcy5dCi0rICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZGVmaW5lIE9QRU5TU0xf RklQUwotKyNlbmRpZgotKwotKyNlbmRpZgotKwotIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICov Ci0gI3VuZGVmIEkzODZfT05MWQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3Br Y3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcGtjczEyL3AxMl9jcnQu YwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAxMy0w Mi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v cGtjczEyL3AxMl9jcnQuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE5MDY5NDM2MiArMDIwMAotQEAg LTU5LDYgKzU5LDEwIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgImNyeXB0bGli LmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSAKLSBzdGF0aWMgaW50 IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJf U0FGRUJBRyAqYmFnKTsKLUBAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUo Y2hhciAqcGFzcywgY2hhciAqCi0gCi0gCS8qIFNldCBkZWZhdWx0cyAqLwotIAlpZiAoIW5pZF9j ZXJ0KQotKwkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSkKLSsJ CQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOwotKwkJ ZWxzZQotKyNlbmRpZgotIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJf Q0JDOwotKwkJfQotIAlpZiAoIW5pZF9rZXkpCi0gCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hB MUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Ci0gCWlmICghaXRlcikKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9y YW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yYW5kL21kX3JhbmQuYy5m aXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkwNjk0MzYyICsw MjAwCi1AQCAtMzg5LDcgKzM4OSwxMCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVu c2lnbmVkIGNoCi0gCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0gCWNyeXB0 b19sb2NrX3JhbmQgPSAxOwotIAotLQlpZiAoIWluaXRpYWxpemVkKQotKwkvKiBhbHdheXMgcG9s bCBmb3IgZXh0ZXJuYWwgZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAot KwkgKiBleHBhbnNpb24KLSsJICovCi0rCWlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVf bW9kZSgpKSAKLSAJCXsKLSAJCVJBTkRfcG9sbCgpOwotIAkJaW5pdGlhbGl6ZWQgPSAxOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL3JhbmQvcmFuZC5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFu ZC5oLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowMy45NDU2ODg4MjkgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxMy0xMC0wNCAxMTo0ODowNC4xOTA2OTQzNjIg KzAyMDAKLUBAIC0xMzMsMTUgKzEzMywzMyBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2 b2lkKTsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLwotIAotIC8q IEZ1bmN0aW9uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01F VEhPRAkJCSAxMDgKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMwotKyNkZWZpbmUg UkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCi0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5E X1NFVF9EVAkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19YOTMxX1NFVF9EVAkJCQkgMTA2 Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAotKyNkZWZpbmUgUkFORF9GX0ZJ UFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01P REUJCQkgMTA1Ci0gI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCi0t I2RlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9GX1JB TkRfSU5JVF9GSVBTCQkJCSAxMDkKLSAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJ CSAxMDAKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0tI2RlZmluZSBSQU5EX1JfRVJST1JfSU5J VElBTElTSU5HX0RSQkcJCQkgMTAyCi0tI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElO R19EUkJHCQkJIDEwMwotLSNkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJ CSAxMDEKLSsjZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTIKLSsj ZGVmaW5lIFJBTkRfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTEzCi0rI2RlZmluZSBS QU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKLSsjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVT VF9NT0RFCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VU CQkgMTExCi0rI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBSQU5E X1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNICQkJIDEwMQotKyNkZWZpbmUgUkFORF9SX1BSTkdf RVJST1IJCQkJIDEwOAotKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQotKyNkZWZp bmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9SX1BSTkdf Tk9UX1JFU0VFREVECQkJIDEwMwotICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkg MTAwCi0rI2RlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAot KyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAotIAotICNpZmRlZiAgX19jcGx1c3Bs dXMKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKLS0tLSBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yaXBlbWQvcm1kX2Rn c3QuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE5MTY5NDM4NSArMDIwMAotQEAgLTcwLDcgKzcwLDcg QEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgotICAgICAgdm9pZCBy aXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3Qg bnVtKTsKLSAjICBlbmRpZgotIAotLWZpcHNfbWRfaW5pdChSSVBFTUQxNjApCi0rbm9uZmlwc19t ZF9pbml0KFJJUEVNRDE2MCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+ QT1SSVBFTUQxNjBfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2Ny cHQuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2NycHQuYwotLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfY3JwdC5j CTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkxNjk0Mzg1ICswMjAwCi1AQCAtOTAsMTAgKzkwLDkgQEAg aW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0Ci0gCSAgICAgUlNBICpyc2Es IGludCBwYWRkaW5nKQotIAl7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2Rl KCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0tCQkJJiYg IShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwlpZihGSVBTX21vZGUo KSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0gCQl7Ci0tCQlS U0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RCk7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9O X05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0gCQlyZXR1cm4gLTE7Ci0gCQl9Ci0gI2VuZGlm Ci1AQCAtMTE4LDEwICsxMTcsOSBAQCBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBj b25zdCB1Ci0gCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0gI2lmZGVmIE9QRU5T U0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZM QUdfRklQU19NRVRIT0QpCi0tCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpKQotKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05f RklQU19BTExPVykpCi0gCQl7Ci0tCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBS U0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLSsJCVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RF Q1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotIAkJcmV0 dXJuIC0xOwotIAkJfQotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3Jz YS9yc2FfZWF5LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9lYXkuYwotLS0t IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJMjAxMy0wMi0xMSAxNjoy NjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9l YXkuYwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE5MTY5NDM4NSArMDIwMAotQEAgLTExNCw2ICsxMTQs MTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotIAotICNpZm5kZWYgUlNBX05VTEwKLSAKLUBAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGljIFJT QV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoPXsKLSAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFgg cHJvYmFibHkgd2Ugc2hvdWxkIG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCi0gCVJT QV9lYXlfaW5pdCwKLSAJUlNBX2VheV9maW5pc2gsCi0tCTAsIC8qIGZsYWdzICovCi0rCVJTQV9G TEFHX0ZJUFNfTUVUSE9ELCAvKiBmbGFncyAqLwotIAlOVUxMLAotIAkwLCAvKiByc2Ffc2lnbiAq LwotIAkwLCAvKiByc2FfdmVyaWZ5ICovCi1AQCAtMTU4LDYgKzE2MiwyNCBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxM OwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQ U19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0r CQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmICghKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5u KSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQkJewotKwkJCVJTQWVy cihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9udW1f Yml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJCVJT QWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJH RSk7Ci1AQCAtMzYxLDYgKzM4MywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNy eXB0KGludCBmCi0gCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gCUJOX0JMSU5ESU5HICpibGlu ZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkp Ci0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJy KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVO U1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0Zf UlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJ cmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCWYgICA9IEJO X0NUWF9nZXQoY3R4KTsKLUBAIC01MDQsNiArNTQ0LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9w cml2YXRlX2RlY3J5cHQoaW50IGYKLSAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKLSAJQk5fQkxJ TkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewot KwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsKLSsJCWlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkmJiAoQk5fbnVtX2JpdHMocnNh LT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQkJewotKwkJCVJT QWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZigoY3R4 ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7 Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC02MzksNiArNjk3LDI0IEBAIHN0YXRpYyBp bnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJdW5zaWduZWQgY2hhciAqYnVmPU5V TEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAo RklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsK LSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKCEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJCSYmIChCTl9udW1fYml0cyhyc2Et Pm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJUlNB ZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKEJOX251 bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQotIAkJewotIAkJ UlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xB UkdFKTsKLUBAIC04OTcsNiArOTczLDkgQEAgZXJyOgotIAotIHN0YXRpYyBpbnQgUlNBX2VheV9p bml0KFJTQSAqcnNhKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0 X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJQ3xS U0FfRkxBR19DQUNIRV9QUklWQVRFOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L3JzYS9yc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5m aXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xOTE2OTQzODUgKzAy MDAKLUBAIC0xMjEsNiArMTIxLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1 bmN0c1tdPQotIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX3B1Ymxp Y19lbmNyeXB0In0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJf REVDT0RFIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ffc2V0 dXBfYmxpbmRpbmcifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCks CSJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVU SE9EKSwJIlJTQV9zZXRfbWV0aG9kIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJIlJT QV9zaWduIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJ IlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJ RlkpLAkiUlNBX3ZlcmlmeSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9y c2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9nZW4uYwotLS0tIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjow NC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9nZW4u YwkyMDEzLTEwLTA0IDExOjQ4OjA0LjE5MTY5NDM4NSArMDIwMAotQEAgLTY5LDYgKzY5LDc4IEBA Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotICNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KLSsKLStzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwg PSAwOwotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKLSsJewotKwlmaXBz X3JzYV9wYWlyd2lzZV9mYWlsID0gMTsKLSsJfQotKwotK2ludCBmaXBzX2NoZWNrX3JzYShSU0Eg KnJzYSkKLSsJewotKwljb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBD aGVjayBEYXRhIjsKLSsJdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxM OwotKwlpbnQgbGVuLCByZXQgPSAwOwotKwlFVlBfUEtFWSAqcGs7Ci0rCi0rCWlmICgocGs9RVZQ X1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJRVZQX1BLRVlfc2V0MV9S U0EocGssIHJzYSk7Ci0rCi0rCS8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0 dXJlIHRlc3QgKi8KLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEs Ci0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVM TCkKLSsJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVM TCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQotKwkJfHwg IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBf c2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJ LyogTm93IHBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3Qg Ki8KLSsJY3RidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsJaWYgKCFjdGJ1 ZikKLSsJCWdvdG8gZXJyOwotKwotKwlsZW4gPSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRi cykgLSAxLCB0YnMsIGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsJaWYgKGxlbiA8 PSAwKQotKwkJZ290byBlcnI7Ci0rCS8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBw bGFpbnRleHQgKi8KLSsJaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAo dGJzLCBjdGJ1ZiwgbGVuKSkKLSsJCWdvdG8gZXJyOwotKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9j KFJTQV9zaXplKHJzYSkpOwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCWxlbiA9 IFJTQV9wcml2YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BB RERJTkcpOwotKwlpZiAobGVuICE9IChzaXplb2YodGJzKSAtIDEpKQotKwkJZ290byBlcnI7Ci0r CWlmIChtZW1jbXAocHRidWYsIHRicywgbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAx OwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCQotKwllcnI6Ci0rCWlmIChyZXQg PT0gMCkKLSsJCXsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfQ0hFQ0tfUlNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rCQl9Ci0r Ci0rCWlmIChjdGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShjdGJ1Zik7Ci0rCWlmIChwdGJ1ZikKLSsJ CU9QRU5TU0xfZnJlZShwdGJ1Zik7Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwot KwotKwlyZXR1cm4gcmV0OwotKwl9Ci0gI2VuZGlmCi0gCi0gc3RhdGljIGludCByc2FfYnVpbHRp bl9rZXlnZW4oUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpj Yik7Ci1AQCAtODEsNyArMTUzLDcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNB ICpyc2EsCi0gaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdO VU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYikKLSAJewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0J aWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVU SE9EKQotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJT QV9GTEFHX0ZJUFNfTUVUSE9EKQotIAkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYLCBS U0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLUBAIC05MCwxMCArMTYyLDYgQEAgaW50IFJTQV9n ZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaQotICNlbmRpZgotIAlpZihyc2EtPm1ldGgt PnJzYV9rZXlnZW4pCi0gCQlyZXR1cm4gcnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKHJzYSwgYml0cywg ZV92YWx1ZSwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQot LQkJcmV0dXJuIEZJUFNfcnNhX2dlbmVyYXRlX2tleV9leChyc2EsIGJpdHMsIGVfdmFsdWUsIGNi KTsKLS0jZW5kaWYKLSAJcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFs dWUsIGNiKTsKLSAJfQotIAotQEAgLTEwNSw2ICsxNzMsMjMgQEAgc3RhdGljIGludCByc2FfYnVp bHRpbl9rZXlnZW4oUlNBICpyc2EsCi0gCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOwotIAlC Tl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9k dWxlX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICAJ ewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOwotKwkgICAgCXJldHVybiAwOwotKwkgICAgCX0KLSsKLSsJCWlmIChi aXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJICAgIHsKLSsJCSAg ICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQp OwotKwkJICAgIHJldHVybiAwOwotKwkJICAgIH0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4PUJO X0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0 KGN0eCk7Ci1AQCAtMjE2LDYgKzMwMSwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdl bihSU0EgKnJzYSwKLSAJCXAgPSByc2EtPnA7Ci0gCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5p cW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJyOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9m YWlsKQotKwkJCUJOX2FkZF93b3JkKHJzYS0+biwgMSk7Ci0rCi0rCQlpZighZmlwc19jaGVja19y c2EocnNhKSkKLSsJCSAgICBnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJb2s9MTsKLSBl cnI6Ci0gCWlmIChvayA9PSAtMSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2Ev cnNhLmguZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYS5oCi0tLS0gb3BlbnNzbC0x LjAuMWUvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTMtMTAtMDQgMTE6NDg6MDQuMDc1NjkxNzY1 ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2EuaAkyMDEzLTEwLTA0IDEx OjQ4OjA0LjE5MjY5NDQwNyArMDIwMAotQEAgLTE2NCw2ICsxNjQsOCBAQCBzdHJ1Y3QgcnNhX3N0 Ci0gIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4NAotICNlbmRpZgot IAotKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAj aWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwotICMgZGVmaW5lIE9QRU5TU0xf UlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcyCi0gI2VuZGlmCi1AQCAtMjkwLDYgKzI5MiwxMSBA QCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCi0gCi0gLyogTmV3IHZl cnNpb24gKi8KLSBpbnQJUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJ R05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNh LCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAotKwkJCWNv bnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKLSsJ CQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEs Ci0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0FfWDkzMV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNC ICpjYik7Ci0gCi0gaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOwotIAkvKiBuZXh0IDQg cmV0dXJuIC0xIG9uIGVycm9yICovCi1AQCAtNDg3LDcgKzQ5NCw3IEBAIHZvaWQgRVJSX2xvYWRf UlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9ORQkJ CSAxMDcKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9PQUVQCQkgMTIxCi0g I2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTCQkJIDEyNQotLSNkZWZpbmUg UlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTQ4Ci0rI2RlZmluZSBSU0Ff Rl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01HRjEJCSAxNTgKLSAjZGVmaW5lIFJTQV9GX1JT QV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzEJCSAxMDgKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURE SU5HX0FERF9QS0NTMV9UWVBFXzIJCSAxMDkKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FE RF9TU0xWMjMJCQkgMTEwCi1AQCAtNTAwLDIwICs1MDcsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ff c3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEJCQkg MTI4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKLSAjZGVmaW5lIFJTQV9GX1JT QV9QUklOVF9GUAkJCQkgMTE2Ci0tI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJ IDE1MAotLSNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNTEKLSsjZGVmaW5l IFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQJCQkgMTU3Ci0rI2RlZmluZSBSU0FfRl9SU0FfUFJJ VkFURV9FTkNSWVBUCQkJIDE0OAotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAx MzcKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4Ci0tI2RlZmluZSBSU0Ff Rl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTUyCi0rI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RF Q1JZUFQJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUzCi0g I2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5Ci0gI2RlZmluZSBSU0FfRl9SU0Ff U0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVU SE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQotICNkZWZp bmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcKLSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFf T0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKLSAj ZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMjAKLSAjZGVmaW5l IFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTCQkJIDEyNgotLSNkZWZpbmUgUlNBX0ZfUlNBX1ZF UklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNDkKLSsjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtD UzFfUFNTX01HRjEJCQkgMTUyCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwotICNkZWZpbmUgUlNB X1JfQUxHT1JJVEhNX01JU01BVENICQkJIDEwMAotQEAgLTU0MiwyMSArNTUxLDIyIEBAIHZvaWQg RVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX01HRjFf TUQJCQkJIDE1NgotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKLSAjZGVm aW5lIFJTQV9SX0lOVkFMSURfUEFERElOR19NT0RFCQkJIDE0MQotLSNkZWZpbmUgUlNBX1JfSU5W QUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNDkKLSsjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BB UkFNRVRFUlMJCQkgMTU3Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOCQkJIDE0 NgotLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTAKLSsjZGVmaW5lIFJT QV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJCQkgMTU4Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX1RS QUlMRVIJCQkJIDEzOQotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9YOTMxX0RJR0VTVAkJCSAxNDIK LSAjZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYKLSAjZGVmaW5lIFJT QV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMjAKLSAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRf SU5WQUxJRAkJCSAxMzQKLSAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUK LS0jZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTU3Ci0rI2RlZmluZSBSU0Ff Ul9OT05fRklQU19SU0FfTUVUSE9ECQkJIDE0OQotKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVU SE9ECQkJCSAxNDkKLSAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKLSAj ZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCi0gI2RlZmluZSBS U0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJTQV9SX09BRVBfREVD T0RJTkdfRVJST1IJCQkgMTIxCi0tI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURf SU5fRklQU19NT0RFCSAxNTgKLSsjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9J Tl9GSVBTX01PREUJIDE1MAotICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURf Rk9SX1RISVNfS0VZVFlQRQkgMTQ4Ci0gI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxF RAkJCSAxMTQKLSAjZGVmaW5lIFJTQV9SX1BfTk9UX1BSSU1FCQkJCSAxMjgKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL3JzYS9yc2FfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9saWIu Yy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xOTI2OTQ0MDcg KzAyMDAKLUBAIC04NCw2ICs4NCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJT QV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSAJewotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0Ff RkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxU X01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybjsKLSsJCX0KLSsjZW5k aWYKLSAJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0gCX0KLSAKLUBAIC05MSwxOCArOTgsMTEg QEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX2dldF9kZWZhdWx0X21ldGhvZAotIAl7Ci0gCWlmIChk ZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpCi0gCQl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJ aWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKLS0J CWVsc2UKLS0JCQlyZXR1cm4gUlNBX1BLQ1MxX1NTTGVheSgpOwotLSNlbHNlCi0gI2lmZGVmIFJT QV9OVUxMCi0gCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9udWxsX21ldGhvZCgpOwotICNlbHNlCi0g CQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9QS0NTMV9TU0xlYXkoKTsKLSAjZW5kaWYKLS0jZW5kaWYK LSAJCX0KLSAKLSAJcmV0dXJuIGRlZmF1bHRfUlNBX21ldGg7Ci1AQCAtMTE4LDYgKzExOCwxMyBA QCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCi0gCS8qIE5COiBUaGUg Y2FsbGVyIGlzIHNwZWNpZmljYWxseSBzZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0 byB1cwotIAkgKiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCi0g CWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQ U19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsK LSsJCVJTQWVycihSU0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsK LSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotIAltdG1wID0gcnNhLT5tZXRoOwotIAlpZiAo bXRtcC0+ZmluaXNoKSBtdG1wLT5maW5pc2gocnNhKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5H SU5FCi1AQCAtMTcwLDYgKzE3NywxOCBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5n aW5lKQotIAkJCX0KLSAJCX0KLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkp Ci0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01F VEhPRCk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotKwkJaWYgKHJldC0+ZW5naW5lKQot KwkJCUVOR0lORV9maW5pc2gocmV0LT5lbmdpbmUpOwotKyNlbmRpZgotKwkJT1BFTlNTTF9mcmVl KHJldCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJcmV0LT5wYWQ9MDsK LSAJcmV0LT52ZXJzaW9uPTA7Ci1AQCAtMTg4LDcgKzIwNyw3IEBAIFJTQSAqUlNBX25ld19tZXRo b2QoRU5HSU5FICplbmdpbmUpCi0gCXJldC0+YmxpbmRpbmc9TlVMTDsKLSAJcmV0LT5tdF9ibGlu ZGluZz1OVUxMOwotIAlyZXQtPmJpZ251bV9kYXRhPU5VTEw7Ci0tCXJldC0+ZmxhZ3M9cmV0LT5t ZXRoLT5mbGFncyAmIH5SU0FfRkxBR19OT05fRklQU19BTExPVzsKLSsJcmV0LT5mbGFncz1yZXQt Pm1ldGgtPmZsYWdzOwotIAlpZiAoIUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhf UlNBLCByZXQsICZyZXQtPmV4X2RhdGEpKQotIAkJewotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJ TkUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDEzLTEw LTA0IDExOjQ4OjA0LjE5MjY5NDQwNyArMDIwMAotQEAgLTIwNiwyMiArMjA2LDYgQEAgc3RhdGlj IGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYwotIAkJCQkJUlNBX1JfSU5WQUxJRF9E SUdFU1RfTEVOR1RIKTsKLSAJCQlyZXR1cm4gLTE7Ci0gCQkJfQotLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0JCWlmIChyZXQgPiAwKQotLQkJCXsKLS0JCQl1bnNpZ25lZCBpbnQgc2xlbjsKLS0JCQly ZXQgPSBGSVBTX3JzYV9zaWduX2RpZ2VzdChyc2EsIHRicywgdGJzbGVuLCByY3R4LT5tZCwKLS0J CQkJCQkJcmN0eC0+cGFkX21vZGUsCi0tCQkJCQkJCXJjdHgtPnNhbHRsZW4sCi0tCQkJCQkJCXJj dHgtPm1nZjFtZCwKLS0JCQkJCQkJc2lnLCAmc2xlbik7Ci0tCQkJaWYgKHJldCA+IDApCi0tCQkJ CSpzaWdsZW4gPSBzbGVuOwotLQkJCWVsc2UKLS0JCQkJKnNpZ2xlbiA9IDA7Ci0tCQkJcmV0dXJu IHJldDsKLS0JCQl9Ci0tI2VuZGlmCi0gCi0gCQlpZiAoRVZQX01EX3R5cGUocmN0eC0+bWQpID09 IE5JRF9tZGMyKQotIAkJCXsKLUBAIC0zNTQsMTkgKzMzOCw2IEBAIHN0YXRpYyBpbnQgcGtleV9y c2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAotICNlbmRpZgotIAlpZiAocmN0eC0+bWQpCi0gCQl7Ci0t I2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKHJ2ID4gMCkKLS0JCQl7Ci0tCQkJcmV0dXJuIEZJ UFNfcnNhX3ZlcmlmeV9kaWdlc3QocnNhLAotLQkJCQkJCQl0YnMsIHRic2xlbiwKLS0JCQkJCQkJ cmN0eC0+bWQsCi0tCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAotLQkJCQkJCQlyY3R4LT5zYWx0bGVu LAotLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCi0tCQkJCQkJCXNpZywgc2lnbGVuKTsKLS0JCQkJCQkJ Ci0tCQkJfQotLSNlbmRpZgotIAkJaWYgKHJjdHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QQURE SU5HKQotIAkJCXJldHVybiBSU0FfdmVyaWZ5KEVWUF9NRF90eXBlKHJjdHgtPm1kKSwgdGJzLCB0 YnNsZW4sCi0gCQkJCQlzaWcsIHNpZ2xlbiwgcnNhKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNh X3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIw MTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkyNjk0NDA3ICswMjAwCi1A QCAtMTM4LDcgKzEzOCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQg Y2gKLSAJCWkyZF9YNTA5X1NJRygmc2lnLCZwKTsKLSAJCXM9dG1wczsKLSAJfQotLQlpPVJTQV9w cml2YXRlX2VuY3J5cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkvKiBO QjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5n ICovCi0rCWkgPSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZf ZW5jKGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCWlmIChpIDw9IDAp Ci0gCQlyZXQ9MDsKLSAJZWxzZQotQEAgLTE3OCw4ICsxNzksOCBAQCBpbnQgaW50X3JzYV92ZXJp ZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCi0gCi0gCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEp ICYmIHJtKQotIAkJewotLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKLS0J CQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkJaSA9IHJzYS0+bWV0aC0+ cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAotKwkJCQkJ c2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwotIAkJaWYgKGkgPD0gMCkKLSAJ CQlyZXR1cm4gMDsKLSAJCSpwcm1fbGVuID0gaTsKLUBAIC0xOTYsNyArMTk3LDggQEAgaW50IGlu dF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAkJCVJTQWVycihSU0FfRl9JTlRf UlNBX1ZFUklGWSxSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKLSAJCQlnb3RvIGVycjsK LSAJfQotLQlpPVJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNB X1BLQ1MxX1BBRERJTkcpOwotKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3Rs eSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCi0rCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVj ID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BL Q1MxX1BBRERJTkcpIDogMDsKLSAKLSAJaWYgKGkgPD0gMCkgZ290byBlcnI7Ci0gCS8qIE9kZGJh bGwgTURDMiBjYXNlOiBzaWduYXR1cmUgY2FuIGJlIE9DVEVUIFNUUklORy4KLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEvc2hhLmguZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v c2hhL3NoYS5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMTMt MTAtMDQgMTE6NDg6MDMuODY3Njg3MDY4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L3NoYS9zaGEuaAkyMDEzLTEwLTA0IDExOjQ4OjA0LjE5MjY5NDQwNyArMDIwMAotQEAgLTExNiw5 ICsxMTYsNiBAQCB1bnNpZ25lZCBjaGFyICpTSEEoY29uc3QgdW5zaWduZWQgY2hhciAqCi0gdm9p ZCBTSEFfVHJhbnNmb3JtKFNIQV9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwot ICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19TSEExCi0tI2lmZGVmIE9QRU5TU0xfRklQUwot LWludCBwcml2YXRlX1NIQTFfSW5pdChTSEFfQ1RYICpjKTsKLS0jZW5kaWYKLSBpbnQgU0hBMV9J bml0KFNIQV9DVFggKmMpOwotIGludCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lk ICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwg U0hBX0NUWCAqYyk7Ci1AQCAtMTQxLDEwICsxMzgsNiBAQCB0eXBlZGVmIHN0cnVjdCBTSEEyNTZz dGF0ZV9zdAotIAl9IFNIQTI1Nl9DVFg7Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1Ngot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEEyMjRfSW5pdChTSEEyNTZfQ1RY ICpjKTsKLS1pbnQgcHJpdmF0ZV9TSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjKTsKLS0jZW5kaWYK LSBpbnQgU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7Ci0gaW50IFNIQTIyNF9VcGRhdGUoU0hB MjU2X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQTIyNF9G aW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqYyk7Ci1AQCAtMTkyLDEwICsxODUs NiBAQCB0eXBlZGVmIHN0cnVjdCBTSEE1MTJzdGF0ZV9zdAotICNlbmRpZgotIAotICNpZm5kZWYg T1BFTlNTTF9OT19TSEE1MTIKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50IHByaXZhdGVfU0hB Mzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7Ci0taW50IHByaXZhdGVfU0hBNTEyX0luaXQoU0hBNTEy X0NUWCAqYyk7Ci0tI2VuZGlmCi0gaW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOwotIGlu dCBTSEEzODRfVXBkYXRlKFNIQTUxMl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBs ZW4pOwotIGludCBTSEEzODRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTUxMl9DVFggKmMp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAxMy0xMC0wNCAxMTo0ODowMy44NzA2ODcxMzUgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAxMy0xMC0wNCAx MTo0ODowNC4xOTI2OTQ0MDcgKzAyMDAKLUBAIC0xMjMsMTEgKzEyMywxNCBAQCB2b2lkIHNoYTFf YmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAqYywKLSAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMz ZDJlMWYwVUwKLSAKLSAjaWZkZWYgU0hBXzAKLS1maXBzX21kX2luaXQoU0hBKQotK25vbmZpcHNf bWRfaW5pdChTSEEpCi0gI2Vsc2UKLSBmaXBzX21kX2luaXRfY3R4KFNIQTEsIFNIQSkKLSAjZW5k aWYKLSAJewotKyNpZiBkZWZpbmVkKFNIQV8xKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKLSsJ RklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMp KTsKLSAJYy0+aDA9SU5JVF9EQVRBX2gwOwotIAljLT5oMT1JTklUX0RBVEFfaDE7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL3NoYS9zaGEyNTYuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEvc2hhMjU2 LmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9zaGEvc2hhMjU2LmMJMjAxMy0xMC0wNCAxMTo0ODowNC4xOTM2OTQ0Mjkg KzAyMDAKLUBAIC0xMiwxMiArMTIsMTkgQEAKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2x2Lmg+Ci0gCi0gY29uc3QgY2hhciBTSEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2IiBPUEVO U1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0gZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikK LSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNl bmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7 CWMtPmhbMV09MHgzNjdjZDUwN1VMOwotIAljLT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0w eGY3MGU1OTM5VUw7Ci1AQCAtMjksNiArMzYsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwg U0hBMjU2KQotIAotIGZpcHNfbWRfaW5pdChTSEEyNTYpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6 ZW9mKCpjKSk7Ci0gCWMtPmhbMF09MHg2YTA5ZTY2N1VMOwljLT5oWzFdPTB4YmI2N2FlODVVTDsK LSAJYy0+aFsyXT0weDNjNmVmMzcyVUw7CWMtPmhbM109MHhhNTRmZjUzYVVMOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9zaGEvc2hhNTEyLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vc2hhL3NoYTUxMi5j LmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkzNjk0NDI5ICsw MjAwCi1AQCAtNSw2ICs1LDEwIEBACi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgKi8KLSAjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB KSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikKLSAvKgotICAqIElNUExFTUVOVEFUSU9O IE5PVEVTLgotQEAgLTYxLDYgKzY1LDkgQEAgY29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltdPSJT SEEtNTEyIiBPUAotIAotIGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCi0gCXsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJ Yy0+aFswXT1VNjQoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsKLSAJYy0+aFsxXT1VNjQoMHg2MjlhMjky YTM2N2NkNTA3KTsKLSAJYy0+aFsyXT1VNjQoMHg5MTU5MDE1YTMwNzBkZDE3KTsKLUBAIC03Nyw2 ICs4NCw5IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCi0gCi0gZmlwc19tZF9p bml0KFNIQTUxMikKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9j aGVjaygpOwotKyNlbmRpZgotIAljLT5oWzBdPVU2NCgweDZhMDllNjY3ZjNiY2M5MDgpOwotIAlj LT5oWzFdPVU2NCgweGJiNjdhZTg1ODRjYWE3M2IpOwotIAljLT5oWzJdPVU2NCgweDNjNmVmMzcy ZmU5NGY4MmIpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3docmxwb29sL3dwX2Rn c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMKLS0tLSBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAxMy0wMi0xMSAx NjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vd2hybHBv b2wvd3BfZGdzdC5jCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkzNjk0NDI5ICswMjAwCi1AQCAtNTUs NyArNTUsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNsdWRlIDxzdHJp bmcuaD4KLSAKLS1maXBzX21kX2luaXQoV0hJUkxQT09MKQotK25vbmZpcHNfbWRfaW5pdChXSElS TFBPT0wpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCXJldHVybigxKTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL01ha2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjFlL01h a2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjFlL01ha2VmaWxlLm9yZy5maXBzCTIwMTMtMTAt MDQgMTE6NDg6MDQuMTU3NjkzNjE2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWUvTWFrZWZpbGUu b3JnCTIwMTMtMTAtMDQgMTE6NDg6MDQuMTkzNjk0NDI5ICswMjAwCi1AQCAtMTM2LDYgKzEzNiw5 IEBAIEZJUFNDQU5MSUI9Ci0gCi0gQkFTRUFERFI9Ci0gCi0rIyBOb24tZW1wdHkgaWYgRklQUyBl bmFibGVkCi0rRklQUz0KLSsKLSBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3Qg dG9vbHMKLSBFTkdESVJTPSBjY2dvc3QKLSBTSExJQkRJUlM9IGNyeXB0byBzc2wKLUBAIC0xNDgs NyArMTUxLDcgQEAgU0RJUlM9ICBcCi0gCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28g ZW5naW5lIFwKLSAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBcCi0gCWV2cCBhc24x IHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGty YjUgXAotLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCi0rCWNtcyBwcXVldWUg dHMganBha2Ugc3JwIHN0b3JlIGNtYWMgZmlwcwotICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFi b3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKLSAjIGFjY29yZGluZyB0byBuby14 eHggYXJndW1lbnRzLi4uCi0gCi1AQCAtMjM3LDYgKzI0MCw3IEBAIEJVSUxERU5WPQlQTEFURk9S TT0nJChQTEFURk9STSknIFBST0NFU1MKLSAJCUZJUFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJ XAotIAkJRklQU0RJUj0nJHtGSVBTRElSfScJCQkJXAotIAkJRklQU0NBTkxJQj0iJCR7RklQU0NB TkxJQjotJChGSVBTQ0FOTElCKX0iCVwKLSsJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCi0g CQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQotICMg TUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1p c2ggbWFrZSBmbGF2b3JzLAotICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVz IGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUv c3NsL2QxX3NydnIuYy5maXBzIG9wZW5zc2wtMS4wLjFlL3NzbC9kMV9zcnZyLmMKLS0tLSBvcGVu c3NsLTEuMC4xZS9zc2wvZDFfc3J2ci5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9zc2wvZDFfc3J2ci5jCTIwMTMtMTAtMDQgMTE6 NDg6MDQuMTkzNjk0NDI5ICswMjAwCi1AQCAtMTM3Miw2ICsxMzcyLDggQEAgaW50IGR0bHMxX3Nl bmRfc2VydmVyX2tleV9leGNoYW5nZShTU0wgKgotIAkJCQlqPTA7Ci0gCQkJCWZvciAobnVtPTI7 IG51bSA+IDA7IG51bS0tKQotIAkJCQkJewotKwkJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1k X2N0eCwKLSsJCQkJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQkJCQlF VlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKLSAJCQkJCQk/cy0+Y3R4LT5tZDU6 cy0+Y3R4LT5zaGExLCBOVUxMKTsKLSAJCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMt PnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFlL3NzbC9zc2xfYWxncy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvc3NsL3NzbF9hbGdz LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9zc2wvc3NsX2FsZ3MuYy5maXBzCTIwMTMtMDItMTEgMTY6 MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvc3NsL3NzbF9hbGdzLmMJ MjAxMy0xMC0wNCAxMTo0ODowNC4xOTM2OTQ0MjkgKzAyMDAKLUBAIC02NCw2ICs2NCwxMiBAQAot IGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCi0gCXsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rCWlmICghRklQU19tb2RlKCkpCi0rCQl7Ci0r I2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotIAlFVlBfYWRkX2NpcGhlcihFVlBf ZGVzX2NiYygpKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLUBAIC0x MzcsNiArMTQzLDUwIEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCi0gCUVWUF9hZGRfZGln ZXN0KEVWUF9zaGEoKSk7Ci0gCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MoKSk7Ci0gI2VuZGlmCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwkJfQotKwllbHNlCi0rCQl7Ci0rI2lmbmRlZiBPUEVOU1NM X05PX0RFUwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOwotKyNlbmRpZgot KyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2Jj KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2Nt KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7Ci0rI2VuZGlmCi0rI2lm bmRlZiBPUEVOU1NMX05PX01ENQotKwkvKiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZv ciBUTFMgTUFDICovCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7Ci0rCUVWUF9hZGRfZGln ZXN0X2FsaWFzKFNOX21kNSwic3NsMi1tZDUiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f bWQ1LCJzc2wzLW1kNSIpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLSsJRVZQ X2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9k aWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7Ci0rI2VuZGlmCi0rI2lm bmRlZiBPUEVOU1NMX05PX1NIQTI1NgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOwot KwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNT TF9OT19TSEE1MTIKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKLSsJRVZQX2FkZF9k aWdlc3QoRVZQX3NoYTUxMigpKTsKLSsjZW5kaWYKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19T SEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNz MSgpKTsgLyogRFNBIHdpdGggc2hhMSAqLwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FX aXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNh V2l0aFNIQTEsIkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEs ImRzczEiKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9k aWdlc3QoRVZQX2VjZHNhKCkpOwotKyNlbmRpZgotKwkJfQotKyNlbmRpZgotICNpZm5kZWYgT1BF TlNTTF9OT19DT01QCi0gCS8qIFRoaXMgd2lsbCBpbml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21w cmVzc2lvbiBhbGdvcml0aG1zLgotIAkgICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgYSBTVEFDS19P RihTU0xfQ09NUCksIGJ1dCB0aGF0IGNhbgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFlLW5l dy1maXBzLXJlcXMucGF0Y2ggYi9vcGVuc3NsLTEuMC4xZS1uZXctZmlwcy1yZXFzLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWZkZGUxLi4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjFlLW5ldy1maXBzLXJlcXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUwICsw LDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ibi9ibl9yYW5kLmMuZmlwcy1y ZXFzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ibi9ibl9yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vYm4vYm5fcmFuZC5jLmZpcHMtcmVxcwkyMDEzLTAyLTExIDE2OjAyOjQ3LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ibi9ibl9yYW5kLmMJMjAxNC0w Mi0xMyAxNjo1MDozNC4yODA4OTMyODUgKzAxMDAKLUBAIC0xMzgsOSArMTM4LDEyIEBAIHN0YXRp YyBpbnQgYm5yYW5kKGludCBwc2V1ZG9yYW5kLCBCSUdOVU0KLSAJCWdvdG8gZXJyOwotIAkJfQot IAotLQkvKiBtYWtlIGEgcmFuZG9tIG51bWJlciBhbmQgc2V0IHRoZSB0b3AgYW5kIGJvdHRvbSBi aXRzICovCi0tCXRpbWUoJnRpbSk7Ci0tCVJBTkRfYWRkKCZ0aW0sc2l6ZW9mKHRpbSksMC4wKTsK LSsJaWYgKCFGSVBTX21vZGUoKSkgLyogaW4gRklQUyBtb2RlIHRoZSBSTkcgaXMgYWx3YXlzIHBy b3Blcmx5IHNlZWRlZCBvciB0aGUgbW9kdWxlIGZhaWxzICovCi0rCQl7Ci0rCQkvKiBtYWtlIGEg cmFuZG9tIG51bWJlciBhbmQgc2V0IHRoZSB0b3AgYW5kIGJvdHRvbSBiaXRzICovCi0rCQl0aW1l KCZ0aW0pOwotKwkJUkFORF9hZGQoJnRpbSxzaXplb2YodGltKSwwLjApOwotKwkJfQotIAotIAlp ZiAocHNldWRvcmFuZCkKLSAJCXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kaC9k aF9nZW4uYy5maXBzLXJlcXMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoX2dlbi5jCi0tLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMtcmVxcwkyMDEzLTEyLTE4IDEy OjE3OjA5Ljc0ODYzNjYxNCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kaC9kaF9n ZW4uYwkyMDEzLTEyLTE4IDEyOjE3OjA5Ljc5ODYzNzY4NyArMDEwMAotQEAgLTEyNSw3ICsxMjUs NyBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCi0gCQlyZXR1cm4g MDsKLSAJCX0KLSAKLS0JaWYgKEZJUFNfbW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RI X0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVu IDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFNfR0VOKSkKLSAJCXsKLSAJCURIZXJy KERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSAJ CWdvdG8gZXJyOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoLmguZmlwcy1y ZXFzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kaC9kaC5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2RoL2RoLmguZmlwcy1yZXFzCTIwMTMtMTItMTggMTI6MTc6MDkuNzQ4NjM2NjE0ICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoLmgJMjAxMy0xMi0xOCAxMjoxNzowOS43 OTg2Mzc2ODcgKzAxMDAKLUBAIC03OCw2ICs3OCw3IEBACi0gI2VuZGlmCi0gCi0gI2RlZmluZSBP UEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rI2RlZmluZSBPUEVOU1NMX0RI X0ZJUFNfTUlOX01PRFVMVVNfQklUU19HRU4gMjA0OAotIAotICNkZWZpbmUgREhfRkxBR19DQUNI RV9NT05UX1AgICAgIDB4MDEKLSAjZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAy IC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERICi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZGgvZGhfY2hlY2suYy5maXBzLXJlcXMgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2RoL2RoX2NoZWNrLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhfY2hlY2suYy5m aXBzLXJlcXMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZGgvZGhfY2hlY2suYwkyMDEzLTEyLTE4IDEyOjE3OjA5Ljc5OTYzNzcw OCArMDEwMAotQEAgLTEzNCw3ICsxMzQsMzMgQEAgaW50IERIX2NoZWNrX3B1Yl9rZXkoY29uc3Qg REggKmRoLCBjb25zdAotIAlCTl9zdWJfd29yZChxLDEpOwotIAlpZiAoQk5fY21wKHB1Yl9rZXks cSk+PTApCi0gCQkqcmV0fD1ESF9DSEVDS19QVUJLRVlfVE9PX0xBUkdFOwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIGRoLT5xICE9IE5VTEwpCi0rCQl7Ci0rCQlC Tl9DVFggKmN0eCA9IE5VTEw7Ci0gCi0rCQljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCQlpZiAoY3R4 ID09IE5VTEwpCi0rCQkJZ290byBlcnI7Ci0rCi0rCQlpZiAoQk5fbW9kX2V4cF9tb250KHEsIHB1 Yl9rZXksIGRoLT5xLCBkaC0+cCwgY3R4LCBOVUxMKSA8PSAwKQotKwkJCXsKLSsJCQlCTl9DVFhf ZnJlZShjdHgpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCWlmICghQk5faXNfb25lKHEpKQot KwkJCXsKLSsJCQkvKiBpdCB3b3VsZCBiZSBtb3JlIGNvcnJlY3QgdG8gYWRkIG5ldyByZXR1cm4g ZmxhZyAKLSsJCQkgKiBmb3IgdGhpcyB0ZXN0LCBidXQgd2UgZG8gbm90IHdhbnQgdG8gZG8gaXQK LSsJCQkgKiBzbyBqdXN0IGVycm9yIG91dAotKwkJCSAqLwotKwkJCUJOX0NUWF9mcmVlKGN0eCk7 Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJCi0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQot KyNlbmRpZgotIAlvayA9IDE7Ci0gZXJyOgotIAlpZiAocSAhPSBOVUxMKSBCTl9mcmVlKHEpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcy1yZXFzIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcy1yZXFzCTIwMTMtMTItMTggMTI6MTc6MDkuNzQ5NjM2NjM2 ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxMy0xMi0x OCAxMjoxNzowOS43OTk2Mzc3MDggKzAxMDAKLUBAIC0xNTksNyArMTU5LDYgQEAgaW50IGRzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAkgICAgfQotIAotIAlpZiAoRklQU19t b2R1bGVfbW9kZSgpICYmCi0tCSAgICAoYml0cyAhPSAxMDI0IHx8IHFiaXRzICE9IDE2MCkgJiYK LSAJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjI0KSAmJgotIAkgICAgKGJpdHMgIT0g MjA0OCB8fCBxYml0cyAhPSAyNTYpICYmCi0gCSAgICAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9 IDI1NikpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYS5oLmZpcHMtcmVx cyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2RzYS9kc2EuaC5maXBzLXJlcXMJMjAxMy0xMi0xOCAxMjoxNzowOS43NDk2MzY2MzYgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYS5oCTIwMTMtMTItMTggMTI6MTc6 MDkuNzk5NjM3NzA4ICswMTAwCi1AQCAtODksNiArODksNyBAQAotICNlbmRpZgotIAotICNkZWZp bmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsjZGVmaW5lIE9QRU5T U0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUU19HRU4gMjA0OAotIAotICNkZWZpbmUgRFNBX0ZM QUdfQ0FDSEVfTU9OVF9QCTB4MDEKLSAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUg ICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKLUBAIC0yNTQs OSArMjU1LDkgQEAgaW50CURTQXBhcmFtc19wcmludF9mcChGSUxFICpmcCwgY29uc3QgRAotIGlu dAlEU0FfcHJpbnRfZnAoRklMRSAqYnAsIGNvbnN0IERTQSAqeCwgaW50IG9mZik7Ci0gI2VuZGlm Ci0gCi0tI2RlZmluZSBEU1NfcHJpbWVfY2hlY2tzIDUwCi0tLyogUHJpbWFsaXR5IHRlc3QgYWNj b3JkaW5nIHRvIEZJUFMgUFVCIDE4NlstMV0sIEFwcGVuZGl4IDIuMToKLS0gKiA1MCByb3VuZHMg b2YgUmFiaW4tTWlsbGVyICovCi0rI2RlZmluZSBEU1NfcHJpbWVfY2hlY2tzIDY0Ci0rLyogUHJp bWFsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIEZJUFMgUFVCIDE4NlstNF0sIEFwcGVuZGl4IDIuMToK LSsgKiA2NCByb3VuZHMgb2YgUmFiaW4tTWlsbGVyICovCi0gI2RlZmluZSBEU0FfaXNfcHJpbWUo biwgY2FsbGJhY2ssIGNiX2FyZykgXAotIAlCTl9pc19wcmltZShuLCBEU1NfcHJpbWVfY2hlY2tz LCBjYWxsYmFjaywgTlVMTCwgY2JfYXJnKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNh X2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcy1yZXFz CTIwMTMtMTItMTggMTI6MTc6MDkuNzk3NjM3NjY1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAxMy0xMi0xOCAxMjoxNzowOS43OTk2Mzc3MDggKzAxMDAK LUBAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpk c2EpCi0gCi0gI2lmZGVmIE9QRU5TU0xfRklQUwotIAlpZiAoRklQU19tb2RlKCkgJiYgIShkc2Et PmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0tCQkmJiAoQk5fbnVtX2JpdHMoZHNh LT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQkmJiAoQk5fbnVt X2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUU19HRU4pKQot IAkJewotIAkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKLSAJCWdvdG8gZXJyOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2ZpcHMvZmlwc19kaF9zZWxmdGVzdC5jLmZpcHMtcmVxcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v Zmlwcy9maXBzX2RoX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9m aXBzX2RoX3NlbGZ0ZXN0LmMuZmlwcy1yZXFzCTIwMTMtMTItMTggMTc6MDY6MzYuNTc1MTE0MzE0 ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kaF9zZWxmdGVzdC5j CTIwMTMtMTItMTggMTc6MjY6MTQuNDA5MDM2MzM0ICswMTAwCi1AQCAtMCwwICsxLDE2MiBAQAot Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqIENvcHlyaWdodCAoYykgMjAxMyBSZWQgSGF0 LCBJbmMuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0 XzIwNDhfcFtdID0gewotKwkweEFFLDB4RUMsMHhFRSwweDIyLDB4RkEsMHgzQSwweEE1LDB4MjIs MHhDMCwweERFLDB4MEYsMHgwOSwKLSsJMHg3RSwweDE3LDB4QzAsMHgwNSwweEY5LDB4RjEsMHhF NywweEM2LDB4ODcsMHgxNCwweDZELDB4MTEsCi0rCTB4RTcsMHhBRSwweEVELDB4MkYsMHg3Miww eDU5LDB4QzUsMHhBOSwweDlCLDB4QjgsMHgwMiwweEE1LAotKwkweEYzLDB4NjksMHg3MCwweEQ2 LDB4REQsMHg5MCwweEY5LDB4MTksMHg3OSwweEJFLDB4NjAsMHg4RiwKLSsJMHgyNSwweDkyLDB4 MzAsMHgxQywweDUxLDB4NTEsMHgzOCwweDI2LDB4ODIsMHgyNSwweEU2LDB4RkMsCi0rCTB4RUQs MHg2NSwweDk2LDB4OEYsMHg1NywweEU1LDB4NTMsMHg4QiwweDM4LDB4NjMsMHhDNywweENFLAot KwkweEJDLDB4MUIsMHg0RCwweDE4LDB4MkEsMHg1QiwweDA0LDB4M0YsMHg2QSwweDNDLDB4OTQs MHgzOSwKLSsJMHhBRSwweDM2LDB4RDYsMHg1RSwweDBGLDB4QTIsMHhDQywweEQwLDB4RDQsMHhE NSwweEM2LDB4MUUsCi0rCTB4RjYsMHhBMCwweEY1LDB4ODksMHg0RSwweEI0LDB4MEIsMHhBNCww eEIzLDB4MkIsMHgzRCwweEUyLAotKwkweDRFLDB4RTEsMHg0OSwweDI1LDB4OTksMHg1RiwweDMy LDB4MTYsMHgzMywweDMyLDB4MUIsMHg3QSwKLSsJMHhBNSwweDVDLDB4NkIsMHgzNCwweDBELDB4 MzksMHg5OSwweERDLDB4RjAsMHg3NiwweEU1LDB4NUEsCi0rCTB4RDQsMHg3MSwweDAwLDB4RUQs MHg1QSwweDczLDB4RkIsMHhDOCwweDAxLDB4QUQsMHg5OSwweENGLAotKwkweDk5LDB4NTIsMHg3 QywweDlDLDB4NjQsMHhDNiwweDc2LDB4NDAsMHg1NywweEFGLDB4NTksMHhENywKLSsJMHgzOCww eDBCLDB4NDAsMHhERSwweDMzLDB4MEQsMHhCOCwweDc2LDB4RUMsMHhBOSwweEQ4LDB4NzMsCi0r CTB4RjgsMHhFRiwweDI2LDB4NjYsMHgwNiwweDI3LDB4REQsMHg3QywweEE0LDB4MTAsMHg5Qyww eEE2LAotKwkweEFBLDB4RjksMHg1MywweDYyLDB4NzMsMHgxRCwweEJBLDB4MUMsMHhGMSwweDY3 LDB4RjQsMHgzNSwKLSsJMHhFRCwweDZGLDB4MzcsMHg5MiwweEU4LDB4NEYsMHg2QywweEJBLDB4 NTIsMHg2RSwweEExLDB4RUQsCi0rCTB4REEsMHg5RiwweDg1LDB4MTEsMHg4MiwweDUyLDB4NjIs MHgwOCwweDQ0LDB4RjEsMHgzMCwweDAzLAotKwkweEMzLDB4MzgsMHgyQywweDc5LDB4QkQsMHhE NCwweDQzLDB4NDUsMHhFRSwweDhFLDB4NTAsMHhGQywKLSsJMHgyOSwweDQ2LDB4OUEsMHhGRSww eDU0LDB4MUEsMHgxOSwweDhGLDB4NEIsMHg4NCwweDA4LDB4REUsCi0rCTB4MjAsMHg2MiwweDcz LDB4Q0MsMHhERCwweDdFLDB4RjAsMHhFRiwweEEyLDB4RkQsMHg4NiwweDU4LAotKwkweDRCLDB4 RDgsMHgzNywweEVCCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0 XzIwNDhfZ1tdID0gewotKwkweDAyCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBkaF90ZXN0XzIwNDhfcHViX2tleVtdID0gewotKwkweEEwLDB4MzksMHgxMSwweDc3LDB4OUEs MHhDMSwweDMwLDB4MUYsMHhCRSwweDQ4LDB4QTcsMHhBQSwKLSsJMHhBMCwweDg0LDB4NTQsMHg2 NCwweEFELDB4MUIsMHg3MCwweEZBLDB4MTMsMHg1NSwweDYzLDB4RDIsCi0rCTB4MUYsMHg2Miww eDMyLDB4OTMsMHg4RSwweEM5LDB4M0UsMHgwOSwweEE3LDB4NjQsMHhFNCwweDEyLAotKwkweDZF LDB4MUIsMHhGMiwweDkyLDB4M0IsMHhCOSwweENCLDB4NTYsMHhFQSwweDA3LDB4ODgsMHhCNSwK LSsJMHhBNiwweEJDLDB4MTYsMHgxRiwweDI3LDB4RkUsMHhEOCwweEFBLDB4NDAsMHhCMiwweEIw LDB4MkQsCi0rCTB4MzcsMHg3NiwweEE2LDB4QTQsMHg4MiwweDJDLDB4MEUsMHgyMiwweDY0LDB4 OUQsMHhDQiwweEQxLAotKwkweDAwLDB4QjcsMHg4OSwweDE0LDB4NzIsMHg0RSwweEJFLDB4NDgs MHg0MSwweEY4LDB4QjIsMHg1MSwKLSsJMHgxMSwweDA5LDB4NEIsMHgyMiwweDAxLDB4MjMsMHgz OSwweDk2LDB4RTAsMHgxNSwweEQ3LDB4OUYsCi0rCTB4NjAsMHhEMSwweEI3LDB4QUUsMHhGRSww eDVGLDB4REIsMHhFNywweDAzLDB4MTcsMHg5NywweEE2LAotKwkweDE2LDB4NzQsMHhCRCwweDUz LDB4ODEsMHgxOSwweEM1LDB4NDcsMHg1RSwweENFLDB4OEQsMHhFRCwKLSsJMHg0NSwweDVELDB4 M0MsMHgwMCwweEEwLDB4MEEsMHg2OCwweDZBLDB4RTAsMHg4RSwweDA2LDB4NDYsCi0rCTB4NkYs MHhENywweEY5LDB4REYsMHgzMSwweDdFLDB4NzcsMHg0NCwweDBELDB4OTgsMHhFMCwweENBLAot KwkweDk4LDB4MDksMHg1MiwweDA0LDB4OTAsMHhFQSwweDZELDB4RjQsMHgzMCwweDY5LDB4OEYs MHhCMSwKLSsJMHg5QiwweEMxLDB4NDMsMHhEQiwweEQ1LDB4OEQsMHhDOCwweDhFLDB4QjYsMHgw QiwweDA1LDB4QkUsCi0rCTB4MEUsMHhDNSwweDk5LDB4QzgsMHg2RSwweDRFLDB4RjMsMHhDQiww eEMzLDB4NUUsMHg5QiwweDUzLAotKwkweEY3LDB4MDYsMHgxQywweDRGLDB4QzcsMHhCOCwweDZF LDB4MzAsMHgxOCwweENBLDB4OUIsMHhCOSwKLSsJMHhCQywweDVGLDB4MTcsMHg3MiwweDI5LDB4 NUEsMHhFNSwweEQ5LDB4OTYsMHhCNywweDBCLDB4RjMsCi0rCTB4MkQsMHg4QywweEYxLDB4RTEs MHgwRSwweDBELDB4NzQsMHhENSwweDlELDB4RjAsMHgwNiwweEE5LAotKwkweEI0LDB4OTUsMHg2 MywweDc2LDB4NDYsMHg1NSwweDQ4LDB4ODIsMHgzOSwweDkwLDB4RUYsMHg1NiwKLSsJMHg3NSww eDM0LDB4QjgsMHgzNCwweEMzLDB4MTgsMHg2RSwweDFFLDB4QUQsMHhFMywweDQ4LDB4N0UsCi0r CTB4OTMsMHgyQywweDIzLDB4RTcsMHhGOCwweDkwLDB4NzMsMHhCMSwweDc3LDB4ODAsMHg2Nyww eEE5LAotKwkweDM2LDB4OUUsMHhEQSwweEQyCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBkaF90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9IHsKLSsJMHgwQywweDRCLDB4MzAsMHg4 OSwweEQxLDB4QjgsMHg2MiwweENCLDB4M0MsMHg0MywweDY0LDB4OTEsCi0rCTB4RjAsMHg5MSww eDU0LDB4NzAsMHhDNSwweDI3LDB4OTYsMHhFMywweEFDLDB4QkUsMHhFOCwweDAwLAotKwkweEVD LDB4NTUsMHhGNiwweENDCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9kaCgpCi0rCXsKLSsJ REggKmRoID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCXZvaWQgKnB1Yl9rZXkgPSBOVUxMOwot KwlpbnQgbGVuOwotKwotKwlkaCA9IERIX25ldygpOwotKwotKwlpZihkaCA9PSBOVUxMKQotKwkJ Z290byBlcnI7Ci0rCi0rCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRoLCBwLCBkaF90ZXN0XzIw NDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkaCwgZywgZGhfdGVzdF8yMDQ4KTsKLSsJ Lyogbm90ZSB0aGF0IHRoZSBwcml2YXRlIGtleSBpcyBtdWNoIHNob3J0ZXIgdGhhbiBub3JtYWxs eSB1c2VkCi0rCSAqIGJ1dCBzdGlsbCBnICoqIHByaXZfa2V5ID4gcAotKwkgKi8KLSsJZmlwc19s b2FkX2tleV9jb21wb25lbnQoZGgsIHByaXZfa2V5LCBkaF90ZXN0XzIwNDgpOwotKwotKwlpZiAo REhfZ2VuZXJhdGVfa2V5KGRoKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCi0rCWxlbiA9IEJOX251 bV9ieXRlcyhkaC0+cHViX2tleSk7Ci0rCWlmICgocHViX2tleSA9IE9QRU5TU0xfbWFsbG9jKGxl bikpID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJQk5fYm4yYmluKGRoLT5wdWJfa2V5LCBwdWJf a2V5KTsKLSsKLSsJaWYgKGxlbiAhPSBzaXplb2YoZGhfdGVzdF8yMDQ4X3B1Yl9rZXkpIHx8Ci0r CQltZW1jbXAocHViX2tleSwgZGhfdGVzdF8yMDQ4X3B1Yl9rZXksIGxlbikgIT0gMCkKLSsJCWdv dG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChkaCkKLSsJCURIX2ZyZWUo ZGgpOwotKwotKwlPUEVOU1NMX2ZyZWUocHViX2tleSk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5k LmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMK LS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMtcmVx cwkyMDEzLTEyLTE4IDEyOjE3OjA5Ljc1NzYzNjgwOCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMJMjAxMy0xMi0xOCAxODo1MzozMy4yNjM3MTEy OTcgKzAxMDAKLUBAIC03Nyw3ICs3Nyw4IEBAIHN0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVu c2lnbmVkIGNoYXIKLSAJaW50IHJ2ID0gMDsKLSAJdW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7 Ci0gCXNpemVfdCBhZGlubGVuID0gMDsKLS0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5E KTsKLSsJaW50IGxvY2tlZDsKLSsJbG9ja2VkID0gcHJpdmF0ZV9SQU5EX2xvY2soMSk7Ci0gCWRv IAotIAkJewotIAkJc2l6ZV90IHJjbnQ7Ci1AQCAtMTA5LDcgKzExMCw4IEBAIHN0YXRpYyBpbnQg Zmlwc19kcmJnX2J5dGVzKHVuc2lnbmVkIGNoYXIKLSAJd2hpbGUgKGNvdW50KTsKLSAJcnYgPSAx OwotIAllcnI6Ci0tCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJaWYgKGxv Y2tlZCkKLSsJCXByaXZhdGVfUkFORF9sb2NrKDApOwotIAlyZXR1cm4gcnY7Ci0gCX0KLSAKLUBA IC0xMjQsMzUgKzEyNiw1MSBAQCBzdGF0aWMgaW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKLSAJ ewotIAlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0gCWludCBydjsKLS0JQ1JZUFRPX3Jf bG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJaW50IGxvY2tlZDsKLSsJbG9ja2VkID0gcHJpdmF0 ZV9SQU5EX2xvY2soMSk7Ci0gCXJ2ID0gZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZ ID8gMSA6IDA7Ci0tCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJaWYgKGxv Y2tlZCkKLSsJCXByaXZhdGVfUkFORF9sb2NrKDApOwotIAlyZXR1cm4gcnY7Ci0gCX0KLSAKLSBz dGF0aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51cCh2b2lkKQotIAl7Ci0gCURSQkdfQ1RYICpkY3R4 ID0gJm9zc2xfZGN0eDsKLS0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJaW50 IGxvY2tlZDsKLSsJbG9ja2VkID0gcHJpdmF0ZV9SQU5EX2xvY2soMSk7Ci0gCUZJUFNfZHJiZ191 bmluc3RhbnRpYXRlKGRjdHgpOwotLQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 Ci0rCWlmIChsb2NrZWQpCi0rCQlwcml2YXRlX1JBTkRfbG9jaygwKTsKLSAJfQotIAotIHN0YXRp YyBpbnQgZmlwc19kcmJnX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCi0gCXsK LSAJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpbnQgbG9ja2VkOwotKwlpbnQgcmV0 ID0gMTsKLSsKLSsJbG9ja2VkID0gcHJpdmF0ZV9SQU5EX2xvY2soMSk7Ci0gCWlmIChkY3R4LT5y YW5kX3NlZWRfY2IpCi0tCQlyZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNlZWQsIHNl ZWRsZW4pOwotLQlyZXR1cm4gMTsKLSsJCXJldCA9IGRjdHgtPnJhbmRfc2VlZF9jYihkY3R4LCBz ZWVkLCBzZWVkbGVuKTsKLSsJaWYgKGxvY2tlZCkKLSsJCXByaXZhdGVfUkFORF9sb2NrKDApOwot KwlyZXR1cm4gcmV0OwotIAl9Ci0gCi0gc3RhdGljIGludCBmaXBzX2RyYmdfYWRkKGNvbnN0IHZv aWQgKnNlZWQsIGludCBzZWVkbGVuLAotIAkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQotIAl7Ci0g CURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJaW50IGxvY2tlZDsKLSsJaW50IHJldCA9 IDE7Ci0rCi0rCWxvY2tlZCA9IHByaXZhdGVfUkFORF9sb2NrKDEpOwotIAlpZiAoZGN0eC0+cmFu ZF9hZGRfY2IpCi0tCQlyZXR1cm4gZGN0eC0+cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxl biwgYWRkX2VudHJvcHkpOwotLQlyZXR1cm4gMTsKLSsJCXJldCA9IGRjdHgtPnJhbmRfYWRkX2Ni KGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9lbnRyb3B5KTsKLSsJaWYgKGxvY2tlZCkKLSsJCXBy aXZhdGVfUkFORF9sb2NrKDApOwotKwlyZXR1cm4gcmV0OwotIAl9Ci0gCi0gc3RhdGljIGNvbnN0 IFJBTkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRoID0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHMuaC5maXBzLXJlcXMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlw cy5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMtcmVxcwkyMDEz LTEyLTE4IDEyOjE3OjA5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9maXBzL2ZpcHMuaAkyMDEzLTEyLTE4IDE3OjEzOjAwLjkyODU4NjY4OSArMDEwMAotQEAgLTk2 LDYgKzk2LDcgQEAgdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKLSBpbnQgRklQ U19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0gaW50IEZJUFNfc2VsZnRlc3RfZWNkc2Eodm9pZCk7Ci0g aW50IEZJUFNfc2VsZnRlc3RfZWNkaCh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kaCh2b2lk KTsKLSB2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0gdm9pZCBGSVBTX3JuZ19zdGljayh2 b2lkKTsKLSB2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Zmlwc19wb3N0LmMuZmlwcy1yZXFzCTIwMTMtMTItMTggMTI6MTc6MDkuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxMy0xMi0xOCAx NzoxMjoyNi43MjE4MzI3MTYgKzAxMDAKLUBAIC05OSw2ICs5OSw4IEBAIGludCBGSVBTX3NlbGZ0 ZXN0KHZvaWQpCi0gCQlydiA9IDA7Ci0gCWlmICghRklQU19zZWxmdGVzdF9kc2EoKSkKLSAJCXJ2 ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RoKCkpCi0rCQlydiA9IDA7Ci0gCWlmICghRklQ U19zZWxmdGVzdF9lY2RoKCkpCi0gCQlydiA9IDA7Ci0gCXJldHVybiBydjsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcy1yZXFzIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMtcmVxcwkyMDE0LTAz LTE0IDE0OjQ3OjE4LjgwOTI1OTcyNyArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxNC0wMy0xNCAxNTozNzoyNi4yOTU2ODc4NTIgKzAx MDAKLUBAIC02MCw2OSArNjAsMTEzIEBACi0gI2lmZGVmIE9QRU5TU0xfRklQUwotIAotIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIG5bXSA9Ci0tIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4 ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCi0tIlx4RjdceDM2XHg4RFx4 MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCi0tIlx4 MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2 Rlx4Q0QiCi0tIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5 RFx4OEFceDVCXHg4Qlx4ODAiCi0tIlx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3 Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0tIlx4ODRceEVFXHg2QVx4NjRceDlEXHgw Nlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1XHg5OFx4MzkiCi0tIlx4NEVceEUwXHhB QVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4NjgiCi0t Ilx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5 XHgxRFx4QkQiCi0tIlx4Q0IiOwotKyJceDAwXHhjOVx4ZDVceDZkXHg5ZFx4OTBceGRiXHg0M1x4 ZDZceDAyXHhlZFx4OTZceDg4XHgxM1x4OGEiCi0rIlx4YjJceGJmXHg2ZVx4YTFceDA2XHgxMFx4 YjJceDc4XHgzN1x4YTdceDE0XHhhOFx4ZmZceGRkXHgwMCIKLSsiXHhkZFx4YjRceDkzXHhhMFx4 NDVceGNjXHg5Nlx4OTBceGVkXHhhZFx4YTlceGRkXHhjNFx4ZDZceGNhIgotKyJceDBjXHhmMFx4 ZWRceDRmXHg3Mlx4NWVceDIxXHg0OVx4OWFceDE4XHgxMlx4MTVceDhmXHg5MFx4NWEiCi0rIlx4 ZGJceGI2XHgzM1x4OTlceGEzXHhlNlx4YjRceGYwXHhjNFx4OTdceDIxXHgyNlx4YmJceGUzXHhi YSIKLSsiXHhmMlx4ZmZceGEwXHg3Mlx4ZGFceDg5XHg2M1x4OGVceDhiXHgzZVx4MDhceDlkXHg5 Mlx4MmFceGJlIgotKyJceDE2XHhlMVx4NDNceDE1XHhmY1x4NTdceGM3XHgxZlx4MDlceDExXHg2 N1x4MWNceGE5XHg5Nlx4ZDEiCi0rIlx4OGJceDNlXHg4MFx4OTNceGMxXHg1OVx4ZDBceDZkXHgz OVx4ZjJceGFjXHg5NVx4Y2NceDEwXHg3NSIKLSsiXHhlOVx4MzFceDI0XHhkMVx4NDNceGFmXHg2 OFx4NTJceDRiXHhlN1x4MTZceGQ3XHg0OVx4NjVceDZmIgotKyJceDI2XHhjMFx4ODZceGFkXHhj MFx4MDdceDBhXHhjMVx4ZTFceDJmXHg4N1x4ODVceDg2XHgzYlx4ZGMiCi0rIlx4NWFceDk5XHhi ZVx4ZTlceGY5XHhiOVx4ZTlceDgyXHgyN1x4NTFceDA0XHgxNVx4YWJceDA2XHgwZSIKLSsiXHg3 Nlx4NWFceDI4XHg4ZFx4OTJceGJkXHhjNVx4YjVceDdiXHhhOFx4ZGZceDRlXHg0N1x4YTJceGMx IgotKyJceGU3XHg1Mlx4YmZceDQ3XHhmN1x4NjJceGUwXHgzYVx4NmZceDRkXHg2YVx4NGRceDRl XHhkNFx4YjkiCi0rIlx4NTlceDY5XHhmYVx4YjJceDE0XHhjMVx4ZWVceGU2XHgyZlx4OTVceGNk XHg5NFx4NzJceGFlXHhlNCIKLSsiXHhkYlx4MThceDlhXHhjNFx4Y2RceDcwXHhiZFx4ZWVceDMx XHgxNlx4YjdceDQ5XHg2NVx4YWNceDQwIgotKyJceDE5XHgwZVx4YjVceDZkXHg4M1x4ZjFceDM2 XHhiYlx4MDhceDJmXHgyZVx4NGVceDkyXHg2Mlx4YTQiCi0rIlx4ZmZceDUwXHhkYlx4MjBceDQ1 XHhhMlx4ZWJceDE2XHg3YVx4ZjJceGQ1XHgyOFx4YzFceGZkXHg0ZSIKLSsiXHgwM1x4NzEiOwot KwotIAotIHN0YXRpYyBpbnQgY29ycnVwdF9yc2E7Ci0gCi0gc3RhdGljIGludCBzZXRyc2FrZXko UlNBICprZXkpCi0gICAgIHsKLS0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0g Ilx4MTEiOwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgwMVx4MDBc eDAxIjsKLSAKLSAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLS0iXHgwMFx4 QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhD RCIKLS0iXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgw MVx4NTdceDk2XHg0MSIKLS0iXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2 NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLS0iXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhB OVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNFXHhEQSIKLS0iXHhDOVx4N0ZceEYzXHhB RFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKLS0iXHg0 NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQy XHgwQSIKLS0iXHg5M1x4OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEEx XHhDRVx4Q0NceDQ4XHg5NCIKLS0iXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0 XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKLS0iXHhDMSI7Ci0rIlx4MzZceDI3XHgzZFx4 YjFceGY5XHgxYlx4ZGJceGE3XHhhMFx4NDFceDdmXHgxMlx4MjNceGFjXHgyMyIKLSsiXHgyOVx4 OTlceGQ1XHgzYVx4N2JceDYwXHg2N1x4NDFceDA3XHg2M1x4NTNceGI0XHhkMlx4ZTdceDU4Igot KyJceDk1XHgwYVx4YzdceDA1XHhmM1x4NGVceGIyXHhiNFx4MTJceGQ0XHg3MFx4ZGNceDRmXHg4 NVx4MDYiCi0rIlx4ZDNceGRkXHhkOFx4NjNceDI3XHgzZVx4NjdceDMxXHgyMVx4MjRceDM5XHgw NFx4YmNceDA2XHhhNCIKLSsiXHhjY1x4Y2VceDJiXHg3YVx4ZmVceDdiXHhhZFx4ZGVceDExXHg2 ZVx4YTNceGE1XHhlNlx4MDRceDUzIgotKyJceDBlXHhhM1x4NGVceDJkXHhiNFx4OGZceDMxXHhi Zlx4Y2FceDc1XHgyNVx4NTJceDAyXHg4NVx4ZGUiCi0rIlx4M2RceGIyXHg3Mlx4NDNceGIyXHg4 OVx4OGFceDlhXHgzNFx4NDFceDI2XHgzZlx4OWFceDY3XHhiZSIKLSsiXHhhNFx4OTZceDdiXHgw ZVx4NzVceGJhXHhhNlx4OTNceGQ1XHhiOFx4ZDhceGI4XHg1N1x4ZjJceDRiIgotKyJceDBmXHgx NFx4ODFceGQxXHg1N1x4NGVceGY2XHg0NVx4NGNceGE2XHgzYlx4ZDBceDcwXHhjYVx4ZDMiCi0r Ilx4OWRceDU1XHhkZVx4MjJceDA1XHhlN1x4OGVceDI4XHg0ZFx4ZWVceDExXHhjZlx4YjZceDY3 XHg3NiIKLSsiXHgwOVx4ZDNceGUzXHgzY1x4MTNceGY5XHg5OVx4MzRceDEwXHg3Ylx4ZWNceDgx XHgzOFx4ZjBceGI2IgotKyJceDM0XHg5Y1x4OWJceDUwXHg2Zlx4MGJceDkxXHg4MVx4NGRceDg5 XHg5NFx4MDRceDdiXHhmMFx4M2MiCi0rIlx4ZjRceGIxXHhiMlx4MDBceDQ4XHg4ZFx4NWFceDhm XHg4OFx4OWVceGM1XHhhYlx4M2FceDllXHg0NCIKLSsiXHgzZlx4NTRceGU3XHhkOVx4NmVceDQ3 XHhhYVx4YTFceGJkXHg0MFx4NDZceDMxXHhmOVx4ZjBceDM0IgotKyJceGI2XHgwNFx4ZTFceDJi XHg1Ylx4NzNceDg2XHhkZFx4M2FceDkyXHgxYlx4NzFceGM3XHgzZlx4MzIiCi0rIlx4ZTVceGMz XHhjMlx4YWJceGExXHg3ZVx4YmZceGE0XHg1Mlx4YTBceGIwXHg2OFx4OTBceGQxXHgyMCIKLSsi XHgxMlx4NzlceGU5XHhkN1x4YzlceDQwXHhiYVx4ZjJceDE5XHhjN1x4YTVceDAwXHg5Mlx4ODZc eDBkIgotKyJceDAxIjsKLSAKLSAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0K LS0iXHgwMFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4 QTFceEI1XHg2MCIKLS0iXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4 QjhceDFBXHg5RVx4M0RceDg0XHhGNiIKLS0iXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4 MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKLS0iXHgyRFx4NUJceDI1XHgyMVx4 NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKLS0iXHg5OSI7 Ci0rIlx4MDBceGZjXHg1Y1x4NmVceDE2XHhjZVx4MWZceDAzXHg3Ylx4Y2RceGY3XHhiM1x4NzJc eGIyXHg4ZiIKLSsiXHgxNlx4NzJceGI4XHg1Nlx4YWVceGY3XHhjZFx4NjdceGQ4XHg0ZVx4N2Rc eDA3XHhhZlx4ZDVceDQzIgotKyJceDI2XHhjM1x4MzVceGJlXHg0M1x4OGZceDRlXHgyZlx4MWNc eDQzXHg0ZVx4NmJceGQyXHhiMlx4ZWMiCi0rIlx4NTJceDZkXHg5N1x4NTJceDJiXHhjY1x4NWNc eDNhXHg2Ylx4ZjRceDE0XHhjNlx4NzRceGRhXHg2NiIKLSsiXHgzOFx4MWNceDdhXHgzZlx4ODRc eDJmXHhlM1x4ZjlceDVhXHhiOFx4NjVceDY5XHg0Nlx4MDZceGEzIgotKyJceDM3XHg3OVx4YjJc eGExXHg1Ylx4NThceGVkXHg1ZVx4YTdceDVmXHg4Y1x4NjVceDY2XHhiYlx4ZDEiCi0rIlx4MjRc eDM2XHhlNlx4MzdceGE3XHgzZFx4NDlceDc3XHg4YVx4OGNceDM0XHhkOFx4NjlceDI5XHhmMyIK LSsiXHg0ZFx4NThceDIyXHhiMFx4NTFceDI0XHhiNlx4NDBceGE4XHg4Nlx4NTlceDBhXHhiN1x4 YmFceDVjIgotKyJceDk3XHhkYVx4NTdceGU4XHgzNlx4ZGFceDdhXHg5Y1x4YWQiOwotIAotICAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotLSJceDAwXHhDOVx4N0ZceEIxXHhG MFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgotLSJceDM1XHgz Rlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlE IgotLSJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0 XHgzMlx4MDRceEI1IgotLSJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0 XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotLSJceDAzIjsKLSsiXHgwMFx4Y2NceGJlXHg3Ylx4 MDlceDY5XHgwNlx4ZWVceDQ1XHhiZlx4ODhceDQ3XHgzOFx4YThceGY4IgotKyJceDE3XHhlNVx4 YjZceGJhXHg2N1x4NTVceGUzXHhlOFx4MDVceDhiXHhiOFx4ZTJceDUzXHhkNlx4OGUiCi0rIlx4 ZWZceDJjXHhlN1x4NGZceDRhXHhmN1x4NGVceDI2XHg4ZFx4ODVceDBiXHgzZlx4ZWNceGMzXHgx YyIKLSsiXHhkNFx4ZWJceGVjXHg2YVx4YzhceDcyXHgyYVx4MjVceDdkXHhmZFx4YTZceDc3XHg5 Nlx4ZjBceDFlIgotKyJceGNkXHgyOFx4NTdceGY4XHgzN1x4MzBceDc1XHg2Ylx4YmRceGQ0XHg3 Ylx4MGNceDg3XHhjNVx4NmMiCi0rIlx4ODdceDQwXHhhNVx4YmJceDI3XHgyY1x4NzhceGM5XHg3 NFx4NWFceDU0XHg1Ylx4MGJceDMwXHg2ZiIKLSsiXHg0NFx4NGFceGZhXHg3MVx4ZTRceDIxXHg2 MVx4NjZceGY5XHhlZVx4NjVceGRlXHg3Y1x4MDRceGQ3IgotKyJceGZkXHhhOVx4MTVceDViXHg3 Zlx4ZTJceDdhXHhiYVx4NjlceDg2XHg3Mlx4YTZceDA2XHg4ZFx4OWIiCi0rIlx4OTBceDU1XHg2 MFx4OWVceDRjXHg1ZFx4YTlceGI2XHg1NSI7Ci0rCi0gCi0gICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGRtcDFbXSA9Ci0tIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhF NFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCi0tIlx4RUJceDA3XHhERFx4RENceDAxXHg4 M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0UiCi0tIlx4RDlceDQ5XHgw OVx4NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCi0t Ilx4MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3 XHhDOVx4ODEiOwotKyJceDdhXHhkNlx4MTJceGQwXHgwZVx4ZWNceDkxXHhhOVx4ODVceDhiXHhm OFx4NTBceGYwXHgxMVx4MmUiCi0rIlx4MDBceDExXHgzMlx4NDBceDYwXHg2Nlx4MWZceDExXHhl ZVx4YzJceDc1XHgyN1x4NjVceDRiXHgxNiIKLSsiXHg2N1x4MTZceDk1XHhkMlx4MTRceGMzXHgx ZFx4YjNceDQ4XHgxZlx4YjdceGU0XHgwYlx4MmJceDc0IgotKyJceGMzXHhkYlx4NTBceDI3XHhm OVx4ODVceDNhXHhmYVx4YTlceDA4XHgyM1x4YzFceDY1XHgzZFx4MzQiCi0rIlx4M2FceGM4XHg1 Nlx4N2FceDY1XHg0NVx4MzZceDZlXHhhZVx4MmFceGNlXHg5Zlx4NDNceDQzXHhkNyIKLSsiXHgx MFx4ZTlceDllXHgxOFx4ZjRceGE0XHgzNVx4ZGFceDhhXHg2Ylx4YjBceDNmXHhkZFx4NTNceGUz IgotKyJceGE4XHhjNVx4NGVceDc5XHg5ZFx4MWZceDUxXHg4Y1x4YTJceGNhXHg2Nlx4M2NceDZh XHgyYVx4ZmYiCi0rIlx4OGVceGQyXHhmM1x4YjdceGNiXHg4Mlx4ZGFceGRlXHgyY1x4ZTZceGQy XHg4Y1x4YjNceGFkXHhiNiIKLSsiXHg0Y1x4OTVceDU1XHg3Nlx4YmRceGM5XHhjOFx4ZDEiOwot KwotIAotICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQotLSJceDQ3XHgx RVx4MDJceDkwXHhGRlx4MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5 IgotLSJceDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRD XHgzMVx4NDZceEE3IgotLSJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMx XHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgotLSJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3 XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKLS0gICAgCi0rIlx4MDBceDgz XHgyM1x4MWRceGJiXHgxMVx4NDJceDE3XHgyYlx4MjVceDVhXHgyY1x4MDNceGU2XHg3NSIKLSsi XHhjMVx4MThceGE4XHhjOVx4MGJceDk2XHhiZlx4YmFceGM0XHg5Mlx4OTFceDgwXHhhNVx4MjJc eDJmIgotKyJceGJhXHg5MVx4OTBceDM2XHgwMVx4NTZceDE1XHgwMFx4MmNceDc0XHhhMlx4OTdc eGY3XHgxNVx4YTEiCi0rIlx4NDlceGRmXHgzMlx4MzVceGQyXHhkZFx4MGNceDkxXHhhNlx4Zjhc eGU3XHhiZVx4ODFceDM2XHg5YiIKLSsiXHgwM1x4ZGNceDZiXHgzYlx4ZDhceDVkXHg3OVx4NTdc eGUwXHhlNlx4NGZceDQ5XHhkZlx4NGNceDVjIgotKyJceDBlXHhlNVx4MjFceDQxXHg5NVx4ZmRc eGFkXHhmZlx4OWFceDNlXHhhMFx4ZjlceDBmXHg1OVx4OWUiCi0rIlx4NmFceGE3XHg3Ylx4NzFc eGE3XHgyNFx4OWFceDM2XHg1Mlx4YWVceDk3XHgyMFx4YzFceDVlXHg3OCIKLSsiXHhkOVx4NDdc eDhiXHgxZVx4NjdceGYyXHhhZlx4OThceGU2XHgyZFx4ZWZceDEwXHhkN1x4ZjFceGFiIgotKyJc eDQ5XHhlZVx4ZTVceDRiXHg3ZVx4YWVceDFmXHgxZFx4NjEiOwotKwotKwotICAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQotLSJceDAwXHhCMFx4NkNceDRGXHhEQVx4QkJc eDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhBRVx4OTRceDIzIgotLSJceEIzXHg4MFx4RjJc eDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgwN1x4N0ZceENEXHgzOVx4RTJceDExIgotLSJc eDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4 MkJceDRFIgotLSJceDlFXHgyRVx4MEZceDk2XHg1Nlx4RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4 RkJceDI1XHg3OVx4ODBceDM5IgotLSJceEY3IjsKLSsiXHgyM1x4OTZceGMxXHg5MVx4MTdceDVl XHgwYVx4ODNceGQyXHhkY1x4N2JceDY5XHhiMlx4NTlceDFkIgotKyJceDMzXHg1OFx4NTJceDNm XHgxOFx4YzdceDA5XHg1MFx4MWNceGI5XHhhMVx4YmJceDRjXHhhMlx4MzgiCi0rIlx4NDBceDRj XHg5YVx4OGVceGZlXHg5Y1x4OTBceDkyXHhkMFx4NzFceDlmXHg4OVx4OTlceDUwXHg5MSIKLSsi XHgxZlx4MzRceDhiXHg3NFx4NTNceDExXHgxMVx4NGFceDcwXHhlMlx4ZjdceDMwXHhkOFx4OGNc eDgwIgotKyJceGUxXHhjY1x4OWZceGYxXHg2M1x4MTdceDFhXHg3ZFx4NjdceDI5XHg0Y1x4Y2Jc eDRlXHg3NFx4N2IiCi0rIlx4ZTBceDNlXHg5ZVx4MmZceGY0XHg2N1x4OGZceGVjXHhiOVx4NWNc eDAwXHgxZVx4N2VceGEyXHg3YiIKLSsiXHg5Mlx4YzlceDZmXHg0Y1x4ZTRceDBlXHhmOVx4NDhc eDYzXHhjZFx4NTBceDIyXHg1ZFx4YmZceGI2IgotKyJceDlkXHgwMVx4MzNceDZhXHhmNFx4NTBc eGJlXHg4Nlx4OThceDRmXHhjYVx4M2ZceDNhXHhmYVx4Y2YiCi0rIlx4MDdceDQwXHhjNFx4YWFc eGFkXHhhZVx4YmVceGJmIjsKLSAKLSAgICAga2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihu KS0xLCBrZXktPm4pOwotICAgICBpZiAoY29ycnVwdF9yc2EpCi0tCUJOX3NldF9iaXQoa2V5LT5u LCAxMDI0KTsKLSsJQk5fc2V0X2JpdChrZXktPm4sIDIwNDgpOwotICAgICBrZXktPmUgPSBCTl9i aW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ZSk7Ci0gICAgIGtleS0+ZCA9IEJOX2JpbjJibihk LCBzaXplb2YoZCktMSwga2V5LT5kKTsKLSAgICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVv ZihwKS0xLCBrZXktPnApOwotQEAgLTE0NSwyMDEgKzE4OSwzOTEgQEAgdm9pZCBGSVBTX2NvcnJ1 cHRfcnNhKCkKLSBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNT TCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNBIEtBVCI7Ci0gCi0gc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMVtdID0gewotLSAgMHgyRCwgMHhBRiwgMHg2RSwgMHhD MiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLS0gIDB4 MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIs IDB4OTAsIDB4QkIsCi0tICAweEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJC LCAweEU4LCAweDBDLCAweEI3LCAweEY4LCAweEQzLAotLSAgMHhEMSwgMHhERiwgMHhFNywgMHhC RSwgMHg4MCwgMHgwNSwgMHhDMywgMHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKLS0gIDB4 N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAs IDB4RDAsIDB4QTcsCi0tICAweDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3 LCAweEUzLCAweDVFLCAweDNGLCAweDlCLCAweEY1LAotLSAgMHhCNiwgMHhGMywgMHhGMiwgMHg1 RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLS0gIDB4 MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4Rjgs IDB4QjcsIDB4MzEsCi0tICAweEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0 LCAweEU2LCAweERCLCAweDlGLCAweEJBLCAweEU4LAotLSAgMHgyMywgMHhCNSwgMHg3RiwgMHhE QywgMHgwOCwgMHhFQSwgMHhENSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLS0gIDB4 MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSsgMHhDMiwgMHg4 MCwgMHg4MiwgMHg1NiwgMHhEOCwgMHhBNywgMHhCMiwgMHg5QywgMHhGNSwgMHhENiwgMHgzQywg MHhFMywKLSsgMHhCRiwgMHhFOSwgMHgzQSwgMHg1MywgMHg0MCwgMHhBRSwgMHhGMiwgMHhBOSwg MHg2QSwgMHgzOSwgMHg0OSwgMHg1QiwKLSsgMHgwNSwgMHg3RiwgMHg2NywgMHgzOCwgMHgyRSwg MHgxRCwgMHhFMSwgMHg5MywgMHgyMiwgMHg2NSwgMHg3OSwgMHg4NCwKLSsgMHg2OCwgMHhGQSwg MHhEOCwgMHhBRiwgMHhBMSwgMHg5OCwgMHg2MSwgMHg2RiwgMHg0NCwgMHgyNywgMHhBNiwgMHg4 QiwKLSsgMHhDRiwgMHgwRSwgMHgxMywgMHhBOSwgMHhDRSwgMHhENywgMHg2QywgMHhEMiwgMHgz OCwgMHhCNSwgMHgxNiwgMHhCOSwKLSsgMHg2NiwgMHg5NCwgMHg0OCwgMHhERSwgMHg5RSwgMHgx OSwgMHgzRCwgMHg2RiwgMHhCMywgMHhBMSwgMHg5QSwgMHgxOSwKLSsgMHhERiwgMHhGQiwgMHhB QiwgMHhBNSwgMHg5RiwgMHgzOCwgMHhEQSwgMHhDOSwgMHgyMSwgMHg4RiwgMHhDRSwgMHg5OCwK LSsgMHgwMSwgMHgzQSwgMHhDOCwgMHhFMCwgMHhERiwgMHhEQSwgMHhGQywgMHhGMCwgMHhBNiwg MHg4NiwgMHgyOSwgMHhCNSwKLSsgMHg3RiwgMHg2MSwgMHhGQiwgMHhCQSwgMHhDNSwgMHg0OSwg MHhCMiwgMHg3QywgMHg2QSwgMHgyNiwgMHg4MiwgMHhDNCwKLSsgMHg4RiwgMHhBQSwgMHg1Qiwg MHgxMCwgMHhENSwgMHhFRSwgMHhBMCwgMHg1NSwgMHg0MiwgMHhFRiwgMHgzMiwgMHg1QSwKLSsg MHgzRiwgMHg1NSwgMHhCMywgMHgyQywgMHgyMiwgMHhFOSwgMHg2NSwgMHhEQSwgMHg4RCwgMHgw QSwgMHhCOSwgMHg3MCwKLSsgMHg0MywgMHhDQywgMHgzRiwgMHg2NCwgMHg5QywgMHhCNSwgMHg2 NSwgMHg0OSwgMHhCRCwgMHg3RiwgMHgzNSwgMHhDMSwKLSsgMHgyMCwgMHg4NSwgMHgyNCwgMHhG RSwgMHhBQSwgMHg2QiwgMHgzNywgMHgwNCwgMHhBMSwgMHgwRSwgMHg5RCwgMHg1QywKLSsgMHhC QSwgMHg3RiwgMHgxNCwgMHg2OSwgMHhDNSwgMHg5MywgMHhCMiwgMHgzMywgMHhDMiwgMHhDMCwg MHhDNywgMHhERiwKLSsgMHg3RSwgMHg5RSwgMHhBNCwgMHhCMCwgMHhBMCwgMHg2NCwgMHhEMiwg MHhBQywgMHhGQywgMHhGRCwgMHhGRCwgMHg5OSwKLSsgMHg4RiwgMHg2QSwgMHg0MCwgMHgyNiwg MHhDMSwgMHgyRSwgMHg0RSwgMHg4QiwgMHgzMywgMHhCRSwgMHhGMSwgMHg0NSwKLSsgMHg1OSwg MHg4RiwgMHgzMywgMHg0MCwgMHgxRCwgMHgyQSwgMHhEMiwgMHhGNywgMHg1MCwgMHg4MywgMHg4 OSwgMHhDRiwKLSsgMHg5NCwgMHhDNiwgMHhGOCwgMHgzNiwgMHhGMCwgMHg4NCwgMHgwQiwgMHg4 NSwgMHhBNSwgMHgwMiwgMHhBOSwgMHgwRiwKLSsgMHg0MSwgMHg3QSwgMHg3NywgMHhBMywgMHgy RiwgMHg0NywgMHgxRSwgMHgxRCwgMHhFQywgMHhFNiwgMHhEMywgMHgwMSwKLSsgMHgxRSwgMHg2 RiwgMHg3QSwgMHg5NiwgMHg1MCwgMHgzNywgMHgzNywgMHg0QiwgMHgyNywgMHg1MiwgMHgwQiwg MHhEQywKLSsgMHhEQiwgMHhDNywgMHhBOSwgMHgzMSwgMHhCMiwgMHg0MCwgMHhFRSwgMHg2MCwg MHg0MSwgMHgyNiwgMHg2QSwgMHgwNSwKLSsgMHhDRSwgMHgwOCwgMHgxRCwgMHg4OQotIH07Ci0g Ci0gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7Ci0t ICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAw eEM1LCAweDU4LCAweEE3LAotLSAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwg MHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKLS0gIDB4QjEsIDB4OUUsIDB4RDIs IDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCi0t ICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAw eDU0LCAweDFDLCAweDg5LAotLSAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwg MHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKLS0gIDB4QjEsIDB4RTYsIDB4N0Is IDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCi0t ICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAw eDYyLCAweEQxLCAweEI1LAotLSAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwg MHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKLS0gIDB4NTgsIDB4RDIsIDB4NzQs IDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCi0t ICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAw eDk1LCAweEMwLCAweDAwLAotLSAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwg MHhFRSwgMHhDMAotKyAweEI0LCAweDAxLCAweDkzLCAweDE2LCAweDA1LCAweEY2LCAweEVCLCAw eEUyLCAweEE0LCAweEVCLCAweDQ4LCAweEFBLAotKyAweDAwLCAweEY0LCAweEExLCAweDk5LCAw eDBBLCAweEI0LCAweEI2LCAweDYzLCAweEU5LCAweDY4LCAweENBLCAweEIzLAotKyAweDEzLCAw eEQ3LCAweDY2LCAweDZBLCAweENELCAweENCLCAweDMzLCAweDlGLCAweEU1LCAweDg0LCAweEUy LCAweEMzLAotKyAweDBCLCAweDUzLCAweEU1LCAweDhCLCAweDk2LCAweDRCLCAweERCLCAweDJE LCAweDgwLCAweEE0LCAweDFELCAweEUzLAotKyAweDgxLCAweERDLCAweDUyLCAweDk5LCAweEJB LCAweDlCLCAweDZBLCAweDlELCAweDQ4LCAweDFGLCAweDczLCAweEY3LAotKyAweEFDLCAweDA5 LCAweDEzLCAweEExLCAweDE2LCAweDJDLCAweDYwLCAweEZCLCAweEJDLCAweDI1LCAweEY3LCAw eDUzLAotKyAweEQxLCAweDA0LCAweDVBLCAweDNGLCAweDk1LCAweDA5LCAweDVFLCAweEU1LCAw eEEyLCAweDdELCAweEZDLCAweDJBLAotKyAweDUxLCAweDFELCAweDIxLCAweENFLCAweDJCLCAw eDRFLCAweDFCLCAweEI4LCAweENCLCAweERELCAweDI0LCAweEVFLAotKyAweDk5LCAweDFELCAw eDM3LCAweERDLCAweEVELCAweDVGLCAweDJGLCAweDQ4LCAweDVFLCAweDMzLCAweDk0LCAweDA2 LAotKyAweDE5LCAweENELCAweDVBLCAweDI2LCAweDg1LCAweDc3LCAweDlELCAweEFGLCAweDg2 LCAweDk3LCAweEM5LCAweDA4LAotKyAweEQ1LCAweDgxLCAweDBFLCAweEI4LCAweDlGLCAweEI2 LCAweEFGLCAweDIwLCAweDcyLCAweERDLCAweDEzLCAweDRELAotKyAweDdBLCAweEU0LCAweDVD LCAweDgxLCAweERFLCAweEMwLCAweDNELCAweDE5LCAweDlDLCAweDMzLCAweDExLCAweDA3LAot KyAweEQ1LCAweEE5LCAweDUxLCAweDY3LCAweENELCAweEZELCAweDM3LCAweDYxLCAweDE0LCAw eDlGLCAweEU3LCAweDcwLAotKyAweDE4LCAweDMyLCAweEMzLCAweDM0LCAweDU0LCAweDBELCAw eDRGLCAweEI0LCAweEFFLCAweDlGLCAweEVDLCAweDY0LAotKyAweEQ4LCAweEIyLCAweDE2LCAw eEE0LCAweEIyLCAweDk5LCAweDkyLCAweENCLCAweDdGLCAweDFGLCAweDA2LCAweDE3LAotKyAw eDVGLCAweEExLCAweDA3LCAweDY4LCAweEFFLCAweEE3LCAweDJELCAweDAzLCAweDkxLCAweDJB LCAweDlELCAweDY5LAotKyAweEMyLCAweDlELCAweDkwLCAweEY3LCAweEY5LCAweDY2LCAweDVE LCAweDEzLCAweEI3LCAweDdGLCAweEQzLCAweDk3LAotKyAweDQ1LCAweDk3LCAweDQzLCAweEQ4 LCAweENFLCAweDNDLCAweEYyLCAweDk4LCAweDk4LCAweERELCAweEUyLCAweDJELAotKyAweENG LCAweEExLCAweEM0LCAweDI1LCAweDQ2LCAweDJFLCAweEQyLCAweEU1LCAweDVGLCAweEM2LCAw eDAxLCAweEM1LAotKyAweDRGLCAweDQyLCAweDJCLCAweERFLCAweDBGLCAweEVBLCAweDRBLCAw eDRGLCAweEMzLCAweDVCLCAweERGLCAweDlCLAotKyAweDVELCAweDMwLCAweDE4LCAweDkzLCAw eEQwLCAweERFLCAweEM1LCAweDA5LCAweEFBLCAweDU3LCAweDU3LCAweEJELAotKyAweDJELCAw eDg0LCAweDAzLCAweEI3Ci0gfTsKLSAKLSBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1BTU19TSEEyNTZbXSA9IHsKLS0gIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4 NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCi0tICAweDAwLCAweDk3LCAw eEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhG LAotLSAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4 RCwgMHg3RCwgMHg3MywgMHgyOCwKLS0gIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4 MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCi0tICAweDdELCAweDJFLCAw eDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1 LAotLSAgMHhBQiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgx RCwgMHg2RCwgMHgyNiwgMHhCQSwKLS0gIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4 RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCi0tICAweDBCLCAweDQ3LCAw eDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlG LAotLSAgMHgyMSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0 NywgMHgxMiwgMHhFNCwgMHg2RCwKLS0gIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4 MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCi0tICAweDcyLCAweEY0LCAw eEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJELCAweDFDCi0rIDB4MzgsIDB4REEsIDB4OTksIDB4 NTEsIDB4MjYsIDB4MzgsIDB4QzYsIDB4N0YsIDB4QzQsIDB4ODEsIDB4NTcsIDB4MTksCi0rIDB4 MzUsIDB4QzYsIDB4RjYsIDB4MUUsIDB4OTAsIDB4NDcsIDB4MjAsIDB4NTUsIDB4NDcsIDB4NTYs IDB4MjYsIDB4RTksCi0rIDB4RjIsIDB4QTgsIDB4MzksIDB4NkMsIDB4RDUsIDB4Q0QsIDB4Q0Is IDB4NTUsIDB4RkMsIDB4MEMsIDB4QzUsIDB4Q0IsCi0rIDB4RjcsIDB4NDAsIDB4MTcsIDB4M0Is IDB4Q0YsIDB4RTQsIDB4MDUsIDB4MDMsIDB4M0IsIDB4QTAsIDB4QjIsIDB4QzksCi0rIDB4MEQs IDB4NUUsIDB4NDgsIDB4M0EsIDB4RTksIDB4QUQsIDB4MjgsIDB4NzEsIDB4N0QsIDB4OEYsIDB4 ODksIDB4MTYsCi0rIDB4NTksIDB4OTMsIDB4MzUsIDB4REMsIDB4NEQsIDB4N0IsIDB4REYsIDB4 ODQsIDB4RTQsIDB4NjgsIDB4QUEsIDB4MzMsCi0rIDB4QUEsIDB4REMsIDB4NjYsIDB4NTAsIDB4 QzgsIDB4QTksIDB4MzIsIDB4MTIsIDB4REMsIDB4QzYsIDB4OTAsIDB4NDksCi0rIDB4MEIsIDB4 NzUsIDB4RkYsIDB4OUIsIDB4OTUsIDB4MDAsIDB4OUEsIDB4OTAsIDB4RTAsIDB4RDQsIDB4MEUs IDB4NjcsCi0rIDB4QUIsIDB4M0MsIDB4NDcsIDB4MzYsIDB4QzUsIDB4MkUsIDB4MUMsIDB4NDYs IDB4RjAsIDB4MkQsIDB4RDMsIDB4OEIsCi0rIDB4NDIsIDB4MDgsIDB4REUsIDB4MEQsIDB4QjYs IDB4MkMsIDB4ODYsIDB4QjAsIDB4MzUsIDB4NzEsIDB4MTgsIDB4NkIsCi0rIDB4ODksIDB4Njcs IDB4QzAsIDB4MDUsIDB4QUQsIDB4RjQsIDB4MUQsIDB4NjIsIDB4NEUsIDB4NzUsIDB4RUMsIDB4 RDYsCi0rIDB4QzIsIDB4REIsIDB4MDcsIDB4QjAsIDB4QjYsIDB4OEQsIDB4MTUsIDB4QUQsIDB4 Q0QsIDB4QkYsIDB4RjUsIDB4NjAsCi0rIDB4NzYsIDB4QUUsIDB4NDgsIDB4QjgsIDB4NzcsIDB4 N0YsIDB4QzUsIDB4MDEsIDB4RDksIDB4MjksIDB4QkIsIDB4RDYsCi0rIDB4MTcsIDB4QTIsIDB4 MjAsIDB4NUEsIDB4QzAsIDB4NEEsIDB4M0IsIDB4MzQsIDB4QzgsIDB4QjksIDB4MzksIDB4Q0Ys Ci0rIDB4MDYsIDB4ODksIDB4OTUsIDB4NkYsIDB4QzcsIDB4Q0EsIDB4QzQsIDB4RTQsIDB4NDMs IDB4REYsIDB4NUEsIDB4MjMsCi0rIDB4RTIsIDB4ODksIDB4QTMsIDB4MzgsIDB4NzgsIDB4MzEs IDB4MzgsIDB4QzYsIDB4QTQsIDB4NkYsIDB4NUYsIDB4NzMsCi0rIDB4NUEsIDB4RTUsIDB4OUUs IDB4MDksIDB4RTcsIDB4NkYsIDB4RDQsIDB4RjgsIDB4M0UsIDB4QjcsIDB4QjAsIDB4NTYsCi0r IDB4OUEsIDB4RjMsIDB4NjUsIDB4RjAsIDB4QzIsIDB4QTYsIDB4OEEsIDB4MDgsIDB4QkEsIDB4 NDQsIDB4QUMsIDB4OTcsCi0rIDB4REUsIDB4QjQsIDB4MTYsIDB4ODMsIDB4REYsIDB4RTMsIDB4 RUUsIDB4NzEsIDB4RkEsIDB4RjksIDB4NTEsIDB4NTAsCi0rIDB4MTQsIDB4REMsIDB4RkQsIDB4 NkEsIDB4ODIsIDB4MjAsIDB4NjgsIDB4NjQsIDB4N0QsIDB4NEUsIDB4ODIsIDB4NjgsCi0rIDB4 RDcsIDB4NDUsIDB4RkEsIDB4NkEsIDB4RTQsIDB4RTUsIDB4MjksIDB4M0EsIDB4NzAsIDB4RkIs IDB4RTQsIDB4NjIsCi0rIDB4MkIsIDB4MzEsIDB4QjksIDB4N0QKLSB9OwotIAotIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtdID0gewotLSAgMHg0MCwgMHhG QiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwg MHhGMiwKLS0gIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMs IDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0tICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4 LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAweENELAotLSAgMHhBQSwgMHgy NSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhEOSwgMHgyRiwgMHg3OCwgMHgyMywg MHg3RiwKLS0gIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYs IDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0tICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2 LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRGLCAweEZCLAotLSAgMHg5MSwgMHhD QSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwg MHgyRiwKLS0gIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEs IDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0tICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYw LCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAweDZGLAotLSAgMHg0OCwgMHhG NiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwg MHg1NSwKLS0gIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEK LSsgMHg5OSwgMHgwMiwgMHhDOSwgMHgxRSwgMHgzMSwgMHg4MiwgMHhCNCwgMHhFNiwgMHgxQiwg MHgzMiwgMHhDRSwgMHg1RCwKLSsgMHg0MSwgMHgxRCwgMHgwMCwgMHgyRiwgMHgwNCwgMHg4Qiwg MHhCRCwgMHgzNywgMHg3OSwgMHhDRiwgMHg3NywgMHgwMywKLSsgMHgwNSwgMHg2QSwgMHgyMSwg MHhDNywgMHg4RCwgMHgyNCwgMHg2MCwgMHg0OSwgMHgzOSwgMHg1OCwgMHhDNSwgMHgyNywKLSsg MHg4RiwgMHhDNSwgMHg5NywgMHg0QSwgMHhCMiwgMHhFMSwgMHhENCwgMHgzNiwgMHg1NywgMHhC RCwgMHg0MywgMHhDQywKLSsgMHg3QiwgMHhDRSwgMHhGMiwgMHhBNSwgMHgzMCwgMHhGOCwgMHg3 MiwgMHgxNCwgMHhCQiwgMHhEMCwgMHg5RiwgMHhDMSwKLSsgMHg0OSwgMHhDOCwgMHgxQywgMHhB RiwgMHhDRCwgMHg5NSwgMHg3OCwgMHg3MiwgMHgyNSwgMHhGOSwgMHg0NSwgMHhDNiwKLSsgMHg1 QiwgMHg2MiwgMHg1RSwgMHgwMSwgMHhENywgMHg0MCwgMHg1RSwgMHhDOCwgMHhDQSwgMHgwQSwg MHhGMywgMHhCQSwKLSsgMHgwOCwgMHgwNywgMHg4OCwgMHhDQSwgMHg0OSwgMHgzNiwgMHg4NCwg MHg3RCwgMHhGNiwgMHhGQywgMHg1QSwgMHhEQiwKLSsgMHhGQywgMHg1MCwgMHhEMywgMHhFQiwg MHgzRCwgMHg4MywgMHhCMCwgMHhGNSwgMHg5NCwgMHg1RSwgMHg4OCwgMHhDMywKLSsgMHg4Miwg MHhDRCwgMHg1MywgMHg0MCwgMHg5NiwgMHgxOCwgMHg2QiwgMHg0QSwgMHg2QywgMHg5QywgMHhG RSwgMHhFNSwKLSsgMHgzQiwgMHg3NSwgMHhGOSwgMHhFQiwgMHhBNSwgMHg3NywgMHgxMSwgMHhF RiwgMHg4OCwgMHgxQywgMHgyNSwgMHg3MCwKLSsgMHg3RCwgMHg4OCwgMHg1RCwgMHhDMywgMHhD QSwgMHhFMSwgMHg0OSwgMHgxNCwgMHg5MCwgMHhBRCwgMHhGMiwgMHg1RSwKLSsgMHg0OSwgMHhE NywgMHg5OSwgMHhBNSwgMHg3QiwgMHg3NywgMHgzQiwgMHg4RSwgMHhCOCwgMHhEQiwgMHhGMSwg MHg0QywKLSsgMHhENiwgMHg5QSwgMHhEQywgMHhFNSwgMHg3QSwgMHgxQywgMHhFMSwgMHhDRSwg MHg5RCwgMHhGMSwgMHhGMywgMHhBMCwKLSsgMHgwQSwgMHgzNSwgMHg1MiwgMHg5RCwgMHhCOSwg MHg0NiwgMHg5NCwgMHg4MiwgMHgwRiwgMHhGNywgMHhCMiwgMHg2MiwKLSsgMHg1MSwgMHg3MCwg MHg3NSwgMHhEMiwgMHgzNywgMHg5NiwgMHg2NywgMHgyRiwgMHhEMCwgMHgyMiwgMHhEOCwgMHgw NywKLSsgMHg4RCwgMHg2OSwgMHg5RSwgMHg2RCwgMHgwQiwgMHg0MCwgMHg0RiwgMHg3MCwgMHhF QywgMHgwQiwgMHhDQSwgMHg4OCwKLSsgMHg4MCwgMHg4RCwgMHg5QSwgMHhGNCwgMHhGOSwgMHgx OCwgMHg1MCwgMHgyNywgMHgwOCwgMHhGQSwgMHhDQywgMHhDNywKLSsgMHgzRiwgMHhFNCwgMHg4 NCwgMHg4MywgMHhBMSwgMHhCNiwgMHgxRCwgMHgyMywgMHgzNCwgMHhGRSwgMHg0OCwgMHhFNSwK LSsgMHhFMywgMHhBRSwgMHg0RCwgMHg5OCwgMHhCQywgMHhBNiwgMHg4QSwgMHg5RiwgMHhGRCwg MHg0RCwgMHhEQiwgMHg5RCwKLSsgMHhGNywgMHhFQiwgMHg0RSwgMHhCNiwgMHg2RiwgMHgyNSwg MHhFQSwgMHg3QSwgMHhFOSwgMHg4NSwgMHhCMiwgMHhFRiwKLSsgMHg5MCwgMHhEMiwgMHhBNiwg MHgyQgotIH07Ci0gCi0gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hB NTEyW10gPSB7Ci0tICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAw eEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhDLAotLSAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwg MHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKLS0gIDB4OUIs IDB4NTQsIDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4 OUUsIDB4REQsCi0tICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAw eDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5LAotLSAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwg MHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKLS0gIDB4N0Ms IDB4RTMsIDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4 NTUsIDB4NjEsCi0tICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAw eDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEzLAotLSAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwg MHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKLS0gIDB4MkQs IDB4NjAsIDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4 QTgsIDB4RkUsCi0tICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAw eEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4LAotLSAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwg MHgyNiwgMHhDOSwgMHgxNCwgMHg4QgotKyAweDNGLCAweDgzLCAweDQzLCAweDc4LCAweDI1LCAw eEJFLCAweDgxLCAweEIyLCAweDZFLCAweDc4LCAweDExLCAweDMyLAotKyAweEQwLCAweDg4LCAw eDA1LCAweDUzLCAweDk1LCAweEVELCAweDgxLCAweDEyLCAweENFLCAweDUwLCAweEQ5LCAweDA2 LAotKyAweDQyLCAweDg5LCAweEEwLCAweDU1LCAweDdBLCAweDA1LCAweDEzLCAweDk0LCAweDM1 LCAweDlCLCAweENBLCAweDVELAotKyAweENCLCAweEIyLCAweDMyLCAweEUxLCAweDA0LCAweDk5 LCAweEVDLCAweEU3LCAweEE2LCAweDY5LCAweDRELCAweDJCLAotKyAweEMxLCAweDU3LCAweDEz LCAweDQ4LCAweDBELCAweDZCLCAweDRELCAweDgzLCAweDI4LCAweDA2LCAweDc5LCAweDlELAot KyAweEI0LCAweDcwLCAweENFLCAweEMwLCAweEZDLCAweDNCLCAweDY5LCAweEIzLCAweDkxLCAw eDU0LCAweEE5LCAweDQ0LAotKyAweDJFLCAweERBLCAweDRBLCAweEM1LCAweEMyLCAweDk5LCAw eEYwLCAweERFLCAweENBLCAweDc3LCAweDk5LCAweDZCLAotKyAweDBDLCAweDc5LCAweEU1LCAw eDI5LCAweDc0LCAweDgzLCAweDY5LCAweEVBLCAweEI4LCAweDcyLCAweDMwLCAweDNELAotKyAw eDdBLCAweDMwLCAweEUxLCAweDAzLCAweDdCLCAweDA5LCAweEU2LCAweDExLCAweEMwLCAweERD LCAweEZGLCAweEZELAotKyAweEJELCAweEVDLCAweDlDLCAweENDLCAweDQ2LCAweDdCLCAweDRD LCAweDRDLCAweDU5LCAweEJFLCAweDgyLCAweDdDLAotKyAweEY1LCAweDYwLCAweDVBLCAweEMz LCAweEU4LCAweEE4LCAweDhBLCAweDM4LCAweDlFLCAweDAxLCAweDU3LCAweEYxLAotKyAweDc5 LCAweDNBLCAweDdDLCAweEEzLCAweDlGLCAweDEyLCAweDFBLCAweDRGLCAweDJFLCAweEEyLCAw eEU1LCAweDBBLAotKyAweEFCLCAweEMwLCAweEY0LCAweEE1LCAweEUzLCAweDVGLCAweDg5LCAw eDFDLCAweDhGLCAweEE0LCAweDVFLCAweENFLAotKyAweDBELCAweDkxLCAweDA1LCAweDFCLCAw eDE3LCAweDYyLCAweDQ4LCAweEZFLCAweEE1LCAweDRDLCAweEVGLCAweDJELAotKyAweDI4LCAw eEYxLCAweDVFLCAweEU2LCAweEQxLCAweDMwLCAweDg5LCAweDBBLCAweEFELCAweDE4LCAweEFG LCAweDZGLAotKyAweDA0LCAweDA5LCAweDM2LCAweDlBLCAweEZGLCAweENBLCAweEExLCAweEE3 LCAweDA1LCAweDdGLCAweEQ0LCAweEJGLAotKyAweDNBLCAweEI1LCAweDQyLCAweDZELCAweEU5 LCAweDA3LCAweDI5LCAweDY1LCAweDhCLCAweEFELCAweDRELCAweDBGLAotKyAweDIyLCAweEUx LCAweDU5LCAweDQzLCAweDY4LCAweDg3LCAweEE4LCAweDhCLCAweEJDLCAweDY5LCAweEExLCAw eDk0LAotKyAweDIyLCAweDNFLCAweDhBLCAweDQ5LCAweEU4LCAweEEzLCAweDZGLCAweEMyLCAw eDkzLCAweDU4LCAweEU3LCAweEFFLAotKyAweEM5LCAweDFGLCAweENGLCAweDYxLCAweDkzLCAw eEZDLCAweEMxLCAweEY2LCAweEYzLCAweDI3LCAweDdGLCAweDBBLAotKyAweDkwLCAweEUwLCAw eDY1LCAweDMyLCAweDU3LCAweDQ3LCAweEUyLCAweEVELCAweDA4LCAweDU5LCAweEE2LCAweEYw LAotKyAweDE3LCAweDJDLCAweDEzLCAweEUwCi0gfTsKLSAKLSBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKLS0gIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4 RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCi0tICAweDRBLCAw eEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhE LCAweDlCLAotLSAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1 MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKLS0gIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4 RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4RjgsCi0tICAweDgwLCAw eEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhC LCAweEExLAotLSAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgy NCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKLS0gIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4 OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCi0tICAweEJDLCAw eDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1 LCAweDVGLAotLSAgMHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgy MSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKLS0gIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4 RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4OTUsCi0tICAweERGLCAw eEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0Ci0rIDB4M0IsIDB4NjAsIDB4 NEIsIDB4RkMsIDB4NTQsIDB4MjgsIDB4MjMsIDB4RTYsIDB4MkYsIDB4MDUsIDB4MDQsIDB4QkEs Ci0rIDB4OUQsIDB4RTQsIDB4M0MsIDB4QjgsIDB4NUIsIDB4NjAsIDB4NUMsIDB4Q0QsIDB4OUQs IDB4RUEsIDB4QzMsIDB4NEMsCi0rIDB4QzIsIDB4MzMsIDB4RTYsIDB4QzYsIDB4MjEsIDB4NDgs IDB4NzYsIDB4RUMsIDB4QjIsIDB4RjUsIDB4MTEsIDB4REUsCi0rIDB4NDQsIDB4QjQsIDB4QUYs IDB4MTYsIDB4MTEsIDB4QzMsIDB4MTgsIDB4MTYsIDB4QjMsIDB4NjksIDB4QkIsIDB4OTQsCi0r IDB4RUQsIDB4RTgsIDB4QjMsIDB4OUUsIDB4QjEsIDB4NDMsIDB4OEUsIDB4Q0UsIDB4QjQsIDB4 MzQsIDB4OUIsIDB4MDgsCi0rIDB4MjIsIDB4QUYsIDB4MzEsIDB4NzMsIDB4QjUsIDB4RkEsIDB4 MTEsIDB4N0UsIDB4OEYsIDB4MTMsIDB4NTIsIDB4RUMsCi0rIDB4QzksIDB4MDMsIDB4RUUsIDB4 MEQsIDB4MkIsIDB4OTEsIDB4MzIsIDB4RjIsIDB4OEUsIDB4REYsIDB4MDIsIDB4RTAsCi0rIDB4 MEEsIDB4NDcsIDB4RDIsIDB4MEEsIDB4NTEsIDB4MDAsIDB4MUEsIDB4MzAsIDB4NkYsIDB4MEMs IDB4QjMsIDB4NTQsCi0rIDB4NjQsIDB4MjAsIDB4OTAsIDB4MEMsIDB4MDEsIDB4QkUsIDB4QzAs IDB4NDIsIDB4OEMsIDB4NUQsIDB4MTgsIDB4NkYsCi0rIDB4MzIsIDB4NzUsIDB4NDUsIDB4N0Is IDB4MUMsIDB4MDQsIDB4QTIsIDB4OUYsIDB4ODQsIDB4RDcsIDB4RjUsIDB4M0EsCi0rIDB4OTUs IDB4RDQsIDB4RTgsIDB4OEQsIDB4RUMsIDB4OTksIDB4RUYsIDB4MTgsIDB4NUUsIDB4NjQsIDB4 RDMsIDB4QUYsCi0rIDB4RjgsIDB4RDQsIDB4RkYsIDB4M0MsIDB4ODcsIDB4QTAsIDB4M0YsIDB4 QzcsIDB4MjIsIDB4MDUsIDB4RkQsIDB4RkQsCi0rIDB4MjksIDB4OEEsIDB4MjgsIDB4REEsIDB4 QTksIDB4OEEsIDB4OEIsIDB4MjMsIDB4NjIsIDB4OUQsIDB4NDIsIDB4QjgsCi0rIDB4NEEsIDB4 NzYsIDB4MEQsIDB4OUYsIDB4OUEsIDB4RTAsIDB4RTYsIDB4REQsIDB4QUQsIDB4NUUsIDB4NUYs IDB4RDUsCi0rIDB4MzIsIDB4RTksIDB4NEIsIDB4OTcsIDB4N0QsIDB4NjIsIDB4MEEsIDB4QjMs IDB4QkUsIDB4RjIsIDB4OEMsIDB4MUYsCi0rIDB4MkIsIDB4MjIsIDB4MDYsIDB4MTUsIDB4MzMs IDB4NzEsIDB4RUQsIDB4OUIsIDB4QTAsIDB4ODIsIDB4Q0UsIDB4QkYsCi0rIDB4M0IsIDB4MDgs IDB4NUYsIDB4QTcsIDB4MjAsIDB4OTQsIDB4MDksIDB4RUIsIDB4ODIsIDB4QTUsIDB4NDEsIDB4 NjAsCi0rIDB4RjEsIDB4MDgsIDB4RUIsIDB4OEQsIDB4Q0MsIDB4OEQsIDB4QzksIDB4NTIsIDB4 MEEsIDB4QUYsIDB4RjQsIDB4RjksCi0rIDB4OUYsIDB4ODIsIDB4RDgsIDB4MEIsIDB4NzUsIDB4 NUUsIDB4RTQsIDB4QUYsIDB4NjUsIDB4OTYsIDB4QUYsIDB4RkMsCi0rIDB4MzMsIDB4QkYsIDB4 OUYsIDB4M0UsIDB4QTQsIDB4N0IsIDB4ODYsIDB4QzcsIDB4RjcsIDB4NDcsIDB4QUIsIDB4Mzcs Ci0rIDB4MDUsIDB4RDYsIDB4MEQsIDB4MzEsIDB4NzIsIDB4OEMsIDB4ODAsIDB4MUUsIDB4QTks IDB4NTQsIDB4RkMsIDB4REYsCi0rIDB4MjcsIDB4OTAsIDB4RTIsIDB4MDEKLSB9OwotIAotIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0tICAweDYyLCAw eEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAweDE1 LCAweEY5LAotLSAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5 RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLS0gIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4 MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0tICAweDA4LCAw eEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAweDlF LCAweENELAotLSAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhE NSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLS0gIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4 MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0tICAweERCLCAw eDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAweEM2 LCAweDNCLAotLSAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1 QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLS0gIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4 NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0tICAweEQ5LCAw eDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgyLCAweEU2 LCAweERDLAotLSAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4 RAotKyAweEEyLCAweEQ4LCAweDQyLCAweDUzLCAweERELCAweEJGLCAweDFGLCAweDZCLCAweDA3 LCAweEUwLCAweDYwLCAweDg2LAotKyAweDVBLCAweDYwLCAweDA2LCAweDhGLCAweDQ0LCAweEQ5 LCAweEIwLCAweDRBLCAweEFBLCAweDkwLCAweDcxLCAweEI4LAotKyAweEIyLCAweEJDLCAweDMw LCAweDQxLCAweDUwLCAweEJCLCAweEZELCAweDQ2LCAweDk4LCAweDRELCAweEMwLCAweDg5LAot KyAweDU3LCAweDg1LCAweDhBLCAweDk3LCAweDQ5LCAweDI1LCAweEE4LCAweDBDLCAweDY5LCAw eDcwLCAweDE5LCAweDM5LAotKyAweDY2LCAweDI0LCAweEI0LCAweDY5LCAweDQ3LCAweEQyLCAw eDdDLCAweERFLCAweDJELCAweDM3LCAweDU5LCAweEIzLAotKyAweEUzLCAweEM3LCAweDZCLCAw eERELCAweEJFLCAweEUxLCAweEU2LCAweDI4LCAweDlBLCAweDhELCAweDQyLCAweDNFLAotKyAw eDI4LCAweDAxLCAweEQ3LCAweDAzLCAweEM5LCAweDczLCAweEMzLCAweDZCLCAweDAzLCAweEVD LCAweDFFLCAweEY4LAotKyAweDUzLCAweDhCLCAweDUyLCAweDQyLCAweDg5LCAweDU1LCAweEI3 LCAweDg3LCAweEE5LCAweDk0LCAweEMyLCAweEI0LAotKyAweDRCLCAweDc2LCAweEY1LCAweDYx LCAweDQ3LCAweEUxLCAweDQ0LCAweDdCLCAweEVDLCAweEI0LCAweDI1LCAweDY2LAotKyAweEMw LCAweEZGLCAweEVCLCAweDg2LCAweDI0LCAweEFBLCAweEE4LCAweDcyLCAweEM3LCAweEZCLCAw eEZCLCAweEY2LAotKyAweDg0LCAweEE3LCAweDVCLCAweEQ0LCAweDg3LCAweEU1LCAweDg0LCAw eDU2LCAweDFFLCAweDRDLCAweEU1LCAweEJDLAotKyAweDg3LCAweDk0LCAweEFDLCAweDlDLCAw eDFCLCAweDNELCAweEY3LCAweEQ0LCAweDM2LCAweDg1LCAweDlGLCAweEM5LAotKyAweEY2LCAw eDQzLCAweDNGLCAweEI2LCAweDI1LCAweDMzLCAweDQ4LCAweDBGLCAweEU1LCAweDdDLCAweENE LCAweDUzLAotKyAweDQ4LCAweEVCLCAweDAyLCAweDExLCAweEI5LCAweDlFLCAweEMzLCAweEI0 LCAweEUxLCAweDU0LCAweEQ2LCAweEFBLAotKyAweDFBLCAweDlFLCAweDEwLCAweEUxLCAweDI3 LCAweDI1LCAweEYyLCAweEUxLCAweEFCLCAweEFCLCAweDZDLCAweDQ1LAotKyAweDYxLCAweEQ1 LCAweEEzLCAweDZDLCAweEI2LCAweDMzLCAweDUyLCAweEFFLCAweDNELCAweEZELCAweDIyLCAw eEZDLAotKyAweDNBLCAweEFCLCAweDYzLCAweDk0LCAweEI1LCAweDNBLCAweDY5LCAweDExLCAw eEFDLCAweDk5LCAweDRGLCAweDMzLAotKyAweDY3LCAweDBBLCAweDFBLCAweDcwLCAweDFFLCAw eEI5LCAweEUyLCAweDI2LCAweDI3LCAweDY4LCAweEVBLCAweEY1LAotKyAweDk3LCAweDU1LCAw eEFDLCAweDgzLCAweDZBLCAweDQwLCAweDNCLCAweDU2LCAweEFFLCAweDEzLCAweDg4LCAweEU4 LAotKyAweDk4LCAweDcyLCAweDUyLCAweDkxLCAweDdGLCAweDc4LCAweDBBLCAweDE4LCAweEQ0 LCAweDQ0LCAweDc4LCAweDgzLAotKyAweDBELCAweDQ0LCAweDc3LCAweEE2LCAweEYzLCAweDA0 LCAweEYxLCAweDhDLCAweEJDLCAweDJGLCAweEY5LCAweDVCLAotKyAweERCLCAweDcwLCAweDAw LCAweEY2Ci0gfTsKLSAKLSBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1 NltdID0gewotLSAgMHgwRCwgMHg1NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4 MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywKLS0gIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4 RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCi0tICAweDkyLCAw eDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZG LCAweDM1LAotLSAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgw MSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKLS0gIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4 RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCi0tICAweDBFLCAw eEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkx LCAweDMwLAotLSAgMHhCRSwgMHgyMiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1 RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKLS0gIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4 RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCi0tICAweEI4LCAw eDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQx LCAweERBLAotLSAgMHgyNywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4 MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKLS0gIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4 Q0QsIDB4NTcsIDB4QzAsIDB4N0EKLSsgMHhDMiwgMHhCMSwgMHg5NywgMHgwMCwgMHg5QSwgMHhF NSwgMHg4MCwgMHg2QSwgMHhFMiwgMHg1MSwgMHg2OCwgMHhCOSwKLSsgMHg3QSwgMHgwQywgMHhG MiwgMHhCNCwgMHg3NywgMHhFRCwgMHgxNSwgMHgwQywgMHg0RSwgMHhFMSwgMHhEQywgMHhGRiwK LSsgMHg4RSwgMHhCQywgMHhERSwgMHhDNywgMHg5QSwgMHg5NiwgMHhGMSwgMHg0NywgMHg0NSwg MHgyNCwgMHg5RCwgMHg2RiwKLSsgMHhBNiwgMHhGMywgMHgxRCwgMHgwRCwgMHgzNSwgMHg0Qywg MHgxQSwgMHhGMywgMHg1OCwgMHgyQywgMHg2QywgMHgwNiwKLSsgMHhENiwgMHgyMiwgMHgzNywg MHg3NywgMHg4QywgMHgzMywgMHhFNSwgMHgwNywgMHg1MywgMHg5MywgMHgyOCwgMHhDRiwKLSsg MHg2NywgMHhGQSwgMHhDNCwgMHgxRiwgMHgxQiwgMHgyNCwgMHhEQiwgMHg0QywgMHhDNSwgMHgy QSwgMHg1MSwgMHhBMiwKLSsgMHg2MCwgMHgxNSwgMHg4QywgMHg1NCwgMHhCNCwgMHgzMCwgMHhF MiwgMHgyNCwgMHg0NywgMHg4NiwgMHhGMiwgMHhGOCwKLSsgMHg2QywgMHhENiwgMHgxMiwgMHg1 OSwgMHgyQywgMHg3NCwgMHg5QSwgMHgzNywgMHhGMywgMHhDNCwgMHhBMiwgMHhENSwKLSsgMHg0 RSwgMHgxRiwgMHg3NywgMHhGMCwgMHgyNywgMHhDRSwgMHg3NywgMHhGOCwgMHg0QSwgMHg3OSwg MHgwMywgMHhCRSwKLSsgMHhDOCwgMHgwNiwgMHgyRCwgMHhBNywgMHhBNiwgMHg0NiwgMHhGNSwg MHg1NSwgMHg3OSwgMHhENywgMHg1QywgMHhDNiwKLSsgMHg1QiwgMHhCMSwgMHgwMCwgMHg0RSwg MHg3QywgMHhEOSwgMHgxMSwgMHg4NSwgMHhFMCwgMHhCMSwgMHg0RCwgMHgyRCwKLSsgMHgxMywg MHhENywgMHhBQywgMHhFQSwgMHg2NCwgMHhEMSwgMHhBQywgMHg4RiwgMHg4RCwgMHg4RiwgMHhF QSwgMHg0MiwKLSsgMHg3RiwgMHhGOSwgMHhCNywgMHg3RCwgMHgyQywgMHg2OCwgMHg0OSwgMHgw NywgMHg3QSwgMHg3NCwgMHhFRiwgMHhCNCwKLSsgMHhDOSwgMHg5NywgMHgxNiwgMHg1QywgMHg2 QywgMHg2RSwgMHg1QywgMHgwOSwgMHgyRSwgMHg4RSwgMHgxMywgMHgyRSwKLSsgMHgxQSwgMHg4 RCwgMHhBNiwgMHgwQywgMHg2RSwgMHgwQywgMHgxQywgMHgwRiwgMHhDQywgMHhCMiwgMHg3OCwg MHg4QSwKLSsgMHgwNywgMHhGQywgMHg1QywgMHhDMiwgMHhGNSwgMHg2NSwgMHhFQywgMHhBQiwg MHg4QiwgMHgzQywgMHhDQSwgMHg5MSwKLSsgMHg2RiwgMHg4NCwgMHg3QywgMHgyMSwgMHgwRSwg MHhCOCwgMHhEQSwgMHg3QiwgMHg2QywgMHhGNywgMHhERiwgMHhBQiwKLSsgMHg3RSwgMHgxNSwg MHhGRCwgMHg4NSwgMHgwQiwgMHgzMywgMHg5QiwgMHg2QSwgMHgzQSwgMHhDMywgMHhFRiwgMHg2 NSwKLSsgMHgwNCwgMHg2RSwgMHhCMiwgMHhBQywgMHg5OCwgMHhGRCwgMHhFQiwgMHgwMiwgMHhG NSwgMHhDMCwgMHgwQiwgMHg1RSwKLSsgMHhDQiwgMHhENCwgMHg4MywgMHg4MiwgMHgxOCwgMHgx QiwgMHhEQSwgMHhCNCwgMHhDRCwgMHhFOCwgMHg3MSwgMHg2QiwKLSsgMHgxRCwgMHhCNSwgMHg0 RiwgMHhFOSwgMHhENiwgMHg0MywgMHhBMCwgMHgwQSwgMHgxNCwgMHhBMCwgMHhFNywgMHg1RCwK LSsgMHg0NywgMHg5RCwgMHgxOCwgMHhENwotIH07Ci0gCi0gc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKLS0gIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4 MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCi0tICAweEQyLCAw eDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3 LCAweEM3LAotLSAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhB OSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKLS0gIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4 QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCi0tICAweDY1LCAw eDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2 LCAweENGLAotLSAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhF MiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKLS0gIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4 NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMsCi0tICAweEZGLCAw eDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhGLCAweDhCLCAweDlD LCAweENELAotLSAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhF QiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKLS0gIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4 MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQsCi0tICAweEJELCAw eDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCi0rIDB4MTEsIDB4NUUsIDB4 NjMsIDB4RkUsIDB4NDcsIDB4QUEsIDB4NkEsIDB4ODQsIDB4RUIsIDB4NDQsIDB4OUEsIDB4MDAs Ci0rIDB4OTYsIDB4NEEsIDB4RUQsIDB4RDIsIDB4QTcsIDB4NjcsIDB4M0EsIDB4NjQsIDB4ODIs IDB4MzAsIDB4NjEsIDB4MkQsCi0rIDB4RTMsIDB4RjUsIDB4NDksIDB4NjgsIDB4NUUsIDB4NjAs IDB4RDIsIDB4NEQsIDB4RUYsIDB4RjIsIDB4QTQsIDB4QjIsCi0rIDB4OUEsIDB4ODEsIDB4MUQs IDB4NDEsIDB4QTUsIDB4NzMsIDB4NTksIDB4RUIsIDB4QkIsIDB4QzQsIDB4OUUsIDB4MkIsCi0r IDB4RUIsIDB4QzMsIDB4REUsIDB4M0EsIDB4RUEsIDB4RjUsIDB4QUQsIDB4REEsIDB4ODcsIDB4 MDgsIDB4NjgsIDB4Q0YsCi0rIDB4MTIsIDB4OUIsIDB4QzEsIDB4RTQsIDB4QTcsIDB4NzEsIDB4 RjgsIDB4QkQsIDB4NkIsIDB4NkYsIDB4NTAsIDB4RjEsCi0rIDB4RDEsIDB4RkYsIDB4Q0UsIDB4 NkMsIDB4RDksIDB4QkUsIDB4REEsIDB4NzYsIDB4RjMsIDB4RUIsIDB4QUIsIDB4OUMsCi0rIDB4 NDEsIDB4NkUsIDB4NEYsIDB4MzUsIDB4N0EsIDB4NjEsIDB4MjcsIDB4QkMsIDB4MDMsIDB4M0Us IDB4QUUsIDB4M0UsCi0rIDB4MUIsIDB4REQsIDB4QUMsIDB4RDksIDB4MUEsIDB4RkYsIDB4RDMs IDB4RjUsIDB4NjYsIDB4NDMsIDB4MDcsIDB4NzYsCi0rIDB4OEEsIDB4NjksIDB4MkQsIDB4MTQs IDB4QjEsIDB4QkUsIDB4NTUsIDB4NDksIDB4OTAsIDB4ODksIDB4NEIsIDB4QzQsCi0rIDB4MTEs IDB4NjcsIDB4RDUsIDB4OUQsIDB4QjAsIDB4QjIsIDB4RUUsIDB4OEQsIDB4MEEsIDB4NDcsIDB4 NEEsIDB4RDksCi0rIDB4MEUsIDB4RDEsIDB4MjQsIDB4RjAsIDB4MzAsIDB4MkIsIDB4RjIsIDB4 NzksIDB4NDcsIDB4REIsIDB4NzAsIDB4QjQsCi0rIDB4NDYsIDB4RjIsIDB4RjgsIDB4QjcsIDB4 QjQsIDB4RjYsIDB4MzQsIDB4NzksIDB4QTgsIDB4MkQsIDB4M0QsIDB4NTYsCi0rIDB4RDUsIDB4 OUEsIDB4NjAsIDB4N0EsIDB4MDQsIDB4QzcsIDB4NjYsIDB4MUQsIDB4Q0QsIDB4M0MsIDB4RDUs IDB4MzksCi0rIDB4MzcsIDB4MTIsIDB4NTEsIDB4NUUsIDB4OUYsIDB4RjgsIDB4MUEsIDB4QUYs IDB4MTMsIDB4QzEsIDB4MTMsIDB4MDAsCi0rIDB4MzUsIDB4RDUsIDB4OEQsIDB4MTcsIDB4RTMs IDB4MDIsIDB4MjgsIDB4RDksIDB4RUMsIDB4REUsIDB4RDEsIDB4MkYsCi0rIDB4OTMsIDB4NDks IDB4MDMsIDB4MTEsIDB4M0UsIDB4NTYsIDB4OUQsIDB4QzIsIDB4MzEsIDB4RjgsIDB4QUYsIDB4 MkQsCi0rIDB4RDksIDB4OTksIDB4QjcsIDB4OEEsIDB4QUMsIDB4NUEsIDB4ODYsIDB4MjAsIDB4 M0EsIDB4ODMsIDB4MjksIDB4MjYsCi0rIDB4OUQsIDB4MDMsIDB4NTIsIDB4MkIsIDB4MzQsIDB4 NTYsIDB4NDAsIDB4MTYsIDB4NTMsIDB4NTAsIDB4ODIsIDB4QzksCi0rIDB4QzcsIDB4RDUsIDB4 NTEsIDB4NEMsIDB4RUQsIDB4QjMsIDB4RTIsIDB4RTEsIDB4Q0YsIDB4QTgsIDB4Q0UsIDB4QkQs Ci0rIDB4QjEsIDB4NDgsIDB4QTYsIDB4OEEsIDB4NzksIDB4MTcsIDB4NTUsIDB4MTEsIDB4RUYs IDB4RTgsIDB4MTQsIDB4RjQsCi0rIDB4N0UsIDB4MzcsIDB4MUQsIDB4OTYKLSB9OwotIAotIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0tICAweDY5LCAw eDUyLCAweDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVE LCAweENGLAotLSAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgz NiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwKLS0gIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4 RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0tICAweDA0LCAw eEMxLCAweDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlG LCAweEQ4LAotLSAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgz RiwgMHhBNiwgMHg1MywgMHg2MiwgMHhCNSwKLS0gIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4 NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0tICAweEFGLCAw eDYyLCAweDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3 LCAweEU2LAotLSAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3 OCwgMHgxNiwgMHg2MywgMHg4NCwgMHgwNSwKLS0gIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4 OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0tICAweDNFLCAw eDYyLCAweENFLCAweEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1 LCAweDkxLAotLSAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4 NAotKyAweDM1LCAweDZELCAweEYxLCAweDlFLCAweENGLCAweEIxLCAweEY2LCAweDBDLCAweDA0 LCAweDIxLCAweDE3LCAweEIzLAotKyAweEM0LCAweDlELCAweEZFLCAweDYyLCAweDFDLCAweDFB LCAweDQ1LCAweDAwLCAweDJFLCAweDZCLCAweEI2LCAweDlGLAotKyAweDVDLCAweEIxLCAweENC LCAweENGLCAweEY5LCAweDY3LCAweEVBLCAweDYyLCAweDhBLCAweEVCLCAweDc3LCAweDAyLAot KyAweDQyLCAweDMwLCAweDg4LCAweEIxLCAweDQ4LCAweERGLCAweDEyLCAweDYwLCAweDZFLCAw eDkyLCAweEJCLCAweDRCLAotKyAweDA5LCAweDY4LCAweEQxLCAweDcwLCAweDJCLCAweDU5LCAw eEVFLCAweDU3LCAweDk2LCAweEY5LCAweEVBLCAweEEzLAotKyAweDRDLCAweEU5LCAweEM5LCAw eEJELCAweDI1LCAweDM0LCAweDY2LCAweDE1LCAweDZDLCAweEM5LCAweDgxLCAweEQxLAotKyAw eDQ4LCAweDBGLCAweDMzLCAweDVGLCAweDA1LCAweDRGLCAweEMyLCAweEM0LCAweERELCAweDA5 LCAweDU0LCAweDc5LAotKyAweEExLCAweDU3LCAweDA3LCAweDcwLCAweEEwLCAweDMzLCAweDAy LCAweDRELCAweDVELCAweEU5LCAweDI0LCAweEQxLAotKyAweEVGLCAweEYwLCAweDYxLCAweEQw LCAweDFELCAweDQxLCAweEUyLCAweDlCLCAweDJCLCAweDdDLCAweEQwLCAweDRFLAotKyAweDU1 LCAweEQ5LCAweDZELCAweEExLCAweDE2LCAweDlGLCAweERBLCAweEMzLCAweDNCLCAweEYxLCAw eDc0LCAweEQxLAotKyAweDk5LCAweEYxLCAweDYzLCAweDU3LCAweEFELCAweEM3LCAweDU1LCAw eEY0LCAweDk3LCAweDQzLCAweDFDLCAweEVELAotKyAweDFCLCAweDdBLCAweDMyLCAweENCLCAw eDI0LCAweEE2LCAweDNELCAweDkzLCAweDM3LCAweDkwLCAweDc0LCAweEVFLAotKyAweEQyLCAw eDhELCAweDRCLCAweEJDLCAweDcyLCAweERBLCAweDI1LCAweDJCLCAweDY0LCAweEU5LCAweENB LCAweDY5LAotKyAweDM2LCAweEI2LCAweEVDLCAweDZFLCAweDhGLCAweDMzLCAweDBFLCAweDc0 LCAweDQwLCAweDQ4LCAweDUxLCAweEUyLAotKyAweDU0LCAweDZGLCAweEFGLCAweDZFLCAweDM2 LCAweDU0LCAweDNBLCAweEVDLCAweDc4LCAweDM3LCAweEU2LCAweDFGLAotKyAweDc2LCAweEE1 LCAweDRELCAweEE2LCAweEQ5LCAweEIzLCAweDZCLCAweDE3LCAweDZELCAweDYxLCAweEZDLCAw eEEzLAotKyAweDg1LCAweDRBLCAweENDLCAweERBLCAweDUyLCAweEFDLCAweDVCLCAweERBLCAw eDUxLCAweEU1LCAweDdGLCAweDVCLAotKyAweDUyLCAweDhCLCAweDc0LCAweDc1LCAweDk5LCAw eDVDLCAweDAxLCAweEZELCAweDI1LCAweDNFLCAweENELCAweDg2LAotKyAweDZGLCAweDdBLCAw eEMwLCAweEQ4LCAweDE3LCAweDZGLCAweEQxLCAweEQyLCAweDZCLCAweEFCLCAweDE0LCAweDFG LAotKyAweDNCLCAweEI4LCAweDE1LCAweDA1LCAweDg2LCAweDQwLCAweDM2LCAweENGLCAweERB LCAweDU5LCAweDJCLCAweDlBLAotKyAweEU5LCAweDFFLCAweDZFLCAweEQzLCAweDZCLCAweEEx LCAweDE5LCAweEM1LCAweEU2LCAweDNGLCAweEU5LCAweDJFLAotKyAweDQzLCAweEE4LCAweDM0 LCAweDBBCi0gfTsKLSAKLSBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFf U0hBMVtdID0gewotLSAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwg MHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKLS0gIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMs IDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCi0tICAweDgw LCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAw eEI4LCAweEFDLAotLSAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwg MHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKLS0gIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcs IDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCi0tICAweDUz LCAweDE1LCAweEY3LCAweERGLCAweDg3LCAweEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAw eDExLCAweDE5LAotLSAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2Mywg MHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhENywKLS0gIDB4NkYsIDB4NEMsIDB4M0MsIDB4Mzcs IDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCi0tICAweDQ4 LCAweEFGLCAweDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAw eEVELCAweDc2LAotLSAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwg MHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2NywKLS0gIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAs IDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKLSsgMHhCMSwgMHgwRSwgMHg0RiwgMHhDNiwgMHhFMCwg MHg5NSwgMHg4NSwgMHg3QiwgMHhCRSwgMHhERSwgMHhDNCwgMHhFNiwKLSsgMHgxRiwgMHgxMiwg MHgyRSwgMHg5QiwgMHgzRSwgMHgxMSwgMHhBMywgMHhGMCwgMHhGMCwgMHhBOCwgMHgyMywgMHgx QSwKLSsgMHg5NiwgMHg2RSwgMHg5OSwgMHhCNSwgMHg1RiwgMHg4MiwgMHhDNSwgMHg4NywgMHg3 NSwgMHhFOSwgMHhENCwgMHhCRiwKLSsgMHg5RiwgMHhFMCwgMHhBNCwgMHhFRCwgMHhDNywgMHgw MSwgMHgyQSwgMHgzRiwgMHg2RiwgMHg0MywgMHgxRCwgMHg0RiwKLSsgMHhFOCwgMHgwNSwgMHgz NCwgMHgzMiwgMHgyMCwgMHgzNiwgMHg5NCwgMHhBMCwgMHg2RCwgMHhDQywgMHhGNiwgMHg0MSwK LSsgMHg0OSwgMHg1NiwgMHg5NiwgMHhFQywgMHg5QywgMHg3QywgMHhEMSwgMHgwRSwgMHg5RSwg MHhEOCwgMHgxQiwgMHg0OCwKLSsgMHhEOSwgMHhERiwgMHg5OSwgMHg5RiwgMHg5MiwgMHgxNywg MHg5NiwgMHhBNCwgMHhGMSwgMHg4NywgMHg2NCwgMHg2MSwKLSsgMHgzQywgMHhBRiwgMHgwMCwg MHgyNCwgMHhCMywgMHg2NCwgMHg4OCwgMHg4RSwgMHg0MSwgMHhCRiwgMHgyOSwgMHgxRiwKLSsg MHhBMywgMHgyOCwgMHhBRCwgMHgyMSwgMHgxRSwgMHhBMywgMHg5NiwgMHg0MCwgMHgwQSwgMHgw QiwgMHg4MiwgMHhDRCwKLSsgMHg5NywgMHg1OCwgMHgzMywgMHhCNiwgMHg1MiwgMHhBQywgMHhD NSwgMHgzQiwgMHgxNCwgMHhFNywgMHgxRSwgMHg1RCwKLSsgMHgwOSwgMHhDOSwgMHg3NiwgMHhC NSwgMHg4OSwgMHhDNiwgMHg5QiwgMHg0QywgMHhDMiwgMHhDMiwgMHgzMSwgMHgwRSwKLSsgMHhC QSwgMHgxRSwgMHhCNSwgMHgxMSwgMHhEMCwgMHhGRCwgMHhDMSwgMHhEQSwgMHg2NCwgMHgxNywg MHhBOCwgMHhDQiwKLSsgMHhGMCwgMHg5NCwgMHhGNCwgMHhERCwgMHg4NCwgMHhCNywgMHhFRiwg MHg5QywgMHgxMywgMHg0RiwgMHhERCwgMHgwNiwKLSsgMHgwQywgMHhFNCwgMHhDNywgMHhGRCwg MHg2OSwgMHgxMCwgMHgyMCwgMHhEMywgMHg5MywgMHg1RSwgMHhGOCwgMHhCQSwKLSsgMHgyMSwg MHhGQiwgMHg2MiwgMHhDNCwgMHg2MywgMHg3NiwgMHg0MywgMHhBQSwgMHg3RSwgMHgzQywgMHg1 NiwgMHg1RSwKLSsgMHhCNCwgMHg0NywgMHgzQSwgMHgwNSwgMHgwRCwgMHhCQiwgMHgxMywgMHhD NCwgMHg5MywgMHhGQiwgMHgyOSwgMHhBOCwKLSsgMHgzRSwgMHg3NiwgMHg0MSwgMHg1NCwgMHg5 RSwgMHg3QiwgMHhFMiwgMHhFMCwgMHgwNywgMHgxRCwgMHhBNywgMHg5QywKLSsgMHg4NSwgMHgx MSwgMHhCNSwgMHhBNSwgMHg4OCwgMHg1OCwgMHgwMiwgMHhEOCwgMHhDMCwgMHg0QiwgMHg4MSwg MHhCRiwKLSsgMHgyQiwgMHgzOCwgMHhFMiwgMHgyRiwgMHg0MiwgMHhDQSwgMHg2MywgMHg4QSwg MHgwQSwgMHg3OCwgMHhCQSwgMHg1MCwKLSsgMHhFNSwgMHg4NCwgMHgzNSwgMHhEMywgMHg2QSwg MHgxRSwgMHg5NiwgMHgwQiwgMHg5MSwgMHhCMSwgMHgwRSwgMHg4NSwKLSsgMHhBOCwgMHg1Qywg MHg2RSwgMHg0NiwgMHg1QywgMHg2MSwgMHg4QywgMHg0RiwgMHg1QiwgMHg2MSwgMHhCNiwgMHgz QywKLSsgMHhCNywgMHgyQywgMHhBNSwgMHgxQQotIH07Ci0gCi0gc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0gewotLSAgMHg3RSwgMHhBMiwgMHg3Nywg MHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKLS0g IDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4 OTIsIDB4MUMsIDB4REQsCi0tICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAw eDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAotLSAgMHgxNiwgMHg3NiwgMHg2OCwg MHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKLS0g IDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4 QjgsIDB4RjAsIDB4NEIsCi0tICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAw eEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAotLSAgMHhBRCwgMHg0RSwgMHg0OSwg MHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKLS0g IDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4 OEQsIDB4QTAsIDB4OEMsCi0tICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAw eDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAotLSAgMHgyMSwgMHhFRCwgMHg4RCwg MHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKLS0g IDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKLSsgMHhDNiwg MHg2QywgMHgwMSwgMHg3RiwgMHhCNiwgMHg4QywgMHhENCwgMHg2MSwgMHg4MywgMHhDNSwgMHhC QywgMHg3NSwKLSsgMHgzOSwgMHgyMiwgMHhERCwgMHgxNywgMHg1QiwgMHg5NSwgMHg0QiwgMHg0 QywgMHg0NiwgMHgzOSwgMHgzNywgMHhBNywKLSsgMHg1NCwgMHg2QywgMHg0OSwgMHg1QSwgMHg2 NywgMHg5MCwgMHg0NywgMHhGNiwgMHg1OSwgMHhBRSwgMHhGQywgMHhERCwKLSsgMHhERiwgMHhE QiwgMHhDNywgMHg5MSwgMHhCOSwgMHhCNiwgMHhDRSwgMHhEOCwgMHhGQSwgMHgzMCwgMHgwMSwg MHg5RiwKLSsgMHhDQSwgMHhFNSwgMHg0QSwgMHg1MSwgMHhCNywgMHhCRSwgMHhCRCwgMHg0RSwg MHg1NiwgMHgyNSwgMHgwQiwgMHg0OSwKLSsgMHhFMCwgMHg0NiwgMHhCQiwgMHg4MSwgMHgwRSwg MHgxNCwgMHg0NywgMHhGRiwgMHhDQiwgMHhCQiwgMHhBMSwgMHg2RCwKLSsgMHg0NCwgMHg5Qiwg MHhGNywgMHhFRSwgMHg4MSwgMHhFQiwgMHhGNiwgMHg2MiwgMHhFQSwgMHgwRCwgMHg3NiwgMHg3 NiwKLSsgMHg0RSwgMHgyNSwgMHhENywgMHg5QSwgMHgyQiwgMHhCMSwgMHg5MiwgMHhFRCwgMHg1 QywgMHg3RiwgMHg5RCwgMHg5OSwKLSsgMHgwNywgMHg5RSwgMHhCRiwgMHg2MiwgMHg4MywgMHgx MiwgMHg2MSwgMHg5OSwgMHgzRSwgMHhGNSwgMHg2QSwgMHg0QywKLSsgMHg1OCwgMHhCMCwgMHgy QSwgMHgxNSwgMHgxQywgMHhBMCwgMHhEMiwgMHg5MSwgMHg4NywgMHg5QywgMHg3RCwgMHg0RiwK LSsgMHhFRiwgMHgzQiwgMHgwRiwgMHg2MCwgMHhENywgMHgxRSwgMHhFRiwgMHg3QywgMHhCRSwg MHg2OCwgMHg5NSwgMHhFNiwKLSsgMHhCQSwgMHhGQSwgMHhGNiwgMHhEMSwgMHg2NywgMHgzRCwg MHg5RCwgMHgzOSwgMHhBRSwgMHhDMiwgMHg4NSwgMHhEMiwKLSsgMHhERSwgMHhBNSwgMHg4NSwg MHgxRSwgMHg0RCwgMHgyQiwgMHgyQywgMHgwNiwgMHg0NCwgMHg5OCwgMHgxNywgMHg0NiwKLSsg MHg4OSwgMHg0MSwgMHgxMywgMHhGQywgMHg5OSwgMHhENiwgMHg2QywgMHhDRiwgMHgyNiwgMHhB MiwgMHg3NywgMHg4QSwKLSsgMHgzRiwgMHgxMCwgMHhGOCwgMHhDNSwgMHhDOSwgMHg0QSwgMHhC NiwgMHg5MywgMHhGNSwgMHgzOCwgMHg4OSwgMHhCRCwKLSsgMHhGRiwgMHhBRSwgMHg0MiwgMHgw NiwgMHgyRCwgMHhDRCwgMHgxQiwgMHgzRCwgMHg1QSwgMHhDRCwgMHhGMiwgMHg4QSwKLSsgMHg2 NSwgMHhBNCwgMHhCNywgMHhCNiwgMHhGNiwgMHg1QiwgMHhFOCwgMHhBNCwgMHg2OCwgMHhCNCwg MHgyNywgMHhEQSwKLSsgMHhGMSwgMHg1OSwgMHgzNywgMHgyNCwgMHgxOCwgMHhCNSwgMHg1Qiwg MHgxNSwgMHg2MiwgMHg2NCwgMHg2RiwgMHg3OCwKLSsgMHhCQiwgMHgxNywgMHg5NCwgMHg0Miwg MHhBRCwgMHhCMywgMHgwRCwgMHgxOCwgMHhCMCwgMHgxQiwgMHgyOCwgMHgyOSwKLSsgMHgzQiwg MHgxNSwgMHhCRiwgMHhEMSwgMHhDOCwgMHgyOCwgMHg0RiwgMHhERiwgMHg3RiwgMHgzNCwgMHg0 OSwgMHgyQSwKLSsgMHg0NCwgMHhENSwgMHg0QywgMHg1OSwgMHg5MCwgMHg4MywgMHg4RCwgMHhG QywgMHg1OCwgMHg3RSwgMHhFQywgMHg0QiwKLSsgMHg1NCwgMHhGMCwgMHhCNSwgMHhCRAotIH07 Ci0gCi0gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0g ewotLSAgMHg1QywgMHg3RCwgMHg5NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhC QiwgMHg3QiwgMHhFQywgMHg3QiwKLS0gIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4 RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4MzcsIDB4Q0IsCi0tICAweEU2LCAweDRGLCAw eDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUz LAotLSAgMHhFRiwgMHg3OCwgMHg4MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhE NywgMHg0QSwgMHg2MywgMHhGNiwKLS0gIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4 NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4RUUsIDB4MzEsCi0tICAweEQ4LCAweDY5LCAw eEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYx LAotLSAgMHgzRSwgMHg5QywgMHgzNSwgMHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhB MCwgMHg2MCwgMHg0MSwgMHg3OSwKLS0gIDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4 NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUsIDB4N0MsIDB4RkYsCi0tICAweDBFLCAweDA5LCAw eEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1 LAotLSAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhB NSwgMHhEQywgMHhDNiwgMHg2RCwKLS0gIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4 ODIsIDB4NjUsIDB4MjgKLSsgMHg4OCwgMHg4NSwgMHhFMSwgMHhDMSwgMHhFMiwgMHhFNSwgMHgw QiwgMHg2QywgMHgwMywgMHgyNywgMHhBQywgMHhDOCwKLSsgMHgzQSwgMHg3MiwgMHhCNCwgMHg5 QSwgMHhGMywgMHhBRSwgMHg5QywgMHg4OCwgMHg4QywgMHhCRSwgMHgyOCwgMHgwRCwKLSsgMHg4 OSwgMHg1RiwgMHgwNiwgMHgwRiwgMHg1RiwgMHgwOCwgMHhFMywgMHg5QywgMHhGOSwgMHgyOCwg MHg0RiwgMHhCQiwKLSsgMHgyNCwgMHhERCwgMHgyMSwgMHg0QywgMHg0NCwgMHg5NiwgMHg1MCwg MHhCNSwgMHhENCwgMHg4RSwgMHgxMywgMHg2MCwKLSsgMHg3QywgMHhDQiwgMHhEOSwgMHg1RSwg MHg3QywgMHhCNiwgMHhBRCwgMHhBNSwgMHg2QSwgMHg0MSwgMHgwNCwgMHhBNywKLSsgMHg4RSwg MHhGMCwgMHgzOSwgMHgwOCwgMHg3RSwgMHgxOCwgMHg5MSwgMHhGOSwgMHg0NiwgMHg5NywgMHhF RiwgMHhGMiwKLSsgMHgxNCwgMHhCMiwgMHgwMSwgMHhGRCwgMHhCMiwgMHgyQiwgMHgzQSwgMHhG OCwgMHg0QSwgMHg1OSwgMHhEMSwgMHgzNiwKLSsgMHgxQSwgMHg3RCwgMHgyRCwgMHhCOSwgMHhD NiwgMHg3RiwgMHhERSwgMHg2MiwgMHhCNiwgMHg1NiwgMHhCQSwgMHhGQSwKLSsgMHg1QSwgMHhB MSwgMHg1QiwgMHg4QywgMHg1RiwgMHg5OCwgMHhFQywgMHhGOCwgMHg5MywgMHgxMywgMHgxMSwg MHg0MiwKLSsgMHhFRSwgMHhDNCwgMHg2QywgMHg0QSwgMHg4NywgMHg0RSwgMHg5OCwgMHgyMiwg MHhCNiwgMHhCQiwgMHhCMCwgMHgzQSwKLSsgMHg3MCwgMHhBOSwgMHhDQywgMHhCQywgMHgzMSwg MHgyNywgMHhFNywgMHhCQywgMHhDQSwgMHhFQywgMHg1MiwgMHg4MSwKLSsgMHg3NiwgMHg5QSwg MHgzRiwgMHgxOCwgMHhDMSwgMHgxQywgMHg0QSwgMHhDNywgMHg1NiwgMHhFMywgMHhGMCwgMHg2 RiwKLSsgMHgzNiwgMHhCQiwgMHg5QiwgMHhGOSwgMHg0MywgMHg5MCwgMHhCRSwgMHg3OSwgMHg1 OSwgMHg2MywgMHgxQywgMHhGRSwKLSsgMHhCNiwgMHg0NiwgMHg4QiwgMHhCQSwgMHhCRCwgMHhB QSwgMHgyOCwgMHg3MSwgMHg5QiwgMHhENiwgMHhERCwgMHgwNSwKLSsgMHgwMCwgMHgzQiwgMHhC QywgMHgyRCwgMHg0OCwgMHhFNywgMHg2RSwgMHg2RSwgMHg0MiwgMHg5NSwgMHgyNywgMHhBRSwK LSsgMHg5MywgMHg5MiwgMHg2RCwgMHg1OSwgMHg0NywgMHgxMCwgMHg1OSwgMHhBQywgMHhERCwg MHg5NSwgMHgyOSwgMHhDMywKLSsgMHgxQiwgMHg4NiwgMHg2NywgMHgxMiwgMHg5OCwgMHg0OCwg MHgxMCwgMHhBNiwgMHg5MCwgMHhBMywgMHg1OSwgMHg5RCwKLSsgMHgxMCwgMHg0RSwgMHhFQSwg MHhEOCwgMHhDQiwgMHhFMywgMHg4MSwgMHhCQSwgMHhBMSwgMHg1MiwgMHg1NSwgMHg3OCwKLSsg MHhGRiwgMHg5NSwgMHg0MCwgMHhFMCwgMHhBRSwgMHg5MywgMHgzOCwgMHg1RCwgMHgyMSwgMHgx MywgMHg4QSwgMHhGQywKLSsgMHg3MiwgMHhDNywgMHhGQiwgMHg3MCwgMHgxQywgMHhFRSwgMHg1 RCwgMHhCMCwgMHhFNSwgMHhGQSwgMHg0NCwgMHg4NiwKLSsgMHg2NywgMHg5NywgMHg2NiwgMHg2 NCwgMHhBNCwgMHgxRSwgMHhGOCwgMHgzQSwgMHgxNiwgMHhGOCwgMHhDOSwgMHhFMCwKLSsgMHgw OSwgMHhGMywgMHg2MSwgMHg0RgotIH07Ci0gCi0gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2F0X1JTQV9YOTMxX1NIQTUxMltdID0gewotLSAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0 RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKLS0gIDB4RkMsIDB4 QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEs IDB4QUMsCi0tICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFB LCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAotLSAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgw OSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKLS0gIDB4QTAsIDB4 OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4Rjgs IDB4QzUsCi0tICAweDZFLCAweDJCLCAweDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEw LCAweDM0LCAweDUzLCAweEQyLCAweEFGLAotLSAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3 OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKLS0gIDB4Q0UsIDB4 OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYs IDB4MDksCi0tICAweDlGLCAweDA5LCAweENBLCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVE LCAweDA0LCAweDJELCAweEZCLCAweDdDLAotLSAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhD MywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKLS0gIDB4NjAsIDB4 ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKLSsgMHhDOSwgMHgyQiwgMHg2 RCwgMHg1MCwgMHhCQiwgMHhEOCwgMHgwQiwgMHgzNSwgMHhFOCwgMHg3OCwgMHhGNSwgMHhGQywK LSsgMHhCQiwgMHg2QSwgMHhCNCwgMHgzMiwgMHg2MywgMHg5QywgMHg3NSwgMHgxOSwgMHgxRCwg MHhGQiwgMHg2OCwgMHhDMCwKLSsgMHhGQywgMHgzNCwgMHhDRSwgMHgwOSwgMHhGRCwgMHhGNCwg MHgzMywgMHg0MiwgMHg3MCwgMHgyNCwgMHg1NywgMHhCQywKLSsgMHhCMywgMHhCRCwgMHgyNCwg MHgzMywgMHg5RSwgMHg0QiwgMHgwMCwgMHhDRSwgMHgxNSwgMHhCMywgMHgyNywgMHhDNiwKLSsg MHgzOSwgMHg3QywgMHhDMSwgMHgyOCwgMHg3NSwgMHhGRSwgMHg3QiwgMHg3NiwgMHg0RiwgMHhG QiwgMHg2MCwgMHhBMCwKLSsgMHgzMCwgMHhCRiwgMHg3NCwgMHgyQywgMHg5RCwgMHhFNCwgMHhD OCwgMHgwMywgMHhBOCwgMHhERSwgMHhCOSwgMHgyQSwKLSsgMHhEOSwgMHgyMywgMHgyNCwgMHhE QywgMHhFRSwgMHhGMCwgMHhDMSwgMHg4QiwgMHg0RCwgMHgxMiwgMHg0QSwgMHg0MSwKLSsgMHgz MywgMHgzQiwgMHgyMywgMHhGRSwgMHhERCwgMHhFOSwgMHhFOCwgMHg1NSwgMHgyQiwgMHgzRSwg MHhBNCwgMHgxQiwKLSsgMHg5NSwgMHgyMSwgMHgyQSwgMHhFRiwgMHg4NCwgMHgyRSwgMHgxMywg MHgzRCwgMHg5NywgMHg3QywgMHgwOCwgMHg4NiwKLSsgMHhCMSwgMHg2MCwgMHhBNCwgMHhCOSwg MHhDNCwgMHg1QSwgMHg1QiwgMHgyRCwgMHgzRiwgMHhENywgMHgwRCwgMHhCMiwKLSsgMHg0MSwg MHg3MiwgMHg3QSwgMHg3RiwgMHhBMywgMHgxMiwgMHhCMCwgMHhBRCwgMHg4MCwgMHgyRSwgMHhE NiwgMHhEMywKLSsgMHg4QSwgMHg3MSwgMHg3MiwgMHg2NywgMHg5NCwgMHg2RiwgMHg1MSwgMHgw NSwgMHgzOSwgMHhGRCwgMHhCRSwgMHg5MSwKLSsgMHhERSwgMHgxRCwgMHg2NSwgMHhFNCwgMHhB NywgMHhBNiwgMHgwRiwgMHhBNSwgMHgwOCwgMHgxRiwgMHhGQywgMHg1MywKLSsgMHg0OCwgMHg3 QiwgMHhCOCwgMHhDRSwgMHg3OSwgMHhEQSwgMHhEQywgMHgxOCwgMHhEMSwgMHhEMywgMHg4QSwg MHg3MywKLSsgMHhDRSwgMHg1QSwgMHg2MiwgMHgxRSwgMHgzMywgMHhEMCwgMHgyMSwgMHg5Qywg MHhGOSwgMHhERSwgMHg5RSwgMHg3RSwKLSsgMHg0RCwgMHgwRSwgMHgyNCwgMHgzMCwgMHg5NCwg MHhCOCwgMHhEQywgMHg4QiwgMHg1NywgMHg3RSwgMHgzQiwgMHhDNiwKLSsgMHhENywgMHgwRiwg MHhGQywgMHhBNiwgMHgxRiwgMHhFQiwgMHhBRiwgMHgxOSwgMHhEMCwgMHhGRiwgMHgzRCwgMHg2 MywKLSsgMHgwMywgMHgxRCwgMHhBQiwgMHgxMSwgMHgwQywgMHhBRCwgMHg0NSwgMHg0NiwgMHg2 NywgMHg3NiwgMHhDOCwgMHgyNiwKLSsgMHhENCwgMHhENCwgMHg3MCwgMHgxRiwgMHhERiwgMHhF QiwgMHhFNSwgMHg3RCwgMHg3NSwgMHhEOCwgMHgzQiwgMHg1MiwKLSsgMHg2QywgMHhFNywgMHgy MywgMHhDQiwgMHhCOSwgMHgxQiwgMHhBNCwgMHgyRSwgMHg1QiwgMHhFQywgMHhCNCwgMHhCNiwK LSsgMHhCNiwgMHgyRCwgMHgwQiwgMHg2MCwgMHhFMywgMHg3QiwgMHgwNSwgMHhFOCwgMHgxRSwg MHhBRCwgMHhDNywgMHhFNywKLSsgMHhCRSwgMHhGNCwgMHg3MSwgMHhBRQotIH07Ci0gCi0rc3Rh dGljIGludCBmaXBzX3JzYV9lbmNyeXB0X3Rlc3QoUlNBICpyc2EsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnBsYWludGV4dCwgaW50IHB0bGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKmN0YnVmID0g TlVMTCwgKnB0YnVmID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsZW47Ci0rCi0rCWN0 YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCWlmICghY3RidWYpCi0rCQln b3RvIGVycjsKLSsKLSsJbGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHB0bGVuLCBwbGFpbnRleHQs IGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsJaWYgKGxlbiA8PSAwKQotKwkJZ290 byBlcnI7Ci0rCS8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQgKi8K LSsJaWYgKGxlbiA+PSBwdGxlbiAmJiAhbWVtY21wKHBsYWludGV4dCwgY3RidWYsIHB0bGVuKSkK LSsJCWdvdG8gZXJyOwotKwotKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkp OwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCi0rCWxlbiA9IFJTQV9wcml2YXRlX2Rl Y3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKwlpZiAo bGVuICE9IHB0bGVuKQotKwkJZ290byBlcnI7Ci0rCWlmIChtZW1jbXAocHRidWYsIHBsYWludGV4 dCwgbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChj dGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShjdGJ1Zik7Ci0rCWlmIChwdGJ1ZikKLSsJCU9QRU5TU0xf ZnJlZShwdGJ1Zik7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSAKLSBpbnQgRklQU19zZWxmdGVzdF9y c2EoKQotIAl7Ci1AQCAtMzUzLDcgKzU4Nyw3IEBAIGludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCi0g CWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0gCQlnb3RvIGVycjsKLSAKLS0JRVZQ X1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKLSsJRVZQX1BLRVlfc2V0MV9SU0EocGssIGtleSk7 Ci0gCi0gCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotIAkJCQlrYXRfUlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAot QEAgLTQzMCwxMyArNjY0LDE1IEBAIGludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCi0gCQkJIlJTQSBT SEE1MTIgWDkzMSIpKQotIAkJZ290byBlcnI7Ci0gCi0rCWlmICghZmlwc19yc2FfZW5jcnlwdF90 ZXN0KGtleSwga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSkpCi0rCQlnb3RvIGVycjsKLSAK LSAJcmV0ID0gMTsKLSAKLSAJZXJyOgotIAlpZiAocGspCi0gCQlFVlBfUEtFWV9mcmVlKHBrKTsK LS0JZWxzZSBpZiAoa2V5KQotKwlpZiAoa2V5KQotIAkJUlNBX2ZyZWUoa2V5KTsKLSAJcmV0dXJu IHJldDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUu Zmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL01ha2VmaWxlCi0tLS0gb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcy1yZXFzCTIwMTMtMTItMTggMTI6MTc6 MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvTWFrZWZp bGUJMjAxMy0xMi0xOCAxNzoxNDoyMC4zNDgzMzczNjIgKzAxMDAKLUBAIC0yNCwxMyArMjQsMTUg QEAgTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZgotICAgICBmaXBzX3Jz YV9zZWxmdGVzdC5jIGZpcHNfc2hhX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0 LmMgIGZpcHNfcmFuZC5jIFwKLSAgICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBmaXBz X2RyYmdfY3RyLmMgZmlwc19kcmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKLSAgICAgZmlw c19kcmJnX2xpYi5jIGZpcHNfZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19y YW5kX2xpYi5jIFwKLS0gICAgZmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lY2RoX3NlbGZ0ZXN0 LmMgZmlwc19lY2RzYV9zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCi0rICAgIGZpcHNf Y21hY19zZWxmdGVzdC5jIGZpcHNfZWNkaF9zZWxmdGVzdC5jIGZpcHNfZWNkc2Ffc2VsZnRlc3Qu YyBmaXBzX2VuYy5jIGZpcHNfbWQuYyBcCi0rICAgIGZpcHNfZGhfc2VsZnRlc3QuYwotIAotIExJ Qk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3Nl bGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAotICAgICBmaXBzX3JzYV9zZWxmdGVzdC5v IGZpcHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFu ZC5vIFwKLSAgICAgZmlwc19yc2FfeDkzMWcubyBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3RyLm8g Zmlwc19kcmJnX2hhc2gubyBmaXBzX2RyYmdfaG1hYy5vIFwKLSAgICAgZmlwc19kcmJnX2xpYi5v IGZpcHNfZHJiZ19yYW5kLm8gZmlwc19kcmJnX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5vIFwK LS0gICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8gZmlwc19lY2RoX3NlbGZ0ZXN0Lm8gZmlwc19lY2Rz YV9zZWxmdGVzdC5vIGZpcHNfZW5jLm8gZmlwc19tZC5vCi0rICAgIGZpcHNfY21hY19zZWxmdGVz dC5vIGZpcHNfZWNkaF9zZWxmdGVzdC5vIGZpcHNfZWNkc2Ffc2VsZnRlc3QubyBmaXBzX2VuYy5v IGZpcHNfbWQubyBcCi0rICAgIGZpcHNfZGhfc2VsZnRlc3QubwotIAotIExJQkNSWVBUTz0tTC4u IC1sY3J5cHRvCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbW9kZXMvZ2NtMTI4 LmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9tb2Rlcy9nY20xMjguYwotLS0tIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9tb2Rlcy9nY20xMjguYy5maXBzLXJlcXMJMjAxMy0wMi0xMSAx NjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbW9kZXMv Z2NtMTI4LmMJMjAxMy0xMi0xOCAxMjoxNzowOS44MDA2Mzc3MzAgKzAxMDAKLUBAIC04OTgsNiAr ODk4LDEwIEBAIGludCBDUllQVE9fZ2NtMTI4X2VuY3J5cHQoR0NNMTI4X0NPTlRFWFQKLSAjIGVu ZGlmCi0gI2VuZGlmCi0gCi0rCWN0eC0+dG90bGVuICs9IGxlbjsKLSsJaWYgKGN0eC0+dG90bGVu PihVNjQoMSk8PDM2KSB8fCAoc2l6ZW9mKGxlbik9PTggJiYgY3R4LT50b3RsZW48bGVuKSkKLSsJ CXJldHVybiAtMTsKLSsKLSAjaWYgMAotIAluID0gKHVuc2lnbmVkIGludCltbGVuJTE2OyAvKiBh bHRlcm5hdGl2ZSB0byBjdHgtPm1yZXMgKi8KLSAjZW5kaWYKLUBAIC0xMjAwLDYgKzEyMDQsMTAg QEAgaW50IENSWVBUT19nY20xMjhfZW5jcnlwdF9jdHIzMihHQ00xMjhfQwotICMgZW5kaWYKLSAj ZW5kaWYKLSAKLSsJY3R4LT50b3RsZW4gKz0gbGVuOwotKwlpZiAoY3R4LT50b3RsZW4+KFU2NCgx KTw8MzYpIHx8IChzaXplb2YobGVuKT09OCAmJiBjdHgtPnRvdGxlbjxsZW4pKQotKwkJcmV0dXJu IC0xOwotKwotIAltbGVuICs9IGxlbjsKLSAJaWYgKG1sZW4+KChVNjQoMSk8PDM2KS0zMikgfHwg KHNpemVvZihsZW4pPT04ICYmIG1sZW48bGVuKSkKLSAJCXJldHVybiAtMTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9tb2Rlcy9tb2Rlc19sY2wuaC5maXBzLXJlcXMgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL21vZGVzL21vZGVzX2xjbC5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRv L21vZGVzL21vZGVzX2xjbC5oLmZpcHMtcmVxcwkyMDEzLTEyLTE4IDEyOjE3OjA5LjM4ODYyODg5 NSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9tb2Rlcy9tb2Rlc19sY2wuaAkyMDEz LTEyLTE4IDEyOjE3OjA5LjgwMDYzNzczMCArMDEwMAotQEAgLTExNSw2ICsxMTUsNyBAQCBzdHJ1 Y3QgZ2NtMTI4X2NvbnRleHQgewotIAl1bnNpZ25lZCBpbnQgbXJlcywgYXJlczsKLSAJYmxvY2sx MjhfZiBibG9jazsKLSAJdm9pZCAqa2V5OwotKwl1NjQgdG90bGVuOwotIH07Ci0gCi0gc3RydWN0 IHh0czEyOF9jb250ZXh0IHsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yYW5kL21k X3JhbmQuYy5maXBzLXJlcXMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCi0t LS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMtcmVxcwkyMDEzLTEy LTE4IDEyOjE3OjA5Ljc2MzYzNjkzNiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9y YW5kL21kX3JhbmQuYwkyMDEzLTEyLTE4IDEyOjE3OjA5LjgwMDYzNzczMCArMDEwMAotQEAgLTE0 MywxMiArMTQzLDYgQEAgc3RhdGljIGxvbmcgbWRfY291bnRbMl09ezAsMH07Ci0gc3RhdGljIGRv dWJsZSBlbnRyb3B5PTA7Ci0gc3RhdGljIGludCBpbml0aWFsaXplZD0wOwotIAotLXN0YXRpYyB1 bnNpZ25lZCBpbnQgY3J5cHRvX2xvY2tfcmFuZCA9IDA7IC8qIG1heSBiZSBzZXQgb25seSB3aGVu IGEgdGhyZWFkCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog aG9sZHMgQ1JZUFRPX0xPQ0tfUkFORAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqICh0byBwcmV2ZW50IGRvdWJsZSBsb2NraW5nKSAqLwotLS8qIGFjY2VzcyB0 byBsb2NraW5fdGhyZWFkIGlzIHN5bmNocm9uaXplZCBieSBDUllQVE9fTE9DS19SQU5EMiAqLwot LXN0YXRpYyBDUllQVE9fVEhSRUFESUQgbG9ja2luZ190aHJlYWRpZDsgLyogdmFsaWQgaWZmIGNy eXB0b19sb2NrX3JhbmQgaXMgc2V0ICovCi0tCi0gCi0gI2lmZGVmIFBSRURJQ1QKLSBpbnQgcmFu ZF9wcmVkaWN0YWJsZT0wOwotQEAgLTE5Niw3ICsxOTAsNyBAQCBzdGF0aWMgdm9pZCBzc2xlYXlf cmFuZF9hZGQoY29uc3Qgdm9pZCAqCi0gCWxvbmcgbWRfY1syXTsKLSAJdW5zaWduZWQgY2hhciBs b2NhbF9tZFtNRF9ESUdFU1RfTEVOR1RIXTsKLSAJRVZQX01EX0NUWCBtOwotLQlpbnQgZG9fbm90 X2xvY2s7Ci0rCWludCBsb2NrZWQ7Ci0gCi0gCS8qCi0gCSAqIChCYXNlZCBvbiB0aGUgcmFuZCgz KSBtYW5wYWdlKQotQEAgLTIxMywxOSArMjA3LDggQEAgc3RhdGljIHZvaWQgc3NsZWF5X3JhbmRf YWRkKGNvbnN0IHZvaWQgKgotICAgICAgICAgICogaGFzaCBmdW5jdGlvbi4KLSAJICovCi0gCi0t CS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbG9jayAqLwotLQlpZiAoY3J5cHRvX2xv Y2tfcmFuZCkKLS0JCXsKLS0JCUNSWVBUT19USFJFQURJRCBjdXI7Ci0tCQlDUllQVE9fVEhSRUFE SURfY3VycmVudCgmY3VyKTsKLS0JCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwot LQkJZG9fbm90X2xvY2sgPSAhQ1JZUFRPX1RIUkVBRElEX2NtcCgmbG9ja2luZ190aHJlYWRpZCwg JmN1cik7Ci0tCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotLQkJfQotLQll bHNlCi0tCQlkb19ub3RfbG9jayA9IDA7Ci0rCWxvY2tlZCA9IHByaXZhdGVfUkFORF9sb2NrKDEp OwotIAotLQlpZiAoIWRvX25vdF9sb2NrKSBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotIAlzdF9pZHg9c3RhdGVfaW5kZXg7Ci0gCi0gCS8qIHVzZSBvdXIgb3duIGNvcGllcyBvZiB0 aGUgY291bnRlcnMgc28gdGhhdCBldmVuCi1AQCAtMjU3LDcgKzI0MCw4IEBAIHN0YXRpYyB2b2lk IHNzbGVheV9yYW5kX2FkZChjb25zdCB2b2lkICoKLSAKLSAJbWRfY291bnRbMV0gKz0gKG51bSAv IE1EX0RJR0VTVF9MRU5HVEgpICsgKG51bSAlIE1EX0RJR0VTVF9MRU5HVEggPiAwKTsKLSAKLS0J aWYgKCFkb19ub3RfbG9jaykgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlp ZiAobG9ja2VkKQotKwkJcHJpdmF0ZV9SQU5EX2xvY2soMCk7Ci0gCi0gCUVWUF9NRF9DVFhfaW5p dCgmbSk7Ci0gCWZvciAoaT0wOyBpPG51bTsgaSs9TURfRElHRVNUX0xFTkdUSCkKLUBAIC0zMDgs NyArMjkyLDcgQEAgc3RhdGljIHZvaWQgc3NsZWF5X3JhbmRfYWRkKGNvbnN0IHZvaWQgKgotIAkJ fQotIAlFVlBfTURfQ1RYX2NsZWFudXAoJm0pOwotIAotLQlpZiAoIWRvX25vdF9sb2NrKSBDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlsb2NrZWQgPSBwcml2YXRlX1JBTkRfbG9j aygxKTsKLSAJLyogRG9uJ3QganVzdCBjb3B5IGJhY2sgbG9jYWxfbWQgaW50byBtZCAtLSB0aGlz IGNvdWxkIG1lYW4gdGhhdAotIAkgKiBvdGhlciB0aHJlYWQncyBzZWVkaW5nIHJlbWFpbnMgd2l0 aG91dCBlZmZlY3QgKGV4Y2VwdCBmb3IKLSAJICogdGhlIGluY3JlbWVudGVkIGNvdW50ZXIpLiAg QnkgWE9SaW5nIGl0IHdlIGtlZXAgYXQgbGVhc3QgYXMKLUBAIC0zMTksNyArMzAzLDggQEAgc3Rh dGljIHZvaWQgc3NsZWF5X3JhbmRfYWRkKGNvbnN0IHZvaWQgKgotIAkJfQotIAlpZiAoZW50cm9w eSA8IEVOVFJPUFlfTkVFREVEKSAvKiBzdG9wIGNvdW50aW5nIHdoZW4gd2UgaGF2ZSBlbm91Z2gg Ki8KLSAJICAgIGVudHJvcHkgKz0gYWRkOwotLQlpZiAoIWRvX25vdF9sb2NrKSBDUllQVE9fd191 bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWlmIChsb2NrZWQpCi0rCQlwcml2YXRlX1JBTkRf bG9jaygwKTsKLSAJCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfVEhSRUFEUykgJiYgIWRlZmluZWQo T1BFTlNTTF9TWVNfV0lOMzIpCi0gCWFzc2VydChtZF9jWzFdID09IG1kX2NvdW50WzFdKTsKLUBA IC0zNDQsNiArMzI5LDcgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBj aAotIAlwaWRfdCBjdXJyX3BpZCA9IGdldHBpZCgpOwotICNlbmRpZgotIAlpbnQgZG9fc3Rpcl9w b29sID0gMDsKLSsJaW50IGxvY2tlZDsKLSAKLSAjaWZkZWYgUFJFRElDVAotIAlpZiAocmFuZF9w cmVkaWN0YWJsZSkKLUBAIC0zODEsMTMgKzM2Nyw3IEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRf Ynl0ZXModW5zaWduZWQgY2gKLSAJICogZ2xvYmFsICdtZCcuCi0gCSAqLwotIAotLQlDUllQVE9f d19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotLQotLQkvKiBwcmV2ZW50IHNzbGVheV9yYW5kX2J5 dGVzKCkgZnJvbSB0cnlpbmcgdG8gb2J0YWluIHRoZSBsb2NrIGFnYWluICovCi0tCUNSWVBUT193 X2xvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotLQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmbG9j a2luZ190aHJlYWRpZCk7Ci0tCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0t CWNyeXB0b19sb2NrX3JhbmQgPSAxOwotKwlsb2NrZWQgPSBwcml2YXRlX1JBTkRfbG9jaygxKTsK LSAKLSAJLyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFsIGVudHJvcHkgaW4gRklQUyBtb2RlLCBk cmJnIHByb3ZpZGVzIHRoZSAKLSAJICogZXhwYW5zaW9uCi1AQCAtNDYxLDkgKzQ0MSw4IEBAIHN0 YXRpYyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKLSAKLSAJbWRfY291bnRbMF0g Kz0gMTsKLSAKLS0JLyogYmVmb3JlIHVubG9ja2luZywgd2UgbXVzdCBjbGVhciAnY3J5cHRvX2xv Y2tfcmFuZCcgKi8KLS0JY3J5cHRvX2xvY2tfcmFuZCA9IDA7Ci0tCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19SQU5EKTsKLSsJaWYgKGxvY2tlZCkKLSsJCXByaXZhdGVfUkFORF9sb2NrKDAp OwotIAotIAl3aGlsZSAobnVtID4gMCkKLSAJCXsKLUBAIC01MTUsMTAgKzQ5NCwxMSBAQCBzdGF0 aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCi0gCU1EX0luaXQoJm0pOwotIAlN RF9VcGRhdGUoJm0sKHVuc2lnbmVkIGNoYXIgKikmKG1kX2NbMF0pLHNpemVvZihtZF9jKSk7Ci0g CU1EX1VwZGF0ZSgmbSxsb2NhbF9tZCxNRF9ESUdFU1RfTEVOR1RIKTsKLS0JQ1JZUFRPX3dfbG9j ayhDUllQVE9fTE9DS19SQU5EKTsKLSsJbG9ja2VkID0gcHJpdmF0ZV9SQU5EX2xvY2soMSk7Ci0g CU1EX1VwZGF0ZSgmbSxtZCxNRF9ESUdFU1RfTEVOR1RIKTsKLSAJTURfRmluYWwoJm0sbWQpOwot LQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWlmIChsb2NrZWQpCi0rCQlw cml2YXRlX1JBTkRfbG9jaygwKTsKLSAKLSAJRVZQX01EX0NUWF9jbGVhbnVwKCZtKTsKLSAJaWYg KG9rKQotQEAgLTU0OCwzMiArNTI4LDEwIEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfcHNldWRv X2J5dGVzKHVuc2kKLSAKLSBzdGF0aWMgaW50IHNzbGVheV9yYW5kX3N0YXR1cyh2b2lkKQotIAl7 Ci0tCUNSWVBUT19USFJFQURJRCBjdXI7Ci0gCWludCByZXQ7Ci0tCWludCBkb19ub3RfbG9jazsK LSsJaW50IGxvY2tlZDsKLSAKLS0JQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7Ci0tCS8q IGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbG9jawotLQkgKiAoY291bGQgaGFwcGVuIGlm IGEgUkFORF9wb2xsKCkgaW1wbGVtZW50YXRpb24gY2FsbHMgUkFORF9zdGF0dXMoKSkgKi8KLS0J aWYgKGNyeXB0b19sb2NrX3JhbmQpCi0tCQl7Ci0tCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NL X1JBTkQyKTsKLS0JCWRvX25vdF9sb2NrID0gIUNSWVBUT19USFJFQURJRF9jbXAoJmxvY2tpbmdf dGhyZWFkaWQsICZjdXIpOwotLQkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsK LS0JCX0KLS0JZWxzZQotLQkJZG9fbm90X2xvY2sgPSAwOwotLQkKLS0JaWYgKCFkb19ub3RfbG9j aykKLS0JCXsKLS0JCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0tCQkKLS0JCS8q IHByZXZlbnQgc3NsZWF5X3JhbmRfYnl0ZXMoKSBmcm9tIHRyeWluZyB0byBvYnRhaW4gdGhlIGxv Y2sgYWdhaW4gKi8KLS0JCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotLQkJQ1JZ UFRPX1RIUkVBRElEX2NweSgmbG9ja2luZ190aHJlYWRpZCwgJmN1cik7Ci0tCQlDUllQVE9fd191 bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotLQkJY3J5cHRvX2xvY2tfcmFuZCA9IDE7Ci0tCQl9 Ci0rCWxvY2tlZCA9IHByaXZhdGVfUkFORF9sb2NrKDEpOwotIAkKLSAJaWYgKCFpbml0aWFsaXpl ZCkKLSAJCXsKLUBAIC01ODMsMTMgKzU0MSw4IEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfc3Rh dHVzKHZvaWQpCi0gCi0gCXJldCA9IGVudHJvcHkgPj0gRU5UUk9QWV9ORUVERUQ7Ci0gCi0tCWlm ICghZG9fbm90X2xvY2spCi0tCQl7Ci0tCQkvKiBiZWZvcmUgdW5sb2NraW5nLCB3ZSBtdXN0IGNs ZWFyICdjcnlwdG9fbG9ja19yYW5kJyAqLwotLQkJY3J5cHRvX2xvY2tfcmFuZCA9IDA7Ci0tCQkK LS0JCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLS0JCX0KLSsJaWYgKGxvY2tl ZCkKLSsJCXByaXZhdGVfUkFORF9sb2NrKDApOwotIAkKLSAJcmV0dXJuIHJldDsKLSAJfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMtcmVxcyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vcmFuZC9yYW5kLmgKLS0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmFu ZC9yYW5kLmguZmlwcy1yZXFzCTIwMTMtMTItMTggMTI6MTc6MDkuNzY0NjM2OTU4ICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFuZC5oCTIwMTMtMTItMTggMTI6MTc6MDku ODAwNjM3NzMwICswMTAwCi1AQCAtMTI0LDYgKzEyNCw4IEBAIHZvaWQgUkFORF9zZXRfZmlwc19k cmJnX3R5cGUoaW50IHR5cGUsIGkKLSBpbnQgUkFORF9pbml0X2ZpcHModm9pZCk7Ci0gI2VuZGlm Ci0gCi0raW50IHByaXZhdGVfUkFORF9sb2NrKGludCBsb2NrKTsKLSsKLSAvKiBCRUdJTiBFUlJP UiBDT0RFUyAqLwotIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5 IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0gICogbWFkZSBhZnRlciB0aGlzIHBv aW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oLmZpcHMtcmVxcyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oCi0tLS0gb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL3JhbmQvcmFuZF9sY2wuaC5maXBzLXJlcXMJMjAxMy0xMi0xOCAxMjoxNzowOS41MDc2MzE0 NDcgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oCTIwMTMt MTItMTggMTI6MTc6MDkuODAwNjM3NzMwICswMTAwCi1AQCAtMTEyLDcgKzExMiw3IEBACi0gI2lm bmRlZiBIRUFERVJfUkFORF9MQ0xfSAotICNkZWZpbmUgSEVBREVSX1JBTkRfTENMX0gKLSAKLS0j ZGVmaW5lIEVOVFJPUFlfTkVFREVEIDMyICAvKiByZXF1aXJlIDI1NiBiaXRzID0gMzIgYnl0ZXMg b2YgcmFuZG9tbmVzcyAqLwotKyNkZWZpbmUgRU5UUk9QWV9ORUVERUQgNDggIC8qIHJlcXVpcmUg Mzg0IGJpdHMgPSA0OCBieXRlcyBvZiByYW5kb21uZXNzICovCi0gCi0gCi0gI2lmICFkZWZpbmVk KFVTRV9NRDVfUkFORCkgJiYgIWRlZmluZWQoVVNFX1NIQTFfUkFORCkgJiYgIWRlZmluZWQoVVNF X01EQzJfUkFORCkgJiYgIWRlZmluZWQoVVNFX01EMl9SQU5EKQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzLXJlcXMgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yYW5kL3JhbmRf bGliLmMuZmlwcy1yZXFzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwkyMDEzLTEyLTE4IDE4OjE2OjQ1 LjYyNTg1MDczMCArMDEwMAotQEAgLTE4MSw2ICsxODEsNDEgQEAgaW50IFJBTkRfc3RhdHVzKHZv aWQpCi0gCXJldHVybiAwOwotIAl9Ci0gCi0raW50IHByaXZhdGVfUkFORF9sb2NrKGludCBsb2Nr KQotKwl7Ci0rCXN0YXRpYyBpbnQgY3J5cHRvX2xvY2tfcmFuZDsKLSsJc3RhdGljIENSWVBUT19U SFJFQURJRCBsb2NraW5nX3RocmVhZGlkOwotKwlpbnQgZG9fbG9jazsKLSsKLSsJaWYgKCFsb2Nr KQotKwkJewotKwkJY3J5cHRvX2xvY2tfcmFuZCA9IDA7Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJLyogY2hlY2sgaWYgd2Ug YWxyZWFkeSBoYXZlIHRoZSBsb2NrICovCi0rCWlmIChjcnlwdG9fbG9ja19yYW5kKQotKwkJewot KwkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKLSsJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIp OwotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0rCQlkb19sb2NrID0gISFD UllQVE9fVEhSRUFESURfY21wKCZsb2NraW5nX3RocmVhZGlkLCAmY3VyKTsKLSsJCUNSWVBUT19y X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0rCQl9Ci0rICAgICAgICBlbHNlCi0rCQlkb19s b2NrID0gMTsKLSsJaWYgKGRvX2xvY2spCi0rCQl7Ci0rCQlDUllQVE9fd19sb2NrKENSWVBUT19M T0NLX1JBTkQpOwotKwkJY3J5cHRvX2xvY2tfcmFuZCA9IDE7Ci0rCQlDUllQVE9fd19sb2NrKENS WVBUT19MT0NLX1JBTkQyKTsKLSsJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZsb2NraW5nX3Ro cmVhZGlkKTsKLSsJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0rCQl9Ci0r CXJldHVybiBkb19sb2NrOwotKwl9Ci0rCi0gI2lmZGVmIE9QRU5TU0xfRklQUwotIAotIC8qIEZJ UFMgRFJCRyBpbml0aWFsaXNhdGlvbiBjb2RlLiBUaGlzIHNldHMgdXAgdGhlIERSQkcgZm9yIHVz ZSBieSB0aGUKLUBAIC0yMzksMTIgKzI3NCwxNiBAQCBzdGF0aWMgaW50IGRyYmdfcmFuZF9hZGQo RFJCR19DVFggKmN0eCwKLSAJCQkJZG91YmxlIGVudHJvcHkpCi0gCXsKLSAJUkFORF9TU0xlYXko KS0+YWRkKGluLCBpbmxlbiwgZW50cm9weSk7Ci0rCWlmIChGSVBTX3JhbmRfc3RhdHVzKCkpCi0r CQlGSVBTX2RyYmdfcmVzZWVkKGN0eCwgTlVMTCwgMCk7Ci0gCXJldHVybiAxOwotIAl9Ci0gCi0g c3RhdGljIGludCBkcmJnX3JhbmRfc2VlZChEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICppbiwg aW50IGlubGVuKQotIAl7Ci0gCVJBTkRfU1NMZWF5KCktPnNlZWQoaW4sIGlubGVuKTsKLSsJaWYg KEZJUFNfcmFuZF9zdGF0dXMoKSkKLSsJCUZJUFNfZHJiZ19yZXNlZWQoY3R4LCBOVUxMLCAwKTsK LSAJcmV0dXJuIDE7Ci0gCX0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2Ev cnNhX2dlbi5jLmZpcHMtcmVxcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9nZW4uYwot LS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMtcmVxcwkyMDEzLTEy LTE4IDEyOjE3OjA5Ljc2NDYzNjk1OCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9y c2EvcnNhX2dlbi5jCTIwMTMtMTItMTkgMTc6NDA6NTguNDgzMTU0MzE0ICswMTAwCi1AQCAtMSw1 ICsxLDYgQEAKLSAvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLwotIC8qIENvcHlyaWdodCAoQykg MTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIENvcHlyaWdodCAo QykgMjAxMyBSZWQgSGF0LCBJbmMuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAq IFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotQEAgLTE2NSw2 ICsxNjYsMjIyIEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYmkKLSAJ cmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKLSAJfQot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgaW50IEZJUFNfcnNhX2J1aWx0aW5fa2V5 Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpCi0r CXsKLSsJQklHTlVNICpyMCA9IE5VTEwsICpyMSA9IE5VTEwsICpyMiA9IE5VTEwsICpyMyA9IE5V TEwsICp0bXA7Ci0rCUJJR05VTSBsb2NhbF9yMCwgbG9jYWxfZCwgbG9jYWxfcDsKLSsJQklHTlVN ICpwcjAsICpkLCAqcDsKLSsJQk5fQ1RYICpjdHggPSBOVUxMOwotKwlpbnQgb2sgPSAtMTsKLSsJ aW50IGk7Ci0rICAgICAgICBpbnQgbiA9IDA7Ci0rCWludCB0ZXN0ID0gMDsKLSsgICAgICAgIGlu dCBwYml0cyA9IGJpdHMvMjsKLSsKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsK LSsJCUZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiwgRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJICAgIAlyZXR1cm4gMDsKLSsJICAgIAl9Ci0rCi0rCWlmIChiaXRzICE9 IDIwNDggJiYgYml0cyAhPSAzMDcyKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfUlNBX0JVSUxU SU5fS0VZR0VOLCBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKLSsJCXJldHVybiAwOwotKwkJ fQotKwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7 Ci0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjEgPSBC Tl9DVFhfZ2V0KGN0eCk7Ci0rCXIyID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMyA9IEJOX0NUWF9n ZXQoY3R4KTsKLSsKLSsJaWYgKHIzID09IE5VTEwpIGdvdG8gZXJyOwotKwotKwkvKiBXZSBuZWVk IHRoZSBSU0EgY29tcG9uZW50cyBub24tTlVMTCAqLwotKwlpZiAoIXJzYS0+biAmJiAoKHJzYS0+ bj1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwlpZiAoIXJzYS0+ZCAmJiAoKHJzYS0+ ZD1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwlpZiAoIXJzYS0+ZSAmJiAoKHJzYS0+ ZT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwlpZiAoIXJzYS0+cCAmJiAoKHJzYS0+ cD1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwlpZiAoIXJzYS0+cSAmJiAoKHJzYS0+ cT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwlpZiAoIXJzYS0+ZG1wMSAmJiAoKHJz YS0+ZG1wMT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwlpZiAoIXJzYS0+ZG1xMSAm JiAoKHJzYS0+ZG1xMT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwlpZiAoIXJzYS0+ aXFtcCAmJiAoKHJzYS0+aXFtcD1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOwotKwotKwlp ZiAoIUJOX3NldF93b3JkKHIwLCBSU0FfRjQpKSBnb3RvIGVycjsKLSsJaWYgKEJOX2NtcChlX3Zh bHVlLCByMCkgPCAwIHx8IEJOX251bV9iaXRzKGVfdmFsdWUpID4gMjU2KQotKwkJewotKwkJb2sg PSAwOyAvKiB3ZSBzZXQgb3VyIG93biBlcnIgKi8KLSsJCVJTQWVycihSU0FfRl9SU0FfQlVJTFRJ Tl9LRVlHRU4sUlNBX1JfQkFEX0VfVkFMVUUpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8q IHByZXBhcmUgYXBwcm94aW1hdGUgbWluaW11bSBwIGFuZCBxICovCi0rCWlmICghQk5fc2V0X3dv cmQocjAsIDB4QjUwNEYzMzQpKSBnb3RvIGVycjsKLSsJaWYgKCFCTl9sc2hpZnQocjAsIHIwLCBw Yml0cyAtIDMyKSkgZ290byBlcnI7Ci0rCi0rCS8qIHByZXBhcmUgbWluaW11bSBwIGFuZCBxIGRp ZmZlcmVuY2UgKi8KLSsJaWYgKCFCTl9vbmUocjMpKSBnb3RvIGVycjsKLSsJaWYgKCFCTl9sc2hp ZnQocjMsIHIzLCBwYml0cyAtIDEwMCkpIGdvdG8gZXJyOwotKwotKwlCTl9jb3B5KHJzYS0+ZSwg ZV92YWx1ZSk7Ci0rCi0rCWlmICghQk5faXNfemVybyhyc2EtPnApICYmICFCTl9pc196ZXJvKHJz YS0+cSkpCi0rCQl0ZXN0ID0gMTsKLSsKLSsJLyogZ2VuZXJhdGUgcCBhbmQgcSAqLwotKwlmb3Ig KGkgPSAwOyBpIDwgNSAqIHBiaXRzOyBpKyspCi0rCQl7Ci0rICAgICAgICBwbG9vcDoKLSsgICAg ICAgICAgICAgICAgaWYgKCF0ZXN0KQotKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQk5f cmFuZChyc2EtPnAsIHBiaXRzLCAwLCAxKSkgZ290byBlcnI7Ci0rICAgICAgICAgICAgICAgIGlm IChCTl9jbXAocnNhLT5wLCByMCkgPCAwKQotKyAgICAgICAgICAgICAgICAgICAgICAgIHsKLSsg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdCkgZ290byBlcnI7Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBwbG9vcDsKLSsgICAgICAgICAgICAgICAgICAgICAgICB9Ci0rCi0r CQlpZiAoIUJOX3N1YihyMiwgcnNhLT5wLCBCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOwotKwkJ aWYgKCFCTl9nY2QocjEsIHIyLCByc2EtPmUsIGN0eCkpIGdvdG8gZXJyOwotKwkJaWYgKEJOX2lz X29uZShyMSkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICAg ICAgICAgIGludCByOwotKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBCTl9pc19wcmltZV9m YXN0dGVzdF9leChyc2EtPnAsIHBiaXRzPjEwMjQ/NDo1LCBjdHgsIDAsIGNiKTsKLSsgICAgICAg IAkJaWYgKHIgPT0gLTEgfHwgKHRlc3QgJiYgciA8PSAwKSkgZ290byBlcnI7Ci0rICAgICAgICAJ CWlmIChyID4gMCkgYnJlYWs7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgfSAKLSsKLSsJCWlm KCFCTl9HRU5DQl9jYWxsKGNiLCAyLCBuKyspKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlp ZighQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpCi0rCQlnb3RvIGVycjsKLSsKLSsgICAgICAgIGlm KGkgPj0gNSpwYml0cykKLSsgICAgICAgICAgICAgICAgLyogcHJpbWUgbm90IGZvdW5kICovCi0r ICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgNSAqIHBiaXRz OyBpKyspCi0rCQl7Ci0rICAgICAgICBxbG9vcDoKLSsgICAgICAgICAgICAgICAgaWYgKCF0ZXN0 KQotKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQk5fcmFuZChyc2EtPnEsIHBiaXRzLCAw LCAxKSkgZ290byBlcnI7Ci0rICAgICAgICAgICAgICAgIGlmIChCTl9jbXAocnNhLT5xLCByMCkg PCAwKQotKyAgICAgICAgICAgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgICAgICAg ICBpZiAodGVzdCkgZ290byBlcnI7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgZ290byBxbG9v cDsKLSsgICAgICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgIAkJaWYgKCFCTl9zdWIocjIs IHJzYS0+cSwgcnNhLT5wKSkgZ290byBlcnI7Ci0rICAgICAgICAgICAgICAgIGlmIChCTl91Y21w KHIyLCByMykgPD0gMCkKLSsgICAgICAgICAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHRlc3QpIGdvdG8gZXJyOwotKyAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gcWxvb3A7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgfQotKwotKwkJaWYgKCFCTl9z dWIocjIsIHJzYS0+cSwgQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKLSsJCWlmICghQk5fZ2Nk KHIxLCByMiwgcnNhLT5lLCBjdHgpKSBnb3RvIGVycjsKLSsJCWlmIChCTl9pc19vbmUocjEpKQot KyAgICAgICAgICAgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgICAgICAgICBpbnQg cjsKLSsgICAgICAgICAgICAgICAgICAgICAgICByID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgo cnNhLT5xLCBwYml0cz4xMDI0PzQ6NSwgY3R4LCAwLCBjYik7Ci0rICAgICAgICAJCWlmIChyID09 IC0xIHx8ICh0ZXN0ICYmIHIgPD0gMCkpIGdvdG8gZXJyOwotKyAgICAgICAgCQlpZiAociA+IDAp IGJyZWFrOwotKyAgICAgICAgICAgICAgICAgICAgICAgIH0gCi0rCi0rCQlpZighQk5fR0VOQ0Jf Y2FsbChjYiwgMiwgbisrKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYoIUJOX0dFTkNC X2NhbGwoY2IsIDMsIDEpKQotKwkJZ290byBlcnI7Ci0rCi0rICAgICAgICBpZihpID49IDUqcGJp dHMpCi0rICAgICAgICAgICAgICAgIC8qIHByaW1lIG5vdCBmb3VuZCAqLwotKyAgICAgICAgICAg ICAgICBnb3RvIGVycjsKLSsKLSsgICAgICAgIGlmICh0ZXN0KQotKyAgICAgICAgICAgICAgICB7 Ci0rICAgICAgICAgICAgICAgIC8qIGRvIG5vdCB0cnkgdG8gY2FsY3VsYXRlIHRoZSByZW1haW5p bmcga2V5IHZhbHVlcyAqLwotKyAgICAgICAgICAgICAgICBCTl9jbGVhcihyc2EtPm4pOwotKyAg ICAgICAgICAgICAgICBvayA9IDE7Ci0rICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAg ICAgICAgICAgICB9Ci0rCi0rCWlmIChCTl9jbXAocnNhLT5wLHJzYS0+cSkgPCAwKQotKwkJewot KwkJdG1wPXJzYS0+cDsKLSsJCXJzYS0+cD1yc2EtPnE7Ci0rCQlyc2EtPnE9dG1wOwotKwkJfQot KwotKwkvKiBjYWxjdWxhdGUgbiAqLwotKwlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJzYS0+ cSxjdHgpKSBnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgKi8KLSsJaWYgKCFCTl9zdWIo cjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7CS8qIHAtMSAqLwotKwlpZiAoIUJO X3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsJLyogcS0xICovCi0rCWlm ICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpIGdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCi0rCWlm ICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQotKwkJewotKwkJICBwcjAg PSAmbG9jYWxfcjA7Ci0rCQkgIEJOX3dpdGhfZmxhZ3MocHIwLCByMCwgQk5fRkxHX0NPTlNUVElN RSk7Ci0rCQl9Ci0rCWVsc2UKLSsJICBwcjAgPSByMDsKLSsJaWYgKCFCTl9tb2RfaW52ZXJzZShy c2EtPmQscnNhLT5lLHByMCxjdHgpKSBnb3RvIGVycjsJLyogZCAqLwotKwotKwkvKiBzZXQgdXAg ZCBmb3IgY29ycmVjdCBCTl9GTEdfQ09OU1RUSU1FIGZsYWcgKi8KLSsJaWYgKCEocnNhLT5mbGFn cyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0rCQl7Ci0rCQlkID0gJmxvY2FsX2Q7Ci0rCQlC Tl93aXRoX2ZsYWdzKGQsIHJzYS0+ZCwgQk5fRkxHX0NPTlNUVElNRSk7Ci0rCQl9Ci0rCWVsc2UK LSsJCWQgPSByc2EtPmQ7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLwotKwlpZiAo IUJOX21vZChyc2EtPmRtcDEsZCxyMSxjdHgpKSBnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRl IGQgbW9kIChxLTEpICovCi0rCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxkLHIyLGN0eCkpIGdvdG8g ZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCi0rCWlmICghKHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQotKwkJewotKwkJcCA9ICZsb2NhbF9w OwotKwkJQk5fd2l0aF9mbGFncyhwLCByc2EtPnAsIEJOX0ZMR19DT05TVFRJTUUpOwotKwkJfQot KwllbHNlCi0rCQlwID0gcnNhLT5wOwotKwlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxy c2EtPnEscCxjdHgpKSBnb3RvIGVycjsKLSsKLSsJaWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwp Ci0rCQlCTl9hZGRfd29yZChyc2EtPm4sIDEpOwotKwotKwlpZighZmlwc19jaGVja19yc2EocnNh KSkKLSsJICAgIGdvdG8gZXJyOwotKwotKwlvaz0xOwotK2VycjoKLSsJaWYgKG9rID09IC0xKQot KwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9CVUlMVElOX0tFWUdFTixFUlJfTElCX0JOKTsKLSsJ CW9rID0gMDsKLSsJCX0KLSsJaWYgKGN0eCAhPSBOVUxMKQotKwkJewotKwkJQk5fQ1RYX2VuZChj dHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsKLSsJcmV0dXJuIG9rOwotKwl9Ci0r I2VuZGlmCi0rCi0gc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBi aXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYikKLSAJewotIAlCSUdOVU0gKnIwPU5V TEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEwsKnRtcDsKLUBAIC0xNzYsMTcgKzM5Myw3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAotICNpZmRlZiBPUEVOU1NM X0ZJUFMKLSAJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSAJCXsKLS0JCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0tCSAgICAJewotLQkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElO X0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotLQkgICAgCXJldHVybiAwOwot LQkgICAgCX0KLS0KLS0JCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKQotLQkJICAgIHsKLS0JCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4s RklQU19SX0tFWV9UT09fU0hPUlQpOwotLQkJICAgIHJldHVybiAwOwotLQkJICAgIH0KLSsJCXJl dHVybiBGSVBTX3JzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKLSAJ CX0KLSAjZW5kaWYKLSAKLUBAIC0zMDEsMTcgKzUwOCw2IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0 aW5fa2V5Z2VuKFJTQSAqcnNhLAotIAkJcCA9IHJzYS0+cDsKLSAJaWYgKCFCTl9tb2RfaW52ZXJz ZShyc2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBlcnI7Ci0gCi0tI2lmZGVmIE9QRU5TU0xf RklQUwotLQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotLQkJewotLQkJaWYgKGZpcHNfcnNhX3Bh aXJ3aXNlX2ZhaWwpCi0tCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsKLS0KLS0JCWlmKCFmaXBz X2NoZWNrX3JzYShyc2EpKQotLQkJICAgIGdvdG8gZXJyOwotLQkJfQotLSNlbmRpZgotLQotIAlv az0xOwotIGVycjoKLSAJaWYgKG9rID09IC0xKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvc3Ns L3QxX2VuYy5jLmZpcHMtcmVxcyBvcGVuc3NsLTEuMC4xZS9zc2wvdDFfZW5jLmMKLS0tLSBvcGVu c3NsLTEuMC4xZS9zc2wvdDFfZW5jLmMuZmlwcy1yZXFzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvc3NsL3QxX2VuYy5jCTIwMTMtMTItMTgg MTI6MTc6MDkuODAxNjM3NzUxICswMTAwCi1AQCAtMjkxLDYgKzI5MSwyNyBAQCBzdGF0aWMgaW50 IHRsczFfUFJGKGxvbmcgZGlnZXN0X21hc2ssCi0gZXJyOgotIAlyZXR1cm4gcmV0OwotIH0KLSsK LStpbnQgcHJpdmF0ZV90bHMxX1BSRihsb25nIGRpZ2VzdF9tYXNrLAotKwkJICAgICBjb25zdCB2 b2lkICpzZWVkMSwgaW50IHNlZWQxX2xlbiwKLSsJCSAgICAgY29uc3Qgdm9pZCAqc2VlZDIsIGlu dCBzZWVkMl9sZW4sCi0rCQkgICAgIGNvbnN0IHZvaWQgKnNlZWQzLCBpbnQgc2VlZDNfbGVuLAot KwkJICAgICBjb25zdCB2b2lkICpzZWVkNCwgaW50IHNlZWQ0X2xlbiwKLSsJCSAgICAgY29uc3Qg dm9pZCAqc2VlZDUsIGludCBzZWVkNV9sZW4sCi0rCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KnNlYywgaW50IHNsZW4sCi0rCQkgICAgIHVuc2lnbmVkIGNoYXIgKm91dDEsCi0rCQkgICAgIHVu c2lnbmVkIGNoYXIgKm91dDIsIGludCBvbGVuKQotKwl7Ci0rCXJldHVybiB0bHMxX1BSRihkaWdl c3RfbWFzaywKLSsJCXNlZWQxLCBzZWVkMV9sZW4sCi0rCQlzZWVkMiwgc2VlZDJfbGVuLAotKwkJ c2VlZDMsIHNlZWQzX2xlbiwKLSsJCXNlZWQ0LCBzZWVkNF9sZW4sCi0rCQlzZWVkNSwgc2VlZDVf bGVuLAotKwkJc2VjLCBzbGVuLAotKwkJb3V0MSwgb3V0Miwgb2xlbik7Ci0rCX0KLSsKLSBzdGF0 aWMgaW50IHRsczFfZ2VuZXJhdGVfa2V5X2Jsb2NrKFNTTCAqcywgdW5zaWduZWQgY2hhciAqa20s Ci0gCSAgICAgdW5zaWduZWQgY2hhciAqdG1wLCBpbnQgbnVtKQotIAl7CgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMWUtcmVxLWtleWxlbi5wYXRjaCBiL29wZW5zc2wtMS4wLjFlLXJlcS1rZXls ZW4ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NzRiYjguLjAwMDAwMDAK LS0tIGEvb3BlbnNzbC0xLjAuMWUtcmVxLWtleWxlbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDM4ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2FwcHMvcmVxLmMua2V5bGVuIG9w ZW5zc2wtMS4wLjFlL2FwcHMvcmVxLmMKLS0tLSBvcGVuc3NsLTEuMC4xZS9hcHBzL3JlcS5jLmtl eWxlbgkyMDE0LTAyLTEyIDE0OjU4OjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjFlL2FwcHMvcmVxLmMJMjAxNC0wMi0xNCAxMzo1Mjo0OC42OTIzMjUwMDAgKzAxMDAKLUBAIC02 NDQsNiArNjQ0LDEyIEBAIGJhZDoKLSAJCWlmIChpbnJhbmQpCi0gCQkJYXBwX1JBTkRfbG9hZF9m aWxlcyhpbnJhbmQpOwotIAotKwkJaWYgKG5ld2tleSA8PSAwKQotKwkJCXsKLSsJCQlpZiAoIU5D T05GX2dldF9udW1iZXIocmVxX2NvbmYsU0VDVElPTixCSVRTLCAmbmV3a2V5KSkKLSsJCQkJbmV3 a2V5PURFRkFVTFRfS0VZX0xFTkdUSDsKLSsJCQl9Ci0rCi0gCQlpZiAoa2V5YWxnKQotIAkJCXsK LSAJCQlnZW5jdHggPSBzZXRfa2V5Z2VuX2N0eChiaW9fZXJyLCBrZXlhbGcsICZwa2V5X3R5cGUs ICZuZXdrZXksCi1AQCAtNjUxLDEyICs2NTcsNiBAQCBiYWQ6Ci0gCQkJaWYgKCFnZW5jdHgpCi0g CQkJCWdvdG8gZW5kOwotIAkJCX0KLS0JCi0tCQlpZiAobmV3a2V5IDw9IDApCi0tCQkJewotLQkJ CWlmICghTkNPTkZfZ2V0X251bWJlcihyZXFfY29uZixTRUNUSU9OLEJJVFMsICZuZXdrZXkpKQot LQkJCQluZXdrZXk9REVGQVVMVF9LRVlfTEVOR1RIOwotLQkJCX0KLSAKLSAJCWlmIChuZXdrZXkg PCBNSU5fS0VZX0xFTkdUSCAmJiAocGtleV90eXBlID09IEVWUF9QS0VZX1JTQSB8fCBwa2V5X3R5 cGUgPT0gRVZQX1BLRVlfRFNBKSkKLSAJCQl7Ci1AQCAtMTY0OSw2ICsxNjQ5LDggQEAgc3RhdGlj IEVWUF9QS0VZX0NUWCAqc2V0X2tleWdlbl9jdHgoQklPCi0gCQkJCWtleWxlbiA9IGF0b2wocCAr IDEpOwotIAkJCQkqcGtleWxlbiA9IGtleWxlbjsKLSAJCQkJfQotKwkJCWVsc2UKLSsJCQkJa2V5 bGVuID0gKnBrZXlsZW47Ci0gCQkJfQotIAkJZWxzZSBpZiAocCkKLSAJCQlwYXJhbWZpbGUgPSBw ICsgMTsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xZS1zc2wyLW5vLWVjLnBhdGNoIGIvb3Bl bnNzbC0xLjAuMWUtc3NsMi1uby1lYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi44MWFkNDcyCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMWUtc3NsMi1u by1lYy5wYXRjaApAQCAtMCwwICsxLDE3IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9zc2wv czIzX2xpYi5jLnNzbDJub2VjIG9wZW5zc2wtMS4wLjFlL3NzbC9zMjNfbGliLmMKKy0tLSBvcGVu c3NsLTEuMC4xZS9zc2wvczIzX2xpYi5jLnNzbDJub2VjCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvc3NsL3MyM19saWIuYwkyMDE0LTA1LTA2 IDE1OjUxOjU0LjA1MzI5MzY3NCArMDIwMAorQEAgLTEwNyw2ICsxMDcsMTMgQEAgaW50IHNzbDIz X3B1dF9jaXBoZXJfYnlfY2hhcihjb25zdCBTU0xfQworIAlsb25nIGw7CisgCisgCS8qIFdlIGNh biB3cml0ZSBTU0x2MiBhbmQgU1NMdjMgY2lwaGVycyAqLworKwkvKiBidXQgbm8gRUNDIGNpcGhl cnMgKi8KKysJaWYgKGMtPmFsZ29yaXRobV9ta2V5ID09IFNTTF9rRUNESHIgfHwKKysJCWMtPmFs Z29yaXRobV9ta2V5ID09IFNTTF9rRUNESGUgfHwKKysJCWMtPmFsZ29yaXRobV9ta2V5ID09IFNT TF9rRUVDREggfHwKKysJCWMtPmFsZ29yaXRobV9hdXRoID09IFNTTF9hRUNESCB8fAorKwkJYy0+ YWxnb3JpdGhtX2F1dGggPT0gU1NMX2FFQ0RTQSkKKysJCXJldHVybiAwOworIAlpZiAocCAhPSBO VUxMKQorIAkJeworIAkJbD1jLT5pZDsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xZy0zZGVz LXN0cmVuZ3RoLnBhdGNoIGIvb3BlbnNzbC0xLjAuMWctM2Rlcy1zdHJlbmd0aC5wYXRjaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWMwNTRkCi0tLSAvZGV2L251bGwKKysr IGIvb3BlbnNzbC0xLjAuMWctM2Rlcy1zdHJlbmd0aC5wYXRjaApAQCAtMCwwICsxLDE2OCBAQAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvc3NsL3MyX2xpYi5jLjNkZXMtc3RyZW5ndGggb3BlbnNz bC0xLjAuMWcvc3NsL3MyX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWcvc3NsL3MyX2xpYi5jLjNk ZXMtc3RyZW5ndGgJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xZy9zc2wvczJfbGliLmMJMjAxNC0wNS0wNiAxNjozMzo0NS42NDYzNTg0MTggKzAy MDAKK0BAIC0yNTAsNyArMjUwLDcgQEAgT1BFTlNTTF9HTE9CQUwgY29uc3QgU1NMX0NJUEhFUiBz c2wyX2NpcAorIAlTU0xfU1NMVjIsCisgCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorIAkwLAorLQkx NjgsCisrCTEyOCwKKyAJMTY4LAorIAl9LAorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvc3Ns L3MzX2xpYi5jLjNkZXMtc3RyZW5ndGggb3BlbnNzbC0xLjAuMWcvc3NsL3MzX2xpYi5jCistLS0g b3BlbnNzbC0xLjAuMWcvc3NsL3MzX2xpYi5jLjNkZXMtc3RyZW5ndGgJMjAxNC0wMy0xNyAxNzox NDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9zc2wvczNfbGliLmMJMjAx NC0wNS0wNiAxNjozODowNS44ODczNzQ4NzIgKzAyMDAKK0BAIC0zMjgsNyArMzI4LDcgQEAgT1BF TlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQorIAlTU0xfU1NMVjMsCisgCVNT TF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxU fFRMUzFfUFJGLAorLQkxNjgsCisrCTEyOCwKKyAJMTY4LAorIAl9LAorIAorQEAgLTM3Nyw3ICsz NzcsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCisgCVNTTF9T U0xWMywKKyAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisgCVNTTF9IQU5EU0hBS0Vf TUFDX0RFRkFVTFR8VExTMV9QUkYsCistCTE2OCwKKysJMTI4LAorIAkxNjgsCisgCX0sCisgCitA QCAtNDI1LDcgKzQyNSw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIgc3NsM19jaXBoZXJz W10KKyAJU1NMX1NTTFYzLAorIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKyAJU1NM X0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKy0JMTY4LAorKwkxMjgsCisgCTE2OCwK KyAJfSwKKyAKK0BAIC00NzQsNyArNDc0LDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBz c2wzX2NpcGhlcnNbXQorIAlTU0xfU1NMVjMsCisgCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9G SVBTLAorIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorLQkxNjgsCisrCTEy OCwKKyAJMTY4LAorIAl9LAorIAorQEAgLTUyMiw3ICs1MjIsNyBAQCBPUEVOU1NMX0dMT0JBTCBT U0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCisgCVNTTF9TU0xWMywKKyAJU1NMX05PVF9FWFB8U1NM X0hJR0h8U1NMX0ZJUFMsCisgCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCist CTE2OCwKKysJMTI4LAorIAkxNjgsCisgCX0sCisgCitAQCAtNjAyLDcgKzYwMiw3IEBAIE9QRU5T U0xfR0xPQkFMIFNTTF9DSVBIRVIgc3NsM19jaXBoZXJzW10KKyAJU1NMX1NTTFYzLAorIAlTU0xf Tk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKyAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxU TFMxX1BSRiwKKy0JMTY4LAorKwkxMjgsCisgCTE2OCwKKyAJfSwKKyAKK0BAIC02ODcsNyArNjg3 LDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQorIAlTU0xfU1NM VjMsCisgCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorIAlTU0xfSEFORFNIQUtFX01B Q19ERUZBVUxUfFRMUzFfUFJGLAorLQkxNjgsCisrCTEyOCwKKyAJMTY4LAorIAl9LAorIAorQEAg LTc1MSw3ICs3NTEsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1td CisgCVNTTF9TU0xWMywKKyAJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisgCVNTTF9IQU5EU0hBS0Vf TUFDX0RFRkFVTFR8VExTMV9QUkYsCistCTE2OCwKKysJMTI4LAorIAkxNjgsCisgCX0sCisgCitA QCAtMTY4NSw3ICsxNjg1LDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhl cnNbXQorIAlTU0xfVExTVjEsCisgCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorIAlT U0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorLQkxNjgsCisrCTEyOCwKKyAJMTY4 LAorIAl9LAorIAorQEAgLTIwNjIsNyArMjA2Miw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBI RVIgc3NsM19jaXBoZXJzW10KKyAJU1NMX1RMU1YxLAorIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxT U0xfRklQUywKKyAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKy0JMTY4LAor KwkxMjgsCisgCTE2OCwKKyAJfSwKKyAKK0BAIC0yMTQyLDcgKzIxNDIsNyBAQCBPUEVOU1NMX0dM T0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCisgCVNTTF9UTFNWMSwKKyAJU1NMX05PVF9F WFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisgCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9Q UkYsCistCTE2OCwKKysJMTI4LAorIAkxNjgsCisgCX0sCisgCitAQCAtMjIyMiw3ICsyMjIyLDcg QEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQorIAlTU0xfVExTVjEs CisgCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorIAlTU0xfSEFORFNIQUtFX01BQ19E RUZBVUxUfFRMUzFfUFJGLAorLQkxNjgsCisrCTEyOCwKKyAJMTY4LAorIAl9LAorIAorQEAgLTIz MDIsNyArMjMwMiw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBIRVIgc3NsM19jaXBoZXJzW10K KyAJU1NMX1RMU1YxLAorIAlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKyAJU1NMX0hB TkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKy0JMTY4LAorKwkxMjgsCisgCTE2OCwKKyAJ fSwKKyAKK0BAIC0yMzgyLDcgKzIzODIsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNz bDNfY2lwaGVyc1tdCisgCVNTTF9UTFNWMSwKKyAJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJ UFMsCisgCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCistCTE2OCwKKysJMTI4 LAorIAkxNjgsCisgCX0sCisgCitAQCAtMjQzMiw3ICsyNDMyLDcgQEAgT1BFTlNTTF9HTE9CQUwg U1NMX0NJUEhFUiBzc2wzX2NpcGhlcnNbXQorIAlTU0xfVExTVjEsCisgCVNTTF9OT1RfRVhQfFNT TF9ISUdILAorIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorLQkxNjgsCisr CTEyOCwKKyAJMTY4LAorIAl9LAorIAorQEAgLTI0NDgsNyArMjQ0OCw3IEBAIE9QRU5TU0xfR0xP QkFMIFNTTF9DSVBIRVIgc3NsM19jaXBoZXJzW10KKyAJU1NMX1RMU1YxLAorIAlTU0xfTk9UX0VY UHxTU0xfSElHSCwKKyAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKy0JMTY4 LAorKwkxMjgsCisgCTE2OCwKKyAJfSwKKyAKK0BAIC0yNDY0LDcgKzI0NjQsNyBAQCBPUEVOU1NM X0dMT0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCisgCVNTTF9UTFNWMSwKKyAJU1NMX05P VF9FWFB8U1NMX0hJR0gsCisgCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCist CTE2OCwKKysJMTI4LAorIAkxNjgsCisgCX0sCisgCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAu MWctZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjFnLWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMjZiMWU4NgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wt MS4wLjFnLWZpcHMucGF0Y2gKQEAgLTAsMCArMSwyMDM0MyBAQAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWcvYXBwcy9zcGVlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvYXBwcy9zcGVlZC5jCistLS0g b3BlbnNzbC0xLjAuMWcvYXBwcy9zcGVlZC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9hcHBzL3NwZWVkLmMJMjAxNC0wNS0wNiAx NjoyOTo1MC41MzY5MjI5OTMgKzAyMDAKK0BAIC0xOTUsNyArMTk1LDYgQEAKKyAjaWZkZWYgT1BF TlNTTF9ET0lOR19NQUtFREVQRU5ECisgI3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKKyAjdW5k ZWYgQUVTX3NldF9kZWNyeXB0X2tleQorLSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQKKyAj ZW5kaWYKKyAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisgI2RlZmluZSBD QVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0yMDMsNyArMjAyLDYgQEAKKyAj ZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorICNkZWZpbmUgUkMyX3Nl dF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9S QzRfc2V0X2tleQorLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3Nl dF9rZXlfdW5jaGVja2VkCisgI2RlZmluZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZhdGVfQUVT X3NldF9lbmNyeXB0X2tleQorICNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2YXRlX0FF U19zZXRfZGVjcnlwdF9rZXkKKyAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1l bGxpYV9zZXRfa2V5CitAQCAtOTQxLDcgKzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorIAkJCWlmIChzdHJjbXAoKmFyZ3Ys InJzYSIpID09IDApCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkJaWYgKCFGSVBT X21vZGUoKSkKKysjZW5kaWYKKysJCQkJeworIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09MTsKKysJ CQkJfQorIAkJCXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7CisgCQkJcnNhX2RvaXRbUl9SU0FfMjA0 OF09MTsKKyAJCQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOworQEAgLTk1MSw3ICs5NTQsMTIgQEAg aW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNpZm5kZWYgT1BFTlNTTF9OT19EU0EK KyAJCQlpZiAoc3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQorIAkJCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCQkJCWlmICghRklQU19tb2RlKCkpCisrI2VuZGlmCisrCQkJCXsKKyAJCQlkc2Ff ZG9pdFtSX0RTQV81MTJdPTE7CisrCQkJCX0KKyAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0XT0xOwor IAkJCWRzYV9kb2l0W1JfRFNBXzIwNDhdPTE7CisgCQkJfQorQEAgLTExNjIsMTIgKzExNzAsMTgg QEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJeworIAkJZm9yIChpPTA7IGk8 QUxHT1JfTlVNOyBpKyspCisgCQkJeworLQkJCWlmIChpICE9IERfRVZQKQorKwkJCWlmIChpICE9 IERfRVZQICYmCisrCQkJICAgICghRklQU19tb2RlKCkgfHwgKGkgIT0gRF9XSElSTFBPT0wgJiYK KysJCQkJaSAhPSBEX01EMiAmJiBpICE9IERfTUQ0ICYmCisrCQkJCWkgIT0gRF9NRDUgJiYgaSAh PSBEX01EQzIgJiYKKysJCQkJaSAhPSBEX1JNRDE2MCkpKQorIAkJCQlkb2l0W2ldPTE7CisgCQkJ fQorIAkJZm9yIChpPTA7IGk8UlNBX05VTTsgaSsrKQorKwkJICAgIGlmICghRklQU19tb2RlKCkg fHwgaSAhPSBSX1JTQV81MTIpCisgCQkJcnNhX2RvaXRbaV09MTsKKyAJCWZvciAoaT0wOyBpPERT QV9OVU07IGkrKykKKysJCSAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9EU0FfNTEyKQor IAkJCWRzYV9kb2l0W2ldPTE7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCisgCQlmb3IgKGk9 MDsgaTxFQ19OVU07IGkrKykKK0BAIC0xMjI2LDMwICsxMjQwLDU0IEBAIGludCBNQUlOKGludCBh cmdjLCBjaGFyICoqYXJndikKKyAJQUVTX3NldF9lbmNyeXB0X2tleShrZXkzMiwyNTYsJmFlc19r czMpOworICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQorKwlpZiAoZG9pdFtE X0NCQ18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNfMjU2X0NN TF0pCisrCSAgICB7CisgCUNhbWVsbGlhX3NldF9rZXkoa2V5MTYsMTI4LCZjYW1lbGxpYV9rczEp OworIAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwxOTIsJmNhbWVsbGlhX2tzMik7CisgCUNhbWVs bGlhX3NldF9rZXkoY2tleTMyLDI1NiwmY2FtZWxsaWFfa3MzKTsKKysJICAgIH0KKyAjZW5kaWYK KyAjaWZuZGVmIE9QRU5TU0xfTk9fSURFQQorKwlpZiAoZG9pdFtEX0NCQ19JREVBXSkKKysJICAg IHsKKyAJaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsJmlkZWFfa3MpOworKwkgICAgfQorICNl bmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19TRUVECisrCWlmIChkb2l0W0RfQ0JDX1NFRURdKQor KwkgICAgeworIAlTRUVEX3NldF9rZXkoa2V5MTYsJnNlZWRfa3MpOworKwkgICAgfQorICNlbmRp ZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKKysJaWYgKGRvaXRbRF9SQzRdKQorKwkgICAgewor IAlSQzRfc2V0X2tleSgmcmM0X2tzLDE2LGtleTE2KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fUkMyCisrCWlmIChkb2l0W0RfQ0JDX1JDMl0pCisrCSAgICB7CisgCVJD Ml9zZXRfa2V5KCZyYzJfa3MsMTYsa2V5MTYsMTI4KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fUkM1CisrCWlmIChkb2l0W0RfQ0JDX1JDNV0pCisrCSAgICB7CisgCVJD NV8zMl9zZXRfa2V5KCZyYzVfa3MsMTYsa2V5MTYsMTIpOworKwkgICAgfQorICNlbmRpZgorICNp Zm5kZWYgT1BFTlNTTF9OT19CRgorKwlpZiAoZG9pdFtEX0NCQ19CRl0pCisrCSAgICB7CisgCUJG X3NldF9rZXkoJmJmX2tzLDE2LGtleTE2KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fQ0FTVAorKwlpZiAoZG9pdFtEX0NCQ19DQVNUXSkKKysJICAgIHsKKyAJQ0FTVF9z ZXRfa2V5KCZjYXN0X2tzLDE2LGtleTE2KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fUlNBCisgCW1lbXNldChyc2FfYywwLHNpemVvZihyc2FfYykpOworQEAgLTE1NjQs NiArMTYwMiw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCUhNQUNfQ1RY IGhjdHg7CisgCisgCQlITUFDX0NUWF9pbml0KCZoY3R4KTsKKysJCUhNQUNfQ1RYX3NldF9mbGFn cygmaGN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJCUhNQUNfSW5pdF9l eCgmaGN0eCwodW5zaWduZWQgY2hhciAqKSJUaGlzIGlzIGEga2V5Li4uIiwKKyAJCQkxNixFVlBf bWQ1KCksIE5VTEwpOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvQ29uZmlndXJlLmZpcHMg b3BlbnNzbC0xLjAuMWcvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMWcvQ29uZmlndXJlLmZp cHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41MjM5MjI2OTMgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x Zy9Db25maWd1cmUJMjAxNC0wNS0wNiAxNjoyOTo1MC41MzY5MjI5OTMgKzAyMDAKK0BAIC05OTcs MTEgKzk5Nyw2IEBAIGlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQKKyAJ JGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKKyAJfQorIAorLWlmICgkZmlwcyAmJiAkZmlw c2xpYmRpciBlcSAiIikKKy0JeworLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsK Ky0JfQorLQorICMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2Qu CisgaWYgKCRmaXBzKQorIAl7CitAQCAtMTQ3Niw3ICsxNDcxLDYgQEAgJGNmbGFncy49IiAtRE9Q RU5TU0xfQk5fQVNNX0dGMm0iIGlmICgkYgorIGlmICgkZmlwcykKKyAJeworIAkkb3BlbnNzbF9v dGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CistCSRjZmxhZ3MgLj0gIiAt SVwkKEZJUFNESVIpL2luY2x1ZGUiOworIAl9CisgCisgJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1 bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKK0BAIC0xNjYzLDkgKzE2NTcsMTIgQEAgd2hp bGUgKDxJTj4pCisgCisgCXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87CisgCXMvXkZJ UFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87CistCXMvXkZJUFNDQU5MSUI9Liov RklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOworIAlzL15CQVNFQUREUj0uKi9CQVNFQURE Uj0kYmFzZWFkZHIvOworIAorKwlpZiAoJGZpcHMpCisrCQl7CisrCQlzL15GSVBTPS4qL0ZJUFM9 eWVzLzsKKysJCX0KKyAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3Rh cmdldC87CisgCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOworIAlz L15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURf U1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9h ZXMvYWVzX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9hZXMvYWVzX21pc2MuYwor LS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTQtMDMtMTcg MTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Flcy9h ZXNfbWlzYy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM2OTIyOTkzICswMjAwCitAQCAtNjksMTcg KzY5LDExIEBAIGNvbnN0IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpIHsKKyBpbnQgQUVTX3NldF9l bmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywK KyAJCQlBRVNfS0VZICprZXkpCisgCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWZpcHNfY2lw aGVyX2Fib3J0KEFFUyk7CistI2VuZGlmCisgCXJldHVybiBwcml2YXRlX0FFU19zZXRfZW5jcnlw dF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKyAJfQorIAorIGludCBBRVNfc2V0X2RlY3J5cHRf a2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAkJCUFF U19LRVkgKmtleSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZmlwc19jaXBoZXJfYWJv cnQoQUVTKTsKKy0jZW5kaWYKKyAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSh1 c2VyS2V5LCBiaXRzLCBrZXkpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Y21hYy9jbWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vY21hYy9jbWFjLmMKKy0tLSBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIw LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9jbWFjL2NtYWMuYwky MDE0LTA1LTA2IDE2OjI5OjUwLjUzNzkyMzAxNiArMDIwMAorQEAgLTEwNywxMyArMTA3LDYgQEAg Q01BQ19DVFggKkNNQUNfQ1RYX25ldyh2b2lkKQorIAorIHZvaWQgQ01BQ19DVFhfY2xlYW51cChD TUFDX0NUWCAqY3R4KQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2Rl KCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCistCQl7CistCQlGSVBTX2NtYWNfY3R4X2NsZWFudXAo Y3R4KTsKKy0JCXJldHVybjsKKy0JCX0KKy0jZW5kaWYKKyAJRVZQX0NJUEhFUl9DVFhfY2xlYW51 cCgmY3R4LT5jY3R4KTsKKyAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFYX0JMT0NL X0xFTkdUSCk7CisgCU9QRU5TU0xfY2xlYW5zZShjdHgtPmsxLCBFVlBfTUFYX0JMT0NLX0xFTkdU SCk7CitAQCAtMTY0LDExICsxNTcsNiBAQCBpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpjdHgsIGNv bnN0IHZvaWQKKyAJCQlFVlBlcnIoRVZQX0ZfQ01BQ19JTklULCBFVlBfUl9ESVNBQkxFRF9GT1Jf RklQUyk7CisgCQkJcmV0dXJuIDA7CisgCQkJfQorLQkJLyogT3RoZXIgYWxnb3JpdGhtIGJsb2Nr aW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwKKy0JCSAqIHZpYSBGSVBTX2NpcGhl cmluaXQoKS4KKy0JCSAqLworLQkJaWYgKCFpbXBsICYmICFjdHgtPmNjdHguZW5naW5lKQorLQkJ CXJldHVybiBGSVBTX2NtYWNfaW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIsIE5VTEwpOwor IAkJfQorICNlbmRpZgorIAkvKiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLworQEAgLTIxNiwx MCArMjA0LDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQorIAl7 CisgCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBpbjsKKyAJc2l6ZV90IGJsOworLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQor LQkJcmV0dXJuIEZJUFNfY21hY191cGRhdGUoY3R4LCBpbiwgZGxlbik7CistI2VuZGlmCisgCWlm IChjdHgtPm5sYXN0X2Jsb2NrID09IC0xKQorIAkJcmV0dXJuIDA7CisgCWlmIChkbGVuID09IDAp CitAQCAtMjYxLDEwICsyNDUsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29u c3Qgdm9pCisgaW50IENNQUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LCBzaXplX3QgKnBvdXRsZW4pCisgCXsKKyAJaW50IGksIGJsLCBsYjsKKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0JCXJldHVy biBGSVBTX2NtYWNfZmluYWwoY3R4LCBvdXQsIHBvdXRsZW4pOworLSNlbmRpZgorIAlpZiAoY3R4 LT5ubGFzdF9ibG9jayA9PSAtMSkKKyAJCXJldHVybiAwOworIAlibCA9IEVWUF9DSVBIRVJfQ1RY X2Jsb2NrX3NpemUoJmN0eC0+Y2N0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Y3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vY3J5cHRvLmgKKy0tLSBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjQxOTkyMDI4 OCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9jcnlwdG8uaAkyMDE0LTA1LTA2IDE2 OjI5OjUwLjUzNzkyMzAxNiArMDIwMAorQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBGSVBTX21v ZGVfc2V0KGludCByKTsKKyB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKKyAKKyAjZGVmaW5lIGZp cHNfbWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisrI2RlZmluZSBub25m aXBzX21kX2luaXQoYWxnKSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQorKyNkZWZpbmUg Zmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisrCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpj KQorIAorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxn LCBjeCkgXAorKyNkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisgCWludCBh bGcjI19Jbml0KGN4IyNfQ1RYICpjKSBcCisgCXsgXAorIAlpZiAoRklQU19tb2RlKCkpIE9wZW5T U0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCistCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGRp Z2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCisrCQkiRGlnZXN0ICIg I2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKyAJcmV0dXJuIHByaXZhdGVfIyNh bGcjI19Jbml0KGMpOyBcCisgCX0gXAorIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19D VFggKmMpCisgCisgI2RlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKKyAJaWYgKEZJUFNf bW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorLQkJIkxvdyBsZXZlbCBB UEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQorKwkJ IkNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCisrCisrLyogZGllIGlm IEZJUFMgc2VsZnRlc3QgZmFpbGVkICovCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQp OworIAorICNlbHNlCistI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKy0JaW50 IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCisrI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFs ZywgY3gpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKKyAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fi b3J0KGFsZykgd2hpbGUoMCkKKyAjZW5kaWYKKyAKK0BAIC01ODcsNiArNTkyLDkgQEAgaW50IENS WVBUT19tZW1jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3QgdgorICAqLworIHZvaWQgRVJSX2xvYWRf Q1JZUFRPX3N0cmluZ3Modm9pZCk7CisgCisrI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkxCisr dm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKKysKKyAvKiBFcnJvciBjb2RlcyBmb3Ig dGhlIENSWVBUTyBmdW5jdGlvbnMuICovCisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGVzL2Rlcy5oLmZpcHMgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2Rlcy9kZXMuaAorLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kZXMvZGVzLmguZmlw cwkyMDE0LTA1LTA2IDE2OjI5OjUwLjQ0OTkyMDk4MiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9kZXMvZGVzLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzc5MjMwMTYgKzAyMDAKK0BA IC0yMjQsOSArMjI0LDYgQEAgaW50IERFU19zZXRfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtleSxE RQorIGludCBERVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVk dWxlICpzY2hlZHVsZSk7CisgaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9j ayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyB2b2lkIERFU19zZXRfa2V5X3Vu Y2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUp OworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy12b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVj a2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Cist I2VuZGlmCisgdm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsREVTX2NibG9j ayAqa2V5KTsKKyB2b2lkIERFU19zdHJpbmdfdG9fMmtleXMoY29uc3QgY2hhciAqc3RyLERFU19j YmxvY2sgKmtleTEsREVTX2NibG9jayAqa2V5Mik7Cisgdm9pZCBERVNfY2ZiNjRfZW5jcnlwdChj b25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsbG9uZyBsZW5ndGgsCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9kZXMvc2V0X2tleS5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Rl cy9zZXRfa2V5LmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kZXMvc2V0X2tleS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAu NTM3OTIzMDE2ICswMjAwCitAQCAtMzM2LDEzICszMzYsNiBAQCBpbnQgREVTX3NldF9rZXlfY2hl Y2tlZChjb25zdF9ERVNfY2Jsb2NrCisgCX0KKyAKKyB2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tl ZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JeworLQlmaXBzX2NpcGhlcl9hYm9ydChERVMpOworLQlwcml2 YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKKy0JfQorLXZvaWQgcHJp dmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5 X3NjaGVkdWxlICpzY2hlZHVsZSkKKy0jZW5kaWYKKyAJeworIAlzdGF0aWMgY29uc3QgaW50IHNo aWZ0czJbMTZdPXswLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwfTsKKyAJcmVnaXN0ZXIg REVTX0xPTkcgYyxkLHQscyx0MjsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9k aF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9nZW4uYworLS0tIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RoL2RoX2dlbi5jCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTM3OTIzMDE2ICswMjAwCitAQCAtODQsMTEgKzg0LDYgQEAgaW50IERI X2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwgaQorICNlbmRpZgorIAlpZihyZXQtPm1l dGgtPmdlbmVyYXRlX3BhcmFtcykKKyAJCXJldHVybiByZXQtPm1ldGgtPmdlbmVyYXRlX3BhcmFt cyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4gRklQU19kaF9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KHJldCwgcHJpbWVfbGVuLAorLQkJCQkJCQlnZW5lcmF0b3IsIGNiKTsKKy0jZW5kaWYKKyAJ cmV0dXJuIGRoX2J1aWx0aW5fZ2VucGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNi KTsKKyAJfQorIAorQEAgLTEyMyw2ICsxMTgsMjAgQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dl bnBhcmFtcyhESCAqcmV0LAorIAlpbnQgZyxvaz0gLTE7CisgCUJOX0NUWCAqY3R4PU5VTEw7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJ eworKwkJRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsRklQU19SX0ZJUFNfU0VM RlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlpZiAoRklQU19tb2RlKCkg JiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsK KysJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9PX1NN QUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAljdHg9Qk5fQ1RYX25ldygp OworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaC5oLmZpcHMgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2RoL2RoLmgKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGgvZGguaC5maXBzCTIw MTQtMDUtMDYgMTY6Mjk6NTAuMzk0OTE5NzEwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2RoL2RoLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzc5MjMwMTYgKzAyMDAKK0BAIC03Nyw2 ICs3Nyw4IEBACisgIyBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCisg I2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0 CisrCisgI2RlZmluZSBESF9GTEFHX0NBQ0hFX01PTlRfUCAgICAgMHgwMQorICNkZWZpbmUgREhf RkxBR19OT19FWFBfQ09OU1RUSU1FIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQt aW4gREgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVu dGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKK0BAIC0yMTAsNiArMjEyLDcgQEAgaW50CURI X2NoZWNrKGNvbnN0IERIICpkaCxpbnQgKmNvZGVzKTsKKyBpbnQJREhfY2hlY2tfcHViX2tleShj b25zdCBESCAqZGgsY29uc3QgQklHTlVNICpwdWJfa2V5LCBpbnQgKmNvZGVzKTsKKyBpbnQJREhf Z2VuZXJhdGVfa2V5KERIICpkaCk7CisgaW50CURIX2NvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIg KmtleSxjb25zdCBCSUdOVU0gKnB1Yl9rZXksREggKmRoKTsKKytpbnQJREhfY29tcHV0ZV9rZXlf cGFkZGVkKHVuc2lnbmVkIGNoYXIgKmtleSxjb25zdCBCSUdOVU0gKnB1Yl9rZXksREggKmRoKTsK KyBESCAqCWQyaV9ESHBhcmFtcyhESCAqKmEsY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBsb25n IGxlbmd0aCk7CisgaW50CWkyZF9ESHBhcmFtcyhjb25zdCBESCAqYSx1bnNpZ25lZCBjaGFyICoq cHApOworICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9rZXku YworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMTQtMDMtMTcg MTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RoL2Ro X2tleS5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM4OTIzMDQwICswMjAwCitAQCAtNjEsNiArNjEs OSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgorICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGdlbmVyYXRlX2tl eShESCAqZGgpOworIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LCBj b25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7CitAQCAtOTcsNiArMTAwLDIxIEBAIGludCBE SF9jb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGMKKyAJcmV0dXJuIGRoLT5tZXRoLT5j b21wdXRlX2tleShrZXksIHB1Yl9rZXksIGRoKTsKKyAJfQorIAorK2ludCBESF9jb21wdXRlX2tl eV9wYWRkZWQodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpk aCkKKysJeworKwlpbnQgcnYsIHBhZDsKKysJcnYgPSBESF9jb21wdXRlX2tleShrZXksIHB1Yl9r ZXksIGRoKTsKKysJaWYgKHJ2IDw9IDApCisrCQlyZXR1cm4gcnY7CisrCXBhZCA9IEJOX251bV9i eXRlcyhkaC0+cCkgLSBydjsKKysJaWYgKHBhZCA+IDApCisrCQl7CisrCQltZW1tb3ZlKGtleSAr IHBhZCwga2V5LCBydik7CisrCQltZW1zZXQoa2V5LCAwLCBwYWQpOworKwkJfQorKwlyZXR1cm4g cnYgKyBwYWQ7CisrCX0KKysKKyBzdGF0aWMgREhfTUVUSE9EIGRoX29zc2wgPSB7CisgIk9wZW5T U0wgREggTWV0aG9kIiwKKyBnZW5lcmF0ZV9rZXksCitAQCAtMTA0LDcgKzEyMiw3IEBAIGNvbXB1 dGVfa2V5LAorIGRoX2JuX21vZF9leHAsCisgZGhfaW5pdCwKKyBkaF9maW5pc2gsCistMCwKKytE SF9GTEFHX0ZJUFNfTUVUSE9ELAorIE5VTEwsCisgTlVMTAorIH07CitAQCAtMTIzLDYgKzE0MSwx NCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCisgCUJOX01PTlRfQ1RYICptb250 PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkg PCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlESGVycihESF9G X0dFTkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJuIDA7Cisr CQl9CisrI2VuZGlmCisrCisgCWN0eCA9IEJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxM KSBnb3RvIGVycjsKKyAKK0BAIC0yMTMsNiArMjM5LDEzIEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9r ZXkodW5zaWduZWQgY2hhciAqa2UKKyAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksREhfUl9NT0RV TFVTX1RPT19MQVJHRSk7CisgCQlnb3RvIGVycjsKKyAJCX0KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9G SVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9DT01QVVRFX0tFWSwg REhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisg CisgCWN0eCA9IEJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKK0BA IC0yODAsNiArMzEzLDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0IERIICpkaCwg QgorIAorIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJZGgtPmZsYWdzIHw9IERI X0ZMQUdfQ0FDSEVfTU9OVF9QOworIAlyZXR1cm4oMSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9kaC9kaF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9k aF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9saWIuYy5maXBzCTIwMTQt MDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2RoL2RoX2xpYi5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM4OTIzMDQwICswMjAwCitAQCAtODEs MTQgKzgxLDcgQEAgY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2QodgorIAl7 CisgCWlmKCFkZWZhdWx0X0RIX21ldGhvZCkKKyAJCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCist CQlpZiAoRklQU19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfZGhfb3BlbnNzbCgpOworLQkJZWxz ZQorLQkJCXJldHVybiBESF9PcGVuU1NMKCk7CistI2Vsc2UKKyAJCWRlZmF1bHRfREhfbWV0aG9k ID0gREhfT3BlblNTTCgpOworLSNlbmRpZgorIAkJfQorIAlyZXR1cm4gZGVmYXVsdF9ESF9tZXRo b2Q7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZp cHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfZXJyLmMJMjAxNC0wNS0w NiAxNjoyOTo1MC41Mzg5MjMwNDAgKzAyMDAKK0BAIC03NCw2ICs3NCw4IEBAIHN0YXRpYyBFUlJf U1RSSU5HX0RBVEEgRFNBX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoRFNBX0ZfRE9fRFNBX1BS SU5UKSwJIkRPX0RTQV9QUklOVCJ9LAorIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlQp LAkiRFNBcGFyYW1zX3ByaW50In0sCisge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklOVF9G UCksCSJEU0FwYXJhbXNfcHJpbnRfZnAifSwKKyt7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5f S0VZR0VOKSwJImRzYV9idWlsdGluX2tleWdlbiJ9LAorK3tFUlJfRlVOQyhEU0FfRl9EU0FfQlVJ TFRJTl9QQVJBTUdFTiksCSJkc2FfYnVpbHRpbl9wYXJhbWdlbiJ9LAorIHtFUlJfRlVOQyhEU0Ff Rl9EU0FfRE9fU0lHTiksCSJEU0FfZG9fc2lnbiJ9LAorIHtFUlJfRlVOQyhEU0FfRl9EU0FfRE9f VkVSSUZZKSwJIkRTQV9kb192ZXJpZnkifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0dFTkVSQVRF X0tFWSksCSJEU0FfZ2VuZXJhdGVfa2V5In0sCitAQCAtMTA2LDYgKzEwOCw4IEBAIHN0YXRpYyBF UlJfU1RSSU5HX0RBVEEgRFNBX3N0cl9yZWFzb25zW10KKyB7RVJSX1JFQVNPTihEU0FfUl9EQVRB X1RPT19MQVJHRV9GT1JfS0VZX1NJWkUpLCJkYXRhIHRvbyBsYXJnZSBmb3Iga2V5IHNpemUifSwK KyB7RVJSX1JFQVNPTihEU0FfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVycm9y In0sCisge0VSUl9SRUFTT04oRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSkgICAsImludmFsaWQg ZGlnZXN0IHR5cGUifSwKKyt7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9JTlZBTElEKSAgICAg ICwia2V5IHNpemUgaW52YWxpZCJ9LAorK3tFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCkgICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9NSVNT SU5HX1BBUkFNRVRFUlMpICAgICwibWlzc2luZyBwYXJhbWV0ZXJzIn0sCisge0VSUl9SRUFTT04o RFNBX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCisge0VS Ul9SRUFTT04oRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTKSAsIm5lZWQgbmV3IHNldHVwIHZh bHVlcyJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlw cyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDE0LTA1LTA2 IDE2OjI5OjUwLjUzODkyMzA0MCArMDIwMAorQEAgLTg1LDYgKzg1LDE0IEBACisgI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorICNlbmRpZgorIAorKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrc3Rh dGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJpdHMsIHNp emVfdCBxYml0cywKKysJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQs IGludCBzZWVkX2xlbiwKKysJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwgaW50ICpj b3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKKytzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRl X2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAorKwkJQklHTlVNICoqZ19yZXQs IHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOworKyNlbmRpZgorKworIGludCBE U0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMsCisgCQljb25zdCB1 bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCisgCQlpbnQgKmNvdW50ZXJfcmV0 LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQorQEAgLTEwMCwxNCArMTA4LDYg QEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LAorIAlpZihyZXQtPm1l dGgtPmRzYV9wYXJhbWdlbikKKyAJCXJldHVybiByZXQtPm1ldGgtPmRzYV9wYXJhbWdlbihyZXQs IGJpdHMsIHNlZWRfaW4sIHNlZWRfbGVuLAorIAkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsK Ky0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWVsc2UgaWYgKEZJUFNfbW9kZSgpKQorLQkJeworLQkJ cmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBiaXRzLCAKKy0JCQkJ CQkJc2VlZF9pbiwgc2VlZF9sZW4sCistCQkJCQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwor LQkJfQorLSNlbmRpZgorIAllbHNlCisgCQl7CisgCQljb25zdCBFVlBfTUQgKmV2cG1kOworQEAg LTEyNSwyNyArMTI1LDExOSBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpy ZXQsCisgCQkJfQorIAorIAkJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywg cWJpdHMsIGV2cG1kLAorLQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBOVUxMLCBjb3VudGVyX3JldCwg aF9yZXQsIGNiKTsKKysJCQkJc2VlZF9pbiwgc2VlZF9sZW4sIGNvdW50ZXJfcmV0LCBoX3JldCwg Y2IpOworIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBGSVBTX2RzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwlj b25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qg c2VlZF9sZW4sCisrCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9H RU5DQiAqY2IpCisrCXsKKysJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywg cWJpdHMsCisrCQlldnBtZCwgc2VlZF9pbiwgc2VlZF9sZW4sCisrCQljb3VudGVyX3JldCwgaF9y ZXQsIGNiKTsKKysJfQorKyNlbmRpZgorKworIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0Eg KnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKyAJY29uc3QgRVZQX01EICpldnBtZCwg Y29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAorLQl1bnNpZ25l ZCBjaGFyICpzZWVkX291dCwKKyAJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9y ZXQsIEJOX0dFTkNCICpjYikKKyAJeworIAlpbnQgb2s9MDsKKyAJdW5zaWduZWQgY2hhciBzZWVk W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysJQklHTlVNICpnPU5VTEwsKnE9TlVMTCwqcD1OVUxM OworKwlzaXplX3QgcXNpemUgPSBxYml0cyA+PiAzOworKwlCTl9DVFggKmN0eD1OVUxMOworKwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAg IHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAorKwkJICAgIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICBnb3RvIGVycjsKKysJICAgIH0KKysK KysJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJgorKwkgICAgKGJpdHMgIT0gMTAyNCB8fCBxYml0 cyAhPSAxNjApICYmCisrCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDIyNCkgJiYKKysJ ICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjU2KSAmJgorKwkgICAgKGJpdHMgIT0gMzA3 MiB8fCBxYml0cyAhPSAyNTYpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BB UkFNR0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNl bmRpZgorKwlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkpCisrCQlz ZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KKysJ aWYgKHNlZWRfbGVuID4gc2l6ZW9mKHNlZWQpKSAKKysJCXNlZWRfbGVuID0gc2l6ZW9mKHNlZWQp OwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAorKwkJCQkJ CSAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAyNTYgYml0cyov CisrCWlmIChzZWVkX2luICE9IE5VTEwpCisrCQltZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9s ZW4pOworKwllbHNlCisrCQlzZWVkX2xlbiA9IDA7CisrCisrCWlmICgoY3R4PUJOX0NUWF9uZXco KSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysKKysJ aWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9wcShjdHgsIGJpdHMsIHFiaXRzLCBldnBtZCwKKysJCXNl ZWQsIHNlZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJfcmV0LCBjYikpCisrCQlnb3RvIGVycjsKKysK KysJaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0eCwgcCwgcSwgJmcsIGhfcmV0LCBjYikpCisr CQlnb3RvIGVycjsKKysKKysJb2s9MTsKKytlcnI6CisrCWlmIChvaykKKysJCXsKKysJCWlmKHJl dC0+cCkKKysJCQl7CisrCQkJQk5fZnJlZShyZXQtPnApOworKwkJCXJldC0+cCA9IE5VTEw7Cisr CQkJfQorKwkJaWYocmV0LT5xKQorKwkJCXsKKysJCQlCTl9mcmVlKHJldC0+cSk7CisrCQkJcmV0 LT5xID0gTlVMTDsKKysJCQl9CisrCQlpZihyZXQtPmcpCisrCQkJeworKwkJCUJOX2ZyZWUocmV0 LT5nKTsKKysJCQlyZXQtPmcgPSBOVUxMOworKwkJCX0KKysJCXJldC0+cD1CTl9kdXAocCk7Cisr CQlyZXQtPnE9Qk5fZHVwKHEpOworKwkJcmV0LT5nPUJOX2R1cChnKTsKKysJCWlmIChyZXQtPnAg PT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKKysJCQlvaz0wOwor KwkJfQorKwlpZihjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJl ZShjdHgpOworKwkJfQorKwlyZXR1cm4gb2s7CisrCX0KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQ UworK3N0YXRpYworKyNlbmRpZgorK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0 eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVu c2lnbmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKKysJCUJJR05VTSAqKnBfcmV0LCBCSUdO VU0gKipxX3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCWludCBv az0wOworIAl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKy0JdW5zaWdu ZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5H VEhdOworKwl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisgCUJJR05V TSAqcjAsKlcsKlgsKmMsKnRlc3Q7CistCUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsK Ky0JQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKKy0JaW50IGksIGssIG49MCwgbT0wLCBxc2l6ZSA9 IHFiaXRzID4+IDM7CisrCUJJR05VTSAqcT1OVUxMLCpwPU5VTEw7CisrCWludCBpLCBrLCBiLCBu PTAsIG09MCwgcXNpemUgPSBxYml0cyA+PiAzOworIAlpbnQgY291bnRlcj0wOworIAlpbnQgcj0w OworLQlCTl9DVFggKmN0eD1OVUxMOworLQl1bnNpZ25lZCBpbnQgaD0yOworIAorIAlpZiAocXNp emUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEgg JiYKKyAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQorQEAgLTE1Myw1MSArMjQ1 LDQzIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCXJldHVy biAwOworIAorIAlpZiAoZXZwbWQgPT0gTlVMTCkKKy0JCS8qIHVzZSBTSEExIGFzIGRlZmF1bHQg Ki8KKy0JCWV2cG1kID0gRVZQX3NoYTEoKTsKKysJICAgIHsKKysJCWlmIChxYml0cyA8PSAxNjAp CisrCQkJZXZwbWQgPSBFVlBfc2hhMSgpOworKwkJZWxzZSBpZiAocWJpdHMgPD0gMjI0KQorKwkJ CWV2cG1kID0gRVZQX3NoYTIyNCgpOworKwkJZWxzZQorKwkJCWV2cG1kID0gRVZQX3NoYTI1Nigp OworKwkgICAgfQorIAorIAlpZiAoYml0cyA8IDUxMikKKyAJCWJpdHMgPSA1MTI7CisgCisgCWJp dHMgPSAoYml0cys2MykvNjQqNjQ7CisgCistCS8qIE5COiBzZWVkX2xlbiA9PSAwIGlzIHNwZWNp YWwgY2FzZTogY29weSBnZW5lcmF0ZWQgc2VlZCB0bworLSAJICogc2VlZF9pbiBpZiBpdCBpcyBu b3QgTlVMTC4KKy0gCSAqLworLQlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClx c2l6ZSkpCistCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBp Z25vcmUgKi8KKy0JaWYgKHNlZWRfbGVuID4gKHNpemVfdClxc2l6ZSkgCistCQlzZWVkX2xlbiA9 IHFzaXplOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAor LQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDE2MCBi aXRzKi8KKy0JaWYgKHNlZWRfaW4gIT0gTlVMTCkKKy0JCW1lbWNweShzZWVkLCBzZWVkX2luLCBz ZWVkX2xlbik7CistCistCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKKy0JCWdvdG8g ZXJyOworLQorLQlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCistCQlnb3Rv IGVycjsKKy0KKy0JQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCXIwID0gQk5fQ1RYX2dldChjdHgpOwor LQlnID0gQk5fQ1RYX2dldChjdHgpOworIAlXID0gQk5fQ1RYX2dldChjdHgpOworLQlxID0gQk5f Q1RYX2dldChjdHgpOworKwkqcV9yZXQgPSBxID0gQk5fQ1RYX2dldChjdHgpOworIAlYID0gQk5f Q1RYX2dldChjdHgpOworIAljID0gQk5fQ1RYX2dldChjdHgpOworLQlwID0gQk5fQ1RYX2dldChj dHgpOworKwkqcF9yZXQgPSBwID0gQk5fQ1RYX2dldChjdHgpOworIAl0ZXN0ID0gQk5fQ1RYX2dl dChjdHgpOworIAorIAlpZiAoIUJOX2xzaGlmdCh0ZXN0LEJOX3ZhbHVlX29uZSgpLGJpdHMtMSkp CisgCQlnb3RvIGVycjsKKyAKKysJLyogc3RlcCAzIG4gPSBcbGNlaWwgYml0cyAvIHFiaXRzIFxy Y2VpbCAtIDEgKi8KKysJbiA9IChiaXRzK3FiaXRzLTEpL3FiaXRzIC0gMTsKKysJLyogc3RlcCA0 IGIgPSBiaXRzIC0gMSAtIG4gKiBxYml0cyAqLworKwliID0gYml0cyAtIDEgLSBuKnFiaXRzOwor KworIAlmb3IgKDs7KQorIAkJeworIAkJZm9yICg7OykgLyogZmluZCBxICovCisgCQkJeworIAkJ CWludCBzZWVkX2lzX3JhbmRvbTsKKyAKKy0JCQkvKiBzdGVwIDEgKi8KKysJCQkvKiBzdGVwIDUg Z2VuZXJhdGUgc2VlZCAqLworIAkJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAwLCBtKyspKQorIAkJ CQlnb3RvIGVycjsKKyAKK0BAIC0yMTIsMzAgKzI5NiwxOCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQkJCXNlZWRfbGVuPTA7IC8qIHVzZSByYW5kb20gc2Vl ZCBpZiAnc2VlZF9pbicgdHVybnMgb3V0IHRvIGJlIGJhZCovCisgCQkJCX0KKyAJCQltZW1jcHko YnVmICwgc2VlZCwgcXNpemUpOworLQkJCW1lbWNweShidWYyLCBzZWVkLCBxc2l6ZSk7CistCQkJ LyogcHJlY29tcHV0ZSAiU0VFRCArIDEiIGZvciBzdGVwIDc6ICovCistCQkJZm9yIChpID0gcXNp emUtMTsgaSA+PSAwOyBpLS0pCistCQkJCXsKKy0JCQkJYnVmW2ldKys7CistCQkJCWlmIChidWZb aV0gIT0gMCkKKy0JCQkJCWJyZWFrOworLQkJCQl9CisgCistCQkJLyogc3RlcCAyICovCisrCQkJ Lyogc3RlcCA2IFUgPSBoYXNoKHNlZWQpICovCisgCQkJaWYgKCFFVlBfRGlnZXN0KHNlZWQsIHFz aXplLCBtZCwgICBOVUxMLCBldnBtZCwgTlVMTCkpCisgCQkJCWdvdG8gZXJyOworLQkJCWlmICgh RVZQX0RpZ2VzdChidWYsICBxc2l6ZSwgYnVmMiwgTlVMTCwgZXZwbWQsIE5VTEwpKQorLQkJCQln b3RvIGVycjsKKy0JCQlmb3IgKGkgPSAwOyBpIDwgcXNpemU7IGkrKykKKy0JCQkJbWRbaV1ePWJ1 ZjJbaV07CisgCistCQkJLyogc3RlcCAzICovCisrCQkJLyogc3RlcCA3IHEgPSAyXihxYml0cy0x KSArIFUgKyAxIC0gKFUgbW9kIDIpICovCisgCQkJbWRbMF0gfD0gMHg4MDsKKyAJCQltZFtxc2l6 ZS0xXSB8PSAweDAxOworIAkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcSkpCisgCQkJCWdv dG8gZXJyOworIAorLQkJCS8qIHN0ZXAgNCAqLworKwkJCS8qIHN0ZXAgOCB0ZXN0IGZvciBwcmlt ZSAoNjQgcm91bmQgb2YgUmFiaW4tTWlsbGVyKSAqLworIAkJCXIgPSBCTl9pc19wcmltZV9mYXN0 dGVzdF9leChxLCBEU1NfcHJpbWVfY2hlY2tzLCBjdHgsCisgCQkJCQlzZWVkX2lzX3JhbmRvbSwg Y2IpOworIAkJCWlmIChyID4gMCkKK0BAIC0yNDMsMjcgKzMxNSwyMiBAQCBpbnQgZHNhX2J1aWx0 aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQkJaWYgKHIgIT0gMCkKKyAJCQkJZ290byBl cnI7CisgCistCQkJLyogZG8gYSBjYWxsYmFjayBjYWxsICovCistCQkJLyogc3RlcCA1ICovCisg CQkJfQorIAorIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDApKSBnb3RvIGVycjsKKyAJCWlm KCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkgZ290byBlcnI7CisgCistCQkvKiBzdGVwIDYgKi8K KysJCS8qIHN0ZXAgMTEgKi8KKyAJCWNvdW50ZXI9MDsKKy0JCS8qICJvZmZzZXQgPSAyIiAqLwor LQorLQkJbj0oYml0cy0xKS8xNjA7CisrCQkvKiAib2Zmc2V0ID0gMSIgKi8KKyAKKyAJCWZvciAo OzspCisgCQkJeworIAkJCWlmICgoY291bnRlciAhPSAwKSAmJiAhQk5fR0VOQ0JfY2FsbChjYiwg MCwgY291bnRlcikpCisgCQkJCWdvdG8gZXJyOworIAorLQkJCS8qIHN0ZXAgNyAqLworKwkJCS8q IHN0ZXAgMTEuMSwgMTEuMiBvYnRhaW4gVyAqLworIAkJCUJOX3plcm8oVyk7CistCQkJLyogbm93 ICdidWYnIGNvbnRhaW5zICJTRUVEICsgb2Zmc2V0IC0gMSIgKi8KKyAJCQlmb3IgKGs9MDsgazw9 bjsgaysrKQorIAkJCQl7CisgCQkJCS8qIG9idGFpbiAiU0VFRCArIG9mZnNldCArIGsiIGJ5IGlu Y3JlbWVudGluZzogKi8KK0BAIC0yNzgsMjggKzM0NSwzMCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQkJCQkJCQkJTlVMTCkpCisgCQkJCQlnb3RvIGVycjsK KyAKKy0JCQkJLyogc3RlcCA4ICovCisgCQkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcjAp KQorIAkJCQkJZ290byBlcnI7CistCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLChxc2l6ZSA8PCAz KSprKSkgZ290byBlcnI7CisrCQkJCWlmIChrID09IG4pCisrCQkJCQlCTl9tYXNrX2JpdHMocjAs Yik7CisrCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLHFiaXRzKmspKSBnb3RvIGVycjsKKyAJCQkJ aWYgKCFCTl9hZGQoVyxXLHIwKSkgZ290byBlcnI7CisgCQkJCX0KKyAKKy0JCQkvKiBtb3JlIG9m IHN0ZXAgOCAqLworLQkJCWlmICghQk5fbWFza19iaXRzKFcsYml0cy0xKSkgZ290byBlcnI7Cisr CQkJLyogc3RlcCAxMS4zIFggPSBXICsgMl4oTC0xKSAqLworIAkJCWlmICghQk5fY29weShYLFcp KSBnb3RvIGVycjsKKyAJCQlpZiAoIUJOX2FkZChYLFgsdGVzdCkpIGdvdG8gZXJyOworIAorLQkJ CS8qIHN0ZXAgOSAqLworKwkJCS8qIHN0ZXAgMTEuNCBjID0gWCBtb2QgMipxICovCisgCQkJaWYg KCFCTl9sc2hpZnQxKHIwLHEpKSBnb3RvIGVycjsKKyAJCQlpZiAoIUJOX21vZChjLFgscjAsY3R4 KSkgZ290byBlcnI7CisrCisrCQkJLyogc3RlcCAxMS41IHAgPSBYIC0gKGMgLSAxKSAqLworIAkJ CWlmICghQk5fc3ViKHIwLGMsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKKyAJCQlpZiAoIUJO X3N1YihwLFgscjApKSBnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDEwICovCisrCQkJLyogc3Rl cCAxMS42ICovCisgCQkJaWYgKEJOX2NtcChwLHRlc3QpID49IDApCisgCQkJCXsKKy0JCQkJLyog c3RlcCAxMSAqLworKwkJCQkvKiBzdGVwIDExLjcgKi8KKyAJCQkJciA9IEJOX2lzX3ByaW1lX2Zh c3R0ZXN0X2V4KHAsIERTU19wcmltZV9jaGVja3MsCisgCQkJCQkJY3R4LCAxLCBjYik7CisgCQkJ CWlmIChyID4gMCkKK0BAIC0zMDgsMTkgKzM3Nyw0NSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfCisgCQkJCQlnb3RvIGVycjsKKyAJCQkJfQorIAorLQkJCS8qIHN0 ZXAgMTMgKi8KKysJCQkvKiBzdGVwIDExLjkgKi8KKyAJCQljb3VudGVyKys7CisgCQkJLyogIm9m ZnNldCA9IG9mZnNldCArIG4gKyAxIiAqLworIAorLQkJCS8qIHN0ZXAgMTQgKi8KKy0JCQlpZiAo Y291bnRlciA+PSA0MDk2KSBicmVhazsKKysJCQkvKiBzdGVwIDEyICovCisrCQkJaWYgKGNvdW50 ZXIgPj0gNCpiaXRzKSBicmVhazsKKyAJCQl9CisgCQl9CisgZW5kOgorIAlpZighQk5fR0VOQ0Jf Y2FsbChjYiwgMiwgMSkpCisgCQlnb3RvIGVycjsKKyAKKy0JLyogV2Ugbm93IG5lZWQgdG8gZ2Vu ZXJhdGUgZyAqLworKwlvaz0xOworK2VycjoKKysJaWYgKG9rKQorKwkJeworKwkJaWYgKGNvdW50 ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOworKwkJfQorKwlyZXR1cm4gb2s7 CisrCX0KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYworKyNlbmRpZgorK2ludCBG SVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKKysJ CUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQorKwl7 CisrCWludCBvaz0wOworKwlCSUdOVU0gKnIwLCAqdGVzdCwgKmcgPSBOVUxMOworKwlCTl9NT05U X0NUWCAqbW9udDsKKysJdW5zaWduZWQgaW50IGg9MjsKKysKKysJaWYgKChtb250PUJOX01PTlRf Q1RYX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCXIwID0gQk5fQ1RYX2dldChj dHgpOworKwkqZ19yZXQgPSBnID0gQk5fQ1RYX2dldChjdHgpOworKwl0ZXN0ID0gQk5fQ1RYX2dl dChjdHgpOworKworIAkvKiBTZXQgcjA9KHAtMSkvcSAqLworIAlpZiAoIUJOX3N1Yih0ZXN0LHAs Qk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKKyAJaWYgKCFCTl9kaXYocjAsTlVMTCx0ZXN0LHEs Y3R4KSkgZ290byBlcnI7CitAQCAtMzQ0LDI2ICs0MzksNyBAQCBlbmQ6CisgZXJyOgorIAlpZiAo b2spCisgCQl7CistCQlpZihyZXQtPnApIEJOX2ZyZWUocmV0LT5wKTsKKy0JCWlmKHJldC0+cSkg Qk5fZnJlZShyZXQtPnEpOworLQkJaWYocmV0LT5nKSBCTl9mcmVlKHJldC0+Zyk7CistCQlyZXQt PnA9Qk5fZHVwKHApOworLQkJcmV0LT5xPUJOX2R1cChxKTsKKy0JCXJldC0+Zz1CTl9kdXAoZyk7 CistCQlpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5V TEwpCistCQkJeworLQkJCW9rPTA7CistCQkJZ290byBlcnI7CistCQkJfQorLQkJaWYgKGNvdW50 ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOworIAkJaWYgKGhfcmV0ICE9IE5V TEwpICpoX3JldD1oOworLQkJaWYgKHNlZWRfb3V0KQorLQkJCW1lbWNweShzZWVkX291dCwgc2Vl ZCwgcXNpemUpOworLQkJfQorLQlpZihjdHgpCistCQl7CistCQlCTl9DVFhfZW5kKGN0eCk7Cist CQlCTl9DVFhfZnJlZShjdHgpOworIAkJfQorIAlpZiAobW9udCAhPSBOVUxMKSBCTl9NT05UX0NU WF9mcmVlKG1vbnQpOworIAlyZXR1cm4gb2s7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZHNhL2RzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2EuaAorLS0tIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjMx NjkxNzkwNyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhLmgJMjAxNC0w NS0wNiAxNjoyOTo1MC41Mzg5MjMwNDAgKzAyMDAKK0BAIC04OCw2ICs4OCw4IEBACisgIyBkZWZp bmUgT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUwkxMDAwMAorICNlbmRpZgorIAorKyNkZWZp bmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjZGVmaW5lIERT QV9GTEFHX0NBQ0hFX01PTlRfUAkweDAxCisgI2RlZmluZSBEU0FfRkxBR19OT19FWFBfQ09OU1RU SU1FICAgICAgIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRp b24gbm93IHVzZXMgY29uc3RhbnQgdGltZQorQEAgLTI2NCw2ICsyNjYsMTcgQEAgaW50CURTQV9w cmludF9mcChGSUxFICpicCwgY29uc3QgRFNBICp4LAorIERIICpEU0FfZHVwX0RIKGNvbnN0IERT QSAqcik7CisgI2VuZGlmCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBGSVBTX2RzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwlj b25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qg c2VlZF9sZW4sCisrCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9H RU5DQiAqY2IpOworK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90 IGJpdHMsIHNpemVfdCBxYml0cywKKysJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNo YXIgKnNlZWQsIGludCBzZWVkX2xlbiwKKysJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3Jl dCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgRklQU19kc2FfZ2VuZXJh dGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCisrCQlCSUdOVU0gKipnX3Jl dCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisrI2VuZGlmCisrCisgI2Rl ZmluZSBFVlBfUEtFWV9DVFhfc2V0X2RzYV9wYXJhbWdlbl9iaXRzKGN0eCwgbmJpdHMpIFwKKyAJ RVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09QX1BBUkFNR0VO LCBcCisgCQkJCUVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX0JJVFMsIG5iaXRzLCBOVUxMKQor QEAgLTI4NSwxMCArMjk4LDEzIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7Cisg I2RlZmluZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEwNAorICNkZWZpbmUgRFNBX0ZfRFNBUEFS QU1TX1BSSU5UCQkJCSAxMDAKKyAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAx MDEKKysjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQKKysjZGVmaW5lIERT QV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMworICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJ R04JCQkJIDExMgorICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCistI2RlZmlu ZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZCQkJCSAxMjQKKy0jZGVmaW5lIERTQV9GX0RTQV9HRU5F UkFURV9QQVJBTUVURVJTX0VYCQkgMTIzCisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZ CQkJCSAxMjYKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYCQkgMTI3 CisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkvKiB1bnVzZWQgKi8JIDEy NQorICNkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMworICNkZWZpbmUgRFNBX0Zf RFNBX1BBUkFNX0RFQ09ERQkJCQkgMTE5CisgI2RlZmluZSBEU0FfRl9EU0FfUFJJTlRfRlAJCQkJ IDEwNQorQEAgLTMxNCwxMSArMzMwLDE1IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9p ZCk7CisgI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAKKyAj ZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0CisgI2RlZmluZSBEU0FfUl9JTlZBTElE X0RJR0VTVF9UWVBFCQkJIDEwNgorKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRAkJCQkg MTEzCisrI2RlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTEwCisgI2RlZmluZSBE U0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAxCisgI2RlZmluZSBEU0FfUl9NT0RVTFVTX1RP T19MQVJHRQkJCQkgMTAzCistI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJCQkg MTEwCisrI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJCQkgMTEyCisgI2RlZmlu ZSBEU0FfUl9OT05fRklQU19EU0FfTUVUSE9ECQkJIDExMQorKyNkZWZpbmUgRFNBX1JfTk9OX0ZJ UFNfTUVUSE9ECQkJCSAxMTEKKyAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAx MDcKKysjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUgLyog dW51c2VkICovIDExMgorICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJ IDEwNQorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2Ffa2V5 LmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMTQtMDMt MTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Rz YS9kc2Ffa2V5LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzk5MjMwNjMgKzAyMDAKK0BAIC02Niw2 ICs2NiwzNSBAQAorIAorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKyAjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrCisrc3RhdGljIGludCBmaXBzX2No ZWNrX2RzYShEU0EgKmRzYSkKKysJeworKwlFVlBfUEtFWSAqcGs7CisrCXVuc2lnbmVkIGNoYXIg dGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKwlpbnQgcmV0ID0gMDsKKysKKysJ aWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBf UEtFWV9zZXQxX0RTQShwaywgZHNhKTsKKysKKysJaWYgKGZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywgdGJzLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKSkKKysJCXJldCA9IDE7CisrCisr CWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVD S19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwoKTsKKysJCX0KKysKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCisr CXJldHVybiByZXQ7CisrCX0KKysKKyAjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGRzYV9idWlsdGlu X2tleWdlbihEU0EgKmRzYSk7CitAQCAtODIsMTAgKzExMSw2IEBAIGludCBEU0FfZ2VuZXJhdGVf a2V5KERTQSAqZHNhKQorICNlbmRpZgorIAlpZihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCisgCQly ZXR1cm4gZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKGRzYSk7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfa2V5KGRzYSk7 CistI2VuZGlmCisgCXJldHVybiBkc2FfYnVpbHRpbl9rZXlnZW4oZHNhKTsKKyAJfQorIAorQEAg LTk1LDYgKzEyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkK KyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZfa2V5PU5V TEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShkc2Et PmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkmJiAoQk5fbnVtX2JpdHMoZHNh LT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0Fl cnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwor KwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisgCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkg PT0gTlVMTCkgZ290byBlcnI7CisgCisgCWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCitAQCAt MTMzLDYgKzE2NywxNCBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkK KyAKKyAJZHNhLT5wcml2X2tleT1wcml2X2tleTsKKyAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX21vZGUoKSAmJiAhZmlwc19jaGVja19kc2Eo ZHNhKSkKKysJCXsKKysJCWRzYS0+cHViX2tleSA9IE5VTEw7CisrCQlkc2EtPnByaXZfa2V5ID0g TlVMTDsKKysJICAgIAlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKyAJb2s9MTsKKyAKKyBlcnI6 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2RzYS9kc2FfbGliLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX2xpYi5jCTIwMTQtMDUtMDYgMTY6Mjk6 NTAuNTM5OTIzMDYzICswMjAwCitAQCAtODcsMTQgKzg3LDcgQEAgY29uc3QgRFNBX01FVEhPRCAq RFNBX2dldF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlmKCFkZWZhdWx0X0RTQV9tZXRob2QpCisg CQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJldHVy biBGSVBTX2RzYV9vcGVuc3NsKCk7CistCQllbHNlCistCQkJcmV0dXJuIERTQV9PcGVuU1NMKCk7 CistI2Vsc2UKKyAJCWRlZmF1bHRfRFNBX21ldGhvZCA9IERTQV9PcGVuU1NMKCk7CistI2VuZGlm CisgCQl9CisgCXJldHVybiBkZWZhdWx0X0RTQV9tZXRob2Q7CisgCX0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9kc2EvZHNhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX2xvY2wu aC5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuMzE3OTE3OTMwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMWcvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTM5OTIzMDYz ICswMjAwCitAQCAtNTYsNSArNTYsNCBAQAorIAorIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihE U0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKyAJY29uc3QgRVZQX01EICpldnBt ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAorLQl1bnNp Z25lZCBjaGFyICpzZWVkX291dCwKKyAJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAq aF9yZXQsIEJOX0dFTkNCICpjYik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNh L2RzYV9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKKy0t LSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDE0LTAzLTE3IDE3 OjE0OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNh X29zc2wuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjUzOTkyMzA2MyArMDIwMAorQEAgLTY1LDYgKzY1 LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIERTQV9TSUcgKmRz YV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7 Cisgc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJ R05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCk7CitAQCAtODIsNyArODUsNyBAQCBOVUxMLCAvKiBk c2FfbW9kX2V4cCwgKi8KKyBOVUxMLCAvKiBkc2FfYm5fbW9kX2V4cCwgKi8KKyBkc2FfaW5pdCwK KyBkc2FfZmluaXNoLAorLTAsCisrRFNBX0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwKKyBOVUxM LAorIE5VTEwKK0BAIC0xMzgsNiArMTQxLDIxIEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2ln bihjb25zdCB1bnNpZ24KKyAJRFNBX1NJRyAqcmV0PU5VTEw7CisgCWludCBub3JlZG8gPSAwOwor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJ ICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NFTEZU RVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gTlVMTDsKKysJICAgIH0KKysKKysJaWYgKEZJUFNf bW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKKysJCSYm IChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRT KSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorKworIAlCTl9pbml0KCZt KTsKKyAJQk5faW5pdCgmeHIpOworIAorQEAgLTMyNSw2ICszNDMsMjEgQEAgc3RhdGljIGludCBk c2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCisgCQlyZXR1cm4gLTE7CisgCQl9CisgCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgewor KwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1ZFUklGWSxGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkg JiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpIAorKwkJJiYgKEJOX251 bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJ eworKwkJRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCk7CisrCQlyZXR1cm4gLTE7CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhk c2EtPnApID4gT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCURTQWVycihE U0FfRl9EU0FfRE9fVkVSSUZZLERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC0zOTksNiAr NDMyLDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCisgCisgc3Rh dGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRzYS0+ZmxhZ3N8PURTQV9GTEFHX0NB Q0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2RzYV9w bWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfcG1ldGguYy5maXBzCTIw MTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2RzYS9kc2FfcG1ldGguYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjUzOTkyMzA2MyArMDIwMAor QEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgaW50IHBrZXlfZHNhX3BhcmFtZ2VuKEVWUF9QS0VZ X0NUCisgCWlmICghZHNhKQorIAkJcmV0dXJuIDA7CisgCXJldCA9IGRzYV9idWlsdGluX3BhcmFt Z2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRzLCBkY3R4LT5wbWQsCistCSAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIHBjYik7CisrCSAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIHBjYik7CisgCWlm IChyZXQpCisgCQlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7CisgCWVsc2UKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2RzYS9kc2F0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNhL2Rz YXRlc3QuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2F0ZXN0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41Mzk5 MjMwNjMgKzAyMDAKK0BAIC05NiwzNiArOTYsNDEgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBk c2FfY2IoaW50IHAsIGludAorIC8qIHNlZWQsIG91dF9wLCBvdXRfcSwgb3V0X2cgYXJlIHRha2Vu IGZyb20gdGhlIHVwZGF0ZWQgQXBwZW5kaXggNSB0bworICAqIEZJUFMgUFVCIDE4NiBhbmQgYWxz byBhcHBlYXIgaW4gQXBwZW5kaXggNSB0byBGSVBTIFBJQiAxODYtMSAqLworIHN0YXRpYyB1bnNp Z25lZCBjaGFyIHNlZWRbMjBdPXsKKy0JMHhkNSwweDAxLDB4NGUsMHg0YiwweDYwLDB4ZWYsMHgy YiwweGE4LDB4YjYsMHgyMSwweDFiLDB4NDAsCistCTB4NjIsMHhiYSwweDMyLDB4MjQsMHhlMCww eDQyLDB4N2QsMHhkMywKKysJMHgwMiwweDQ3LDB4MTEsMHg5MiwweDExLDB4ODgsMHhDOCwweEZC LDB4QUYsMHg0OCwweDRDLDB4NjIsCisrCTB4REYsMHhBNSwweEJFLDB4QTAsMHhBNCwweDNDLDB4 NTYsMHhFMywKKyAJfTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdPXsKKy0JMHg4 ZCwweGYyLDB4YTQsMHg5NCwweDQ5LDB4MjIsMHg3NiwweGFhLAorLQkweDNkLDB4MjUsMHg3NSww eDliLDB4YjAsMHg2OCwweDY5LDB4Y2IsCistCTB4ZWEsMHhjMCwweGQ4LDB4M2EsMHhmYiwweDhk LDB4MGMsMHhmNywKKy0JMHhjYiwweGI4LDB4MzIsMHg0ZiwweDBkLDB4NzgsMHg4MiwweGU1LAor LQkweGQwLDB4NzYsMHgyZiwweGM1LDB4YjcsMHgyMSwweDBlLDB4YWYsCistCTB4YzIsMHhlOSww eGFkLDB4YWMsMHgzMiwweGFiLDB4N2EsMHhhYywKKy0JMHg0OSwweDY5LDB4M2QsMHhmYiwweGY4 LDB4MzcsMHgyNCwweGMyLAorLQkweGVjLDB4MDcsMHgzNiwweGVlLDB4MzEsMHhjOCwweDAyLDB4 OTEsCisrCTB4QUMsMHhDQiwweDFFLDB4NjMsMHg2MCwweDY5LDB4MEMsMHhGQiwweDA2LDB4MTks MHg2OCwweDNFLAorKwkweEE1LDB4MDEsMHg1QSwweEEyLDB4MTUsMHg1QywweEUyLDB4OTksMHgy RCwweEQ1LDB4MzAsMHg5OSwKKysJMHg3RSwweDVGLDB4OEQsMHhFMiwweEY3LDB4QzYsMHgyRSww eDhELDB4QTMsMHg5RiwweDU4LDB4QUQsCisrCTB4RDYsMHhBOSwweDdELDB4MEUsMHgwRCwweDk1 LDB4NTMsMHhBNiwweDcxLDB4M0EsMHhERSwweEFCLAorKwkweEFDLDB4RTksMHhGNCwweDM2LDB4 NTUsMHg5RSwweEI5LDB4RDYsMHg5MywweEJGLDB4RjMsMHgxOCwKKysJMHgxQywweDE0LDB4N0Is MHhBNSwweDQyLDB4MkUsMHhDRCwweDAwLDB4RUIsMHgzNSwweDNCLDB4MUIsCisrCTB4QTgsMHg1 MSwweEJCLDB4RTEsMHg1OCwweDQyLDB4ODUsMHg4NCwweDIyLDB4QTcsMHg5NywweDVFLAorKwkw eDk5LDB4NkYsMHgzOCwweDIwLDB4QkQsMHg5RCwweEI2LDB4RDksMHgzMywweDM3LDB4MkEsMHhG RCwKKysJMHhCQiwweEQ0LDB4QkMsMHgwQywweDJBLDB4NjcsMHhDQiwweDlGLDB4QkIsMHhERiww eEY5LDB4OTMsCisrCTB4QUEsMHhENiwweEYwLDB4RDYsMHg5NSwweDBCLDB4NUQsMHg2NSwweDE0 LDB4RDAsMHgxOCwweDlELAorKwkweEM2LDB4QUYsMHhGMCwweEM2LDB4MzcsMHg3QywweEYzLDB4 NUYsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXT17CistCTB4YzcsMHg3 MywweDIxLDB4OGMsMHg3MywweDdlLDB4YzgsMHhlZSwKKy0JMHg5OSwweDNiLDB4NGYsMHgyZCww eGVkLDB4MzAsMHhmNCwweDhlLAorLQkweGRhLDB4Y2UsMHg5MSwweDVmLAorKwkweEUzLDB4OEUs MHg1RSwweDZELDB4QkYsMHgyQiwweDc5LDB4RjgsMHhDNSwweDRCLDB4ODksMHg4QiwKKysJMHhC QSwweDJELDB4OTEsMHhDMywweDZDLDB4ODAsMHhBQywweDg3LAorIAl9OworIAorIHN0YXRpYyB1 bnNpZ25lZCBjaGFyIG91dF9nW109eworLQkweDYyLDB4NmQsMHgwMiwweDc4LDB4MzksMHhlYSww eDBhLDB4MTMsCistCTB4NDEsMHgzMSwweDYzLDB4YTUsMHg1YiwweDRjLDB4YjUsMHgwMCwKKy0J MHgyOSwweDlkLDB4NTUsMHgyMiwweDk1LDB4NmMsMHhlZiwweGNiLAorLQkweDNiLDB4ZmYsMHgx MCwweGYzLDB4OTksMHhjZSwweDJjLDB4MmUsCistCTB4NzEsMHhjYiwweDlkLDB4ZTUsMHhmYSww eDI0LDB4YmEsMHhiZiwKKy0JMHg1OCwweGU1LDB4YjcsMHg5NSwweDIxLDB4OTIsMHg1YywweDlj LAorLQkweGM0LDB4MmUsMHg5ZiwweDZmLDB4NDYsMHg0YiwweDA4LDB4OGMsCistCTB4YzUsMHg3 MiwweGFmLDB4NTMsMHhlNiwweGQ3LDB4ODgsMHgwMiwKKysJMHg0MiwweDRBLDB4MDQsMHg0RSww eDc5LDB4QjQsMHg5OSwweDdGLDB4RkQsMHg1OCwweDM2LDB4MkMsCisrCTB4MUIsMHg1RiwweDE4 LDB4N0UsMHgwRCwweENDLDB4QUIsMHg4MSwweEM5LDB4NUQsMHgxMCwweENFLAorKwkweDRFLDB4 ODAsMHg3RSwweDU4LDB4QjQsMHgzNCwweDNGLDB4QTcsMHg0NSwweEM3LDB4QUEsMHgzNiwKKysJ MHgyNCwweDQyLDB4QTksMHgzQiwweEU4LDB4MEUsMHgwNCwweDAyLDB4MkQsMHhGQiwweEE2LDB4 MTMsCisrCTB4QjksMHhCNSwweDE1LDB4QTUsMHg1NiwweDA3LDB4MzUsMHhFNCwweDAzLDB4QjYs MHg3OSwweDdDLAorKwkweDYyLDB4REQsMHhERiwweDNGLDB4NzEsMHgzQSwweDlELDB4OEIsMHhD NCwweEY2LDB4RTcsMHgxRCwKKysJMHg1MiwweEE4LDB4QTksMHg0MywweDFELDB4MzMsMHg1MSww eDg4LDB4MzksMHhCRCwweDczLDB4RTksCisrCTB4NUYsMHhCRSwweDgyLDB4NDksMHgyNywweEU2 LDB4QjUsMHg1MywweEMxLDB4MzgsMHhBQywweDJGLAorKwkweDZELDB4OTcsMHg2QywweEVCLDB4 NjcsMHhDMSwweDVGLDB4NjcsMHhGOCwweDM1LDB4MDUsMHg1RSwKKysJMHhENSwweDY4LDB4ODAs MHhBQSwweDk2LDB4Q0EsMHgwQiwweDhBLDB4RTYsMHhGMSwweEIxLDB4NDEsCisrCTB4QzYsMHg3 NSwweDk0LDB4MEEsMHgwQSwweDJBLDB4RkEsMHgyOSwKKyAJfTsKKyAKKyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkwIjsKK0BAIC0xNTcsNyAr MTYyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlCSU9fcHJpbnRmKGJp b19lcnIsInRlc3QgZ2VuZXJhdGlvbiBvZiBEU0EgcGFyYW1ldGVyc1xuIik7CisgCisgCUJOX0dF TkNCX3NldCgmY2IsIGRzYV9jYiwgYmlvX2Vycik7CistCWlmKCgoZHNhID0gRFNBX25ldygpKSA9 PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCA1MTIsCisrCWlmKCgo ZHNhID0gRFNBX25ldygpKSA9PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgo ZHNhLCAxMDI0LAorIAkJCQlzZWVkLCAyMCwgJmNvdW50ZXIsICZoLCAmY2IpKQorIAkJZ290byBl bmQ7CisgCitAQCAtMTcwLDkgKzE3NSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKKyAJQklPX3ByaW50ZihiaW9fZXJyLCJcbmNvdW50ZXI9JWQgaD0lbGRcbiIsY291bnRlcixo KTsKKyAJCQorIAlEU0FfcHJpbnQoYmlvX2Vycixkc2EsMCk7CistCWlmIChjb3VudGVyICE9IDEw NSkgCisrCWlmIChjb3VudGVyICE9IDIzOSkgCisgCQl7CistCQlCSU9fcHJpbnRmKGJpb19lcnIs ImNvdW50ZXIgc2hvdWxkIGJlIDEwNVxuIik7CisrCQlCSU9fcHJpbnRmKGJpb19lcnIsImNvdW50 ZXIgc2hvdWxkIGJlIDIzOVxuIik7CisgCQlnb3RvIGVuZDsKKyAJCX0KKyAJaWYgKGggIT0gMikK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMJMjAxNC0w NS0wNiAxNjoyOTo1MC41Mzk5MjMwNjMgKzAyMDAKK0BAIC01OCwxMSArNTgsMjUgQEAKKyAKKyAj aW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSAiZW5nX2ludC5oIgorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgdm9pZCBF TkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXModm9pZCkKKyAJeworIAkvKiBTb21lIEVOR0lORXMg bmVlZCB0aGlzICovCisgCU9QRU5TU0xfY3B1aWRfc2V0dXAoKTsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmIChGSVBTX21vZGUoKSkgeworKwkJ LyogV2UgYWxsb3cgbG9hZGluZyBkeW5hbWljIGVuZ2luZSBhcyBhIHRoaXJkIHBhcnR5CisrCQkg ICBlbmdpbmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQuCisrCQkgICBVc2VyIGlzIGRpc2FsbG93 ZWQgdG8gbG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMKKysJCSAgIGJ5IHNlY3VyaXR5IHBvbGlj eS4gKi8KKysJCUVOR0lORV9sb2FkX2R5bmFtaWMoKTsKKysJCXJldHVybjsKKysJfQorKyNlbmRp ZgorICNpZiAwCisgCS8qIFRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBuZWVkIGZvciBhbiAib3BlbnNz bCIgRU5HSU5FIHVubGVzcywgb25lIGRheSwKKyAJICogaXQgaXMgdGhlICpvbmx5KiB3YXkgZm9y IHN0YW5kYXJkIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25zIHRvIGJlIGJlCitkaWZmIC11cCBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2V2cC9jX2FsbGMuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvY19hbGxjLmMuZmlw cwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9ldnAvY19hbGxjLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDA5MjMwODYgKzAyMDAK K0BAIC02NSw2ICs2NSwxMSBAQAorIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkK KyAJeworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsK KysJaWYoIUZJUFNfbW9kZSgpKSAKKysJCXsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f REVTCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiKCkpOworIAlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2NmYjEoKSk7CitAQCAtMjI3LDQgKzIzMiw2MCBAQCB2b2lkIE9wZW5TU0xfYWRkX2Fs bF9jaXBoZXJzKHZvaWQpCisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9j YmMsIkNBTUVMTElBMjU2Iik7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1 Nl9jYmMsImNhbWVsbGlhMjU2Iik7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJ fQorKwllbHNlCisrCQl7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworKwlFVlBfYWRkX2NpcGhl cihFVlBfZGVzX2VkZV9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jZmIo KSk7CisrCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX29mYigpKTsKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19lZGUzX29mYigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGVfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOworKwlFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsIkRFUzMiKTsKKysJRVZQX2FkZF9jaXBo ZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCJkZXMzIik7CisrCisrCUVWUF9hZGRfY2lwaGVyKEVW UF9kZXNfZWRlKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTMoKSk7CisrI2VuZGlm CisrCisrI2lmbmRlZiBPUEVOU1NMX05PX0FFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmI4KCkpOworKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNO X2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEy OF9jYmMsImFlczEyOCIpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Cisr CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xOTJfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOworKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2N0cigpKTsK KysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhlcl9h bGlhcyhTTl9hZXNfMTkyX2NiYywiQUVTMTkyIik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNO X2Flc18xOTJfY2JjLCJhZXMxOTIiKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNi KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CisrCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2Zi MSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9j dHIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfeHRzKCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNf MjU2X2NiYywiQUVTMjU2Iik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2Jj LCJhZXMyNTYiKTsKKysjZW5kaWYKKysJCX0KKysjZW5kaWYKKyAJfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9l dnAvY19hbGxkLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMJ MjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZXZwL2NfYWxsZC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQwOTIzMDg2ICswMjAwCitA QCAtNjQsNiArNjQsMTEgQEAKKyAKKyB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQp CisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Cisr CWlmICghRklQU19tb2RlKCkpCisrCQl7CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX01E NAorIAlFVlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOworICNlbmRpZgorQEAgLTExMSw0ICsxMTYs MzIgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorICNpZm5kZWYgT1BFTlNT TF9OT19XSElSTFBPT0wKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX3doaXJscG9vbCgpKTsKKyAjZW5k aWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWYgIWRlZmlu ZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKKysJRVZQX2Fk ZF9kaWdlc3QoRVZQX3NoYTEoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsInNz bDMtc2hhMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRp b24sU05fc2hhMVdpdGhSU0EpOworKyNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKysJRVZQX2FkZF9k aWdlc3QoRVZQX2RzczEoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEEx LFNOX2RzYVdpdGhTSEExXzIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hB MSwiRFNTMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIp OworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKwlFVlBfYWRkX2RpZ2VzdChF VlBfZWNkc2EoKSk7CisrI2VuZGlmCisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1 NgorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMjU2KCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKysJRVZQX2Fk ZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsK KysjZW5kaWYKKysJCX0KKysjZW5kaWYKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZGlnZXN0LmMK Ky0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMJMjAxNC0wMy0xNyAx NzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2Rp Z2VzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQwOTIzMDg2ICswMjAwCitAQCAtMTQyLDkgKzE0 Miw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCisgCXJldHVy biBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOworIAl9CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3Jh bXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQUyBt b2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9pbml0 KEVWUF9NRF9DVFggKmN0eCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7 IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNv bnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGln ZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfZmluYWwoRVZQX01E X0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGln ZXN0IEZpbmFsIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9 CisrCXsKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJYmFkX2luaXQsCisrCWJhZF91cGRhdGUs CisrCWJhZF9maW5hbCwKKysJTlVMTCwKKysJTlVMTCwKKysJTlVMTCwKKysJMCwKKysJezAsMCww LDB9LAorKwl9OworKworKyNlbmRpZgorKworIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURf Q1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQorIAl7CisgCUVWUF9N RF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OworKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlm CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBu b3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRo aXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVh c2luZworQEAgLTIwMSw2ICsyNDIsMTggQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9D VFggKmN0eCwgYworICNlbmRpZgorIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKKyAJCXsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkpCisrCQkJeworKwkJCWlmICgh KHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykgCisrCQkJICYmICEoY3R4LT5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpCisrCQkJCXsKKysJCQkJRVZQZXJyKEVW UF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrCQkJCWN0 eC0+ZGlnZXN0ID0gJmJhZF9tZDsKKysJCQkJcmV0dXJuIDA7CisrCQkJCX0KKysJCQl9CisrI2Vu ZGlmCisgCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQorIAkJCU9Q RU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworIAkJY3R4LT5kaWdlc3Q9dHlwZTsKK0BAIC0yMjks MjYgKzI4MiwxNSBAQCBza2lwX3RvX2luaXQ6CisgCQl9CisgCWlmIChjdHgtPmZsYWdzICYgRVZQ X01EX0NUWF9GTEFHX05PX0lOSVQpCisgCQlyZXR1cm4gMTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBT CistCWlmIChGSVBTX21vZGUoKSkKKy0JCXsKKy0JCWlmIChGSVBTX2RpZ2VzdGluaXQoY3R4LCB0 eXBlKSkKKy0JCQlyZXR1cm4gMTsKKy0JCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworLQkJ Y3R4LT5tZF9kYXRhID0gTlVMTDsKKy0JCXJldHVybiAwOworLQkJfQorLSNlbmRpZgorIAlyZXR1 cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKKyAJfQorIAorIGludCBFVlBfRGlnZXN0VXBkYXRl KEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQorIAl7Cisg I2lmZGVmIE9QRU5TU0xfRklQUworLQlyZXR1cm4gRklQU19kaWdlc3R1cGRhdGUoY3R4LCBkYXRh LCBjb3VudCk7CistI2Vsc2UKKy0JcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsK KysJRklQU19zZWxmdGVzdF9jaGVjaygpOworICNlbmRpZgorKwlyZXR1cm4gY3R4LT51cGRhdGUo Y3R4LGRhdGEsY291bnQpOworIAl9CisgCisgLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQg dGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCitAQCAtMjYz LDExICszMDUsMTEgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVucwor IC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRh dGEgZnJvbSB0aGUgY29udGV4dCAqLworIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQorIAl7CistI2lm ZGVmIE9QRU5TU0xfRklQUworLQlyZXR1cm4gRklQU19kaWdlc3RmaW5hbChjdHgsIG1kLCBzaXpl KTsKKy0jZWxzZQorIAlpbnQgcmV0OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+ bWRfc2l6ZSA8PSBFVlBfTUFYX01EX1NJWkUpOworIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0 eCxtZCk7CisgCWlmIChzaXplICE9IE5VTEwpCitAQCAtMjc5LDcgKzMyMSw2IEBAIGludCBFVlBf RGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LAorIAkJfQorIAltZW1zZXQoY3R4LT5tZF9k YXRhLDAsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAJcmV0dXJuIHJldDsKKy0jZW5kaWYKKyAJ fQorIAorIGludCBFVlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqb3V0LCBjb25zdCBFVlBfTURf Q1RYICppbikKK0BAIC0zNzYsNyArNDE3LDYgQEAgdm9pZCBFVlBfTURfQ1RYX2Rlc3Ryb3koRVZQ X01EX0NUWCAqY3R4KQorIC8qIFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3 aXRoIHRoZSBjb250ZXh0ICovCisgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpj dHgpCisgCXsKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworIAkvKiBEb24ndCBhc3N1bWUgY3R4LT5t ZF9kYXRhIHdhcyBjbGVhbmVkIGluIEVWUF9EaWdlc3RfRmluYWwsCisgCSAqIGJlY2F1c2Ugc29t ZXRpbWVzIG9ubHkgY29waWVzIG9mIHRoZSBjb250ZXh0IGFyZSBldmVyIGZpbmFsaXNlZC4KKyAJ ICovCitAQCAtMzg5LDcgKzQyOSw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NU WCAqY3R4KQorIAkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+bWRfZGF0YSxjdHgtPmRpZ2VzdC0+Y3R4 X3NpemUpOworIAkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CisgCQl9CistI2VuZGlmCisg CWlmIChjdHgtPnBjdHgpCisgCQlFVlBfUEtFWV9DVFhfZnJlZShjdHgtPnBjdHgpOworICNpZm5k ZWYgT1BFTlNTTF9OT19FTkdJTkUKK0BAIC0zOTgsOSArNDM3LDYgQEAgaW50IEVWUF9NRF9DVFhf Y2xlYW51cChFVlBfTURfQ1RYICpjdHgpCisgCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBo ZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KKyAJCUVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUpOwor ICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQU19tZF9jdHhfY2xlYW51cChjdHgp OworLSNlbmRpZgorIAltZW1zZXQoY3R4LCdcMCcsc2l6ZW9mICpjdHgpOworIAorIAlyZXR1cm4g MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9ldnAvZV9hZXMuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9l dnAvZV9hZXMuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQw OTIzMDg2ICswMjAwCitAQCAtNTYsNyArNTYsNiBAQAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKyAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKy0jaWZuZGVm IE9QRU5TU0xfRklQUworICNpbmNsdWRlICJtb2Rlc19sY2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+CisgCitAQCAtNzE2LDcgKzcxNSw3IEBAIHN0YXRpYyBpbnQgYWVzX2djbV9jdHJs KEVWUF9DSVBIRVJfQ1RYICoKKyAJCWlmIChhcmcgPD0gMCkKKyAJCQlyZXR1cm4gMDsKKyAjaWZk ZWYgT1BFTlNTTF9GSVBTCistCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoYy0+ZmxhZ3Mg JiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJaWYgKEZJUFNfbW9kZSgpICYmICEo Yy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQorIAkJCQkJCSAmJiBhcmcg PCAxMikKKyAJCQlyZXR1cm4gMDsKKyAjZW5kaWYKK0BAIC0xMTM0LDcgKzExMzMsNyBAQCBzdGF0 aWMgaW50IGFlc194dHNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYCisgCQlyZXR1cm4gMDsKKyAjaWZk ZWYgT1BFTlNTTF9GSVBTCisgCS8qIFJlcXVpcmVtZW50IG9mIFNQODAwLTM4RSAqLworLQlpZiAo RklQU19tb2R1bGVfbW9kZSgpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpICYmCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQ SF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgorIAkJCShsZW4gPiAoMVVMPDwyMCkqMTYpKQorIAkJ eworIAkJRVZQZXJyKEVWUF9GX0FFU19YVFNfQ0lQSEVSLCBFVlBfUl9UT09fTEFSR0UpOworQEAg LTEzMTcsNCArMTMxNiwzIEBAIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywxOTIsMSwxMixj Y20KKyBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMjU2LDEsMTIsY2NtLENDTSxFVlBfQ0lQ SF9GTEFHX0ZJUFN8Q1VTVE9NX0ZMQUdTKQorIAorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9ldnAvZV9kZXMzLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2VfZGVzMy5j LmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQwOTIzMDg2ICsw MjAwCitAQCAtNjUsOCArNjUsNiBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworLQorIHN0YXRp YyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICprZXksCisgCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LGludCBlbmMpOwor IAorQEAgLTIwOCw5ICsyMDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjhfY2lwaGVyKEVW UF9DSVBICisgICAgIH0KKyAKKyBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tF WSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKKy0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVz X2VkZV9pbml0X2tleSwgTlVMTCwgCistCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCQlF VlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxB R19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJCWRlc19lZGVfaW5pdF9rZXks CisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgI2RlZmluZSBkZXNf ZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKK0BAIC0yMTksMjEgKzIxNywy MSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwKKyAjZGVmaW5lIGRl c19lZGUzX2VjYl9jaXBoZXIgZGVzX2VkZV9lY2JfY2lwaGVyCisgCisgQkxPQ0tfQ0lQSEVSX2Rl ZnMoZGVzX2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVzX2VkZTMsIDgsIDI0LCA4LCA2NCwKKy0J CQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEwsIAorLQkJCUVWUF9D SVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9D SVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNO MSwKKysJCQlkZXNfZWRlM19pbml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJCWRl czNfY3RybCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tFWSxO SURfZGVzX2VkZTMsMjQsOCwxLAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNf aW5pdF9rZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAg RVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZM QUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNfaW5p dF9rZXksCisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkKKyAK KyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tFWSxOSURfZGVzX2VkZTMs MjQsOCw4LAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksTlVM TCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgRVZQX0NJUEhFUl9n ZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBf Q0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNfaW5pdF9rZXksCisrCQkg ICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkKKyAKKyBzdGF0aWMgaW50 IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hh ciAqa2V5LAorQEAgLTMxMyw0ICszMTEsMyBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2Vk ZTModm9pZCkKKyAJcmV0dXJuICZkZXNfZWRlM19lY2I7CisgfQorICNlbmRpZgorLSNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9ldnAvZV9udWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZw L2VfbnVsbC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQw OTIzMDg2ICswMjAwCitAQCAtNjEsOCArNjEsNiBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQ UworLQorIHN0YXRpYyBpbnQgbnVsbF9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25z dCB1bnNpZ25lZCBjaGFyICprZXksCisgCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LGludCBlbmMp OworIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQg Y2hhciAqb3V0LAorQEAgLTcxLDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9j aXBoZXI9CisgCXsKKyAJTklEX3VuZGVmLAorIAkxLDAsMCwKKy0JMCwKKysJRVZQX0NJUEhfRkxB R19GSVBTLAorIAludWxsX2luaXRfa2V5LAorIAludWxsX2NpcGhlciwKKyAJTlVMTCwKK0BAIC0x MDEsNCArOTksMyBAQCBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjCisg CQltZW1jcHkoKGNoYXIgKilvdXQsKGNvbnN0IGNoYXIgKilpbixpbmwpOworIAlyZXR1cm4gMTsK KyAJfQorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnBfZW5j LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2V2cF9lbmMuYworLS0tIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2V2cF9lbmMuYwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjU0MTkyMzEwOSArMDIwMAorQEAgLTY5LDE3ICs2OSw1OCBAQAorICNl bmRpZgorICNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0j ZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBGSVBTX2NpcGhlcihjdHgsIG91 dCwgaW4sIGlubCkKKy0jZWxzZQorICNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBp bmwpIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCistI2VuZGlmCisg CisgCisgY29uc3QgY2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVY VDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2Ug aXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxn b3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0 YXRpYyBpbnQgYmFkX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hh ciAqa2V5LAorKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQorKwl7IEZJ UFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBp bnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs CisrCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorKwl7IEZJ UFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9CisrCisrLyogTkI6 IG5vIGNsZWFudXAgYmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCisr Cisrc3RhdGljIGludCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBF ICp0eXApCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0dXJu IDA7fQorK3N0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFf VFlQRSAqdHlwKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7IHJl dHVybiAwO30KKytzdGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0 eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIg Y3RybCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhl ciA9CisrCXsKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJYmFkX2luaXQsCisrCWJh ZF9kb19jaXBoZXIsCisrCU5VTEwsCisrCTAsCisrCWJhZF9zZXRfYXNuMSwKKysJYmFkX2dldF9h c24xLAorKwliYWRfY3RybCwKKysJTlVMTAorKwl9OworKworKyNlbmRpZgorKworIHZvaWQgRVZQ X0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQorIAl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldChjdHgs MCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKKyAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KKyAJ fQorQEAgLTExMSw2ICsxNTIsMTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJf Q1RYICpjdAorIAkJCWVuYyA9IDE7CisgCQljdHgtPmVuY3J5cHQgPSBlbmM7CisgCQl9CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVEKTsKKysJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrCQlyZXR1cm4gMDsKKysJCX0K KysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBu aWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJ ICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZv aWQgcmVsZWFzaW5nCitAQCAtMTY5LDEwICsyMTgsNiBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgo RVZQX0NJUEhFUl9DVFggKmN0CisgCQkJY3R4LT5lbmdpbmUgPSBOVUxMOworICNlbmRpZgorIAor LSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1cm4gRklQ U19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOworLSNlbmRpZgorIAkJY3R4 LT5jaXBoZXI9Y2lwaGVyOworIAkJaWYgKGN0eC0+Y2lwaGVyLT5jdHhfc2l6ZSkKKyAJCQl7CitA QCAtMjA2LDEwICsyNTEsNiBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFgg KmN0CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorIHNraXBfdG9faW5pdDoKKyAjZW5kaWYK Ky0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBT X2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CistI2VuZGlmCisgCS8qIHdl IGFzc3VtZSBibG9jayBzaXplIGlzIGEgcG93ZXIgb2YgMiBpbiAqY3J5cHRVcGRhdGUgKi8KKyAJ T1BFTlNTTF9hc3NlcnQoY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gMQorIAkgICAgfHwgY3R4 LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gOAorQEAgLTI0OSw2ICsyOTAsMjIgQEAgc2tpcF90b19p bml0OgorIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkvKiBBZnRlciAna2V5 JyBpcyBzZXQgbm8gZnVydGhlciBwYXJhbWV0ZXJzIGNoYW5nZXMgYXJlIHBlcm1pc3NpYmxlLgor KwkgKiBTbyBvbmx5IGNoZWNrIGZvciBub24gRklQUyBlbmFibGluZyBhdCB0aGlzIHBvaW50Lgor KwkgKi8KKysJaWYgKGtleSAmJiBGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmICghKGN0eC0+Y2lw aGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKKysJCQkmICEoY3R4LT5mbGFncyAmIEVW UF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJCXsKKysJCQlFVlBlcnIoRVZQX0ZfRVZQ X0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQljdHgtPmNpcGhl ciA9ICZiYWRfY2lwaGVyOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysK KyAJaWYoa2V5IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9J TklUKSkgeworIAkJaWYoIWN0eC0+Y2lwaGVyLT5pbml0KGN0eCxrZXksaXYsZW5jKSkgcmV0dXJu IDA7CisgCX0KK0BAIC01NjgsNyArNjI1LDYgQEAgdm9pZCBFVlBfQ0lQSEVSX0NUWF9mcmVlKEVW UF9DSVBIRVJfQ1RYCisgCisgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhFUl9D VFggKmMpCisgCXsKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworIAlpZiAoYy0+Y2lwaGVyICE9IE5V TEwpCisgCQl7CisgCQlpZihjLT5jaXBoZXItPmNsZWFudXAgJiYgIWMtPmNpcGhlci0+Y2xlYW51 cChjKSkKK0BAIC01NzksMTYgKzYzNSwxMiBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChF VlBfQ0lQSEVSX0NUCisgCQl9CisgCWlmIChjLT5jaXBoZXJfZGF0YSkKKyAJCU9QRU5TU0xfZnJl ZShjLT5jaXBoZXJfZGF0YSk7CistI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQor IAlpZiAoYy0+ZW5naW5lKQorIAkJLyogVGhlIEVWUF9DSVBIRVIgd2UgdXNlZCBiZWxvbmdzIHRv IGFuIEVOR0lORSwgcmVsZWFzZSB0aGUKKyAJCSAqIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHdlIGhl bGQgZm9yIHRoaXMgcmVhc29uLiAqLworIAkJRU5HSU5FX2ZpbmlzaChjLT5lbmdpbmUpOworICNl bmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQU19jaXBoZXJfY3R4X2NsZWFudXAoYyk7 CistI2VuZGlmCisgCW1lbXNldChjLDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7CisgCXJldHVy biAxOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2V2cC5oLmZpcHMg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9ldnAvZXZwLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjQzMjkyMDU4OSArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZXZwLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDE5 MjMxMDkgKzAyMDAKK0BAIC03NSw2ICs3NSwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5o PgorICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisrCisgLyoKKyAjZGVmaW5lIEVWUF9SQzJfS0VZX1NJWkUJCTE2Cisg I2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgorQEAgLTI4MiwxMCArMjg2LDYgQEAgc3RydWN0 IGVudl9tZF9jdHhfc3QKKyAJCQkJCQkqIGNsZWFuZWQgKi8KKyAjZGVmaW5lIEVWUF9NRF9DVFhf RkxBR19SRVVTRQkJMHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCisgCQkJCQkJ KiBpbiBFVlBfTURfQ1RYX2NsZWFudXAgKi8KKy0vKiBGSVBTIGFuZCBwYWQgb3B0aW9ucyBhcmUg aWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKKy0gKiBzbyB3ZSBkb24ndCBh Y2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCistICovCist CisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4CS8qIEFsbG93 IHVzZSBvZiBub24gRklQUyBkaWdlc3QKKyAJCQkJCQkgKiBpbiBGSVBTIG1vZGUgKi8KKyAKK0BA IC0yOTcsNiArMjk3LDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0CisgI2RlZmluZSBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLworICNkZWZpbmUg RVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLworICNkZWZpbmUg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KKysjZGVmaW5lIE1f RVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCkgXAorKwkJKChjdHgtPmZsYWdzPj4xNikgJjB4 RkZGRikgLyogc2VlZCBsZW5ndGggKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTURM RU4JMHhGRkZGCS8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCisrI2RlZmluZSBFVlBfTURf Q1RYX0ZMQUdfUFNTX01SRUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVjb3ZlcmVkICov CisgCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8qIERvbid0IGlu aXRpYWxpemUgbWRfZGF0YSAqLworIAorQEAgLTM0OCwxNSArMzUyLDE1IEBAIHN0cnVjdCBldnBf Y2lwaGVyX3N0CisgLyogY2lwaGVyIGhhbmRsZXMgcmFuZG9tIGtleSBnZW5lcmF0aW9uICovCisg I2RlZmluZSAJRVZQX0NJUEhfUkFORF9LRVkJCTB4MjAwCisgLyogY2lwaGVyIGhhcyBpdHMgb3du IGFkZGl0aW9uYWwgY29weWluZyBsb2dpYyAqLworLSNkZWZpbmUgCUVWUF9DSVBIX0NVU1RPTV9D T1BZCQkweDQwMAorKyNkZWZpbmUgCUVWUF9DSVBIX0NVU1RPTV9DT1BZCQkweDQwMDAKKyAvKiBB bGxvdyB1c2UgZGVmYXVsdCBBU04xIGdldC9zZXQgaXYgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQSF9G TEFHX0RFRkFVTFRfQVNOMQkweDEwMDAKKyAvKiBCdWZmZXIgbGVuZ3RoIGluIGJpdHMgbm90IGJ5 dGVzOiBDRkIxIG1vZGUgb25seSAqLworICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJ VFMJMHgyMDAwCisgLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLwor LSNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAwCisrI2RlZmluZQkJRVZQX0NJUEhf RkxBR19GSVBTCQkweDQwMAorIC8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUg Ki8KKy0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwMAorKyNkZWZp bmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAKKyAvKiBDaXBoZXIgaGFuZGxl cyBhbnkgYW5kIGFsbCBwYWRkaW5nIGxvZ2ljIGFzIHdlbGwKKyAgKiBhcyBmaW5hbGlzYXRpb24u CisgICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZXZwX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvZXZwX2xpYi5jCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNTQxOTIzMTA5ICswMjAwCitAQCAtMTkwLDYgKzE5MCw5IEBAIGludCBFVlBfQ0lQ SEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF8KKyAKKyBpbnQgRVZQX0NpcGhlcihFVlBfQ0lQ SEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu LCB1bnNpZ25lZCBpbnQgaW5sKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJldHVybiBjdHgtPmNpcGhlci0+ZG9fY2lwaGVy KGN0eCxvdXQsaW4saW5sKTsKKyAJfQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2V2cC9ldnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnBfbG9jbC5o CistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAxNC0wNS0w NiAxNjoyOTo1MC40Mjg5MjA0OTYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZw L2V2cF9sb2NsLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDE5MjMxMDkgKzAyMDAKK0BAIC0yNTgs MTAgKzI1OCw5IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQKKyAJ QkxPQ0tfQ0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNiaXRzLGtz dHJ1Y3Qsa3NjaGVkKSBcCisgCUJMT0NLX0NJUEhFUl9kZWZfY2ZiKGNpcGhlciMjXyMja2V5c2l6 ZSxrc3RydWN0LCBcCisgCQkJICAgICBOSURfIyNjaXBoZXIjI18jI2tleXNpemUsIGtleXNpemUv OCwgaXZfbGVuLCBjYml0cywgXAorLQkJCSAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEws IFwKKy0JCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIEVWUF9DSVBI RVJfZ2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIE5VTEwpCisrCQkJICAgICBFVlBfQ0lQSF9GTEFH X0RFRkFVTFRfQVNOMSwgXAorKwkJCSAgICAgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwpCisrCisgCisgc3RydWN0IGV2cF9wa2V5X2N0eF9zdAorIAl7CitAQCAtMzY3 LDExICszNjYsNiBAQCBpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VuKEVWUF9DSVBIRVJfCisg I2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01EMl9Jbml0CisgI2RlZmluZSBNREMyX0luaXQJcHJp dmF0ZV9NREMyX0luaXQKKyAjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVfU0hBX0luaXQKKy0jZGVm aW5lIFNIQTFfSW5pdAlwcml2YXRlX1NIQTFfSW5pdAorLSNkZWZpbmUgU0hBMjI0X0luaXQJcHJp dmF0ZV9TSEEyMjRfSW5pdAorLSNkZWZpbmUgU0hBMjU2X0luaXQJcHJpdmF0ZV9TSEEyNTZfSW5p dAorLSNkZWZpbmUgU0hBMzg0X0luaXQJcHJpdmF0ZV9TSEEzODRfSW5pdAorLSNkZWZpbmUgU0hB NTEyX0luaXQJcHJpdmF0ZV9TSEE1MTJfSW5pdAorIAorICNkZWZpbmUgQkZfc2V0X2tleQlwcml2 YXRlX0JGX3NldF9rZXkKKyAjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tl eQorQEAgLTM3OSw3ICszNzMsNiBAQCBpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VuKEVWUF9D SVBIRVJfCisgI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKKyAjZGVm aW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKyAjZGVmaW5lIFJDNF9zZXRfa2V5 CXByaXZhdGVfUkM0X3NldF9rZXkKKy0jZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZAlwcml2 YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZAorICNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleQlwcml2 YXRlX0NhbWVsbGlhX3NldF9rZXkKKyAKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9ldnAvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL01ha2Vm aWxlCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9NYWtlZmlsZS5maXBzCTIwMTQtMDQt MDcgMTg6NTU6MzMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2 cC9NYWtlZmlsZQkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MTkyMzEwOSArMDIwMAorQEAgLTI4LDcg KzI4LDcgQEAgTElCU1JDPSBlbmNvZGUuYyBkaWdlc3QuYyBldnBfZW5jLmMgZXZwXworIAliaW9f bWQuYyBiaW9fYjY0LmMgYmlvX2VuYy5jIGV2cF9lcnIuYyBlX251bGwuYyBcCisgCWNfYWxsLmMg Y19hbGxjLmMgY19hbGxkLmMgZXZwX2xpYi5jIGJpb19vay5jIFwKKyAJZXZwX3BrZXkuYyBldnBf cGJlLmMgcDVfY3JwdC5jIHA1X2NycHQyLmMgXAorLQllX29sZC5jIHBtZXRoX2xpYi5jIHBtZXRo X2ZuLmMgcG1ldGhfZ24uYyBtX3NpZ3Zlci5jIGV2cF9maXBzLmMJXAorKwllX29sZC5jIHBtZXRo X2xpYi5jIHBtZXRoX2ZuLmMgcG1ldGhfZ24uYyBtX3NpZ3Zlci5jIFwKKyAJZV9hZXNfY2JjX2ht YWNfc2hhMS5jIGVfcmM0X2htYWNfbWQ1LmMKKyAKKyBMSUJPQko9CWVuY29kZS5vIGRpZ2VzdC5v IGV2cF9lbmMubyBldnBfa2V5Lm8gZXZwX2FjbmYubyBldnBfY25mLm8gXAorQEAgLTQxLDcgKzQx LDcgQEAgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZwXworIAliaW9fbWQu byBiaW9fYjY0Lm8gYmlvX2VuYy5vIGV2cF9lcnIubyBlX251bGwubyBcCisgCWNfYWxsLm8gY19h bGxjLm8gY19hbGxkLm8gZXZwX2xpYi5vIGJpb19vay5vIFwKKyAJZXZwX3BrZXkubyBldnBfcGJl Lm8gcDVfY3JwdC5vIHA1X2NycHQyLm8gXAorLQllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2Zu Lm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIGV2cF9maXBzLm8gXAorKwllX29sZC5vIHBtZXRoX2xp Yi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIFwKKyAJZV9hZXNfY2JjX2htYWNf c2hhMS5vIGVfcmM0X2htYWNfbWQ1Lm8KKyAKKyBTUkM9ICQoTElCU1JDKQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2V2cC9tX2Rzcy5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJ MjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZXZwL21fZHNzLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDI5MjMxMzIgKzAyMDAKK0BA IC02Niw3ICs2Niw2IEBACisgI2VuZGlmCisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorLSNp Zm5kZWYgT1BFTlNTTF9GSVBTCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkK KyAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK0BAIC04Miw3ICs4MSw3IEBA IHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJTklEX2Rz YVdpdGhTSEEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VT VCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwK KyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC05OCw0ICs5NywzIEBAIGNvbnN0IEVWUF9NRCAqRVZQ X2Rzcyh2b2lkKQorIAlyZXR1cm4oJmRzYV9tZCk7CisgCX0KKyAjZW5kaWYKKy0jZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZXZwL21fZHNzMS5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9t X2RzczEuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0Mjky MzEzMiArMDIwMAorQEAgLTY4LDggKzY4LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K KyAjZW5kaWYKKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUyAKKy0KKyBzdGF0aWMgaW50IGluaXQo RVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRhKTsgfQor IAorQEAgLTg0LDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQorIAlOSURf ZHNhLAorIAlOSURfZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURf RkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdf RklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMDAsNCArOTgsMyBAQCBj b25zdCBFVlBfTUQgKkVWUF9kc3MxKHZvaWQpCisgCXJldHVybigmZHNzMV9tZCk7CisgCX0KKyAj ZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9tZDIu Yy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9tZDIuYworLS0tIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9tX21kMi5jCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNTQyOTIzMTMyICswMjAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BF TlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVk ZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7 IHJldHVybiBNRDJfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9tX3No YTEuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwkyMDE0LTAz LTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9l dnAvbV9zaGExLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDI5MjMxMzIgKzAyMDAKK0BAIC01OSw4 ICs1OSw2IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisg CistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisgCisg I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CitAQCAtODUsNyArODMsOCBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIHNoYTFfbWQ9CisgCU5JRF9zaGExLAorIAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9u LAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFH X0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAtMTIyLDcgKzEyMSw4IEBA IHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kPQorIAlOSURfc2hhMjI0LAorIAlOSURfc2hh MjI0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTIyNF9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAor KwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDIyNCwKKyAJdXBkYXRlMjU2LAor IAlmaW5hbDI1NiwKK0BAIC0xNDEsNyArMTQxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEy NTZfbWQ9CisgCU5JRF9zaGEyNTYsCisgCU5JRF9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwKKyAJ U0hBMjU2X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9E X1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19G SVBTLAorIAlpbml0MjU2LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTE3Miw3ICsx NzMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9tZD0KKyAJTklEX3NoYTM4NCwKKyAJ TklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEzODRfRElHRVNUX0xFTkdUSCwKKy0J RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQzODQsCisgCXVwZGF0 ZTUxMiwKKyAJZmluYWw1MTIsCitAQCAtMTkxLDcgKzE5Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBf TUQgc2hhNTEyX21kPQorIAlOSURfc2hhNTEyLAorIAlOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRp b24sCisgCVNIQTUxMl9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZ X01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01E X0ZMQUdfRklQUywKKyAJaW5pdDUxMiwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0y MDYsNCArMjA5LDMgQEAgY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZvaWQpCisgCXsgcmV0dXJu KCZzaGE1MTJfbWQpOyB9CisgI2VuZGlmCS8qIGlmbmRlZiBPUEVOU1NMX05PX1NIQTUxMiAqLwor IAorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9wX3NpZ24uYy5m aXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9ldnAvcF9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNTQyOTIzMTMyICswMjAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgI2lmZGVmIHVu ZGVmCisgdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCitA QCAtMTAzLDYgKzEwNCwyMiBAQCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVu c2lnCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQo cGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRf cnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJy OworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7Cisr CQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtj dHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJc2Fs dGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4g PT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVs c2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVu ID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBz YWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlpZiAoRVZQX1BLRVlfc2ln bihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQorIAkJCWdvdG8gZXJyOwor IAkJKnNpZ2xlbiA9IHNsdG1wOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9w X3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCistLS0g b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJMjAxNC0wMy0xNyAxNzox NDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZXZwL3BfdmVy aWZ5LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDI5MjMxMzIgKzAyMDAKK0BAIC02MSw2ICs2MSw3 IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0 cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KKyAKKyBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgdW5zaWdu ZWQgY2hhciAqc2lnYnVmLAorIAkgICAgIHVuc2lnbmVkIGludCBzaWdsZW4sIEVWUF9QS0VZICpw a2V5KQorQEAgLTg4LDYgKzg5LDIyIEBAIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAq Y3R4LCBjb24KKyAJCQlnb3RvIGVycjsKKyAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVy ZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgCQkJZ290byBlcnI7CisrCQlpZiAoY3R4 LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKKysJCQlpZiAoRVZQX1BLRVlfQ1RY X3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKKysJCQkJZ290 byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQorKwkJ CXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGlu Zyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJ CQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKKysJCQlpZiAoc2Fs dGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQorKwkJCQlzYWx0bGVuID0gLTE7Cisr CQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCisrCQkJCXNh bHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtj dHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCX0KKyAJCWkgPSBFVlBfUEtF WV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBtX2xlbik7CisgCQllcnI6CisgCQlF VlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfYWVzYXZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfYWVzYXZzLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MzkyMzE1NSArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwkyMDE0LTA1LTA2 IDE2OjI5OjUwLjU0MzkyMzE1NSArMDIwMAorQEAgLTAsMCArMSw5MzkgQEAKKysvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFy ZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoK KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK KysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK KysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorKyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24gU3VpdGUKKysgIFRlc3Qg UHJvZ3JhbQorKworKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9yYXRp b24KKysgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50b3duLCBNRCAy MDg3NAorKyAgVS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+ CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxh c3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKwor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sK KysgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOwor K30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAi Zmlwc191dGwuaCIKKysKKysjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2CisrCisrI2RlZmluZSBW RVJCT1NFIDAKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKi8KKysKKytpbnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAorKwkgICAgY2hh ciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAorKwkgICAgdW5zaWdu ZWQgY2hhciAqaVZlYywgCisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNy eXB0ICovCisrCSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGNoYXIgKmNp cGhlcnRleHQsIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVy ID0gTlVMTDsKKysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQorKwl7 CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBf YWVzXzEyOF9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBF VlBfYWVzXzE5Ml9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIg PSBFVlBfYWVzXzI1Nl9jYmMoKTsKKysJCWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2Ug aWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6 KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9lY2IoKTsKKysJ CWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9lY2IoKTsK KysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9lY2Io KTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUs ICJDRkIxMjgiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAx Mjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysJCWJyZWFrOworKworKwkJ Y2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysJCWJyZWFrOwor KworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKKysJCWJy ZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZC IiwgMykgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4Ogor KwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTky OgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2Ug MjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7CisrCQlicmVhazsKKysJCX0KKysJ fQorKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCXsKKysJc3dpdGNo IChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2Nm YjEoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5 Ml9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Fl c18yNTZfY2ZiMSgpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3RyY2Fz ZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2Fz ZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7CisrCQlicmVhazsKKysKKysJ CWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgpOworKwkJYnJlYWs7Cisr CisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjgoKTsKKysJCWJyZWFr OworKwkJfQorKwl9CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVua25vd24gbW9kZTogJXNc biIsIGFtb2RlKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgaWYgKCFjaXBoZXIpCisrCXsKKysJ cHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKKysJcmV0dXJuIDA7IAor Kwl9CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwg aVZlYywgZGlyKSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUs IkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFH X0xFTkdUSF9CSVRTKTsKKysgICAgaWYgKGRpcikKKysJCUVWUF9DaXBoZXIoY3R4LCBjaXBoZXJ0 ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCWVsc2UKKysJCUVWUF9DaXBoZXIoY3R4LCBwbGFpbnRl eHQsIGNpcGhlcnRleHQsIGxlbik7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrY2hhciAqdF90 YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07CisrY2hhciAqdF9tb2RlWzZdID0g eyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9OworK2VudW0gTW9kZSB7 Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKKytlbnVtIFhDcnlwdCB7WERFQ1JZ UFQsIFhFTkNSWVBUfTsKKysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKysv KiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKysKKysvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKChiKSU4 KSkmMSkqLworKy8qI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigx IDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8KKysKKysjZGVmaW5lIGdiKGEsYikg KCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkKKysjZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhi KS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYpIDw8ICg3LShiKSU4KSkp CisrCisraW50IGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgIGludCBha2V5c3osIHVuc2lnbmVk IGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZlYywKKysJICAgaW50IGRpciwgdW5zaWduZWQg Y2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgRklMRSAqcmZwKQorKyAgICB7CisrICAgIGludCBy ZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsKKysgICAgdW5zaWduZWQg Y2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsKKysgICAgdW5zaWduZWQgY2hhciBwdGV4dFsx MDAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1bMzJdOworKyAgICB1bnNp Z25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07CisrICAgIGludCBpLCBqLCBuLCBuMSwgbjI7Cisr ICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84OworKyAgICBFVlBfQ0lQSEVSX0NU WCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmIChsZW4g PiAzMikKKysJeworKwlwcmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVkcyAzMiBmb3IgJXMgJWQg PDw8PFxuXG4iLCAKKysJICAgICAgIGFtb2RlLCBha2V5c3opOworKwlyZXR1cm4gLTE7CisrCX0K KysgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkKKysJaWYgKHN0cmNtcChh bW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKKysJICAgIGJyZWFrOworKyAgICBpZiAoaW1vZGUg PT0gNikKKysJeyAKKysJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsK KysJcmV0dXJuIC0xOworKwl9CisrCisrICAgIG1lbWNweShrZXlbMF0sIGFLZXksIG5rZXlzeik7 CisrICAgIGlmIChpVmVjKQorKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFFU19CTE9DS19TSVpFKTsK KysgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJbWVtY3B5KHB0ZXh0WzBdLCB0ZXh0LCBsZW4p OworKyAgICBlbHNlCisrCW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZm9yIChp ID0gMDsgaSA8IDEwMDsgKytpKQorKwl7CisrCS8qIHByaW50ZigiSXRlcmF0aW9uICVkXG4iLCBp KTsgKi8KKysJaWYgKGkgPiAwKQorKwkgICAgeworKwkgICAgZnByaW50ZihyZnAsIkNPVU5UID0g JWRcbiIsaSk7CisrCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0sbmtleXN6LHJmcCwwKTsK KysJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8KKysJCU91dHB1dFZhbHVlKCJJViIs aXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOworKwkgICAgLyogT3V0cHV0IENpcGhlcnRleHQg fCBQbGFpbnRleHQgKi8KKysJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSxkaXIgPyBwdGV4 dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCisrCQkJaW1vZGUgPT0gQ0ZCMSk7CisrCSAgICB9Cisr CWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2Rl KQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsgLyogc2V0 IHVwIGVuY3J5cHRpb24gKi8KKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5 c3osIGtleVtpXSwgTlVMTCwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNy eXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIg PT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJ ICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAg fQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsK KysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1j cHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7CisrCQkJfQorKwkJICAgIGVsc2UKKysJCQl7 CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkJbWVt Y3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAgICB9CisrCQlicmVh azsKKysKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6ICAKKysJICAgIGNhc2UgQ0ZC MTI4OgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4 LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVj cnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Cisr CQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRleHRbaisxXSwgaXZbaV0s IGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsK KysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQp CisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwor KwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJCSAgICBl bHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4p OworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJCSAg ICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCODoKKysJCWlmIChqID09IDApCisrCQkg ICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBp dltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJ CSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7 CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0 W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQX0NpcGhlcigmY3R4LCBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJaWYgKGRpciA9PSBYRU5DUllQ VCkKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1jcHkocHRleHRbaisxXSwg Jml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3Rl eHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAo aiA8IDE2KQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7CisrCQkgICAg ZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwgbGVuKTsKKysJCSAgICB9 CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCMToKKysJCWlmKGogPT0gMCkKKysJCSAgICB7 CisrI2lmIDAKKysJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBlbmRpYW5uZXNzIG9mIGlu cHV0IGZpbGUgKi8KKysJCSAgICBpZihpID09IDApCisrCQkJcHRleHRbMF1bMF08PD03OworKyNl bmRpZgorKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osa2V5W2ldLGl2W2ld LGRpciwKKysJCQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lwaGVyKCZj dHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQX0NpcGhl cigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCisrCQkgICAgfQorKwkJaWYoZGly ID09IFhFTkNSWVBUKQorKwkJICAgIHsKKysJCSAgICBpZihqIDwgMTI4KQorKwkJCXNiKHB0ZXh0 W2orMV0sMCxnYihpdltpXSxqKSk7CisrCQkgICAgZWxzZQorKwkJCXNiKHB0ZXh0W2orMV0sMCxn YihjdGV4dFtqLTEyOF0sMCkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAg aWYoaiA8IDEyOCkKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVs c2UKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDApKTsKKysJCSAgICB9Cisr CQlicmVhazsKKysJCX0KKysJICAgIH0KKysJLS1qOyAvKiByZXNldCB0byBsYXN0IG9mIHJhbmdl ICovCisrCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCisrCU91dHB1dFZhbHVl KHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4scmZwLAorKwkJICAgIGlt b2RlID09IENGQjEpOworKwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBhZGQgc2VwYXJhdG9yICov CisrCisrCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8KKysJaWYgKGRpciA9PSBYRU5DUllQVCkKKysJ ICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8 IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6 LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0gY3Rl eHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7Cisr CQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAg IHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxzZQor KwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoK KysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1j cHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAy NTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBt ZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCSAg ICB9CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQor KwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJ Zm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJ ICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlm KGltb2RlID09IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtl eXN6IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IocHRleHRbai1uMl0s MCkpOworKwkJfQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJ Y2FzZSAxMjg6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2pdLCAxNik7CisrCQkg ICAgYnJlYWs7CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRb ai0xXSs4LCA4KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBwdGV4dFtqXSwgMTYpOwor KwkJICAgIGJyZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0 ZXh0W2otMV0sIDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgcHRleHRbal0sIDE2 KTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCS8qIENvbXB1dGUgbmV4dCBr ZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAqLworKwlmb3IgKG4gPSAwOyBuIDwgbmtleXN6 OyArK24pCisrCSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNpcGhlcnRleHRbbl07Cisr CQorKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8KKysJaWYgKGRpciA9PSBYRU5DUllQ VCkKKysJICAgIHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7CisrCSAgICBjYXNlIEVDQjoK KysJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJyZWFr OworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAgIGNhc2UgQ0ZCMTI4Ogor KwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQltZW1jcHko cHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJyZWFrOworKwkgICAg Y2FzZSBDRkI4OgorKwkJLyogSVZbaSsxXSA9IGN0ICovCisrCQlmb3IgKG4xID0gMCwgbjIgPSAx NTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24xXSA9IGN0ZXh0W2otbjJd WzBdOworKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkgICAg Y2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisr CQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7CisrCQlwdGV4dFswXVswXT1j dGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwllbHNlCisr CSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQlt ZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJ ICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJCW1l bWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KGN0ZXh0 WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2Ug Q0ZCODoKKysJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQorKwkJ ICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1bMF07CisrCQljdGV4dFswXVswXSA9IHB0ZXh0 W2otMTZdWzBdOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjE6CisrCQlmb3IobjE9MCxuMj0x MjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKKysJCSAgICBzYihpdltpKzFdLG4xLGdiKHB0ZXh0 W2otbjJdLDApKTsKKysJCWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVswXSYweDgwOworKwkJYnJl YWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgCisrICAgIHJldHVybiByZXQ7CisrICAgIH0K KysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSov CisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICAjIENvbmZpZyBpbmZvIGZvciB2 LW9uZQorKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKKysgICMgU3RhdGUgOiBFbmNy eXB0IGFuZCBEZWNyeXB0CisrICAjIEtleSBMZW5ndGggOiAyNTYKKysgICMgRnJpIEF1ZyAzMCAw NDowNzoyMiBQTQorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50IHBy b2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCisrICAgIHsKKysgICAgY2hhciBh Zm5bMjU2XSwgcmZuWzI1Nl07CisrICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOwor KyAgICBjaGFyIGlidWZbMjA0OF07CisrICAgIGNoYXIgdGJ1ZlsyMDQ4XTsKKysgICAgaW50IGls ZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbGdvWzhdID0gIiI7CisrICAgIGNoYXIgYW1v ZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVzdFs4XSA9ICIiOworKyAgICBpbnQgYWtleXN6ID0g MDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07CisrICAgIGludCBkaXIg PSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIw NDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07CisrICAgIGNoYXIgKnJw OworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0 eCk7CisrCisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCisrCXsKKysJcHJpbnRmKCJO byByZXEgZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBzdHJjcHkoYWZuLCBycWZp bGUpOworKworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKKysJewor KwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICBhZm4sIHN0 cmVycm9yKGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBpZiAoIXJzcGZpbGUpCisr CXsKKysJc3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIocmZuLCJyZXEvIik7CisrI2lmZGVm IE9QRU5TU0xfU1lTX1dJTjMyCisrCWlmICghcnApCisrCSAgICBycD1zdHJzdHIocmZuLCJyZXFc XCIpOworKyNlbmRpZgorKwlhc3NlcnQocnApOworKwltZW1jcHkocnAsInJzcCIsMyk7CisrCXJw ID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOworKwlyc3Bm aWxlID0gcmZuOworKwl9CisrICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0g TlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAg ICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9zZShhZnApOworKwlhZnAgPSBOVUxM OworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNp emVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7 CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qICAgICAgcHJpbnRmKCJzdGVwPSVkIGlidWY9 JXMiLHN0ZXAsaWJ1Zik7ICovCisrCXN3aXRjaCAoc3RlcCkKKysJICAgIHsKKysJY2FzZSAwOiAg LyogcmVhZCBwcmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKKysJCXsgLyog ZW5kIG9mIHByZWFtYmxlICovCisrCQlpZiAoKCphbGdvID09ICdcMCcpIHx8CisrCQkgICAgKCph bW9kZSA9PSAnXDAnKSB8fAorKwkJICAgIChha2V5c3ogPT0gMCkpCisrCQkgICAgeworKwkJICAg IHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6ZSAoJXMvJXMvJWQpXG4i LAorKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsKKysJCSAgICBlcnIgPSAxOworKwkJICAgIH0K KysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICArKyBz dGVwOworKwkJICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQorKwkJ eworKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKKysJCWVy ciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KKysJ CWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlmIChha2V5c3opCisrCQkg ICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGlt ID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOwor KwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ CSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09IDApCisrCQkJeworKwkJCXN0cmNw eShhbGdvLCAiQUVTIik7CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLworKwkJCXBwICs9IDY7Cisr CQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5jcHkoYXRl c3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUgKi8KKysJ CQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBzdHJsZW4o eHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtuXSA9ICdc MCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlw cmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1vZGUpOworKwkJCX0KKysJ CSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGggOiAiLCAxMykgPT0gMCkK KysJCQl7CisrCQkJYWtleXN6ID0gYXRvaShwcCsxMyk7CisrCQkJaWYgKFZFUkJPU0UpCisrCQkJ CXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsKKysJCQl9CisrCQkgICAgfQorKwkJ fQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAq LworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsK KysJCSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0g MCkKKysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNS WVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKKysJCSAgICBlcnIgPSAx OworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQor KwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5 d29yZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisrCQlzdGVwID0gMjsKKysK KysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkg ICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCWJyZWFrOworKwkgICAgaWYoIXN0cm5jYXNlY21wKGli dWYsIkNPVU5UID0gIiw4KSkKKysJCWJyZWFrOworKworKwkgICAgaWYgKHN0cm5jYXNlY21wKGli dWYsICJLRVkgPSAiLCA2KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7 CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJpbigo Y2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBw cmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7Cisr CQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCWlmIChzdHJjbXAo YW1vZGUsICJFQ0IiKSA9PSAwKQorKwkJICAgIHsKKysJCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6 ZW9mKGlWZWMpKTsKKysJCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBF Q0IgKi8KKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgKytzdGVwOworKwkJfQorKwkgICAgYnJl YWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnAp OworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCisrCQl7Cisr CQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UK KysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7CisrCQlpZiAobGVu IDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKKysJCSAgICBl cnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVj LCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkgICAgYnJlYWs7CisrCisr CWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCisr CQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJCWVyciA9IDE7CisrCQl9 CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7CisrCQlpZigh c3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxw bGFpbnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4 dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBM QUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7Cisr CQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0KKysJCVByaW50VmFsdWUo IlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7CisrCQlpZiAoc3Ry Y21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7 CisrCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCSAgICAg IGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuLCAKKysJCQkgICAgICByZnApIDwg MCkKKysJCQlFWElUKDEpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIs ICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhl cnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQs bGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVw ID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4 eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGli dWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3Npbmcg S0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpZighc3Ry Y21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGli dWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuID0gaGV4MmJpbihpYnVm KzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7 CisrCQkgICAgfQorKworKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxl bik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRl c3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMs IAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJ CQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIlBM QUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJy ZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJeworKwkJ ZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJICAg IGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJlYWR5 IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQorKwkg ICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZwKQor KwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJldHVy biBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCisr ICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysgIEEg c2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCisr ICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4eHh4 Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZp bGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9ICIi LCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19w cmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJnYyA+ IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAgIHsK KysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFd LCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQgPSAw OworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1l dGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGFy Z2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Cisr CSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0gYXJn dlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJICAg IHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJeyAv KiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFsaXN0 LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmls ZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwgc2l6 ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkgICAg c3RyY3B5KHJmbiwgZm4pOworKwkgICAgaWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nlc3Np bmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJ eworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7 CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVs c2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJICAgIHByaW50Zigi UHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisr CSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxu IiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAg ICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfY21hY3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlw c19jbWFjdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Nt YWN0ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0MzkyMzE1NSArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNTQzOTIzMTU1ICswMjAwCitAQCAtMCwwICsxLDUxNyBAQAorKy8qIGZpcHNfY21h Y3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGlj ZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBj cnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5 cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBU aW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNkZWZp bmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0 eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK Kyt7CisrICAgIHByaW50ZigiTm8gRklQUyBDTUFDIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4o MCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNs dWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgY21hY190ZXN0KGNvbnN0IEVWUF9DSVBI RVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKKysJaW50IG1vZGUsIGludCBLbGVuX2Nv dW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKTsKKytzdGF0aWMgaW50IHByaW50X2NtYWNfZ2Vu KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAq S2V5LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbiwKKysJCWlu dCBUbGVuKTsKKytzdGF0aWMgaW50IHByaW50X2NtYWNfdmVyKGNvbnN0IEVWUF9DSVBIRVIgKmNp cGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKKysJCXVu c2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1hYywgaW50 IE1hY2xlbiwKKysJCWludCBUbGVuKTsKKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBz X2NtYWN0ZXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7CisrCUZJTEUgKmluID0gTlVMTCwg Km91dCA9IE5VTEw7CisrCWludCBtb2RlID0gMDsJCS8qIDAgPT4gR2VuZXJhdGUsIDEgPT4gVmVy aWZ5ICovCisrCWludCBLbGVuX2NvdW50c19rZXlzID0gMDsgLyogMCA9PiBLbGVuIGlzIHNpemUg b2Ygb25lIGtleQorKwkJCQkgICAgIDEgPT4gS2xlbiBpcyBhbW91bnQgb2Yga2V5cworKwkJCQkg ICovCisrCWludCBrbm93bl9rZXlsZW4gPSAwOwkvKiBPbmx5IHNldCB3aGVuIEtsZW5fY291bnRz X2tleXMgPSAxICovCisrCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IDA7CisrCWludCByZXQg PSAxOworKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOworKworKwl3aGlsZSAoYXJnYyA+IDEgJiYgYXJn dlsxXVswXSA9PSAnLScpCisrCQl7CisrCQlzd2l0Y2ggKGFyZ3ZbMV1bMV0pCisrCQkJeworKwkJ Y2FzZSAnYSc6CisrCQkJeworKwkJCWNoYXIgKnAgPSAmYXJndlsxXVsyXTsKKysJCQlpZiAoKnAg PT0gJ1wwJykKKysJCQkJeworKwkJCQlpZiAoYXJnYyA8PSAyKQorKwkJCQkJeworKwkJCQkJZnBy aW50ZihzdGRlcnIsICJPcHRpb24gJXMgbmVlZHMgYSB2YWx1ZVxuIiwgYXJndlsxXSk7CisrCQkJ CQlnb3RvIGVuZDsKKysJCQkJCX0KKysJCQkJYXJndisrOworKwkJCQlhcmdjLS07CisrCQkJCXAg PSAmYXJndlsxXVswXTsKKysJCQkJfQorKwkJCWlmICghc3RyY21wKHAsICJhZXMxMjgiKSkKKysJ CQkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcChwLCAi YWVzMTkyIikpCisrCQkJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOworKwkJCWVsc2UgaWYg KCFzdHJjbXAocCwgImFlczI1NiIpKQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsK KysJCQllbHNlIGlmICghc3RyY21wKHAsICJ0ZGVhMyIpIHx8ICFzdHJjbXAocCwgInRkZXMzIikp CisrCQkJCXsKKysJCQkJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKwkJCQlLbGVuX2Nv dW50c19rZXlzID0gMTsKKysJCQkJa25vd25fa2V5bGVuID0gODsKKysJCQkJfQorKwkJCWVsc2UK KysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gYWxnb3JpdGhtICVzXG4iLCBw KTsKKysJCQkJZ290byBlbmQ7CisrCQkJCX0KKysJCQl9CisrCQkJYnJlYWs7CisrCQljYXNlICdn JzoKKysJCQltb2RlID0gMDsKKysJCQlicmVhazsKKysJCWNhc2UgJ3YnOgorKwkJCW1vZGUgPSAx OworKwkJCWJyZWFrOworKwkJZGVmYXVsdDoKKysJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24g b3B0aW9uICVzXG4iLCBhcmd2WzFdKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmd2Kys7 CisrCQlhcmdjLS07CisrCQl9CisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwll bHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJ CW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysK KysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlh bGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQor KwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJy b3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghY21hY190ZXN0KGNpcGhlciwg b3V0LCBpbiwgbW9kZSwKKysJCQlLbGVuX2NvdW50c19rZXlzLCBrbm93bl9rZXlsZW4pKQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBjbWFjIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxu Iik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgor KworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQg JiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7Cisr CisrCX0KKysKKysjZGVmaW5lIENNQUNfVEVTVF9NQVhMSU5FTEVOCTE1MDAwMAorKworK2ludCBj bWFjX3Rlc3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUgKmluLAor KwlpbnQgbW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4pCisrCXsK KysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKKysJdW5zaWduZWQgY2hhciAqKktleXMgPSBOVUxMLCAqTXNnID0gTlVMTCwgKk1hYyA9 IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEw7CisrCWludCBDb3VudCwgS2xlbiwg TWxlbiwgVGxlbjsKKysJbG9uZyBLZXlsZW4sIE1zZ2xlbiwgTWFjbGVuOworKwlpbnQgcmV0ID0g MDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKENNQUNf VEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKENNQUNfVEVTVF9N QVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJy b3I7CisrCisrCUNvdW50ID0gLTE7CisrCUtsZW4gPSAtMTsKKysJTWxlbiA9IC0xOworKwlUbGVu ID0gLTE7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgQ01BQ19URVNUX01BWExJTkVMRU4s IGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Cisr CQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysK KysJCS8qIFNraXAgY29tbWVudHMgKi8KKysJCWlmIChrZXl3b3JkWzBdID09ICcjJykKKysJCQl7 CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJ CQljb250aW51ZTsKKysJCQl9CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBz dHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAo Zm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJaWYg KGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51 ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0g MDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVh ZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug ZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3 aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0t ID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJDb3VudCIpKQorKwkJCXsKKysJCQlp ZiAoQ291bnQgIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJQ291bnQgPSBhdG9p KHZhbHVlKTsKKysJCQlpZiAoQ291bnQgPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIktsZW4iKSkKKysJCQl7CisrCQkJaWYg KEtsZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJS2xlbiA9IGF0b2kodmFs dWUpOworKwkJCWlmIChLbGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAo S2xlbl9jb3VudHNfa2V5cykKKysJCQkJeworKwkJCQlLZXlzID0gT1BFTlNTTF9tYWxsb2Moc2l6 ZW9mKCpLZXlzKSAqIEtsZW4pOworKwkJCQltZW1zZXQoS2V5cywgJ1wwJywgc2l6ZW9mKCpLZXlz KSAqIEtsZW4pOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCUtleXMgPSBPUEVOU1NM X21hbGxvYyhzaXplb2YoKktleXMpKTsKKysJCQkJbWVtc2V0KEtleXMsICdcMCcsIHNpemVvZigq S2V5cykpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTWxl biIpKQorKwkJCXsKKysJCQlpZiAoTWxlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQlNbGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKE1sZW4gPCAwKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlRsZW4iKSkK KysJCQl7CisrCQkJaWYgKFRsZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ VGxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChUbGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLZXkiKSAmJiAhS2xl bl9jb3VudHNfa2V5cykKKysJCQl7CisrCQkJaWYgKEtleXNbMF0pCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJS2V5c1swXSA9IGhleDJiaW5fbSh2YWx1ZSwgJktleWxlbik7CisrCQkJaWYg KCFLZXlzWzBdKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJuY21wKGtleXdvcmQsICJLZXkiLCAzKSAmJiBLbGVuX2NvdW50c19rZXlzKQorKwkJCXsKKysJ CQlpbnQga2V5bnVtID0gYXRvaShrZXl3b3JkICsgMyk7CisrCQkJaWYgKCFrZXludW0gfHwga2V5 bnVtID4gS2xlbiB8fCBLZXlzW2tleW51bS0xXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJ CQlLZXlzW2tleW51bS0xXSA9IGhleDJiaW5fbSh2YWx1ZSwgJktleWxlbik7CisrCQkJaWYgKCFL ZXlzW2tleW51bS0xXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJ CWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIk1hYyIpKQorKwkJCXsKKysJCQlpZiAobW9kZSA9PSAwKQorKwkJCQlj b250aW51ZTsKKysJCQlpZiAoTWFjKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1hYyA9 IGhleDJiaW5fbSh2YWx1ZSwgJk1hY2xlbik7CisrCQkJaWYgKCFNYWMpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0Iikp CisrCQkJeworKwkJCWlmIChtb2RlID09IDEpCisrCQkJCWNvbnRpbnVlOworKwkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlm cHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChLZXlzICYmIE1zZyAmJiAoIW1vZGUgfHwg TWFjKSAmJiAoVGxlbiA+IDApICYmIChLbGVuID4gMCkpCisrCQkJeworKwkJCWlmIChLbGVuX2Nv dW50c19rZXlzKQorKwkJCQl7CisrCQkJCWludCB4OworKwkJCQlLZXkgPSBPUEVOU1NMX21hbGxv YyhLbGVuICoga25vd25fa2V5bGVuKTsKKysJCQkJZm9yICh4ID0gMDsgeCA8IEtsZW47IHgrKykK KysJCQkJCXsKKysJCQkJCW1lbWNweShLZXkgKyB4ICoga25vd25fa2V5bGVuLAorKwkJCQkJCUtl eXNbeF0sIGtub3duX2tleWxlbik7CisrCQkJCQlPUEVOU1NMX2ZyZWUoS2V5c1t4XSk7CisrCQkJ CQl9CisrCQkJCUtsZW4gKj0ga25vd25fa2V5bGVuOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQl7 CisrCQkJCUtleSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4pOworKwkJCQltZW1jcHkoS2V5LCBLZXlz WzBdLCBLbGVuKTsKKysJCQkJT1BFTlNTTF9mcmVlKEtleXNbMF0pOworKwkJCQl9CisrCQkJT1BF TlNTTF9mcmVlKEtleXMpOworKworKwkJCXN3aXRjaChtb2RlKQorKwkJCQl7CisrCQkJY2FzZSAw OgorKwkJCQlpZiAoIXByaW50X2NtYWNfZ2VuKGNpcGhlciwgb3V0LAorKwkJCQkJCUtleSwgS2xl biwKKysJCQkJCQlNc2csIE1sZW4sCisrCQkJCQkJVGxlbikpCisrCQkJCQlnb3RvIGVycm9yOwor KwkJCQlicmVhazsKKysJCQljYXNlIDE6CisrCQkJCWlmICghcHJpbnRfY21hY192ZXIoY2lwaGVy LCBvdXQsCisrCQkJCQkJS2V5LCBLbGVuLAorKwkJCQkJCU1zZywgTWxlbiwKKysJCQkJCQlNYWMs IE1hY2xlbiwKKysJCQkJCQlUbGVuKSkKKysJCQkJCWdvdG8gZXJyb3I7CisrCQkJCWJyZWFrOwor KwkJCQl9CisrCisrCQkJT1BFTlNTTF9mcmVlKEtleSk7CisrCQkJS2V5ID0gTlVMTDsKKysJCQlP UEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xfZnJlZShNYWMp OworKwkJCU1hYyA9IE5VTEw7CisrCQkJS2xlbiA9IC0xOworKwkJCU1sZW4gPSAtMTsKKysJCQlU bGVuID0gLTE7CisrCQkJQ291bnQgPSAtMTsKKysJCQl9CisrCQl9CisrCisrCisrCXJldCA9IDE7 CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xp bmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYg KEtleSkKKysJCU9QRU5TU0xfZnJlZShLZXkpOworKwlpZiAoTXNnKQorKwkJT1BFTlNTTF9mcmVl KE1zZyk7CisrCWlmIChNYWMpCisrCQlPUEVOU1NMX2ZyZWUoTWFjKTsKKysKKysJcmV0dXJuIHJl dDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2Ug ZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysK KysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfY21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAqY2lw aGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAorKwkJdW5z aWduZWQgY2hhciAqTXNnLCBpbnQgTWxlbiwKKysJCWludCBUbGVuKQorKwl7CisrCWludCByYywg aTsKKysJc2l6ZV90IHJlc2xlbjsKKysJdW5zaWduZWQgY2hhciByZXNbMTI4XTsKKysJQ01BQ19D VFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCisrCUNNQUNfSW5pdChjbWFjX2N0eCwg S2V5LCBLbGVuLCBjaXBoZXIsIDApOworKwlDTUFDX1VwZGF0ZShjbWFjX2N0eCwgTXNnLCBNbGVu KTsKKysJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCByZXMsICZyZXNsZW4pKQorKwkJeworKwkJ ZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIsIHN0ZGVycik7CisrCQlyYyA9IDA7Cisr CQl9CisrCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xlbikKKysJCXsKKysJCWZwdXRzKCJQYXJh bWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxuIiwgc3RkZXJyKTsKKysJCXJjID0gMDsK KysJCX0KKysJZWxzZQorKwkJeworKwkJZnB1dHMoIk1hYyA9ICIsIG91dCk7CisrCQlmb3IgKGkg PSAwOyBpIDwgVGxlbjsgaSsrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIHJlc1tpXSk7Cisr CQlmcHV0cyhSRVNQX0VPTCwgb3V0KTsKKysJCXJjID0gMTsKKysJCX0KKysJQ01BQ19DVFhfZnJl ZShjbWFjX2N0eCk7CisrCXJldHVybiByYzsKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfY21h Y192ZXIoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBj aGFyICpLZXksIGludCBLbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTWxlbiwKKysJ CXVuc2lnbmVkIGNoYXIgKk1hYywgaW50IE1hY2xlbiwKKysJCWludCBUbGVuKQorKwl7CisrCWlu dCByYyA9IDE7CisrCXNpemVfdCByZXNsZW47CisrCXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07Cisr CUNNQUNfQ1RYICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygpOworKworKwlDTUFDX0luaXQoY21h Y19jdHgsIEtleSwgS2xlbiwgY2lwaGVyLCAwKTsKKysJQ01BQ19VcGRhdGUoY21hY19jdHgsIE1z ZywgTWxlbik7CisrCWlmICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkKKysJ CXsKKysJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOworKwkJcmMg PSAwOworKwkJfQorKwllbHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCisrCQl7CisrCQlmcHV0 cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7CisrCQly YyA9IDA7CisrCQl9CisrCWVsc2UgaWYgKFRsZW4gIT0gTWFjbGVuKQorKwkJeworKwkJZnB1dHMo IlBhcmFtZXRlciBlcnJvciwgVGxlbiAhPSByZXN1bHRpbmcgTWFjIGxlbmd0aFxuIiwgc3RkZXJy KTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJaWYgKCFtZW1jbXAoTWFjLCBy ZXMsIE1hY2xlbikpCisrCQkJZnB1dHMoIlJlc3VsdCA9IFAiIFJFU1BfRU9MLCBvdXQpOworKwkJ ZWxzZQorKwkJCWZwdXRzKCJSZXN1bHQgPSBGIiBSRVNQX0VPTCwgb3V0KTsKKysJCX0KKysJQ01B Q19DVFhfZnJlZShjbWFjX2N0eCk7CisrCXJldHVybiByYzsKKysJfQorKworKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKKy0tLSBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMJMjAxNC0wNS0w NiAxNjoyOTo1MC41NDM5MjMxNTUgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQzOTIzMTU1ICswMjAw CitAQCAtMCwwICsxLDcwMiBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIERFUyBNb2Rl cyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBTeXN0ZW0KKysgIFRlc3QgUHJvZ3JhbQorKworKyAg QmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3aGljaCB3YXM6CisrICBEb25hdGVk IHRvIE9wZW5TU0wgYnk6CisrICBWLU9ORSBDb3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2VudHVyeSBC bHZkLCBTdWl0ZSAzMDAKKysgIEdlcm1hbnRvd24sIE1EIDIwODc0CisrICBVLlMuQS4KKysgIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxj dHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMg REVTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKyNkZWZp bmUgREVTX0JMT0NLX1NJWkUgOAorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisraW50IERFU1Rl c3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1 bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAg aW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQg Y2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbikKKysgICAgeworKyAgICBjb25z dCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOworKworKyAgICBpZiAoYWtleXN6ICE9IDE5MikK KysJeworKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOworKwlFWElU KDEpOworKwl9CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJ Y2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFt b2RlLCAiRUNCIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2VjYigpOworKyAgICBl bHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9PSAwKQorKwljaXBoZXIgPSBFVlBf ZGVzX2VkZTNfY2ZiNjQoKTsKKysgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIi LCAzKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfb2ZiKCk7CisrICAgIGVsc2UgaWYo IXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjgo KTsKKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwljaXBoZXIgPSBF VlBfZGVzX2VkZTNfY2ZiMSgpOworKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1v ZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYgKEVWUF9DaXBo ZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCisrCXJl dHVybiAwOworKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VWUF9DSVBI RVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOworKyAgICBF VlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVuKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAgIH0K KysKKyt2b2lkIERlYnVnVmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBs ZW4pCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsKKysgICAg b2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAgICBwcmludGYoIiVzID0gJS4qc1xu IiwgdGFnLCBvbGVuLCBvYnVmKTsKKysgICAgfQorKworK3ZvaWQgc2hpZnRpbih1bnNpZ25lZCBj aGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3JjLGludCBuYml0cykKKysgICAgeworKyAgICBpbnQg bjsKKysKKysgICAgLyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8KKysgICAgbWVtbW92ZShkc3QsZHN0 K25iaXRzLzgsMyo4LW5iaXRzLzgpOworKyAgICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8KKysgICAg bWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcpLzgpOworKyAgICAvKiBsZWZ0IHNo aWZ0IHRoZSBiaXRzICovCisrICAgIGlmKG5iaXRzJTgpCisrCWZvcihuPTAgOyBuIDwgMyo4IDsg KytuKQorKwkgICAgZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRzJTgpKXwoZHN0W24rMV0gPj4gKDgt bmJpdHMlOCkpOworKyAgICB9CQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQ SEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIs IkNGQjgiLCJDRkI2NCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwg Q0ZCNjR9OworK2ludCBTaXplc1s2XT17NjQsNjQsNjQsMSw4LDY0fTsKKysKKyt2b2lkIGRvX21j dChjaGFyICphbW9kZSwgCisrCSAgICBpbnQgYWtleXN6LCBpbnQgbnVta2V5cywgdW5zaWduZWQg Y2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICppdmVjLAorKwkgICAgaW50IGRpciwgdW5zaWduZWQg Y2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQg aSxpbW9kZTsKKysgICAgdW5zaWduZWQgY2hhciBua1s0KjhdOyAvKiBsb25nZXN0IGtleSs4ICov CisrICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBbOF07CisrCisrICAgIGZvciAoaW1vZGU9MCA7IGlt b2RlIDwgNiA7ICsraW1vZGUpCisrCWlmKCFzdHJjbXAoYW1vZGUsdF9tb2RlW2ltb2RlXSkpCisr CSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNv Z25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgZm9y KGk9MCA7IGkgPCA0MDAgOyArK2kpCisrCXsKKysJaW50IGo7CisrCWludCBuOworKwlpbnQga3A9 YWtleXN6LzY0OworKwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4XTsKKysJRVZQX0NJUEhFUl9DVFgg Y3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKwlmcHJpbnRmKHJmcCwiXG5D T1VOVCA9ICVkXG4iLGkpOworKwlpZihrcCA9PSAxKQorKwkgICAgT3V0cHV0VmFsdWUoIktFWSIs YWtleSw4LHJmcCwwKTsKKysJZWxzZQorKwkgICAgZm9yKG49MCA7IG4gPCBrcCA7ICsrbikKKysJ CXsKKysJCWZwcmludGYocmZwLCJLRVklZCIsbisxKTsKKysJCU91dHB1dFZhbHVlKCIiLGFrZXkr bio4LDgscmZwLDApOworKwkJfQorKworKwlpZihpbW9kZSAhPSBFQ0IpCisrCSAgICBPdXRwdXRW YWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSx0ZXh0 LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrI2lmIDAKKysJLyogY29tcGVuc2F0ZSBmb3IgZW5k aWFubmVzcyAqLworKwlpZihpbW9kZSA9PSBDRkIxKQorKwkgICAgdGV4dFswXTw8PTc7CisrI2Vu ZGlmCisrCW1lbWNweSh0ZXh0MCx0ZXh0LDgpOworKworKwlmb3Ioaj0wIDsgaiA8IDEwMDAwIDsg KytqKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBvbGRfdGV4dFs4XTsKKysKKysJICAg IG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOworKwkgICAgaWYoaiA9PSAwKQorKwkJeworKwkJbWVt Y3B5KG9sZF9pdixpdmVjLDgpOworKwkJREVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixha2V5LGl2 ZWMsZGlyLHRleHQsdGV4dCxsZW4pOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbWVtY3B5 KG9sZF9pdixjdHguaXYsOCk7CisrCQlFVlBfQ2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxlbik7Cisr CQl9CisrCSAgICBpZihqID09IDk5OTkpCisrCQl7CisrCQlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJd LHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKKysJCS8qCQltZW1jcHkoaXZlYyx0ZXh0LDgp OyAqLworKwkJfQorKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIml2IixjdHguaXYsOCk7ICovCisr CSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUgbmV4dCBrZXkgKi8KKysJICAgIHNo aWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0pOworKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIm5r IixuaywyNCk7Ki8KKysJICAgIGlmKChkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0g Q0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAorKwkJCXx8IGltb2RlID09IENCQykpIHx8IGltb2RlID09 IE9GQikKKysJCW1lbWNweSh0ZXh0LG9sZF9pdiw4KTsKKysKKysJICAgIGlmKCFkaXIgJiYgKGlt b2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NCkpCisrCQl7Cisr CQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3IERFUyBv cGVyYXRpb24KKysJCSAgIHdoaWNoIHdlIGRvbid0IGhhdmUsIHNvIHJlY29uc3RydWN0IGl0Li4u ICovCisrCQlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQkgICAgdGV4dFtuXV49b2xkX3RleHRb bl07CisrCQl9CisrCSAgICB9CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlb bl1ePW5rWzE2K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5Wzgrbl1e PW5rWzgrbl07CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbMTYrbl1ePW5r W25dOworKwlpZihudW1rZXlzIDwgMykKKysJICAgIG1lbWNweSgmYWtleVsyKjhdLGFrZXksOCk7 CisrCWlmKG51bWtleXMgPCAyKQorKwkgICAgbWVtY3B5KCZha2V5WzhdLGFrZXksOCk7CisrCURF U19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKWFrZXkpOworKwlERVNfc2V0X29kZF9wYXJp dHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2Ni bG9jayAqKShha2V5KzE2KSk7CisrCW1lbWNweShpdmVjLGN0eC5pdiw4KTsKKysKKysJLyogcG9p bnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFsIHRleHQgZG9lc24ndCBkZXBlbmQgb24gdGhlCisr CSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9kZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQgaXM/IChX aG8KKysJICAgZGVzaWduZWQgdGhlc2UgdGVzdHM/KSAqLworKwlpZihpbW9kZSA9PSBPRkIpCisr CSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQl0ZXh0W25dPXRleHQwW25dXm9sZF9pdltu XTsKKysJfQorKyAgICB9CisrICAgIAorK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFy ICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBG SUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdLCB0YnVm WzIwNDhdOworKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFtb2RlWzhd ID0gIiI7CisrICAgIGNoYXIgYXRlc3RbMTAwXSA9ICIiOworKyAgICBpbnQgYWtleXN6PTA7Cisr ICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEs IGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsK KysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsKKysg ICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBpbnQgbnVta2V5cz0xOworKyAgICBFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQor Kwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAg c3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikp ID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAor KwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAg aWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwi cmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9 c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJw LCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5y c3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJz cGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAl cywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZw KTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYm IChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9s aW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKglwcmludGYoInN0 ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsqLworKwlpZihzdGVwID09IDMgJiYgIXN0cmNtcChh bW9kZSwiRUNCIikpCisrCSAgICB7CisrCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMp KTsKKysJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLworKwkg ICAgfQorKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1i bGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJs ZSAqLworKwkJaWYgKCphbW9kZSA9PSAnXDAnKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1p c3NpbmcgTW9kZVxuIik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkg ICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9 CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50Zigi SW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQor KwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBw ID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZigqYW1vZGUpCisrCQkgICAgeyAvKiBpbnNlcnQg Y3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJ CSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZighc3RybmNt cChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJuY21wKHBwLCJERVMgIiw0KQorKwkJICAgICAgIHx8 ICFzdHJuY21wKHBwLCJUREVTICIsNSkKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiUEVSTVVU QVRJT04gIiwxMikKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiU1VCU1RJVFVUSU9OICIsMTMp CisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlZBUklBQkxFICIsOSkpCisrCQkJeworKwkJCS8q IGdldCB0ZXN0IHR5cGUgKi8KKysJCQlpZighc3RybmNtcChwcCwiREVTICIsNCkpCisrCQkJICAg IHBwKz00OworKwkJCWVsc2UgaWYoIXN0cm5jbXAocHAsIlRERVMgIiw1KSkKKysJCQkgICAgcHAr PTU7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5j cHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUg Ki8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBz dHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtu XSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQor KwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRlc3QsYW1vZGUpOworKwkJCX0KKysJ CSAgICB9CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwg W0RFQ1JZUFRdICovCisrCSAgICBpZihpYnVmWzBdID09ICdcbicpCisrCQlicmVhazsKKysJICAg IGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0 ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkg ICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5 KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAg ICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJ CWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIp OworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2Ug MjogLyogS0VZID0geHh4eCAqLworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCXsKKysJICAg ICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJ ICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQl7CisrCSAgICAgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBp Zighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKKysJCXsKKysJICAgICAgICBmcHV0cyhp YnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJu Y2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwxMCkpCisrCQl7CisrCQludW1rZXlzPWF0b2koaWJ1 ZisxMCk7CisrCQlicmVhazsKKysJCX0KKysJICAKKysJICAgIGZwdXRzKGlidWYsIHJmcCk7Cisr CSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2KSkKKysJCXsKKysJCWFrZXlzej02 NDsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwg MCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJy PTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwg bGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYs IktFWXMgPSAiLDcpKQorKwkJeworKwkJYWtleXN6PTY0KjM7CisrCQlsZW49aGV4MmJpbihpYnVm KzcsYUtleSk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZh bGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJ bWVtY3B5KGFLZXkrOCxhS2V5LDgpOworKwkJbWVtY3B5KGFLZXkrMTYsYUtleSw4KTsKKysJCWli dWZbNF09J1wwJzsKKysJCVByaW50VmFsdWUoIktFWXMiLGFLZXksbGVuKTsKKysJCSsrc3RlcDsK KysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSIsMykpCisrCQl7Cisr CQlpbnQgbj1pYnVmWzNdLScxJzsKKysKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJiaW4o aWJ1Zis3LGFLZXkrbio4KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAgICBwcmlu dGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAg ICB9CisrCQlpYnVmWzRdPSdcMCc7CisrCQlQcmludFZhbHVlKGlidWYsYUtleSxsZW4pOworKwkJ aWYobiA9PSAyKQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCXBy aW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGJyZWFrOwor KworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ ICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJp bnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7 CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDAp CisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0x OworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVu KTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNl IDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAg ICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJewor KwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkg ICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50 ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOwor KwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRF WFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAg IH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAgIHBy aW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJ TlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChh dGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7Cisr CQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixudW1rZXlzLGFLZXksaVZlYyxkaXIscGxhaW50ZXh0 LGxlbixyZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0KGRp ciA9PSAxKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXks IGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJ CQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQ SEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikp OworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2Ug NTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAg ICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKKysJCXsK KysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVs c2UKKysJCXsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJi aW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UKKysJCSAg ICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJ CSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJICAgIGVy ciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQkKKysJCVByaW50VmFsdWUoIkNJUEhF UlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikg PT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFt b2RlLCBha2V5c3osIG51bWtleXMsIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4 dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0 KGRpciA9PSAwKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFL ZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwor KwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgi UExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAorKwkJCQkhc3Ry Y21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAg YnJlYWs7CisrCisrCWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCisrCQl7Cisr CQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOworKwkJfQorKwkg ICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKKysJCXsgLyogTUNUIGFscmVh ZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQl9Cisr CSAgICBzdGVwID0gMTsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIGlmIChyZnAp CisrCWZjbG9zZShyZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xvc2UoYWZwKTsKKysgICAgcmV0 dXJuIGVycjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAK KysgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgorKyAg QSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1mIHh4eC5yZXEK KysgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWQgeHh4 eHgueHh4CisrICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAorKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNw ZmlsZSA9IE5VTEw7CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysgICAgY2hhciBmblsyNTBdID0g IiIsIHJmblsyNTZdID0gIiI7CisrICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKKysKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRv X3ByaW50X2Vycm9ycygpOworKwlFWElUKDEpOworKwl9CisrI2VuZGlmCisrICAgIGlmIChhcmdj ID4gMSkKKysJeworKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQorKwkgICAg eworKwkgICAgZF9vcHQgPSAxOworKwkgICAgfQorKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3Zb MV0sICItZiIpID09IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9IDE7CisrCSAgICBkX29wdCA9 IDA7CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHByaW50ZigiSW52YWxpZCBwYXJh bWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAo YXJnYyA8IDMpCisrCSAgICB7CisrCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsK KysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoZF9vcHQpCisrCSAgICBycWxpc3QgPSBh cmd2WzJdOworKwllbHNlCisrCSAgICB7CisrCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOworKwkg ICAgcnNwZmlsZSA9IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysgICAgaWYgKGRfb3B0KQorKwl7 IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYgKCEoZnAgPSBmb3BlbihycWxp c3QsICJyIikpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBm aWxlXG4iKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJd2hpbGUgKGZnZXRzKGZuLCBz aXplb2YoZm4pLCBmcCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2soZm4sICJcclxuIik7CisrCSAg ICBzdHJjcHkocmZuLCBmbik7CisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4p OworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+ Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOwor KwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZp bGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIs IGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmlu dGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQor Kwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYworLS0tIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5 OjUwLjU0MzkyMzE1NSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kaHZzLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDM5MjMxNTUgKzAyMDAKK0BAIC0wLDAg KzEsMjkyIEBACisrLyogZmlwcy9kaC9maXBzX2RodnMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAq IHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisr CisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29u Zi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisr aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBT IERIIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisr Cisrc3RhdGljIGNvbnN0IEVWUF9NRCAqcGFyc2VfbWQoY2hhciAqbGluZSkKKysJeworKwljaGFy ICpwOworKwlpZiAobGluZVswXSAhPSAnWycgfHwgbGluZVsxXSAhPSAnRicpCisrCQlyZXR1cm4g TlVMTDsKKysJcCA9IHN0cmNocihsaW5lLCAnLScpOworKwlpZiAoIXApCisrCQlyZXR1cm4gTlVM TDsKKysJbGluZSA9IHAgKyAxOworKwlwID0gc3RyY2hyKGxpbmUsICddJyk7CisrCWlmICghcCkK KysJCXJldHVybiBOVUxMOworKwkqcCA9IDA7CisrCXAgPSBsaW5lOworKwl3aGlsZShpc3NwYWNl KCpwKSkKKysJCXArKzsKKysJaWYgKCFzdHJjbXAocCwgIlNIQTEiKSkKKysJCXJldHVybiBFVlBf c2hhMSgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyMjQiKSkKKysJCXJldHVybiBFVlBf c2hhMjI0KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTI1NiIpKQorKwkJcmV0dXJuIEVW UF9zaGEyNTYoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMzg0IikpCisrCQlyZXR1cm4g RVZQX3NoYTM4NCgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEE1MTIiKSkKKysJCXJldHVy biBFVlBfc2hhNTEyKCk7CisrCWVsc2UKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrc3RhdGlj IHZvaWQgb3V0cHV0X1poYXNoKEZJTEUgKm91dCwgaW50IGV4b3V0LAorKwkJCQlESCAqZGgsIEJJ R05VTSAqcGVlcmtleSwgY29uc3QgRVZQX01EICptZCwKKysJCQkJdW5zaWduZWQgY2hhciAqcmhh c2gsIHNpemVfdCByaGFzaGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpaOworKwl1bnNpZ25l ZCBjaGFyIGNoYXNoW0VWUF9NQVhfTURfU0laRV07CisrCWludCBabGVuOworKwlpZiAocmhhc2gg PT0gTlVMTCkKKysJCXsKKysJCXJoYXNobGVuID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCQlpZiAo IURIX2dlbmVyYXRlX2tleShkaCkpCisrCQkJZXhpdCAoMSk7CisrCQlkb19ibl9wcmludF9uYW1l KG91dCwgIlllcGhlbUlVVCIsIGRoLT5wdWJfa2V5KTsKKysJCWlmIChleG91dCkKKysJCQlkb19i bl9wcmludF9uYW1lKG91dCwgIlhlcGhlbUlVVCIsIGRoLT5wcml2X2tleSk7CisrCQl9CisrCVog PSBPUEVOU1NMX21hbGxvYyhCTl9udW1fYnl0ZXMoZGgtPnApKTsKKysJaWYgKCFaKQorKwkJZXhp dCgxKTsKKysJWmxlbiA9IERIX2NvbXB1dGVfa2V5X3BhZGRlZChaLCBwZWVya2V5LCBkaCk7Cisr CWlmIChleG91dCkKKysJCU91dHB1dFZhbHVlKCJaIiwgWiwgWmxlbiwgb3V0LCAwKTsKKysJRklQ U19kaWdlc3QoWiwgWmxlbiwgY2hhc2gsIE5VTEwsIG1kKTsKKysJT3V0cHV0VmFsdWUocmhhc2gg PyAiSVVUSGFzaFpaIiA6ICJIYXNoWloiLCBjaGFzaCwgcmhhc2hsZW4sIG91dCwgMCk7CisrCWlm IChyaGFzaCkKKysJCXsKKysJCWZwcmludGYob3V0LCAiUmVzdWx0ID0gJXNcbiIsCisrCQkJCW1l bWNtcChjaGFzaCwgcmhhc2gsIHJoYXNobGVuKSA/ICJGIiA6ICJQIik7CisrCQl9CisrCWVsc2UK KysJCXsKKysJCUJOX2NsZWFyX2ZyZWUoZGgtPnByaXZfa2V5KTsKKysJCUJOX2NsZWFyX2ZyZWUo ZGgtPnB1Yl9rZXkpOworKwkJZGgtPnByaXZfa2V5ID0gTlVMTDsKKysJCWRoLT5wdWJfa2V5ID0g TlVMTDsKKysJCX0KKysJT1BFTlNTTF9jbGVhbnNlKFosIFpsZW4pOworKwlPUEVOU1NMX2ZyZWUo Wik7CisrCX0KKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2RodnNfbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisrI2Vsc2UKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCisrI2VuZGlmCisrCXsKKysJY2hhciAqKmFyZ3MgPSBhcmd2ICsgMTsKKysJaW50IGFyZ24g PSBhcmdjIC0gMTsKKysJRklMRSAqaW4sICpvdXQ7CisrCWNoYXIgYnVmWzIwNDhdLCBsYnVmWzIw NDhdOworKwl1bnNpZ25lZCBjaGFyICpyaGFzaDsKKysJbG9uZyByaGFzaGxlbjsKKysJREggKmRo ID0gTlVMTDsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCUJJR05VTSAqcGVlcmtleSA9 IE5VTEw7CisrCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworKwlpbnQgZG9f dmVyaWZ5ID0gLTEsIGV4b3V0ID0gMDsKKysKKysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysKKysJ aWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgImRodmVyIikpCisrCQl7CisrCQlkb192ZXJpZnkg PSAxOworKwkJYXJncysrOworKwkJYXJnbi0tOworKwkJfQorKwllbHNlIGlmIChhcmduICYmICFz dHJjbXAoKmFyZ3MsICJkaGdlbiIpKQorKwkJeworKwkJZG9fdmVyaWZ5ID0gMDsKKysJCWFyZ3Mr KzsKKysJCWFyZ24tLTsKKysJCX0KKysKKysJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgIi1l eG91dCIpKQorKwkJeworKwkJZXhvdXQgPSAxOworKwkJYXJncysrOworKwkJYXJnbi0tOworKwkJ fQorKworKwlpZiAoZG9fdmVyaWZ5ID09IC0xKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsIiVz IFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Cisr CQlleGl0KDEpOworKwkJfQorKworKwlpZiAoYXJnbiA9PSAyKQorKwkJeworKwkJaW4gPSBmb3Bl bigqYXJncywgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAi RXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysJCW91 dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7CisrCQkJZnByaW50 ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOwor KwkJCX0KKysJCX0KKysJZWxzZSBpZiAoYXJnbiA9PSAwKQorKwkJeworKwkJaW4gPSBzdGRpbjsK KysJCW91dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs IiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7 CisrCQlleGl0KDEpOworKwkJfQorKworKwlkaCA9IEZJUFNfZGhfbmV3KCk7CisrCisrCXdoaWxl IChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKKysJCXsKKysJCWZwdXRzKGJ1 Ziwgb3V0KTsKKysJCWlmIChzdHJsZW4oYnVmKSA+IDYgJiYgIXN0cm5jbXAoYnVmLCAiW0YiLCAy KSkKKysJCQl7CisrCQkJbWQgPSBwYXJzZV9tZChidWYpOworKwkJCWlmIChtZCA9PSBOVUxMKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChkaCkKKysJCQkJRklQU19kaF9mcmVlKGRo KTsKKysJCQlkaCA9IEZJUFNfZGhfbmV3KCk7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJaWYg KCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGludWU7 CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiUCIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJi bigmZGgtPnAsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJRIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZk aC0+cSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIkciKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5n LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiWGVwaGVtSVVUIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZk aC0+cHJpdl9rZXksIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZZXBoZW1JVVQiKSkKKysJCQl7CisrCQkJaWYgKCFk b19oZXgyYm4oJmRoLT5wdWJfa2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtQ0FWUyIpKQorKwkJCXsK KysJCQlpZiAoIWRvX2hleDJibigmcGVlcmtleSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCWlmIChkb192ZXJpZnkgPT0gMCkKKysJCQkJb3V0cHV0X1poYXNoKG91dCwgZXhv dXQsIGRoLCBwZWVya2V5LCBtZCwKKysJCQkJCQkJTlVMTCwgMCk7CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQorKwkJCXsKKysJCQlpZiAoIW1kKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCXJoYXNoID0gaGV4MmJpbl9tKHZhbHVlLCAmcmhh c2hsZW4pOworKwkJCWlmICghcmhhc2ggfHwgcmhhc2hsZW4gIT0gTV9FVlBfTURfc2l6ZShtZCkp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJb3V0cHV0X1poYXNoKG91dCwgZXhvdXQsIGRo LCBwZWVya2V5LCBtZCwKKysJCQkJCQkJcmhhc2gsIHJoYXNobGVuKTsKKysJCQl9CisrCQl9Cisr CWlmIChpbiAmJiBpbiAhPSBzdGRpbikKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgb3V0 ICE9IHN0ZG91dCkKKysJCWZjbG9zZShvdXQpOworKwlyZXR1cm4gMDsKKysJcGFyc2VfZXJyb3I6 CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgUGFyc2luZyByZXF1ZXN0IGZpbGVcbiIpOworKwll eGl0KDEpOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfZHJiZ3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfZHJiZ3ZzLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NDkyMzE3OCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYwkyMDE0LTA1LTA2 IDE2OjI5OjUwLjU0NDkyMzE3OCArMDIwMAorQEAgLTAsMCArMSw0MTYgQEAKKysvKiBmaXBzL3Jh bmQvZmlwc19kcmJndnMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAo c3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrCisrI2RlZmluZSBPUEVOU1NM X0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERSQkcgc3VwcG9ydFxuIik7 CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGlu dCBkcGFyc2VfbWQoY2hhciAqc3RyKQorKwl7CisrCXN3aXRjaChhdG9pKHN0ciArIDUpKQorKwkJ eworKwkJY2FzZSAxOgorKwkJcmV0dXJuIE5JRF9zaGExOworKworKwkJY2FzZSAyMjQ6CisrCQly ZXR1cm4gTklEX3NoYTIyNDsKKysKKysJCWNhc2UgMjU2OgorKwkJcmV0dXJuIE5JRF9zaGEyNTY7 CisrCisrCQljYXNlIDM4NDoKKysJCXJldHVybiBOSURfc2hhMzg0OworKworKwkJY2FzZSA1MTI6 CisrCQlyZXR1cm4gTklEX3NoYTUxMjsKKysKKysJCX0KKysKKysJcmV0dXJuIE5JRF91bmRlZjsK KysJfQorKworK3N0YXRpYyBpbnQgcGFyc2VfZWMoY2hhciAqc3RyKQorKwl7CisrCWludCBjdXJ2 ZV9uaWQsIG1kX25pZDsKKysJY2hhciAqbWQ7CisrCW1kID0gc3RyY2hyKHN0ciwgJyAnKTsKKysJ aWYgKCFtZCkKKysJCXJldHVybiBOSURfdW5kZWY7CisrCWlmICghc3RybmNtcChzdHIsICJbUC0y NTYiLCA2KSkKKysJCWN1cnZlX25pZCA9IE5JRF9YOV82Ml9wcmltZTI1NnYxOworKwllbHNlIGlm ICghc3RybmNtcChzdHIsICJbUC0zODQiLCA2KSkKKysJCWN1cnZlX25pZCA9IE5JRF9zZWNwMzg0 cjE7CisrCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTUyMSIsIDYpKQorKwkJY3VydmVfbmlk ID0gTklEX3NlY3A1MjFyMTsKKysJZWxzZQorKwkJcmV0dXJuIE5JRF91bmRlZjsKKysJbWRfbmlk ID0gZHBhcnNlX21kKG1kKTsKKysJaWYgKG1kX25pZCA9PSBOSURfdW5kZWYpCisrCQlyZXR1cm4g TklEX3VuZGVmOworKwlyZXR1cm4gKGN1cnZlX25pZCA8PCAxNikgfCBtZF9uaWQ7CisrCX0KKysK KytzdGF0aWMgaW50IHBhcnNlX2FlcyhjaGFyICpzdHIsIGludCAqcGRmKQorKwl7CisrCisrCWlm ICghc3RybmNtcChzdHIgKyA5LCAibm8iLCAyKSkKKysJCSpwZGYgPSAwOworKwllbHNlCisrCQkq cGRmID0gRFJCR19GTEFHX0NUUl9VU0VfREY7CisrCisrCXN3aXRjaChhdG9pKHN0ciArIDUpKQor KwkJeworKwkJY2FzZSAxMjg6CisrCQlyZXR1cm4gTklEX2Flc18xMjhfY3RyOworKworKwkJY2Fz ZSAxOTI6CisrCQlyZXR1cm4gTklEX2Flc18xOTJfY3RyOworKworKwkJY2FzZSAyNTY6CisrCQly ZXR1cm4gTklEX2Flc18yNTZfY3RyOworKworKwkJZGVmYXVsdDoKKysJCXJldHVybiBOSURfdW5k ZWY7CisrCisrCQl9CisrCX0KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwl1bnNpZ25lZCBj aGFyICplbnQ7CisrCXNpemVfdCBlbnRsZW47CisrCXVuc2lnbmVkIGNoYXIgKm5vbmNlOworKwlz aXplX3Qgbm9uY2VsZW47CisrCX0gVEVTVF9FTlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X2Vu dHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3Qg bWF4X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0 eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7CisrCXJldHVybiB0LT5lbnRs ZW47CisrCX0KKysKKytzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgsIHVu c2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwlURVNUX0VO VCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVk IGNoYXIgKil0LT5ub25jZTsKKysJcmV0dXJuIHQtPm5vbmNlbGVuOworKwl9CisrCisrI2lmZGVm IEZJUFNfQUxHVlMKKytpbnQgZmlwc19kcmJndnNfbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikK KysjZWxzZQorK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7Cisr CUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCURSQkdfQ1RYICpkY3R4ID0gTlVMTDsK KysJVEVTVF9FTlQgdDsKKysJaW50IHIsIG5pZCA9IDA7CisrCWludCBwciA9IDA7CisrCWNoYXIg YnVmWzIwNDhdLCBsYnVmWzIwNDhdOworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMjA0OF07Cisr CWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworKworKwl1bnNpZ25lZCBjaGFy ICplbnQgPSBOVUxMLCAqbm9uY2UgPSBOVUxMLCAqcGVycyA9IE5VTEwsICphZGluID0gTlVMTDsK KysJbG9uZyBlbnRsZW4sIG5vbmNlbGVuLCBwZXJzbGVuLCBhZGlubGVuOworKwlpbnQgZGYgPSAw OworKworKwllbnVtIGR0eXBlIHsgRFJCR19OT05FLCBEUkJHX0NUUiwgRFJCR19IQVNILCBEUkJH X0hNQUMsIERSQkdfRFVBTF9FQyB9CisrCQlkcmJnX3R5cGUgPSBEUkJHX05PTkU7CisrCisrCWlu dCByYW5kb3V0bGVuID0gMDsKKysKKysJaW50IGdlbiA9IDA7CisrCisrCWZpcHNfYWxndGVzdF9p bml0KCk7CisrCisrCWlmIChhcmdjID09IDMpCisrCQl7CisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9w ZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlvdXQgPSBmb3Bl bihhcmd2WzJdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9Cisr CQl9CisrCWVsc2UgaWYgKGFyZ2MgPT0gMSkKKysJCXsKKysJCWluID0gc3RkaW47CisrCQlvdXQg PSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyAoaW5m aWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJd2hpbGUg KGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMoYnVm LCBvdXQpOworKwkJaWYgKGRyYmdfdHlwZSA9PSBEUkJHX05PTkUpCisrCQkJeworKwkJCWlmIChz dHJzdHIoYnVmLCAiQ1RSX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19DVFI7CisrCQkJ ZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhhc2hfRFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJH X0hBU0g7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhNQUNfRFJCRyIpKQorKwkJCQlkcmJn X3R5cGUgPSBEUkJHX0hNQUM7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkR1YWxfRUNfRFJC RyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0RVQUxfRUM7CisrCQkJZWxzZQorKwkJCQljb250 aW51ZTsKKysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA0ICYmICFzdHJuY21wKGJ1ZiwgIltT SEEtIiwgNSkpCisrCQkJeworKwkJCW5pZCA9IGRwYXJzZV9tZChidWYpOworKwkJCWlmIChuaWQg PT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCWlmIChkcmJnX3R5cGUgPT0gRFJCR19I TUFDKQorKwkJCQl7CisrCQkJCXN3aXRjaCAobmlkKQorKwkJCQkJeworKwkJCQkJY2FzZSBOSURf c2hhMToKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTE7CisrCQkJCQlicmVhazsKKysKKysJ CQkJCWNhc2UgTklEX3NoYTIyNDoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTIyNDsKKysJ CQkJCWJyZWFrOworKworKwkJCQkJY2FzZSBOSURfc2hhMjU2OgorKwkJCQkJbmlkID0gTklEX2ht YWNXaXRoU0hBMjU2OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNlIE5JRF9zaGEzODQ6Cisr CQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEzODQ7CisrCQkJCQlicmVhazsKKysKKysJCQkJCWNh c2UgTklEX3NoYTUxMjoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTUxMjsKKysJCQkJCWJy ZWFrOworKworKwkJCQkJZGVmYXVsdDoKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJCX0K KysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiAxMiAmJiAhc3RybmNtcChidWYsICJbQUVTLSIs IDUpKQorKwkJCXsKKysJCQluaWQgPSBwYXJzZV9hZXMoYnVmLCAmZGYpOworKwkJCWlmIChuaWQg PT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCX0KKysJCWlmIChzdHJsZW4oYnVmKSA+ IDEyICYmICFzdHJuY21wKGJ1ZiwgIltQLSIsIDMpKQorKwkJCXsKKysJCQluaWQgPSBwYXJzZV9l YyhidWYpOworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCX0K KysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNv bnRpbnVlOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIltQcmVkaWN0aW9uUmVzaXN0YW5j ZSIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlRydWVdIikpCisrCQkJCXByID0g MTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiRmFsc2VdIikpCisrCQkJCXByID0gMDsK KysJCQllbHNlCisrCQkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJaWYgKCFzdHJjbXAoa2V5d29y ZCwgIkVudHJvcHlJbnB1dCIpKQorKwkJCXsKKysJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZl bnRsZW4pOworKwkJCXQuZW50ID0gZW50OworKwkJCXQuZW50bGVuID0gZW50bGVuOworKwkJCX0K KysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJOb25jZSIpKQorKwkJCXsKKysJCQlub25jZSA9 IGhleDJiaW5fbSh2YWx1ZSwgJm5vbmNlbGVuKTsKKysJCQl0Lm5vbmNlID0gbm9uY2U7CisrCQkJ dC5ub25jZWxlbiA9IG5vbmNlbGVuOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQs ICJQZXJzb25hbGl6YXRpb25TdHJpbmciKSkKKysJCQl7CisrCQkJcGVycyA9IGhleDJiaW5fbSh2 YWx1ZSwgJnBlcnNsZW4pOworKwkJCWlmIChuaWQgPT0gMCkKKysJCQkJeworKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkRSQkcgdHlwZSBub3QgcmVjb2duaXNlZCFcbiIpOworKwkJCQlleGl0ICgxKTsK KysJCQkJfQorKwkJCWRjdHggPSBGSVBTX2RyYmdfbmV3KG5pZCwgZGYgfCBEUkJHX0ZMQUdfVEVT VCk7CisrCQkJaWYgKCFkY3R4KQorKwkJCQlleGl0ICgxKTsKKysJCQlGSVBTX2RyYmdfc2V0X2Nh bGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsCisrCQkJCQkJCXRlc3Rfbm9uY2UsIDAp OworKwkJCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOworKwkJCXJhbmRvdXRsZW4g PSAoaW50KUZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoZGN0eCk7CisrCQkJciA9IEZJUFNfZHJi Z19pbnN0YW50aWF0ZShkY3R4LCBwZXJzLCBwZXJzbGVuKTsKKysJCQlpZiAoIXIpCisrCQkJCXsK KysJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbnN0YW50aWF0aW5nIERSQkdcbiIpOworKwkJ CQlleGl0KDEpOworKwkJCQl9CisrCQkJT1BFTlNTTF9mcmVlKHBlcnMpOworKwkJCU9QRU5TU0xf ZnJlZShlbnQpOworKwkJCU9QRU5TU0xfZnJlZShub25jZSk7CisrCQkJZW50ID0gbm9uY2UgPSBw ZXJzID0gTlVMTDsKKysJCQlnZW4gPSAwOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdv cmQsICJBZGRpdGlvbmFsSW5wdXQiKSkKKysJCQl7CisrCQkJYWRpbiA9IGhleDJiaW5fbSh2YWx1 ZSwgJmFkaW5sZW4pOworKwkJCWlmIChwcikKKysJCQkJY29udGludWU7CisrCQkJciA9IEZJUFNf ZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCByYW5kb3V0bGVuLCAwLAorKwkJCQkJCQkJYWRp biwgYWRpbmxlbik7CisrCQkJaWYgKCFyKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAi RXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9Cisr CQkJaWYgKCFyKQorKwkJCQlleGl0KDEpOworKwkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQlh ZGluID0gTlVMTDsKKysJCQlnZW4rKzsKKysJCQl9CisrCisrCQlpZiAocHIpCisrCQkJeworKwkJ CWlmICghc3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXRQUiIpKQorKwkJCQl7CisrCQkJCWVu dCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7CisrCQkJCXQuZW50ID0gZW50OworKwkJCQl0 LmVudGxlbiA9IGVudGxlbjsKKysJCQkJciA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LAorKwkJ CQkJCQlyYW5kb3V0LCByYW5kb3V0bGVuLAorKwkJCQkJCQkxLCBhZGluLCBhZGlubGVuKTsKKysJ CQkJaWYgKCFyKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkJIkVycm9y IGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJ CU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQkJT1BFTlNTTF9mcmVlKGVudCk7CisrCQkJCWFkaW4g PSBlbnQgPSBOVUxMOworKwkJCQlnZW4rKzsKKysJCQkJfQorKwkJCX0KKysJCWlmICghc3RyY21w KGtleXdvcmQsICJFbnRyb3B5SW5wdXRSZXNlZWQiKSkKKysJCQl7CisrCQkJZW50ID0gaGV4MmJp bl9tKHZhbHVlLCAmZW50bGVuKTsKKysJCQl0LmVudCA9IGVudDsKKysJCQl0LmVudGxlbiA9IGVu dGxlbjsKKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQWRkaXRpb25hbElucHV0UmVz ZWVkIikpCisrCQkJeworKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUsICZhZGlubGVuKTsKKysJ CQlGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4pOworKwkJCU9QRU5TU0xfZnJl ZShlbnQpOworKwkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQllbnQgPSBhZGluID0gTlVMTDsK KysJCQl9CisrCQlpZiAoZ2VuID09IDIpCisrCQkJeworKwkJCU91dHB1dFZhbHVlKCJSZXR1cm5l ZEJpdHMiLCByYW5kb3V0LCByYW5kb3V0bGVuLAorKwkJCQkJCQkJCW91dCwgMCk7CisrCQkJRklQ U19kcmJnX2ZyZWUoZGN0eCk7CisrCQkJZGN0eCA9IE5VTEw7CisrCQkJZ2VuID0gMDsKKysJCQl9 CisrCisrCQl9CisrCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKKysJCWZjbG9zZShpbik7CisrCWlm IChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKKysJCWZjbG9zZShvdXQpOworKwlyZXR1cm4gMDsKKysJ fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2Rzc3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNz dnMuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZp cHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDQ5MjMxNzggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NDky MzE3OCArMDIwMAorQEAgLTAsMCArMSw1MzcgQEAKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns Y29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr CisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBG SVBTIERTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQorKworKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUu aD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgdm9pZCBwYm4oY29uc3Qg Y2hhciAqbmFtZSwgQklHTlVNICpibikKKysJeworKwlpbnQgbGVuLCBpOworKwl1bnNpZ25lZCBj aGFyICp0bXA7CisrCWxlbiA9IEJOX251bV9ieXRlcyhibik7CisrCXRtcCA9IE9QRU5TU0xfbWFs bG9jKGxlbik7CisrCWlmICghdG1wKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkg YWxsb2NhdGlvbiBlcnJvclxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCUJOX2JuMmJpbihibiwg dG1wKTsKKysJcHJpbnRmKCIlcyA9ICIsIG5hbWUpOworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCisrCQlwcmludGYoIiUwMlgiLCB0bXBbaV0pOworKwlmcHV0cygiXG4iLCBzdGRvdXQpOwor KwlPUEVOU1NMX2ZyZWUodG1wKTsKKysJcmV0dXJuOworKwl9CisrCisrdm9pZCBwcmltZXMoKQor KyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjQwXTsKKysgICAgY2hhciBsYnVmWzEwMjQwXTsKKysg ICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9m IGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYgKCFw YXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQljb250aW51ZTsKKysJ aWYoIXN0cmNtcChrZXl3b3JkLCJQcmltZSIpKQorKwkgICAgeworKwkgICAgQklHTlVNICpwcDsK KysKKysJICAgIHBwPUJOX25ldygpOworKwkgICAgZG9faGV4MmJuKCZwcCx2YWx1ZSk7CisrCSAg ICBwcmludGYoInJlc3VsdD0gJWNcbiIsCisrCQkgICBCTl9pc19wcmltZV9leChwcCwyMCxOVUxM LE5VTEwpID8gJ1AnIDogJ0YnKTsKKysJICAgIH0JICAgIAorKwl9CisrICAgIH0KKysKKyt2b2lk IHBxZygpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKworKyAg ICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRz KGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwi W21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIk4iKSkKKysJICAgIHsKKysJICAgIGludCBuPWF0b2kodmFsdWUpOworKworKwkgICAgcHJp bnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCisrCSAgICB3aGlsZShuLS0pCisrCQl7Cisr CQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBdOworKwkJRFNBICpkc2E7CisrCQlpbnQgY291bnRlcjsK KysJCXVuc2lnbmVkIGxvbmcgaDsKKysJCWRzYSA9IEZJUFNfZHNhX25ldygpOworKworKwkJaWYg KCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwwLCZjb3VudGVyLCZo LE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOworKwkJ CX0KKysJCXBibigiUCIsZHNhLT5wKTsKKysJCXBibigiUSIsZHNhLT5xKTsKKysJCXBibigiRyIs ZHNhLT5nKTsKKysJCXB2KCJTZWVkIixzZWVkLDIwKTsKKysJCXByaW50ZigiYyA9ICVkXG4iLGNv dW50ZXIpOworKwkJcHJpbnRmKCJIID0gJWx4XG4iLGgpOworKwkJcHV0YygnXG4nLHN0ZG91dCk7 CisrCQl9CisrCSAgICB9CisrCWVsc2UKKysJICAgIGZwdXRzKGJ1ZixzdGRvdXQpOworKwl9Cisr ICAgIH0KKysKKyt2b2lkIHBxZ3ZlcigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07Cisr ICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBC SUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKKysgICAgaW50IGNvdW50ZXIs IGNvdW50ZXIyOworKyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOworKyAgICBEU0EgKmRzYT1OVUxM OworKyAgICBpbnQgbm1vZD0wOworKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRbMTAyNF07CisrCisr ICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlm ICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1 dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJZnB1dHMoYnVmLCBzdGRvdXQp OworKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCisrCSAgICB7CisrCSAgICBpbnQg c2xlbiA9IGhleDJiaW4odmFsdWUsIHNlZWQpOworKwkgICAgaWYgKHNsZW4gIT0gMjApCisrCQl7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVycm9yXG4iKTsKKysJCWV4 aXQgKDEpOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiYyIpKQor KwkgICAgY291bnRlciA9YXRvaShidWYrNCk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJI IikpCisrCSAgICB7CisrCSAgICBoID0gYXRvaSh2YWx1ZSk7CisrCSAgICBpZiAoIXAgfHwgIXEg fHwgIWcpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKKysJCWV4 aXQgKDEpOworKwkJfQorKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7CisrCSAgICBpZiAoIURT QV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIwICwmY291bnRlcjIsJmgy LE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOworKwkJ CX0KKysgICAgICAgICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwgQk5fY21wKGRzYS0+cSwg cSkgfHwgQk5fY21wKGRzYS0+ZywgZykKKysJCXx8IChjb3VudGVyICE9IGNvdW50ZXIyKSB8fCAo aCAhPSBoMikpCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgIGVsc2UKKysJ ICAgIAlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkgICAgQk5fZnJlZShwKTsKKysJICAgIEJO X2ZyZWUocSk7CisrCSAgICBCTl9mcmVlKGcpOworKwkgICAgcCA9IE5VTEw7CisrCSAgICBxID0g TlVMTDsKKysJICAgIGcgPSBOVUxMOworKwkgICAgRklQU19kc2FfZnJlZShkc2EpOworKwkgICAg ZHNhID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrLyogS2V5cGFpciB2ZXJpZmlj YXRpb24gcm91dGluZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgRklQUzE0 MC0yCisrICogYWxnb3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlvbmFsIHRlc3QgdG8gcGVy Zm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRoZQorKyAqIG91dHB1dCBvZiB0aGUgS2V5UGFpciB0ZXN0 LgorKyAqLworKworK3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50IG5tb2QsIEJJR05VTSAq cCwgQklHTlVNICpxLCBCSUdOVU0gKmcsCisrCQkJCQkJCUJOX0NUWCAqY3R4KQorKyAgICB7Cisr ICAgIEJJR05VTSAqcmVtID0gTlVMTDsKKysgICAgaWYgKEJOX251bV9iaXRzKHApICE9IG5tb2Qp CisrCXJldHVybiAwOworKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0gMTYwKQorKwlyZXR1cm4g MDsKKysgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxM KSAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHEsIEJOX3ByaW1l X2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmVtID0gQk5fbmV3 KCk7CisrICAgIGlmICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkK KysgICAgCXx8IChCTl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDApCisrCXx8ICFCTl9tb2Rf ZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkpCisrCXsKKysJQk5fZnJl ZShyZW0pOworKwlyZXR1cm4gMDsKKysJfQorKyAgICAvKiBUb2RvOiBjaGVjayBnICovCisrICAg IEJOX2ZyZWUocmVtKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIGtleXZlcigp CisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysg ICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5V TEwsICpnID0gTlVMTCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7CisrICAgIEJJR05VTSAqWTI7Cisr ICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKysgICAgaW50IG5tb2Q9MCwgcGFyYW1jaGVjayA9IDA7 CisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKKysgICAgWTIgPSBCTl9uZXcoKTsKKysKKysg ICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYg KCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0 cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQs Ilttb2QiKSkKKysJICAgIHsKKysJICAgIGlmIChwKQorKwkJQk5fZnJlZShwKTsKKysJICAgIHAg PSBOVUxMOworKwkgICAgaWYgKHEpCisrCQlCTl9mcmVlKHEpOworKwkgICAgcSA9IE5VTEw7Cisr CSAgICBpZiAoZykKKysJCUJOX2ZyZWUoZyk7CisrCSAgICBnID0gTlVMTDsKKysJICAgIHBhcmFt Y2hlY2sgPSAwOworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIH0KKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIlgiKSkKKysJICAgIFg9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIlkiKSkKKysJICAgIHsKKysJICAgIFk9aGV4MmJuKHZhbHVlKTsKKysJ ICAgIGlmICghcCB8fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICBwYm4oIlAi LHApOworKwkgICAgcGJuKCJRIixxKTsKKysJICAgIHBibigiRyIsZyk7CisrCSAgICBwYm4oIlgi LFgpOworKwkgICAgcGJuKCJZIixZKTsKKysJICAgIGlmICghcGFyYW1jaGVjaykKKysJCXsKKysJ CWlmIChkc3NfcGFyYW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQorKwkJCXBhcmFtY2hlY2sg PSAxOworKwkJZWxzZQorKwkJCXBhcmFtY2hlY2sgPSAtMTsKKysJCX0KKysJICAgIGlmIChwYXJh bWNoZWNrICE9IDEpCisrCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgZWxzZQor KwkJeworKwkJaWYgKCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgpIHx8IEJOX2NtcChZMiwg WSkpCisrCSAgICAJCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICAgICAgZWxzZQorKwkg ICAgCQlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkJfQorKwkgICAgQk5fZnJlZShYKTsKKysJ ICAgIEJOX2ZyZWUoWSk7CisrCSAgICBYID0gTlVMTDsKKysJICAgIFkgPSBOVUxMOworKwkgICAg fQorKwl9CisrCWlmIChwKQorKwkgICAgQk5fZnJlZShwKTsKKysJaWYgKHEpCisrCSAgICBCTl9m cmVlKHEpOworKwlpZiAoZykKKysJICAgIEJOX2ZyZWUoZyk7CisrCWlmIChZMikKKysJICAgIEJO X2ZyZWUoWTIpOworKyAgICB9CisrCisrdm9pZCBrZXlwYWlyKCkKKysgICAgeworKyAgICBjaGFy IGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAq dmFsdWU7CisrICAgIGludCBubW9kPTA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2Yg YnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZh bHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51 ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2ko dmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQorKwkgICAgeworKwkgICAg RFNBICpkc2E7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21v ZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7CisrCSAgICBp ZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxM LE5VTEwpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJfQor KwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAgcGJu KCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCisrCSAgICB3aGlsZShu LS0pCisrCQl7CisrCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCQl7CisrCQkJZG9f cHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCisrCQlwYm4oIlgiLGRzYS0+ cHJpdl9rZXkpOworKwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkJcHV0YygnXG4nLHN0ZG91 dCk7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgfQorKworK3ZvaWQgc2lnZ2VuKCkKKysgICAg eworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFy ICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrICAgIERTQSAqZHNhPU5VTEw7 CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7 CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJewor KwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChr ZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAg cHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBpZiAoZHNhKQorKwkJRklQU19k c2FfZnJlZShkc2EpOworKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7CisrCSAgICBpZiAoIURT QV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwp KQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJfQorKwkgICAg cGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAgcGJuKCJHIixk c2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEw MjRdOworKwkgICAgdW5zaWduZWQgY2hhciBzYnVmWzYwXTsKKysJICAgIHVuc2lnbmVkIGludCBz bGVuOworKwkgICAgaW50IG47CisrCSAgICBFVlBfUEtFWSBwazsKKysJICAgIEVWUF9NRF9DVFgg bWN0eDsKKysJICAgIERTQV9TSUcgKnNpZzsKKysJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7 CisrCisrCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKKysJICAgIHB2KCJNc2ciLG1zZyxuKTsK KysKKysJICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJeworKwkJZG9fcHJpbnRf ZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJfQorKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RT QTsKKysJICAgIHBrLnBrZXkuZHNhID0gZHNhOworKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkp OworKworKwkgICAgRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKKysJ ICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAgRVZQX1NpZ25GaW5hbCgm bWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7CisrCisrCSAgICBzaWcgPSBEU0FfU0lHX25ldygpOwor KwkgICAgRklQU19kc2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4pOworKworKwkgICAgcGJu KCJSIixzaWctPnIpOworKwkgICAgcGJuKCJTIixzaWctPnMpOworKwkgICAgcHV0YygnXG4nLHN0 ZG91dCk7CisrCSAgICBEU0FfU0lHX2ZyZWUoc2lnKTsKKysJICAgIEVWUF9NRF9DVFhfY2xlYW51 cCgmbWN0eCk7CisrCSAgICB9CisrCX0KKysJaWYgKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNh KTsKKysgICAgfQorKworK3ZvaWQgc2lndmVyKCkKKysgICAgeworKyAgICBEU0EgKmRzYT1OVUxM OworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICB1bnNp Z25lZCBjaGFyIG1zZ1sxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBp bnQgbm1vZD0wLCBuPTA7CisrICAgIERTQV9TSUcgc2csICpzaWcgPSAmc2c7CisrCisrICAgIHNp Zy0+ciA9IE5VTEw7CisrICAgIHNpZy0+cyA9IE5VTEw7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5 d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7Cisr CQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICB7 CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgaWYoZHNhKQorKwkJRklQU19kc2FfZnJl ZShkc2EpOworKwkgICAgZHNhPUZJUFNfZHNhX25ldygpOworKwkgICAgfQorKwllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgZHNhLT5wPWhleDJibih2YWx1ZSk7CisrCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBkc2EtPnE9aGV4MmJuKHZhbHVlKTsKKysJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIHsKKysJICAgIGRzYS0+Zz1oZXgy Ym4odmFsdWUpOworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAg ICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBwYm4oIkci LGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgbj1oZXgyYmluKHZhbHVlLG1z Zyk7CisrCSAgICBwdigiTXNnIixtc2csbik7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJZIikpCisrCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlIiKSkKKysJICAgIHNpZy0+cj1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUyIpKQorKwkgICAgeworKwkgICAgRVZQX01EX0NUWCBt Y3R4OworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICB1bnNpZ25lZCBjaGFyIHNpZ2J1Zls2MF07 CisrCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysJICAgIGludCByOworKwkgICAgRVZQX01EX0NU WF9pbml0KCZtY3R4KTsKKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrCSAgICBway5w a2V5LmRzYSA9IGRzYTsKKysJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUpOworKwkKKysJICAgIHBi bigiWSIsZHNhLT5wdWJfa2V5KTsKKysJICAgIHBibigiUiIsc2lnLT5yKTsKKysJICAgIHBibigi UyIsc2lnLT5zKTsKKysKKysJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdfZW5jb2RlKHNpZ2J1Ziwg c2lnKTsKKysJICAgIEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsK KysJICAgIEVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7CisrCSAgICByID0gRVZQX1Zl cmlmeUZpbmFsKCZtY3R4LCBzaWdidWYsIHNsZW4sICZwayk7CisrCSAgICBFVlBfTURfQ1RYX2Ns ZWFudXAoJm1jdHgpOworKwkKKysJICAgIHByaW50ZigiUmVzdWx0ID0gJWNcbiIsIHIgPT0gMSA/ ICdQJyA6ICdGJyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJfQorKyAg ICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgaWYo YXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbcHJpbWV8cHFnfHBxZ3Zlcnxr ZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9CisrICAg IGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0 KDEpOworKwl9CisrICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUiKSkKKysJcHJpbWVzKCk7 CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKKysJcHFnKCk7CisrICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWd2ZXIiKSkKKysJcHFndmVyKCk7CisrICAgIGVsc2Ug aWYoIXN0cmNtcChhcmd2WzFdLCJrZXlwYWlyIikpCisrCWtleXBhaXIoKTsKKysgICAgZWxzZSBp Zighc3RyY21wKGFyZ3ZbMV0sImtleXZlciIpKQorKwlrZXl2ZXIoKTsKKysgICAgZWxzZSBpZigh c3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIpKQorKwlzaWdnZW4oKTsKKysgICAgZWxzZSBpZighc3Ry Y21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQorKwlzaWd2ZXIoKTsKKysgICAgZWxzZQorKwl7CisrCWZw cmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7CisrCWV4aXQo MSk7CisrCX0KKysKKysgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6 Mjk6NTAuNTQ0OTIzMTc4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2djbXRlc3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NDkyMzE3OCArMDIwMAorQEAg LTAsMCArMSw1NzEgQEAKKysvKiBmaXBzL2Flcy9maXBzX2djbXRlc3QuYyAqLworKy8qIFdyaXR0 ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3Bl blNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICovCisrCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlv Lmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRm KCJObyBGSVBTIEdDTSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQor KworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgdm9pZCBnY210 ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQsIGludCBlbmNyeXB0KQorKwl7CisrCWNoYXIgYnVmWzIw NDhdOworKwljaGFyIGxidWZbMjA0OF07CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJaW50 IGtleWxlbiA9IC0xLCBpdmxlbiA9IC0xLCBhYWRsZW4gPSAtMSwgdGFnbGVuID0gLTEsIHB0bGVu ID0gLTE7CisrCWludCBydjsKKysJbG9uZyBsOworKwl1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxM LCAqaXYgPSBOVUxMLCAqYWFkID0gTlVMTCwgKnRhZyA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIg KmN0ID0gTlVMTCwgKnB0ID0gTlVMTDsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwljb25zdCBF VlBfQ0lQSEVSICpnY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKKysK KysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisrCQl7CisrCQlmcHV0 cyhidWYsb3V0KTsKKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBi dWYpKQorKwkJCWNvbnRpbnVlOworKwkJaWYoIXN0cmNtcChrZXl3b3JkLCJbS2V5bGVuIikpCisr CQkJeworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChrZXlsZW4gPT0gMTI4KQor KwkJCQlnY20gPSBFVlBfYWVzXzEyOF9nY20oKTsKKysJCQllbHNlIGlmIChrZXlsZW4gPT0gMTky KQorKwkJCQlnY20gPSBFVlBfYWVzXzE5Ml9nY20oKTsKKysJCQllbHNlIGlmIChrZXlsZW4gPT0g MjU2KQorKwkJCQlnY20gPSBFVlBfYWVzXzI1Nl9nY20oKTsKKysJCQllbHNlIAorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQga2V5bGVuICVkXG4iLAorKwkJCQkJCQlr ZXlsZW4pOworKwkJCQl9CisrCQkJa2V5bGVuID4+PSAzOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIltJVmxlbiIpKQorKwkJCWl2bGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsK KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltBQURsZW4iKSkKKysJCQlhYWRsZW4gPSBh dG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1RhZ2xlbiIp KQorKwkJCXRhZ2xlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJbUFRsZW4iKSkKKysJCQlwdGxlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWtleSA9IGhleDJiaW5fbSh2 YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGtleWxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0 ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJ fQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJJViIpKQorKwkJCXsKKysJCQlp diA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGl2bGVuKQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IElWIGxlbmd0aFxuIik7CisrCQkJCWV4 aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUFQiKSkK KysJCQl7CisrCQkJcHQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBwdGxl bikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQVCBsZW5ndGhc biIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIkNUIikpCisrCQkJeworKwkJCWN0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJ aWYgKGwgIT0gcHRsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3Rl bnQgQ1QgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJBQUQiKSkKKysJCQl7CisrCQkJYWFkID0gaGV4MmJpbl9tKHZh bHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gYWFkbGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3Rk ZXJyLCAiSW5jb25zaXN0ZW50IEFBRCBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9 CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlRhZyIpKQorKwkJCXsKKysJCQl0 YWcgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSB0YWdsZW4pCisrCQkJCXsK KysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgVGFnIGxlbmd0aFxuIik7CisrCQkJ CWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoZW5jcnlwdCAmJiBwdCAmJiBhYWQgJiYg KGl2IHx8IGVuY3J5cHQ9PTEpKQorKwkJCXsKKysJCQl0YWcgPSBPUEVOU1NMX21hbGxvYyh0YWds ZW4pOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDEpOworKwkJ CS8qIFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KKysJCQlNX0VWUF9DSVBI RVJfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJ CQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxl biwgMCk7CisrCQkJaWYgKGVuY3J5cHQgPT0gMSkKKysJCQkJeworKwkJCQlzdGF0aWMgdW5zaWdu ZWQgY2hhciBpdl9maXhlZFs0XSA9IHsxLDIsMyw0fTsKKysJCQkJaWYgKCFpdikKKysJCQkJCWl2 ID0gT1BFTlNTTF9tYWxsb2MoaXZsZW4pOworKwkJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVM TCwga2V5LCBOVUxMLCAxKTsKKysJCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKKysJCQkJ CQlFVlBfQ1RSTF9HQ01fU0VUX0lWX0ZJWEVELAorKwkJCQkJCTQsIGl2X2ZpeGVkKTsKKysJCQkJ aWYgKCFGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LAorKwkJCQkJRVZQX0NUUkxfR0NNX0lWX0dF TiwgMCwgaXYpKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsICJJViBnZW4gZXJyb3Jc biIpOworKwkJCQkJZXhpdCgxKTsKKysJCQkJCX0KKysJCQkJT3V0cHV0VmFsdWUoIklWIiwgaXYs IGl2bGVuLCBvdXQsIDApOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQlGSVBTX2NpcGhlcmluaXQo JmN0eCwgTlVMTCwga2V5LCBpdiwgMSk7CisrCisrCisrCQkJaWYgKGFhZGxlbikKKysJCQkJRklQ U19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOworKwkJCWlmIChwdGxlbikKKysJCQkJ eworKwkJCQljdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKKysJCQkJcnYgPSBGSVBTX2NpcGhl cigmY3R4LCBjdCwgcHQsIHB0bGVuKTsKKysJCQkJfQorKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5V TEwsIE5VTEwsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dD TV9HRVRfVEFHLAorKwkJCQkJCQkJdGFnbGVuLCB0YWcpOwkKKysJCQlPdXRwdXRWYWx1ZSgiQ1Qi LCBjdCwgcHRsZW4sIG91dCwgMCk7CisrCQkJT3V0cHV0VmFsdWUoIlRhZyIsIHRhZywgdGFnbGVu LCBvdXQsIDApOworKwkJCWlmIChpdikKKysJCQkJT1BFTlNTTF9mcmVlKGl2KTsKKysJCQlpZiAo YWFkKQorKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKKysJCQlpZiAoY3QpCisrCQkJCU9QRU5TU0xf ZnJlZShjdCk7CisrCQkJaWYgKHB0KQorKwkJCQlPUEVOU1NMX2ZyZWUocHQpOworKwkJCWlmIChr ZXkpCisrCQkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJCWlmICh0YWcpCisrCQkJCU9QRU5TU0xf ZnJlZSh0YWcpOworKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9IE5VTEw7Cisr CQkJfQkKKysJCWlmICghZW5jcnlwdCAmJiB0YWcpCisrCQkJeworKwkJCUZJUFNfY2lwaGVyaW5p dCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDApOworKwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWlu dHMgZm9yIHRlc3RpbmcgKi8KKysJCQlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBF VlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgm Y3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwgMCk7CisrCQkJRklQU19jaXBoZXJp bml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZj dHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCB0YWdsZW4sIHRhZyk7CisrCQkJaWYgKGFhZGxlbikK KysJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOworKwkJCWlmIChwdGxl bikKKysJCQkJeworKwkJCQlwdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKKysJCQkJcnYgPSBG SVBTX2NpcGhlcigmY3R4LCBwdCwgY3QsIHB0bGVuKTsKKysJCQkJfQorKwkJCXJ2ID0gRklQU19j aXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7CisrCQkJaWYgKHJ2IDwgMCkKKysJCQkJZnByaW50 ZihvdXQsICJGQUlMIiBSRVNQX0VPTCk7CisrCQkJZWxzZQorKwkJCQlPdXRwdXRWYWx1ZSgiUFQi LCBwdCwgcHRsZW4sIG91dCwgMCk7CisrCQkJaWYgKGl2KQorKwkJCQlPUEVOU1NMX2ZyZWUoaXYp OworKwkJCWlmIChhYWQpCisrCQkJCU9QRU5TU0xfZnJlZShhYWQpOworKwkJCWlmIChjdCkKKysJ CQkJT1BFTlNTTF9mcmVlKGN0KTsKKysJCQlpZiAocHQpCisrCQkJCU9QRU5TU0xfZnJlZShwdCk7 CisrCQkJaWYgKGtleSkKKysJCQkJT1BFTlNTTF9mcmVlKGtleSk7CisrCQkJaWYgKHRhZykKKysJ CQkJT1BFTlNTTF9mcmVlKHRhZyk7CisrCQkJaXYgPSBhYWQgPSBjdCA9IHB0ID0ga2V5ID0gdGFn ID0gTlVMTDsKKysJCQl9CisrCQl9CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkK KysJfQorKworK3N0YXRpYyB2b2lkIHh0c3Rlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJewor KwljaGFyIGJ1ZlsyMDQ4MDBdOworKwljaGFyIGxidWZbMjA0ODAwXTsKKysJY2hhciAqa2V5d29y ZCwgKnZhbHVlOworKwlpbnQgaW5sZW4gPSAwOworKwlpbnQgZW5jcnlwdCA9IDA7CisrCWxvbmcg bDsKKysJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0gTlVMTDsKKysJdW5zaWduZWQg Y2hhciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKKysJRVZQX0NJUEhFUl9DVFggY3R4 OworKwljb25zdCBFVlBfQ0lQSEVSICp4dHMgPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5p dCgmY3R4KTsKKysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisr CQl7CisrCQlmcHV0cyhidWYsb3V0KTsKKysJCWlmIChidWZbMF0gPT0gJ1snICYmIHN0cmxlbihi dWYpID49IDkpCisrCQkJeworKwkJCWlmKCFzdHJuY21wKGJ1ZiwiW0VOQ1JZUFRdIiwgOSkpCisr CQkJCWVuY3J5cHQgPSAxOworKwkJCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbREVDUllQVF0iLCA5 KSkKKysJCQkJZW5jcnlwdCA9IDA7CisrCQkJfQorKwkJaWYgICghcGFyc2VfbGluZSgma2V5d29y ZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlrZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsK KysJCQlpZiAobCA9PSAzMikKKysJCQkJeHRzID0gRVZQX2Flc18xMjhfeHRzKCk7CisrCQkJZWxz ZSBpZiAobCA9PSA2NCkKKysJCQkJeHRzID0gRVZQX2Flc18yNTZfeHRzKCk7CisrCQkJZWxzZQor KwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIp OworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdv cmQsImkiKSkKKysJCQl7CisrCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAo bCAhPSAxNikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBpIGxl bmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKGVuY3J5 cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJQVCIpKQorKwkJCXsKKysJCQlpbmJ1ZiA9IGhleDJiaW5f bSh2YWx1ZSwgJmwpOworKwkJCWlubGVuID0gbDsKKysJCQl9CisrCQllbHNlIGlmKCFlbmNyeXB0 ICYmICFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKKysJCQl7CisrCQkJaW5idWYgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKKysJCQlpbmxlbiA9IGw7CisrCQkJfQorKwkJaWYgKGluYnVmKQorKwkJCXsK KysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgeHRzLCBrZXksIGl2LCBlbmNyeXB0KTsKKysJCQlv dXRidWYgPSBPUEVOU1NMX21hbGxvYyhpbmxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgb3V0 YnVmLCBpbmJ1ZiwgaW5sZW4pOworKwkJCU91dHB1dFZhbHVlKGVuY3J5cHQgPyAiQ1QiOiJQVCIs IG91dGJ1ZiwgaW5sZW4sIG91dCwgMCk7CisrCQkJT1BFTlNTTF9mcmVlKGluYnVmKTsKKysJCQlP UEVOU1NMX2ZyZWUob3V0YnVmKTsKKysJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKKysJCQlPUEVOU1NM X2ZyZWUoaXYpOworKwkJCWl2ID0ga2V5ID0gaW5idWYgPSBvdXRidWYgPSBOVUxMOworKwkJCX0J CisrCQl9CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkKKysJfQorKworK3N0YXRp YyB2b2lkIGNjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJeworKwljaGFyIGJ1ZlsyMDAw NDhdOworKwljaGFyIGxidWZbMjAwMDQ4XTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwls b25nIGw7CisrCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEwsICpOb25jZSA9IE5VTEw7CisrCXVu c2lnbmVkIGNoYXIgKkFkYXRhID0gTlVMTCwgKlBheWxvYWQgPSBOVUxMOworKwl1bnNpZ25lZCBj aGFyICpDVCA9IE5VTEw7CisrCWludCBQbGVuID0gLTEsIE5sZW4gPSAtMSwgVGxlbiA9IC0xLCBB bGVuID0gLTE7CisrCWludCBkZWNyID0gMDsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwljb25z dCBFVlBfQ0lQSEVSICpjY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsK KysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisrCQl7CisrCQlj aGFyICpwOworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlyZWRvOgorKwkJaWYgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGludWU7CisrCisrCQkvKiBJ ZiBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyB6YXAgdGhlbSAqLworKwkJaWYgKGtleXdv cmRbMF0gPT0gJ1snKQorKwkJCXsKKysJCQlrZXl3b3JkKys7CisrCQkJcCA9IHN0cmNocih2YWx1 ZSwgJ10nKTsKKysJCQlpZiAocCkKKysJCQkJKnAgPSAwOworKwkJCX0KKysJCS8qIFNlZSBpZiB3 ZSBoYXZlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycworKwkJICogaWYgc28g Y29weSByZXN0IG9mIGxpbmUgYmFjayB0byBidWZmZXIgYW5kIHJlZG8gbGF0ZXIuCisrCQkgKi8K KysJCXAgPSBzdHJjaHIodmFsdWUsICcsJyk7CisrCQlpZiAocCkKKysJCQl7CisrCQkJKnAgPSAw OworKwkJCXN0cmNweShidWYsIHAgKyAxKTsKKysJCQlzdHJjYXQoYnVmLCAiXG4iKTsKKysJCQlk ZWNyID0gMTsKKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJQbGVuIikpCisrCQkJUGxl biA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJObGVuIikpCisr CQkJTmxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJUbGVu IikpCisrCQkJVGxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCJBbGVuIikpCisrCQkJQWxlbiA9IGF0b2kodmFsdWUpOworKwkJaWYgKHApCisrCQkJZ290byBy ZWRvOworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWlmIChLZXkp CisrCQkJCU9QRU5TU0xfZnJlZShLZXkpOworKwkJCUtleSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwp OworKwkJCWlmIChsID09IDE2KQorKwkJCQljY20gPSBFVlBfYWVzXzEyOF9jY20oKTsKKysJCQll bHNlIGlmIChsID09IDI0KQorKwkJCQljY20gPSBFVlBfYWVzXzE5Ml9jY20oKTsKKysJCQllbHNl IGlmIChsID09IDMyKQorKwkJCQljY20gPSBFVlBfYWVzXzI1Nl9jY20oKTsKKysJCQllbHNlCisr CQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7 CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsIk5vbmNlIikpCisrCQkJeworKwkJCWlmIChOb25jZSkKKysJCQkJT1BFTlNTTF9mcmVlKE5v bmNlKTsKKysJCQlOb25jZSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IE5s ZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgbm9uY2UgbGVu Z3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwiUGF5bG9hZCIpICYmICFkZWNyKQorKwkJCXsKKysJCQlQYXlsb2FkID0gaGV4 MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKFBsZW4gJiYgbCAhPSBQbGVuKQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsKKysJ CQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwi QWRhdGEiKSkKKysJCQl7CisrCQkJaWYgKEFkYXRhKQorKwkJCQlPUEVOU1NMX2ZyZWUoQWRhdGEp OworKwkJCUFkYXRhID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKEFsZW4gJiYgbCAh PSBBbGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxv YWQgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwiQ1QiKSAmJiBkZWNyKQorKwkJCXsKKysJCQlDVCA9IGhleDJiaW5f bSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IChQbGVuICsgVGxlbikpCisrCQkJCXsKKysJCQkJ ZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgx KTsKKysJCQkJfQorKwkJCX0KKysJCWlmIChQYXlsb2FkKQorKwkJCXsKKysJCQlGSVBTX2NpcGhl cmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAxKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKKysJCQlGSVBTX2NpcGhl cl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgVGxlbiwgMCk7CisrCQkJRklQ U19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwgTm9uY2UsIDEpOworKworKwkJCUZJUFNfY2lw aGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEws IEFkYXRhLCBBbGVuKTsKKysJCQlDVCA9IE9QRU5TU0xfbWFsbG9jKFBsZW4gKyBUbGVuKTsKKysJ CQlGSVBTX2NpcGhlcigmY3R4LCBDVCwgUGF5bG9hZCwgUGxlbik7CisrCQkJRklQU19jaXBoZXJf Y3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIFRsZW4sCisrCQkJCQkJQ1QgKyBQ bGVuKTsKKysJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBDVCwgUGxlbiArIFRsZW4sIG91dCwgMCk7Cisr CQkJT1BFTlNTTF9mcmVlKENUKTsKKysJCQlPUEVOU1NMX2ZyZWUoUGF5bG9hZCk7CisrCQkJQ1Qg PSBQYXlsb2FkID0gTlVMTDsKKysJCQl9CisrCQlpZiAoQ1QpCisrCQkJeworKwkJCWludCBydjsK KysJCQlpbnQgbGVuID0gUGxlbiA9PSAwID8gMTogUGxlbjsKKysJCQlGSVBTX2NpcGhlcmluaXQo JmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhf Y3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKKysJCQkJCQlUbGVuLCBDVCArIFBsZW4p OworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAwKTsKKysJCQlG SVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKKysJCQlGSVBTX2NpcGhlcigmY3R4 LCBOVUxMLCBBZGF0YSwgQWxlbik7CisrCQkJUGF5bG9hZCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7 CisrCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBQYXlsb2FkLCBDVCwgUGxlbik7CisrCQkJaWYg KHJ2ID49IDApCisrCQkJCXsKKysJCQkJaWYgKHJ2ID09IDApCisrCQkJCQlQYXlsb2FkWzBdID0g MDsKKysJCQkJZnB1dHMoIlJlc3VsdCA9IFBhc3MiIFJFU1BfRU9MLCBvdXQpOworKwkJCQlPdXRw dXRWYWx1ZSgiUGF5bG9hZCIsIFBheWxvYWQsIGxlbiwgb3V0LCAwKTsKKysJCQkJfQorKwkJCWVs c2UKKysJCQkJZnB1dHMoIlJlc3VsdCA9IEZhaWwiIFJFU1BfRU9MLCBvdXQpOworKwkJCU9QRU5T U0xfZnJlZShDVCk7CisrCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOworKwkJCUNUID0gUGF5bG9h ZCA9IE5VTEw7CisrCQkJfQorKwkJfQorKwlpZiAoS2V5KQorKwkJT1BFTlNTTF9mcmVlKEtleSk7 CisrCWlmIChOb25jZSkKKysJCU9QRU5TU0xfZnJlZShOb25jZSk7CisrCWlmIChBZGF0YSkKKysJ CU9QRU5TU0xfZnJlZShBZGF0YSk7CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwor Kwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19nY210ZXN0X21haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQorKyNlbmRpZgorKwl7CisrCWludCBlbmNyeXB0OworKwlpbnQgeHRzID0gMCwgY2NtID0gMDsK KysJRklMRSAqaW4sICpvdXQ7CisrCWlmIChhcmdjID09IDQpCisrCQl7CisrCQlpbiA9IGZvcGVu KGFyZ3ZbMl0sICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlv dXQgPSBmb3Blbihhcmd2WzNdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZwcmlu dGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsK KysJCQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ2MgPT0gMikKKysJCXsKKysJCWluID0gc3RkaW47 CisrCQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJy LCIlcyBbLWVuY3J5cHR8LWRlY3J5cHRdXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0K KysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysJaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlwdCIp KQorKwkJZW5jcnlwdCA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlwdElW ZXh0IikpCisrCQllbmNyeXB0ID0gMjsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1kZWNy eXB0IikpCisrCQllbmNyeXB0ID0gMDsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1jY20i KSkKKysJCWNjbSA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCIteHRzIikpCisrCQl4 dHMgPSAxOworKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cg dG8gJXMuXG4iLGFyZ3ZbMV0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJaWYgKGNjbSkKKysJ CWNjbXRlc3QoaW4sIG91dCk7CisrCWVsc2UgaWYgKHh0cykKKysJCXh0c3Rlc3QoaW4sIG91dCk7 CisrCWVsc2UKKysJCWdjbXRlc3QoaW4sIG91dCwgZW5jcnlwdCk7CisrCisrCWlmIChhcmdjID09 IDQpCisrCQl7CisrCQlmY2xvc2UoaW4pOworKwkJZmNsb3NlKG91dCk7CisrCQl9CisrCisrCXJl dHVybiAwOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3JuZ3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cm5ndnMuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ0OTIzMTc4ICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJMjAxNC0wNS0wNiAxNjoy OTo1MC41NDQ5MjMxNzggKzAyMDAKK0BAIC0wLDAgKzEsMjMwIEBACisrLyoKKysgKiBDcnVkZSB0 ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3RvciBmaWxl cworKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0LgorKyAqCisrICogTm90 ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVjaWZpYyBm b3JtYXQKKysgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBSYW5kb20g TnVtYmVyIEdlbmVyYXRvcgorKyAqIFZhbGlkYXRpb24gU3lzdGVtIChSTkdWUykiLCBNYXkgMjUs IDIwMDQuCisrICoKKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJORyBzdXBw b3J0XG4iKTsKKysgICAgcmV0dXJuIDA7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3g1MDl2My5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysK KysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKyt2b2lkIHZzdCgpCisrICAgIHsKKysgICAgdW5z aWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Cisr ICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRbMTZd OworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFy ICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVuOworKworKyAgICBrZXlsZW4g PSAwOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkK KysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1L ZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVT IDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVm LCJbQUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJj bXAoa2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZp KTsKKysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOwor KwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsK KysJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsK KysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOwor KwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgewor KwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJ fQorKworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJN aXNzaW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3g5 MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3g5MzFfc2VlZCh2LDE2KTsKKysJ ICAgIEZJUFNfeDkzMV9zZXRfZHQoZHQpOworKwkgICAgaWYgKEZJUFNfeDkzMV9ieXRlcyhyZXQs MTYpIDw9IDApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2 YWx1ZVxuIik7CisrCSAgICAgICAgcmV0dXJuOworKwkgICAgICAgIH0KKysKKysJICAgIHB2KCJS IixyZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOwor KwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xf ZnJlZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lk IG1jdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5z aWduZWQgY2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysg ICAgdW5zaWduZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hh ciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwg a2V5bGVuOworKyAgICBpbnQgajsKKysKKysgICAga2V5bGVuID0gMDsKKysKKysgICAgd2hpbGUo ZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0 ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKKysJCWtleWxl biA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKKysJ CWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEz KSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwg bGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQor KwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSBr ZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhw ZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7CisrCSAgICBkdD1oZXgyYmluX20o dmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJICAgIHY9aGV4MmJpbl9tKHZh bHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJ bnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAgIGlmICgha2V5 IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIp OworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXls ZW4pOworKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7CisrCSAgICBmb3IgKGkgPSAwOyBpIDwg MTAwMDA7IGkrKykKKysJCXsKKysJCSAgICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKKysJCSAgICBp ZiAoRklQU194OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRl cnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOworKwkJICAgICAgICByZXR1cm47Cisr CQkgICAgICAgIH0KKysJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KKysJCSAgICBmb3IgKGogPSAx NTsgaiA+PSAwOyBqLS0pCisrCQkJeworKwkJCWR0W2pdKys7CisrCQkJaWYgKGR0W2pdKQorKwkJ CQlicmVhazsKKysJCQl9CisrCQl9CisrCisrCSAgICBwdigiUiIscmV0LDE2KTsKKysJICAgIE9Q RU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZShk dCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUodik7CisrCSAgICB2ID0g TlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAq KmFyZ3YpCisrICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJy LCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIUZJ UFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7Cisr CX0KKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIGlmICghRklQU194OTMxX3Rlc3RfbW9k ZSgpKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBQUk5HIHRlc3QgbW9k ZVxuIik7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFz dHJjbXAoYXJndlsxXSwibWN0IikpCisrCW1jdCgpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJn dlsxXSwidnN0IikpCisrCXZzdCgpOworKyAgICBlbHNlCisrCXsKKysJZnByaW50ZihzdGRlcnIs IkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhpdCgxKTsKKysJfQorKwor KyAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDU5MjMy MDEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rl c3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NTkyMzIwMSArMDIwMAorQEAgLTAsMCArMSwzOTAg QEAKKysvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBI ZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIw MDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUsMjAwNyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRo aXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJp YyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4K KysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9Q RU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAg ICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQor KworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisraW50IHJzYV90ZXN0KEZJ TEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQs IFJTQSAqcnNhLAorKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAorKwkJ QklHTlVNICplKTsKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJz YSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSk7CisrCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9 IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJ CXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChh cmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9 CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsK KysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJ ZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNs b3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsK KysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxF TgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKQorKwl7CisrCWNo YXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7 CisrCVJTQSAqcnNhID0gTlVMTDsKKysJQklHTlVNICpYcDEgPSBOVUxMLCAqWHAyID0gTlVMTCwg KlhwID0gTlVMTDsKKysJQklHTlVNICpYcTEgPSBOVUxMLCAqWHEyID0gTlVMTCwgKlhxID0gTlVM TDsKKysJQklHTlVNICplID0gTlVMTDsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsK KysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJ bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAo IWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUgKGZnZXRz KG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7Cisr CQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkv KiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8K KysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRz IHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwIHx8 ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDAp CisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAx OworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1 ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwor KwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOwor KworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1 ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChr ZXl3b3JkLCAieHAxIikpCisrCQkJeworKwkJCWlmIChYcDEgfHwgIWRvX2hleDJibigmWHAxLHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJ4cDIiKSkKKysJCQl7CisrCQkJaWYgKFhwMiB8fCAhZG9faGV4MmJuKCZYcDIs dmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlhwIikpCisrCQkJeworKwkJCWlmIChYcCB8fCAhZG9faGV4MmJuKCZYcCx2 YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAieHExIikpCisrCQkJeworKwkJCWlmIChYcTEgfHwgIWRvX2hleDJibigmWHEx LHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJ4cTIiKSkKKysJCQl7CisrCQkJaWYgKFhxMiB8fCAhZG9faGV4MmJuKCZY cTIsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIlhxIikpCisrCQkJeworKwkJCWlmIChYcSB8fCAhZG9faGV4MmJuKCZY cSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoZSB8fCAhZG9faGV4MmJuKCZlLHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJwMSIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAicDIiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg InAiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInExIikp CisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMiIpKQorKwkJ CWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicSIpKQorKwkJCWNvbnRp bnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCWNvbnRpbnVlOwor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxz ZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysK KysJCWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCisrCQkJeworKwkJCXJzYSA9IEZJUFNfcnNh X25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWlmICghcnNhX3By aW50a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkKKysJCQkJZ290byBlcnJvcjsKKysJ CQlCTl9mcmVlKFhwMSk7CisrCQkJWHAxID0gTlVMTDsKKysJCQlCTl9mcmVlKFhwMik7CisrCQkJ WHAyID0gTlVMTDsKKysJCQlCTl9mcmVlKFhwKTsKKysJCQlYcCA9IE5VTEw7CisrCQkJQk5fZnJl ZShlKTsKKysJCQllID0gTlVMTDsKKysJCQl9CisrCisrCQlpZiAocnNhICYmIFhxMSAmJiBYcTIg JiYgWHEpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50a2V5MihvdXQsIHJzYSwgWHExLCBYcTIs IFhxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9mcmVlKFhxMSk7CisrCQkJWHExID0gTlVM TDsKKysJCQlCTl9mcmVlKFhxMik7CisrCQkJWHEyID0gTlVMTDsKKysJCQlCTl9mcmVlKFhxKTsK KysJCQlYcSA9IE5VTEw7CisrCQkJRklQU19yc2FfZnJlZShyc2EpOworKwkJCXJzYSA9IE5VTEw7 CisrCQkJfQorKwkJfQorKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5l YnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVO U1NMX2ZyZWUobGluZWJ1Zik7CisrCisrCWlmIChYcDEpCisrCQlCTl9mcmVlKFhwMSk7CisrCWlm IChYcDIpCisrCQlCTl9mcmVlKFhwMik7CisrCWlmIChYcCkKKysJCUJOX2ZyZWUoWHApOworKwlp ZiAoWHExKQorKwkJQk5fZnJlZShYcTEpOworKwlpZiAoWHExKQorKwkJQk5fZnJlZShYcTEpOwor KwlpZiAoWHEyKQorKwkJQk5fZnJlZShYcTIpOworKwlpZiAoWHEpCisrCQlCTl9mcmVlKFhxKTsK KysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKwlpZiAocnNhKQorKwkJRklQU19yc2FfZnJlZShy c2EpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50Zihz dGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwor KworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnRrZXkxKEZJ TEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05VTSAq WHAsCisrCQlCSUdOVU0gKmUpCisrCXsKKysJaW50IHJldCA9IDA7CisrCUJJR05VTSAqcDEgPSBO VUxMLCAqcDIgPSBOVUxMOworKwlwMSA9IEJOX25ldygpOworKwlwMiA9IEJOX25ldygpOworKwlp ZiAoIXAxIHx8ICFwMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghUlNBX1g5MzFfZGVyaXZl X2V4KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhwMiwgWHAsCisrCQkJCQkJTlVMTCwg TlVMTCwgTlVMTCwgZSwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKworKwlkb19ibl9wcmludF9u YW1lKG91dCwgInAxIiwgcDEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAyIiwgcDIpOwor Kwlkb19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnApOworKworKwlyZXQgPSAxOworKwor KwllcnJvcjoKKysJaWYgKHAxKQorKwkJQk5fZnJlZShwMSk7CisrCWlmIChwMikKKysJCUJOX2Zy ZWUocDIpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnRr ZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJ R05VTSAqWHEpCisrCXsKKysJaW50IHJldCA9IDA7CisrCUJJR05VTSAqcTEgPSBOVUxMLCAqcTIg PSBOVUxMOworKwlxMSA9IEJOX25ldygpOworKwlxMiA9IEJOX25ldygpOworKwlpZiAoIXExIHx8 ICFxMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwg TlVMTCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJCQkJCVhxMSwgWHEyLCBY cSwgTlVMTCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKworKwlkb19ibl9wcmludF9uYW1lKG91 dCwgInExIiwgcTEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEyIiwgcTIpOworKwlkb19i bl9wcmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwg Im4iLCByc2EtPm4pOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgImQiLCByc2EtPmQpOworKwor KwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHExKQorKwkJQk5fZnJlZShxMSk7CisrCWlm IChxMikKKysJCUJOX2ZyZWUocTIpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCist LS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlwcwky MDE0LTA1LTA2IDE2OjI5OjUwLjU0NTkyMzIwMSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ1OTIz MjAxICswMjAwCitAQCAtMCwwICsxLDM3MCBAQAorKy8qIGZpcHNfcnNhc3Rlc3QuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgor KyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5 djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwor KyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgi CisrCisrc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRs ZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0 IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBT YWx0bGVuKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklM RSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDEsIFNhbHRsZW4gPSAt MTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMo KTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCIt c2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7Cisr CQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IElu dmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCWFyZ2MgLT0g MjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21w KCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IC0yOworKwkJYXJnYy0tOwor KwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJ ZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisr CQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Cisr CisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRp YWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVy cm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIXJzYV9zdGVzdChvdXQsIGlu LCBTYWx0bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RFU1QgZmls ZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQly ZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsK KysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0 ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0Owor KworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJz YV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKKysJeworKwljaGFyICps aW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlS U0EgKnJzYSA9IE5VTEw7CisrCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7CisrCXVuc2lnbmVk IGNoYXIgKk1zZyA9IE5VTEw7CisrCWxvbmcgTXNnbGVuID0gLTE7CisrCWludCBrZXlsZW4gPSAt MSwgY3VycmVudF9rZXlsZW4gPSAtMTsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsK KysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJ bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAo IWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUgKGZnZXRz KG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7Cisr CQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkv KiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8K KysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0ganVzdCBjb3B5 ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDAp CisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAx OworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1 ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwor KwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOwor KworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1 ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQkvKiBMb29rIGZvciBb bW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwg Ilttb2QiKSkKKysJCQl7CisrCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCQkJ aWYgKCpwICE9ICddJykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkqcCA9IDA7CisrCQkJ a2V5bGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKGtleWxlbiA8IDApCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikp CisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQorKwkJCQlkZ3N0ID0gRVZQ X3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCisrCQkJCWRn c3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIp KQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKKysJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7CisrCQkJZWxz ZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRl ZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJCQkJdmFsdWUpOworKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNn IikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYg KHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCU1zZyA9IGhl eDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJfQorKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQkvKiBJZiBr ZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYworKwkJICog a2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KKysJCSAqLworKworKwkJaWYg KGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKKysJCQl7CisrCQkJQklHTlVNICpibl9lOworKwkJ CWlmIChyc2EpCisrCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJCQlyc2EgPSBGSVBTX3JzYV9u ZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlibl9lID0gQk5fbmV3 KCk7CisrCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQorKwkJCQln b3RvIGVycm9yOworKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwga2V5bGVu LCBibl9lLCBOVUxMKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9mcmVlKGJuX2UpOworKwkJ CWZwdXRzKCJuID0gIiwgb3V0KTsKKysJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7CisrCQkJ ZnB1dHMoIlxuZSA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUpOworKwkJ CWZwdXRzKCJcbiIsIG91dCk7CisrCQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47CisrCQkJfQor KworKwkJaWYgKE1zZyAmJiBkZ3N0KQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludHNpZyhvdXQs IHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCisrCQkJCQkJCQlTYWx0bGVuKSkKKysJCQkJZ290byBl cnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCX0KKysK KysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJ CU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVl KGxpbmVidWYpOworKwlpZiAocnNhKQorKwkJRklQU19yc2FfZnJlZShyc2EpOworKworKwlyZXR1 cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBw YXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9y OworKworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJz YSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xl biwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgKnNp Z2J1ZiA9IE5VTEw7CisrCWludCBpLCBzaWdsZW47CisrCS8qIEVWUF9QS0VZIHN0cnVjdHVyZSAq LworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NUWCBjdHg7CisrCXBrLnR5cGUgPSBFVlBfUEtF WV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhOworKworKwlzaWdsZW4gPSBSU0Ffc2l6ZShyc2Ep OworKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOworKwlpZiAoIXNpZ2J1ZikKKysJ CWdvdG8gZXJyb3I7CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRs ZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBf TURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYg KFNhbHRsZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9D VFhfRkxBR19QQURfWDkzMSk7CisrCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRnc3QsIE5V TEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBNc2csIE1z Z2xlbikpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwgc2lnYnVm LCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCUVW UF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJZnB1dHMoIlMgPSAiLCBvdXQpOworKworKwlm b3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMlgiLCBzaWdi dWZbaV0pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKworKwlyZXQgPSAxOworKworKwllcnJv cjoKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDU5 MjMyMDEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh dnRlc3QuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NTkyMzIwMSArMDIwMAorQEAgLTAsMCArMSwz NzcgQEAKKysvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0 IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrCisrI2lmbmRlZiBPUEVO U1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAg cHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysK KysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnR2ZXIo RklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQljb25zdCBFVlBfTUQgKmRn c3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hh ciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWlu dCByZXQgPSAxOworKwlpbnQgU2FsdGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3NldCgx KSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisr CWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7Cisr CQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7Cisr CQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJ Z290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQorKwll bHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7Cisr CQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlmIChh cmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9 CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQln b3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAo cmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4p KQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xv c2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1Rf TUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBp bnQgU2FsdGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJ Y2hhciAqa2V5d29yZCwgKnZhbHVlOworKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOworKwlC SUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEws ICpTID0gTlVMTDsKKysJbG9uZyBNc2dsZW4sIFNsZW47CisrCWludCByZXQgPSAwOworKwlpbnQg bG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsK KysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdo aWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJ bG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5l YnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3Ig PSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9 IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJ CWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYs IG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJ CXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAw OworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJ dmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisr CQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJm4sdmFs dWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmUsdmFsdWUpKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJCQkJ ZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIp KQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJZWxz ZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigp OworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJCSJGQVRBTDog dW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVlKTsKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJ CQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlMi KSkKKysJCQl7CisrCQkJaWYgKFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0 cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCVMgPSBoZXgyYmlu X20odmFsdWUsICZTbGVuKTsKKysJCQlpZiAoIVMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0IikpCisrCQkJY29udGlu dWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVm LCBvdXQpOworKworKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBkZ3N0KQorKwkJCXsKKysJ CQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCisrCQkJCQlNc2csIE1zZ2xlbiwg UywgU2xlbiwgU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1z Zyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoUyk7CisrCQkJUyA9IE5VTEw7 CisrCQkJfQorKworKwkJfQorKworKworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJ aWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYp CisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChuKQorKwkJQk5fZnJlZShuKTsKKysJ aWYgKGUpCisrCQlCTl9mcmVlKGUpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJv cjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxp bmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGlu dCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQlj b25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAor KwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlpbnQg cmV0ID0gMCwgcjsKKysJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBzdHJ1Y3R1cmVzICovCisr CVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7CisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RYIGN0 eDsKKysJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKysJcnNhX3B1YmtleSA9IEZJUFNfcnNh X25ldygpOworKwlpZiAoIXJzYV9wdWJrZXkpCisrCQlnb3RvIGVycm9yOworKwlyc2FfcHVia2V5 LT5uID0gQk5fZHVwKG4pOworKwlyc2FfcHVia2V5LT5lID0gQk5fZHVwKGUpOworKwlpZiAoIXJz YV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCisrCQlnb3RvIGVycm9yOworKwlway50eXBl ID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYV9wdWJrZXk7CisrCisrCUVWUF9N RF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQ X01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChT YWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCisrCQlNX0VW UF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7CisrCWlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOwor KwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJv cjsKKysKKysJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVuLCAmcGspOworKworKwor KwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyIDwgMCkKKysJCWdvdG8gZXJy b3I7CisrCUVSUl9jbGVhcl9lcnJvcigpOworKworKwlpZiAociA9PSAwKQorKwkJZnB1dHMoIlJl c3VsdCA9IEZcbiIsIG91dCk7CisrCWVsc2UKKysJCWZwdXRzKCJSZXN1bHQgPSBQXG4iLCBvdXQp OworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHJzYV9wdWJrZXkpCisrCQlGSVBT X3JzYV9mcmVlKHJzYV9wdWJrZXkpOworKwlpZiAoYnVmKQorKwkJT1BFTlNTTF9mcmVlKGJ1Zik7 CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ1OTIzMjAx ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3Qu YwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NTkyMzIwMSArMDIwMAorQEAgLTAsMCArMSwzODggQEAK KysvKiBmaXBzX3NoYXRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4K KysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVj dCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwor KyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg d3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9G SVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50 ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisr I2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgaW50IGRnc3RfdGVz dChGSUxFICpvdXQsIEZJTEUgKmluKTsKKytzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQ X01EICptZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKTsK KytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKKysJ CXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKKysKKytpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysK KysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9f cHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkK KysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysK KysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Bl bihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1 dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KCFkZ3N0X3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGRp Z2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCWVs c2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50X2Vy cm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7Cisr CWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVy biByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRTCTEwMjQwMAorKyNk ZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklUUyA+PiAzKSAqIDIp ICsgMTAwKQorKworK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKKysJeworKwlj b25zdCBFVlBfTUQgKm1kID0gTlVMTDsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwg KnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJdW5zaWduZWQgY2hhciAqTXNnID0gTlVM TCwgKlNlZWQgPSBOVUxMOworKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAtMSwgU2VlZExlbiA9 IC0xOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9Q RU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVi dWYpCisrCQlnb3RvIGVycm9yOworKworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFNIQV9U RVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVm LCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBz cGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJ CWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihs aW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW0w9 MjBdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsKKysJCQlmcHV0cyhvbGlu ZWJ1Ziwgb3V0KTsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisr CQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCAr IDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3Ry bGVuKHZhbHVlKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsIltM IikgJiYgKnA9PSddJykKKysJCQl7CisrCQkJc3dpdGNoIChhdG9pKHZhbHVlKSkKKysJCQkJewor KwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOworKwkJCQljYXNlIDI4OiBtZD1F VlBfc2hhMjI0KCk7IGJyZWFrOworKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hhMjU2KCk7IGJyZWFr OworKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOworKwkJCQljYXNlIDY0OiBt ZD1FVlBfc2hhNTEyKCk7IGJyZWFrOworKwkJCQlkZWZhdWx0OiBnb3RvIHBhcnNlX2Vycm9yOwor KwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTGVuIikpCisrCQkJ eworKwkJCWlmIChMZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTGVuID0g YXRvaSh2YWx1ZSk7CisrCQkJaWYgKExlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLworKwkJCWlmIChMZW4gJiAw eDcpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKExlbiA+IFNIQV9URVNUX01BWF9C SVRTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1zZ0xlbiA9IExlbiA+PiAzOworKwkJ CX0KKysKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQls b25nIHRtcGxlbjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkg PSAnMCc7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2cgPSBo ZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNlZWQiKSkKKysJ CQl7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOwor KwkJCWlmIChTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCVNlZWQgPSBoZXgyYmlu X20odmFsdWUsICZTZWVkTGVuKTsKKysJCQlpZiAoIVNlZWQpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQiKSkKKysJCQljb250 aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMob2xpbmVi dWYsIG91dCk7CisrCisrCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0gMCkpCisrCQkJewor KwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCisrCQkJCWdvdG8gZXJy b3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlNc2dMZW4g PSAtMTsKKysJCQlMZW4gPSAtMTsKKysJCQl9CisrCQllbHNlIGlmIChtZCAmJiBTZWVkICYmIChT ZWVkTGVuID4gMCkpCisrCQkJeworKwkJCWlmICghcHJpbnRfbW9udGUobWQsIG91dCwgU2VlZCwg U2VlZExlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKFNlZWQpOworKwkJ CVNlZWQgPSBOVUxMOworKwkJCVNlZWRMZW4gPSAtMTsKKysJCQl9CisrCQorKworKwkJfQorKwor KworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BF TlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGlu ZWJ1Zik7CisrCWlmIChNc2cpCisrCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJaWYgKFNlZWQpCisr CQlPUEVOU1NMX2ZyZWUoU2VlZCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9y OgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGlu ZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50 IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNo YXIgKk1zZywgaW50IE1zZ2xlbikKKysJeworKwlpbnQgaSwgbWRsZW47CisrCXVuc2lnbmVkIGNo YXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKKysJaWYgKCFFVlBfRGlnZXN0KE1zZywgTXNnbGVuLCBt ZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKKysJCXsKKysJCWZwdXRzKCJF cnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOworKwkJcmV0dXJuIDA7CisrCQl9Cisr CWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCWZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsrKQorKwkJ ZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOworKwlmcHV0cygiXG4iLCBvdXQpOworKwlyZXR1 cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwg RklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pCisrCXsKKysJ dW5zaWduZWQgaW50IGksIGosIGs7CisrCWludCByZXQgPSAwOworKwlFVlBfTURfQ1RYIGN0eDsK KysJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKKysJdW5zaWduZWQgaW50IG1sZW4s IG0xbGVuLCBtMmxlbiwgbTNsZW47CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJ aWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCisrCQltbGVuID0gU2VlZExlbjsKKysJZWxz ZQorKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKKysKKysJbTEgPSBPUEVOU1NMX21hbGxvYyht bGVuKTsKKysJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKKysJbTMgPSBPUEVOU1NMX21hbGxv YyhtbGVuKTsKKysKKysJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQorKwkJZ290byBtY19lcnJvcjsK KysKKysJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKKysJbWVtY3B5KG0xLCBTZWVk LCBTZWVkTGVuKTsKKysJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKKysJbWVtY3B5KG0zLCBT ZWVkLCBTZWVkTGVuKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysKKysJZm9yIChqID0gMDsg aiA8IDEwMDsgaisrKQorKwkJeworKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKysJCQl7 CisrCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOworKwkJCUVWUF9EaWdlc3RV cGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0yLCBt Mmxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4pOworKwkJCXAgPSBt MTsKKysJCQltMSA9IG0yOworKwkJCW0xbGVuID0gbTJsZW47CisrCQkJbTIgPSBtMzsKKysJCQlt MmxlbiA9IG0zbGVuOworKwkJCW0zID0gcDsKKysJCQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwg bTMsICZtM2xlbik7CisrCQkJfQorKwkJZnByaW50ZihvdXQsICJDT1VOVCA9ICVkXG4iLCBqKTsK KysJCWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCQlmb3IgKGsgPSAwOyBrIDwgbTNsZW47IGsrKykK KysJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7CisrCQlmcHV0cygiXG5cbiIsIG91dCk7 CisrCQltZW1jcHkobTEsIG0zLCBtM2xlbik7CisrCQltZW1jcHkobTIsIG0zLCBtM2xlbik7Cisr CQltMWxlbiA9IG0ybGVuID0gbTNsZW47CisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCW1jX2Vy cm9yOgorKwlpZiAobTEpCisrCQlPUEVOU1NMX2ZyZWUobTEpOworKwlpZiAobTIpCisrCQlPUEVO U1NMX2ZyZWUobTIpOworKwlpZiAobTMpCisrCQlPUEVOU1NMX2ZyZWUobTMpOworKworKwlFVlBf TURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAorLS0tIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6 NTAuNTQ1OTIzMjAxICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3V0bC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ1OTIzMjAxICswMjAwCitAQCAtMCwwICsx LDM0MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworK3ZvaWQgZG9fcHJpbnRfZXJy b3JzKHZvaWQpCisrCXsKKysJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7CisrCWludCBsaW5lLCBm bGFnczsKKysJdW5zaWduZWQgbG9uZyBsOworKwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vycm9yX2xp bmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIKKysJCQkJIjpmaWxl PSVzOmxpbmU9JWQ6JXNcbiIsCisrCQkJbCwgRVJSX0dFVF9MSUIobCksIEVSUl9HRVRfRlVOQyhs KSwgRVJSX0dFVF9SRUFTT04obCksCisrCQkJZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJfVFhUX1NU UklORyA/IGRhdGEgOiAiIik7CisrCQl9CisrCX0KKysKKytpbnQgaGV4MmJpbihjb25zdCBjaGFy ICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuMSwgbjI7CisrICAg IHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9MCxuMj0wIDsgaW5bbjFdICYmIGlu W24xXSAhPSAnXG4nIDsgKQorKwl7IC8qIGZpcnN0IGJ5dGUgKi8KKysJaWYgKChpbltuMV0gPj0g JzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJzAnOworKwll bHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQorKwkgICAgY2ggPSBp bltuMSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24x XSA8PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOworKwllbHNlCisrCSAg ICByZXR1cm4gLTE7CisrCWlmKCFpbltuMV0pCisrCSAgICB7CisrCSAgICBvdXRbbjIrK109Y2g7 CisrCSAgICBicmVhazsKKysJICAgIH0KKysJb3V0W24yXSA9IGNoIDw8IDQ7CisrCS8qIHNlY29u ZCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQorKwkg ICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChp bltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKKysJZWxzZSBp ZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJICAgIGNoID0gaW5bbjEr K10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwlvdXRbbjIrK10gfD0g Y2g7CisrCX0KKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisrdW5zaWduZWQgY2hhciAqaGV4 MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIg KnA7CisrCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEpLzIpOworKwkqcGxlbiA9 IGhleDJiaW4oaW4sIHApOworKwlyZXR1cm4gcDsKKysJfQorKworK2ludCBkb19oZXgyYm4oQklH TlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgKnA7CisrCWxv bmcgcGxlbjsKKysJaW50IHIgPSAwOworKwlwID0gaGV4MmJpbl9tKGluLCAmcGxlbik7CisrCWlm ICghcCkKKysJCXJldHVybiAwOworKwlpZiAoISpwcikKKysJCSpwciA9IEJOX25ldygpOworKwlp ZiAoISpwcikKKysJCXJldHVybiAwOworKwlpZiAoQk5fYmluMmJuKHAsIHBsZW4sICpwcikpCisr CQlyID0gMTsKKysJT1BFTlNTTF9mcmVlKHApOworKwlyZXR1cm4gcjsKKysJfQorKworK2ludCBk b19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsKKysJ dW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwlpZiAobGVu ID09IDApCisrCQl7CisrCQlmcHV0cygiMDAiLCBvdXQpOworKwkJcmV0dXJuIDE7CisrCQl9Cisr CisrCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7CisrCWlmICghdG1wKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisrCQlyZXR1cm4gMDsK KysJCX0KKysJQk5fYm4yYmluKGJuLCB0bXApOworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp CisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOworKwlPUEVOU1NMX2ZyZWUodG1wKTsK KysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZG9fYm5fcHJpbnRfbmFtZShGSUxFICpvdXQsIGNv bnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IHI7CisrCWZwcmludGYob3V0 LCAiJXMgPSAiLCBuYW1lKTsKKysJciA9IGRvX2JuX3ByaW50KG91dCwgYm4pOworKwlpZiAoIXIp CisrCQlyZXR1cm4gMDsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0dXJuIDE7CisrCX0KKysK KytpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hhciAqbGluZWJ1Ziwg Y2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Cisr CXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdvcmQgPSBsaW5lYnVmOworKwkvKiBT a2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQorKwkJa2V5d29yZCsrOworKworKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJcCA9 IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAnPScgZXhpdCAqLworKwlpZiAo IXApCisrCQlyZXR1cm4gMDsKKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUgdHJhaWxp bmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJKnEt LSA9IDA7CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVtb3ZlIGxl YWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqdmFsdWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAtLSA9IDA7 CisrCisrCSpwa3cgPSBrZXl3b3JkOworKwkqcHZhbCA9IHZhbHVlOworKwlyZXR1cm4gMTsKKysJ fQorKworK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQorKyAgICB7CisrICAgIEJJR05V TSAqcD1OVUxMOworKworKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQorKwlyZXR1cm4gTlVM TDsKKysKKysgICAgcmV0dXJuIHA7CisrICAgIH0KKysKKytpbnQgYmluMmhleChjb25zdCB1bnNp Z25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjEsIG4y OworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7IG4xIDwg bGVuIDsgKytuMSkKKysJeworKwljaD1pbltuMV0gPj4gNDsKKysJaWYgKGNoIDw9IDB4MDkpCisr CSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRbbjIrK109Y2gtMTArJ2En OworKwljaD1pbltuMV0gJiAweDBmOworKwlpZihjaCA8PSAweDA5KQorKwkgICAgb3V0W24yKytd PWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKKysJfQorKyAgICBv dXRbbjJdPSdcMCc7CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3ZvaWQgcHYoY29uc3Qg Y2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQorKyAgICB7CisrICAg IGNoYXIgb2J1ZlsyMDQ4XTsKKysKKysgICAgYmluMmhleCh2YWwsbGVuLG9idWYpOworKyAgICBw cmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOworKyAgICB9CisrCisrLyogVG8gYXZvaWQgZXh0 ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2UganVzdCBjb252ZXJ0 CisrICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0uIEtleXdvcmQgbGlu ZXMgY29udmVydGVkIHRvIGZvcm0KKysgKiAia2V5d29yZCA9IHZhbHVlXG4iIG5vIG1hdHRlciB3 aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcworKyAqIGp1c3QgaGF2ZSBs ZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgorKyAqLworKworK2ludCB0aWR5X2xp bmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29yZCwg KnZhbHVlLCAqcCwgKnE7CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdvcmQg PSBsaW5lYnVmOworKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJa2V5d29yZCsrOworKwkvKiBMb29rIGZvciA9 IHNpZ24gKi8KKysJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAnPScg anVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCisrCWlmICghcCkKKysJCXsKKysJCXAg PSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8 IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKwkJc3RyY3B5KG9s aW5lYnVmLCBrZXl3b3JkKTsKKysJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCQlyZXR1cm4g MTsKKysJCX0KKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug Ki8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJKnEtLSA9IDA7Cisr CisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVtb3ZlIGxlYWRpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUp KQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCXdoaWxlICgqcCA9PSAn XG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAtLSA9IDA7CisrCisrCXN0 cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIpOworKwlz dHJjYXQob2xpbmVidWYsIHZhbHVlKTsKKysJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKKysKKysJ cmV0dXJuIDE7CisrCX0KKysKKysvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBfYml0 c18gcmVhZCAqLworK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwgaW50IGxlbiwgdW5zaWdu ZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICBtZW1zZXQob3V0LDAs bGVuKTsKKysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCisrCWlmKGluW25dID09ICcxJykK KysJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7CisrICAgIHJldHVybiBsZW47CisrICAg IH0KKysKKytpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFy ICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihuPTAgOyBuIDwgbGVuIDsg KytuKQorKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcwJzsKKysg ICAgcmV0dXJuIG47CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKyt2b2lkIFByaW50VmFsdWUoY2hhciAqdGFnLCB1bnNp Z25lZCBjaGFyICp2YWwsIGludCBsZW4pCisreworKyNpZiBWRVJCT1NFCisrICBjaGFyIG9idWZb MjA0OF07CisrICBpbnQgb2xlbjsKKysgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsK KysgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNlbmRpZgorK30K KysKKyt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQg bGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhd OworKyAgICBpbnQgb2xlbjsKKysKKysgICAgaWYoYml0bW9kZSkKKysJb2xlbj1iaW4yYmludCh2 YWwsbGVuLG9idWYpOworKyAgICBlbHNlCisrCW9sZW49YmluMmhleCh2YWwsbGVuLG9idWYpOwor KworKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysj aWYgVkVSQk9TRQorKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK KysjZW5kaWYKKysgICAgfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMv Zmlwc19hZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNf YWVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2Flc19z ZWxmdGVzdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDY5MjMyMjQgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTQtMDUtMDYg MTY6Mjk6NTAuNTQ2OTIzMjI0ICswMjAwCitAQCAtMCwwICsxLDM1OSBAQAorKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgor KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwor KyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgor KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysgICAgY29uc3QgdW5zaWduZWQg Y2hhciBrZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl07Cisr ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07CisrICAgIH0gdGVzdHNbXT0K KysJeworKwl7CisrCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAor KwkgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAorKwl7IDB4MDAs MHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKKysJICAweDg4LDB4OTksMHhBQSww eEJCLDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKKysJeyAweDY5LDB4QzQsMHhFMCwweEQ4LDB4NkEs MHg3QiwweDA0LDB4MzAsCisrCSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4QjQsMHhDNSww eDVBIH0sCisrCX0sCisrCX07CisrCisrc3RhdGljIGludCBjb3JydXB0X2FlczsKKysKKyt2b2lk IEZJUFNfY29ycnVwdF9hZXMoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfYWVzID0gMTsKKysgICAg fQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCisrICAgIHsKKysgICAgaW50IG47CisrICAg IGludCByZXQgPSAwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJf Q1RYX2luaXQoJmN0eCk7CisrCisrICAgIGZvcihuPTAgOyBuIDwgMSA7ICsrbikKKysJeworKwl1 bnNpZ25lZCBjaGFyIGtleVsxNl07CisrCisrCW1lbWNweShrZXksIHRlc3RzW25dLmtleSwgc2l6 ZW9mKGtleSkpOworKwlpZiAoY29ycnVwdF9hZXMpCisrCQlrZXlbMF0rKzsKKysJaWYgKGZpcHNf Y2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJCWtleSwgTlVMTCwKKysJ CQkJdGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tuXS5jaXBoZXJ0ZXh0LAorKwkJCQkx NikgPD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7CisrICAgIGVycjoKKysg ICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKwkg ICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBBRVMtQ0NNIHRlc3QgZGF0YSBm cm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGNjbV9rZXlbXSA9IHsKKysJMHhjZSwweGIwLDB4MDksMHhhZSwweGE0LDB4NDUsMHg0 NCwweDUxLDB4ZmUsMHhhZCwweGYwLDB4ZTYsCisrCTB4YjMsMHg2ZiwweDQ1LDB4NTUsMHg1ZCww eGQwLDB4NDcsMHgyMywweGJhLDB4YTQsMHg0OCwweGU4CisrfTsKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBjY21fbm9uY2VbXSA9IHsKKysJMHg3NiwweDQwLDB4NDMsMHhjNCwweDk0LDB4 NjAsMHhiNworK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2FkYXRhW10gPSB7 CisrCTB4NmUsMHg4MCwweGRkLDB4N2YsMHgxYiwweGFkLDB4ZjMsMHhhMSwweGM5LDB4YWIsMHgy NSwweGM3LAorKwkweDVmLDB4MTAsMHhiZCwweGU3LDB4OGMsMHgyMywweGZhLDB4MGUsMHhiOCww eGY5LDB4YWEsMHhhNSwKKysJMHgzYSwweGRlLDB4ZmIsMHhmNCwweGNiLDB4ZjcsMHg4ZiwweGU0 CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fcHRbXSA9IHsKKysJMHhjOCww eGQyLDB4NzUsMHhmOSwweDE5LDB4ZTEsMHg3ZCwweDdmLDB4ZTYsMHg5YywweDJhLDB4MWYsCisr CTB4NTgsMHg5MywweDlkLDB4ZmUsMHg0ZCwweDQwLDB4MzcsMHg5MSwweGI1LDB4ZGYsMHgxMyww eDEwCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fY3RbXSA9IHsKKysJMHg4 YSwweDBmLDB4M2QsMHg4MiwweDI5LDB4ZTQsMHg4ZSwweDc0LDB4ODcsMHhmZCwweDk1LDB4YTIs CisrCTB4OGEsMHhkMywweDkyLDB4YzgsMHgwYiwweDM2LDB4ODEsMHhkNCwweGZiLDB4YzcsMHhi YiwweGZkCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fdGFnW10gPSB7Cisr CTB4MmQsMHhkNiwweGVmLDB4MWMsMHg0NSwweGQ0LDB4Y2MsMHhiNywweDIzLDB4ZGMsMHgwNyww eDQ0LAorKwkweDE0LDB4ZGIsMHg1MCwweDZkCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9h ZXNfY2NtKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgb3V0WzEy OF0sIHRhZ1sxNl07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5p dCgmY3R4KTsKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKwlpZiAoIUVWUF9DaXBo ZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLE5VTEwsIE5VTEwsIE5VTEwsIDEpKQor KwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9D Q01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKwkJZ290byBl cnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RB RywKKysJCQkJCXNpemVvZihjY21fdGFnKSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFF VlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDEp KQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVv ZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0Np cGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisrCQln b3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fcHQsIHNpemVvZihjY21f cHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUVWUF9DSVBI RVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQorKwkJZ290 byBlcnI7CisrCWlmIChtZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCisrCQl8 fCBtZW1jbXAob3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKKysJCWdvdG8gZXJyOworKwor KwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrCWlmICghRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQorKwkJZ290 byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VU X0lWTEVOLAorKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKwkJZ290byBlcnI7Cisr CWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYs IHRhZykpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxM LCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDApKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBf Q2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX2N0 KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEs IHNpemVvZihjY21fYWRhdGEpKSA8IDApCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIo JmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysJ CWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkp CisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NU WF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQly ZXR1cm4gMDsKKysJCX0KKysJZWxzZQorKwkJcmV0dXJuIHJldDsKKysKKysJfQorKworKy8qIEFF Uy1HQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2tleVtdID0geworKwkweGVlLDB4YmMsMHgxZiww eDU3LDB4NDgsMHg3ZiwweDUxLDB4OTIsMHgxYywweDA0LDB4NjUsMHg2NiwKKysJMHg1ZiwweDhh LDB4ZTYsMHhkMSwweDY1LDB4OGIsMHhiMiwweDZkLDB4ZTYsMHhmOCwweGEwLDB4NjksCisrCTB4 YTMsMHg1MiwweDAyLDB4OTMsMHhhNSwweDcyLDB4MDcsMHg4ZgorK307Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZ2NtX2l2W10gPSB7CisrCTB4OTksMHhhYSwweDNlLDB4NjgsMHhlZCww eDgxLDB4NzMsMHhhMCwweGVlLDB4ZDAsMHg2NiwweDg0CisrfTsKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBnY21fcHRbXSA9IHsKKysJMHhmNSwweDZlLDB4ODcsMHgwNSwweDViLDB4YzMs MHgyZCwweDBlLDB4ZWIsMHgzMSwweGIyLDB4ZWEsCisrCTB4Y2MsMHgyYiwweGYyLDB4YTUKKyt9 OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9hYWRbXSA9IHsKKysJMHg0ZCwweDIz LDB4YzMsMHhjZSwweGMzLDB4MzQsMHhiNCwweDliLDB4ZGIsMHgzNywweDBjLDB4NDMsCisrCTB4 N2YsMHhlYywweDc4LDB4ZGUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9j dFtdID0geworKwkweGY3LDB4MjYsMHg0NCwweDEzLDB4YTgsMHg0YywweDBlLDB4N2MsMHhkNSww eDM2LDB4ODYsMHg3ZSwKKysJMHhiOSwweGYyLDB4MTcsMHgzNgorK307Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZ2NtX3RhZ1tdID0geworKwkweDY3LDB4YmEsMHgwNSwweDEwLDB4MjYs MHgyYSwweGU0LDB4ODcsMHhkNywweDM3LDB4ZWUsMHg2MiwKKysJMHg5OCwweGY3LDB4N2UsMHgw YworK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKQorKwl7CisrCWludCBy ZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOworKwlFVlBfQ0lQSEVS X0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCW1lbXNldChvdXQsIDAs IHNpemVvZihvdXQpKTsKKysJbWVtc2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOworKwlpZiAoIUVW UF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxM LCAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQ X0NUUkxfR0NNX1NFVF9JVkxFTiwKKysJCQkJCXNpemVvZihnY21faXYpLCBOVUxMKSkKKysJCWdv dG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9r ZXksIGdjbV9pdiwgMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVM TCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCisrCQlnb3RvIGVycjsKKysJaWYgKEVW UF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAhPSBzaXplb2YoZ2Nt X2N0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAw KSA8IDApCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgs IEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAo bWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1lbWNtcChvdXQsIGdjbV9jdCwgMTYpKQorKwkJ Z290byBlcnI7CisrCisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysKKysJaWYgKCFF VlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVM TCwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVW UF9DVFJMX0dDTV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCisrCQln b3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9T RVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4 KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkpCisrCQlnb3RvIGVycjsKKysJ aWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDAp CisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNpemVv ZihnY21fY3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0Np cGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1l bWNtcChvdXQsIGdjbV9wdCwgMTYpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisr CWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYgKHJldCA9PSAw KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNLEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWVsc2UKKysJCXJldHVybiBy ZXQ7CisrCisrCX0KKysKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2tl eVtdID0geworKwkweGExLDB4YjksMHgwYywweGJhLDB4M2YsMHgwNiwweGFjLDB4MzUsMHgzYiww eDJjLDB4MzQsMHgzOCwKKysJMHg3NiwweDA4LDB4MTcsMHg2MiwweDA5LDB4MDksMHgyMywweDAy LDB4NmUsMHg5MSwweDc3LDB4MTgsCisrCTB4MTUsMHhmMiwweDlkLDB4YWIsMHgwMSwweDkzLDB4 MmYsMHgyZgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9pW10gPSB7 CisrCTB4NGYsMHhhZSwweGY3LDB4MTEsMHg3YywweGRhLDB4NTksMHhjNiwweDZlLDB4NGIsMHg5 MiwweDAxLAorKwkweDNlLDB4NzYsMHg4YSwweGQ1CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBYVFNfMTI4X3B0W10gPSB7CisrCTB4ZWIsMHhhYiwweGNlLDB4OTUsMHhiMSwweDRk LDB4M2MsMHg4ZCwweDZmLDB4YjMsMHg1MCwweDM5LAorKwkweDA3LDB4OTAsMHgzMSwweDFjCisr fTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2N0W10gPSB7CisrCTB4Nzcs MHg4YSwweGU4LDB4YjQsMHgzYywweGI5LDB4OGQsMHg1YSwweDgyLDB4NTAsMHg4MSwweGQ1LAor KwkweGJlLDB4NDcsMHgxYywweDYzCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBYVFNfMjU2X2tleVtdID0geworKwkweDFlLDB4YTYsMHg2MSwweGM1LDB4OGQsMHg5NCwweDNh LDB4MGUsMHg0OCwweDAxLDB4ZTQsMHgyZiwKKysJMHg0YiwweDA5LDB4NDcsMHgxNCwweDllLDB4 N2YsMHg5ZiwweDhlLDB4M2UsMHg2OCwweGQwLDB4YzcsCisrCTB4NTAsMHg1MiwweDEwLDB4YmQs MHgzMSwweDFhLDB4MGUsMHg3YywweGQ2LDB4ZTEsMHgzZiwweGZkLAorKwkweGYyLDB4NDEsMHg4 ZCwweDhkLDB4MTksMHgxMSwweGMwLDB4MDQsMHhjZCwweGE1LDB4OGQsMHhhMywKKysJMHhkNiww eDE5LDB4YjcsMHhlMiwweGI5LDB4MTQsMHgxZSwweDU4LDB4MzEsMHg4ZSwweGVhLDB4MzksCisr CTB4MmMsMHhmNCwweDFiLDB4MDgKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhU U18yNTZfaVtdID0geworKwkweGFkLDB4ZjgsMHhkOSwweDI2LDB4MjcsMHg0NiwweDRhLDB4ZDIs MHhmMCwweDQyLDB4OGUsMHg4NCwKKysJMHhhOSwweGY4LDB4NzUsMHg2NAorK307Cisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0geworKwkweDJlLDB4ZWQsMHhlYSww eDUyLDB4Y2QsMHg4MiwweDE1LDB4ZTEsMHhhYywweGM2LDB4NDcsMHhlOCwKKysJMHgxMCwweGJi LDB4YzMsMHg2NCwweDJlLDB4ODcsMHgyOCwweDdmLDB4OGQsMHgyZSwweDU3LDB4ZTMsCisrCTB4 NmMsMHgwYSwweDI0LDB4ZmIsMHhjMSwweDJhLDB4MjAsMHgyZQorK307Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9jdFtdID0geworKwkweGNiLDB4YWEsMHhkMCwweGUyLDB4 ZjYsMHhjZSwweGEzLDB4ZjUsMHgwYiwweDM3LDB4ZjksMHgzNCwKKysJMHhkNCwweDZhLDB4OWIs MHgxMywweDBiLDB4OWQsMHg1NCwweGYwLDB4N2UsMHgzNCwweGYzLDB4NmEsCisrCTB4ZjcsMHg5 MywweGU4LDB4NmYsMHg3MywweGM2LDB4ZDcsMHhkYgorK307CisrCisraW50IEZJUFNfc2VsZnRl c3RfYWVzX3h0cygpCisrCXsKKysJaW50IHJldCA9IDE7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsK KysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKGZpcHNfY2lwaGVyX3Rlc3Qo JmN0eCwgRVZQX2Flc18xMjhfeHRzKCksCisrCQkJCVhUU18xMjhfa2V5LCBYVFNfMTI4X2ksIFhU U18xMjhfcHQsIFhUU18xMjhfY3QsCisrCQkJCXNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkKKysJ CXJldCA9IDA7CisrCisrCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2X3h0 cygpLAorKwkJCQlYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBYVFNfMjU2X2N0 LAorKwkJCQlzaXplb2YoWFRTXzI1Nl9wdCkpIDw9IDApCisrCQlyZXQgPSAwOworKworKwlFVlBf Q0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlpZiAocmV0ID09IDApCisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCXJl dHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9maXBzL2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHMuYworLS0t IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6 NTAuNTQ2OTIzMjI0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwcy5j CTIwMTQtMDUtMDYgMTY6MzM6MjQuMzA5ODY1MTYwICswMjAwCitAQCAtMCwwICsxLDQ5MSBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNp bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGRsZmNu Lmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRl ICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKworKyNpZm5kZWYgUEFUSF9NQVgKKysjZGVmaW5lIFBBVEhfTUFYIDEw MjQKKysjZW5kaWYKKysKKytzdGF0aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Cisrc3Rh dGljIGludCBmaXBzX21vZGUgPSAwOworK3N0YXRpYyBpbnQgZmlwc19zdGFydGVkID0gMDsKKysK KytzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKKytzdGF0aWMgaW50IGZp cHNfc2V0X293bmluZ190aHJlYWQodm9pZCk7Cisrc3RhdGljIGludCBmaXBzX2NsZWFyX293bmlu Z190aHJlYWQodm9pZCk7CisrCisrI2RlZmluZSBmaXBzX3dfbG9jaygpCUNSWVBUT193X2xvY2so Q1JZUFRPX0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfd191bmxvY2soKQlDUllQVE9fd191bmxv Y2soQ1JZUFRPX0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfcl9sb2NrKCkJQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19GSVBTKQorKyNkZWZpbmUgZmlwc19yX3VubG9jaygpCUNSWVBUT19yX3Vu bG9jayhDUllQVE9fTE9DS19GSVBTKQorKworK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUoaW50 IG9ub2ZmKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFk KCk7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQp IGZpcHNfd19sb2NrKCk7CisrCQlmaXBzX21vZGUgPSBvbm9mZjsKKysJCWlmICghb3duaW5nX3Ro cmVhZCkgZmlwc193X3VubG9jaygpOworKwkJfQorKwl9CisrCisraW50IEZJUFNfbW9kdWxlX21v ZGUodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBz X2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCWlm ICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKKysJCXJldCA9IGZpcHNfbW9kZTsKKysJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwkJfQorKwlyZXR1cm4gcmV0 OworKwl9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCisrICAgIHsKKysgICAg aW50IHJldCA9IDA7CisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpCisrCXsKKysJaW50IG93bmluZ190 aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKCFvd25pbmdfdGhyZWFk KSBmaXBzX3JfbG9jaygpOworKwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7CisrCWlmICghb3du aW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwl9CisrICAgIHJldHVybiByZXQ7CisrICAg IH0KKysKKysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxs IGJlIGNhbGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQg aGFzIHRoZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBh IHBlcmZvcm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9p ZCkKKysgICAgeworKyAgICBpZiAoZmlwc19zZWxmdGVzdF9mYWlsKQorKwl7CisrCU9wZW5TU0xE aWUoX19GSUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsKKysJ fQorKyAgICB9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisrICAgIHsK KysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgfQorKworKy8qIHdlIGltcGxlbWVu dCB3aGF0IGxpYmZpcHNjaGVjayBkb2VzIG91cnNlbHZlcyAqLworKworK3N0YXRpYyBpbnQKKytn ZXRfbGlicmFyeV9wYXRoKGNvbnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJvbG5h bWUsIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKQorK3sKKysJRGxfaW5mbyBpbmZvOworKwl2 b2lkICpkbCwgKnN5bTsKKysJaW50IHJ2ID0gLTE7CisrCisrICAgICAgICBkbCA9IGRsb3Blbihs aWJuYW1lLCBSVExEX0xBWlkpOworKyAgICAgICAgaWYgKGRsID09IE5VTEwpIHsKKysJICAgICAg ICByZXR1cm4gLTE7CisrICAgICAgICB9ICAgICAgIAorKworKwlzeW0gPSBkbHN5bShkbCwgc3lt Ym9sbmFtZSk7CisrCisrCWlmIChzeW0gIT0gTlVMTCAmJiBkbGFkZHIoc3ltLCAmaW5mbykpIHsK KysJCXN0cm5jcHkocGF0aCwgaW5mby5kbGlfZm5hbWUsIHBhdGhsZW4tMSk7CisrCQlwYXRoW3Bh dGhsZW4tMV0gPSAnXDAnOworKwkJcnYgPSAwOworKwl9CisrCisrCWRsY2xvc2UoZGwpOwkKKysJ CisrCXJldHVybiBydjsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgY29udltdID0gIjAxMjM0 NTY3ODlhYmNkZWYiOworKworK3N0YXRpYyBjaGFyICoKKytiaW4yaGV4KHZvaWQgKmJ1Ziwgc2l6 ZV90IGxlbikKKyt7CisrCWNoYXIgKmhleCwgKnA7CisrCXVuc2lnbmVkIGNoYXIgKnNyYyA9IGJ1 ZjsKKysJCisrCWhleCA9IG1hbGxvYyhsZW4gKiAyICsgMSk7CisrCWlmIChoZXggPT0gTlVMTCkK KysJCXJldHVybiBOVUxMOworKworKwlwID0gaGV4OworKworKwl3aGlsZSAobGVuID4gMCkgewor KwkJdW5zaWduZWQgYzsKKysKKysJCWMgPSAqc3JjOworKwkJc3JjKys7CisrCisrCQkqcCA9IGNv bnZbYyA+PiA0XTsKKysJCSsrcDsKKysJCSpwID0gY29udltjICYgMHgwZl07CisrCQkrK3A7Cisr CQktLWxlbjsKKysJfQorKwkqcCA9ICdcMCc7CisrCXJldHVybiBoZXg7CisrfQorKworKyNkZWZp bmUgSE1BQ19QUkVGSVggIi4iIAorKyNkZWZpbmUgSE1BQ19TVUZGSVggIi5obWFjIiAKKysjZGVm aW5lIFJFQURfQlVGRkVSX0xFTkdUSCAxNjM4NAorKworK3N0YXRpYyBjaGFyICoKKyttYWtlX2ht YWNfcGF0aChjb25zdCBjaGFyICpvcmlncGF0aCkKKyt7CisrCWNoYXIgKnBhdGgsICpwOworKwlj b25zdCBjaGFyICpmbjsKKysKKysJcGF0aCA9IG1hbGxvYyhzaXplb2YoSE1BQ19QUkVGSVgpICsg c2l6ZW9mKEhNQUNfU1VGRklYKSArIHN0cmxlbihvcmlncGF0aCkpOworKwlpZihwYXRoID09IE5V TEwpIHsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCWZuID0gc3RycmNocihvcmlncGF0aCwg Jy8nKTsKKysJaWYgKGZuID09IE5VTEwpIHsKKysJCWZuID0gb3JpZ3BhdGg7CisrCX0gZWxzZSB7 CisrCQkrK2ZuOworKwl9CisrCisrCXN0cm5jcHkocGF0aCwgb3JpZ3BhdGgsIGZuLW9yaWdwYXRo KTsKKysJcCA9IHBhdGggKyAoZm4gLSBvcmlncGF0aCk7CisrCXAgPSBzdHBjcHkocCwgSE1BQ19Q UkVGSVgpOworKwlwID0gc3RwY3B5KHAsIGZuKTsKKysJcCA9IHN0cGNweShwLCBITUFDX1NVRkZJ WCk7CisrCisrCXJldHVybiBwYXRoOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciBobWFja2V5 W10gPSAib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOworKworK3N0YXRpYyBpbnQK Kytjb21wdXRlX2ZpbGVfaG1hYyhjb25zdCBjaGFyICpwYXRoLCB2b2lkICoqYnVmLCBzaXplX3Qg KmhtYWNsZW4pCisreworKwlGSUxFICpmID0gTlVMTDsKKysJaW50IHJ2ID0gLTE7CisrCXVuc2ln bmVkIGNoYXIgcmJ1ZltSRUFEX0JVRkZFUl9MRU5HVEhdOworKwlzaXplX3QgbGVuOworKwl1bnNp Z25lZCBpbnQgaGxlbjsKKysJSE1BQ19DVFggYzsKKysKKysJSE1BQ19DVFhfaW5pdCgmYyk7Cisr CisrCWYgPSBmb3BlbihwYXRoLCAiciIpOworKworKwlpZiAoZiA9PSBOVUxMKSB7CisrCQlnb3Rv IGVuZDsKKysJfQorKworKwlITUFDX0luaXQoJmMsIGhtYWNrZXksIHNpemVvZihobWFja2V5KS0x LCBFVlBfc2hhMjU2KCkpOworKworKwl3aGlsZSAoKGxlbj1mcmVhZChyYnVmLCAxLCBzaXplb2Yo cmJ1ZiksIGYpKSAhPSAwKSB7CisrCQlITUFDX1VwZGF0ZSgmYywgcmJ1ZiwgbGVuKTsKKysJfQor KworKwlsZW4gPSBzaXplb2YocmJ1Zik7CisrCS8qIHJldXNlIHJidWYgZm9yIGhtYWMgKi8KKysJ SE1BQ19GaW5hbCgmYywgcmJ1ZiwgJmhsZW4pOworKworKwkqYnVmID0gbWFsbG9jKGhsZW4pOwor KwlpZiAoKmJ1ZiA9PSBOVUxMKSB7CisrCQlnb3RvIGVuZDsKKysJfQorKworKwkqaG1hY2xlbiA9 IGhsZW47CisrCisrCW1lbWNweSgqYnVmLCByYnVmLCBobGVuKTsKKysKKysJcnYgPSAwOworK2Vu ZDoKKysJSE1BQ19DVFhfY2xlYW51cCgmYyk7CisrCisrCWlmIChmKQorKwkJZmNsb3NlKGYpOwor KworKwlyZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBpbnQKKytGSVBTQ0hFQ0tfdmVyaWZ5KGNv bnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpCisreworKwljaGFyIHBh dGhbUEFUSF9NQVgrMV07CisrCWludCBydjsKKysJRklMRSAqaGY7CisrCWNoYXIgKmhtYWNwYXRo LCAqcDsKKysJY2hhciAqaG1hYyA9IE5VTEw7CisrCXNpemVfdCBuOworKwkKKysJcnYgPSBnZXRf bGlicmFyeV9wYXRoKGxpYm5hbWUsIHN5bWJvbG5hbWUsIHBhdGgsIHNpemVvZihwYXRoKSk7Cisr CisrCWlmIChydiA8IDApCisrCQlyZXR1cm4gMDsKKysKKysJaG1hY3BhdGggPSBtYWtlX2htYWNf cGF0aChwYXRoKTsKKysJaWYgKGhtYWNwYXRoID09IE5VTEwpCisrCQlyZXR1cm4gMDsKKysKKysJ aGYgPSBmb3BlbihobWFjcGF0aCwgInIiKTsKKysJaWYgKGhmID09IE5VTEwpIHsKKysJCWZyZWUo aG1hY3BhdGgpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJaWYgKGdldGxpbmUoJmhtYWMsICZu LCBoZikgPiAwKSB7CisrCQl2b2lkICpidWY7CisrCQlzaXplX3QgaG1hY2xlbjsKKysJCWNoYXIg KmhleDsKKysKKysJCWlmICgocD1zdHJjaHIoaG1hYywgJ1xuJykpICE9IE5VTEwpCisrCQkJKnAg PSAnXDAnOworKworKwkJaWYgKGNvbXB1dGVfZmlsZV9obWFjKHBhdGgsICZidWYsICZobWFjbGVu KSA8IDApIHsKKysJCQlydiA9IC00OworKwkJCWdvdG8gZW5kOworKwkJfQorKworKwkJaWYgKCho ZXg9YmluMmhleChidWYsIGhtYWNsZW4pKSA9PSBOVUxMKSB7CisrCQkJZnJlZShidWYpOworKwkJ CXJ2ID0gLTU7CisrCQkJZ290byBlbmQ7CisrCQl9CisrCisrCQlpZiAoc3RyY21wKGhleCwgaG1h YykgIT0gMCkgeworKwkJCXJ2ID0gLTE7CisrCQl9CisrCQlmcmVlKGJ1Zik7CisrCQlmcmVlKGhl eCk7CisrCX0gZWxzZSB7CisrCQlydiA9IC0xOworKwl9CisrCisrZW5kOgorKwlmcmVlKGhtYWMp OworKwlmcmVlKGhtYWNwYXRoKTsKKysJZmNsb3NlKGhmKTsKKysKKysJaWYgKHJ2IDwgMCkKKysJ CXJldHVybiAwOworKworKwkvKiBjaGVjayBzdWNjZXNzZnVsICovCisrCXJldHVybiAxOwkKKyt9 CisrCisraW50IEZJUFNfbW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0 aCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgZmlwc193X2xvY2soKTsKKysg ICAgZmlwc19zdGFydGVkID0gMTsKKysgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOworKwor KyAgICBpZihvbm9mZikKKysJeworKworKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKworKwkv KiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21h Z2ljCisrCSAgIHNlZWRpbmcgKi8KKysJaWYoRklQU19tb2R1bGVfbW9kZSgpKQorKwkgICAgewor KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJUFNfTU9E RV9BTFJFQURZX1NFVCk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0 ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKworKyNpZmRlZiBPUEVOU1NMX0lBMzJf U1NFMgorKwl7CisrCWV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07Cisr CWlmICgoT1BFTlNTTF9pYTMyY2FwX1BbMF0gJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8 MjYpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQs RklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKTsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9 IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCU9QRU5TU0xf aWEzMmNhcF9QWzBdIHw9ICgxPDwyOCk7CS8qIHNldCAic2hhcmVkIGNhY2hlIgkqLworKwlPUEVO U1NMX2lhMzJjYXBfUFsxXSAmPSB+KDE8PCg2MC0zMikpOwkvKiBjbGVhciBBVlgJCSovCisrCX0K KysjZW5kaWYKKysKKysJaWYoIUZJUFNDSEVDS192ZXJpZnkoImxpYmNyeXB0by5zby4iIFNITElC X1ZFUlNJT05fTlVNQkVSLCJGSVBTX21vZGVfc2V0IikpCisrCSAgICB7CisrCSAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1Rf TUFUQ0gpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7Cisr CSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysJaWYoIUZJUFNDSEVDS192ZXJpZnkoImxpYnNz bC5zby4iIFNITElCX1ZFUlNJT05fTlVNQkVSLCJTU0xfQ1RYX25ldyIpKQorKwkgICAgeworKwkg ICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5U X0RPRVNfTk9UX01BVENIKTsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICBy ZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCWlmKEZJUFNfc2VsZnRlc3Qo KSkKKysJICAgIGZpcHNfc2V0X21vZGUob25vZmYpOworKwllbHNlCisrCSAgICB7CisrCSAgICBm aXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOwor KwkgICAgfQorKwlyZXQgPSAxOworKwlnb3RvIGVuZDsKKysJfQorKyAgICBmaXBzX3NldF9tb2Rl KDApOworKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKyAgICByZXQgPSAxOworK2VuZDoK KysgICAgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKCk7CisrICAgIGZpcHNfd191bmxvY2soKTsK KysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKworK3N0YXRpYyBDUllQVE9fVEhSRUFESUQgZmlw c190aHJlYWQ7Cisrc3RhdGljIGludCBmaXBzX3RocmVhZF9zZXQgPSAwOworKworK3N0YXRpYyBp bnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisr CWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJ UFMyKTsKKysJCWlmIChmaXBzX3RocmVhZF9zZXQpCisrCQkJeworKwkJCUNSWVBUT19USFJFQURJ RCBjdXI7CisrCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7CisrCQkJaWYgKCFDUllQ VE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVhZCkpCisrCQkJCXJldCA9IDE7CisrCQkJ fQorKwkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJu IHJldDsKKysJfQorKworK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJ aW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmICghZmlwc190aHJlYWRfc2V0KQorKwkJCXsK KysJCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmZmlwc190aHJlYWQpOworKwkJCXJldCA9IDE7 CisrCQkJZmlwc190aHJlYWRfc2V0ID0gMTsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNf Y2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAo Zmlwc19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7 CisrCQlpZiAoZmlwc190aHJlYWRfc2V0KQorKwkJCXsKKysJCQlDUllQVE9fVEhSRUFESUQgY3Vy OworKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOworKwkJCWlmICghQ1JZUFRPX1RI UkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQorKwkJCQlmaXBzX3RocmVhZF9zZXQgPSAw OworKwkJCX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9Cisr CXJldHVybiByZXQ7CisrCX0KKysKKysKKysjaWYgMAorKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMg aXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCisrICog bmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVpZXQKKysgKi8KKyt2 b2lkIGhhc2hfZmluYWwodm9pZCkKKysJeworKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJ UFNfUl9OT05fRklQU19NRVRIT0QpOworKwl9CisrI2VuZGlmCisrCisrCisrI2VuZGlmCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCistLS0gb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDE0LTA1 LTA2IDE2OjI5OjUwLjU0NjkyMzIyNCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ2OTIzMjI0ICsw MjAwCitAQCAtMCwwICsxLDE2MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNp bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgorKyNpbmNsdWRlICJm aXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3Qgewor KwlpbnQgbmlkOworKwljb25zdCB1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5HVEhd OyBzaXplX3Qga2V5c2l6ZTsKKysJY29uc3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOyBzaXplX3Qg bXNnc2l6ZTsKKysJY29uc3QgdW5zaWduZWQgY2hhciBtYWNbMzJdOyBzaXplX3QgbWFjc2l6ZTsK Kyt9IENNQUNfS0FUOworKworKy8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRp b25zL25pc3RwdWJzLzgwMC0zOEIvU1BfODAwLTM4Qi5wZGYgKi8KKytzdGF0aWMgY29uc3QgQ01B Q19LQVQgdmVjdG9yW10gPSB7CisrICAgIHsJTklEX2Flc18xMjhfY2JjLAkvKiBDb3VudCA9IDMy IGZyb20gQ01BQ0dlbkFFUzEyOC50eHQgKi8KKysJeyAweDc3LDB4YTcsMHg3ZiwweGFmLCAweDI5 LDB4MGMsMHgxZiwweGEzLAorKwkgIDB4MGMsMHg2OCwweDNkLDB4ZjEsIDB4NmIsMHhhNywweGE3 LDB4N2IsIH0sIDEyOCwKKysJeyAweDAyLDB4MDYsMHg4MywweGUxLCAweGYwLDB4MzksMHgyZiww eDRjLAorKwkgIDB4YWMsMHg1NCwweDMxLDB4OGIsIDB4NjAsMHgyOSwweDI1LDB4OWUsCisrCSAg MHg5YywweDU1LDB4M2QsMHhiYywgMHg0YiwweDZhLDB4ZDksMHg5OCwKKysJICAweGU2LDB4NGQs MHg1OCwweGU0LCAweGU3LDB4ZGMsMHgyZSwweDEzLCB9LCAyNTYsCisrCXsgMHhmYiwweGZlLDB4 YTQsMHgxYiwgfSwgMzIKKysgICAgfSwKKysgICAgewlOSURfYWVzXzE5Ml9jYmMsCS8qIENvdW50 ID0gMjMgZnJvbSBDTUFDR2VuQUVTMTkyLnR4dCAqLworKwl7IDB4N2IsMHgzMiwweDM5LDB4MTMs IDB4NjksMHhhYSwweDRjLDB4YTksCisrCSAgMHg3NSwweDU4LDB4MDksMHg1YiwgMHhlMywweGMz LDB4ZWMsMHg4NiwKKysJICAweDJiLDB4ZDAsMHg1NywweGNlLCAweGYxLDB4ZTMsMHgyZCwweDYy LCB9LCAxOTIsCisrCXsgMHgwIH0sIDAsCisrCXsgMHhlNCwweGQ5LDB4MzQsMHgwYiwgMHgwMyww eGU2LDB4N2QsMHhlZiwKKysJICAweGQ0LDB4OTYsMHg5YywweGMxLCAweGVkLDB4MzcsMHgzNSww eGU2LCB9LCAxMjgsCisrICAgIH0sCisrICAgIHsJTklEX2Flc18yNTZfY2JjLAkvKiBDb3VudCA9 IDMzIGZyb20gQ01BQ0dlbkFFUzI1Ni50eHQgKi8KKysJeyAweDBiLDB4MTIsMHgyYSwweGM4LCAw eGYzLDB4NGUsMHhkMSwweGZlLAorKwkgIDB4MDgsMHgyYSwweDM2LDB4MjUsIDB4ZDEsMHg1Nyww eDU2LDB4MTQsCisrCSAgMHg1NCwweDE2LDB4N2EsMHhjMSwgMHg0NSwweGExLDB4MGIsMHhiZiwK KysJICAweDc3LDB4YzYsMHhhNywweDA1LCAweDk2LDB4ZDUsMHg3NCwweGYxLCB9LCAyNTYsCisr CXsgMHg0OSwweDhiLDB4NTMsMHhmZCwgMHhlYywweDg3LDB4ZWQsMHhjYiwKKysJICAweGYwLDB4 NzAsMHg5NywweGRjLCAweGNkLDB4ZTksMHgzYSwweDA4LAorKwkgIDB4NGIsMHhhZCwweDc1LDB4 MDEsIDB4YTIsMHgyNCwweGUzLDB4ODgsCisrCSAgMHhkZiwweDM0LDB4OWMsMHhlMSwgMHg4OSww eDU5LDB4ZmUsMHg4NCwKKysJICAweDg1LDB4ZjgsMHhhZCwweDE1LCAweDM3LDB4ZjAsMHhkOCww eDk2LAorKwkgIDB4ZWEsMHg3MywweGJlLDB4ZGMsIDB4NzIsMHgxNCwweDcxLDB4M2YsIH0sIDM4 NCwKKysJeyAweGY2LDB4MmMsMHg0NiwweDMyLCAweDliLCB9LCA0MCwKKysgICAgfSwKKysgICAg ewlOSURfZGVzX2VkZTNfY2JjLAkvKiBDb3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJlcSAq LworKwl7IDB4ODksMHhiYywweGQ5LDB4NTIsIDB4YTgsMHhjOCwweGFiLDB4MzcsCisrCSAgMHgx YSwweGY0LDB4OGEsMHhjNywgMHhkMCwweDcwLDB4ODUsMHhkNSwKKysJICAweGVmLDB4ZjcsMHgw MiwweGU2LCAweGQ2LDB4MmMsMHhkYywweDIzLCB9LCAxOTIsCisrCXsgMHhmYSwweDYyLDB4MGMs MHgxYiwgMHhiZSwweDk3LDB4MzEsMHg5ZSwKKysJICAweDlhLDB4MGMsMHhmMCwweDQ5LCAweDIx LDB4MjEsMHhmNywweGEyLAorKwkgIDB4MGUsMHhiMCwweDhhLDB4NmEsIDB4NzAsMHg5ZCwweGNi LDB4ZDAsCisrCSAgMHgwYSwweGFmLDB4MzgsMHhlNCwgMHhmOSwweDllLDB4NzUsMHg0ZSwgfSwg MjU2LAorKwl7IDB4OGYsMHg0OSwweGExLDB4YjcsIDB4ZDYsMHhhYSwweDIyLDB4NTgsIH0sIDY0 LAorKyAgICB9LAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfY21hYygpCisrCXsKKysJc2l6 ZV90IG4sIG91dGxlbjsKKysJdW5zaWduZWQgY2hhciAgICBvdXRbMzJdOworKwljb25zdCBFVlBf Q0lQSEVSICpjaXBoZXI7CisrCUNNQUNfQ1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKKysJY29u c3QgQ01BQ19LQVQgKnQ7CisrCWludCBydiA9IDE7CisrCisrCWZvcihuPTAsdD12ZWN0b3I7IG48 c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCisrCQl7CisrCQljaXBo ZXIgPSBGSVBTX2dldF9jaXBoZXJieW5pZCh0LT5uaWQpOworKwkJaWYgKCFjaXBoZXIpCisrCQkJ eworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJaWYgKCFDTUFDX0luaXQo Y3R4LCB0LT5rZXksIHQtPmtleXNpemUvOCwgY2lwaGVyLCAwKSkKKysJCQl7CisrCQkJcnYgPSAt MTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQlpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+bXNn LCB0LT5tc2dzaXplLzgpKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJ CX0KKysJCQkKKysJCWlmICghQ01BQ19GaW5hbChjdHgsIG91dCwgJm91dGxlbikpCisrCQkJewor KwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJQ01BQ19DVFhfY2xlYW51cChj dHgpOworKworKwkJaWYob3V0bGVuIDwgdC0+bWFjc2l6ZS84IHx8IG1lbWNtcChvdXQsdC0+bWFj LHQtPm1hY3NpemUvOCkpCisrCQkJeworKwkJICAgIAlydiA9IDA7CisrCQkgICAgCX0KKysJCX0K KysKKysJZXJyOgorKwlDTUFDX0NUWF9mcmVlKGN0eCk7CisrCisrCWlmIChydiA9PSAtMSkKKysJ CXsKKysJCXJ2ID0gMDsKKysJCX0KKysJaWYgKCFydikKKysJCSAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfU0VMRlRFU1RfQ01BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysKKysJcmV0dXJuIHJ2 OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBz X2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kZXNf c2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0 ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NjkyMzIyNCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxNC0wNS0wNiAxNjoy OTo1MC41NDY5MjMyMjQgKzAyMDAKK0BAIC0wLDAgKzEsMTQ3IEBACisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3Bl bnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHN0 cnVjdAorKyAgICB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgY29u c3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg Y2lwaGVydGV4dFs4XTsKKysgICAgfSB0ZXN0czJbXT0KKysJeworKwl7CisrCXsgMHg3YywweDRm LDB4NmUsMHhmNywweGEyLDB4MDQsMHgxNiwweGVjLAorKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUs MHg1ZSwweDE5LDB4YTcsMHhjNCB9LAorKwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNl LDB4NjksMHhlZiB9LAorKwl7IDB4NGMsMHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhm ZCB9CisrCX0sCisrCXsKKysJeyAweDVkLDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4 MzQsCisrCSAgMHgwMSwweDE2LDB4N2MsMHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCisrCXsg MHg5YywweDUwLDB4MDksMHgwZiwweDVlLDB4N2QsMHg2OSwweDdlIH0sCisrCXsgMHhkMiwweDBi LDB4MTgsMHhkZiwweGQ5LDB4MGQsMHg5ZSwweGZmIH0sCisrCX0KKysJfTsKKysKKytzdGF0aWMg Y29uc3Qgc3RydWN0CisrICAgIHsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMjRdOwor KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzM1tdPQorKwl7CisrCXsKKysJeyAw eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCSAgMHhGRSwweERDLDB4 QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAorKwkgIDB4MTIsMHgzNCwweDU2LDB4NzgsMHg5 YSwweGJjLDB4ZGUsMHhmMCB9LAorKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1ZCwweDQ4LDB4 YjQsMHgxYyB9LAorKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEyLDB4ZWEsMHgxYiB9 LAorKwl9LAorKwl7CisrCXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwweEZF LAorKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKKysJICAweEVE LDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKKysJeyAweDAxLDB4MjMsMHg0 NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKKysJeyAweDExLDB4MjUsMHhiMCwweDM1LDB4 YmUsMHhhMCwweDgyLDB4ODYgfSwKKysJfSwKKysJfTsKKysKKysKKytzdGF0aWMgaW50IGNvcnJ1 cHRfZGVzOworKworK3ZvaWQgRklQU19jb3JydXB0X2RlcygpCisrICAgIHsKKysgICAgY29ycnVw dF9kZXMgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKysgICAgewor KyAgICBpbnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBf Q0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtl eSAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49MCA7IG4g PCAyIDsgKytuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKworKwltZW1j cHkocGxhaW50ZXh0LCB0ZXN0czJbbl0ucGxhaW50ZXh0LCBzaXplb2YocGxhaW50ZXh0KSk7Cisr CWlmIChjb3JydXB0X2RlcykKKysJCXBsYWludGV4dFswXSsrOworKwlpZiAoIWZpcHNfY2lwaGVy X3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCisrCQkJCXRlc3RzMltuXS5rZXksIE5VTEws CisrCQkJCXBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7 CisrCX0KKysKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0 byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwlp ZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKwkJCQl0ZXN0 czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lw aGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6 CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkK KysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOworKworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcyBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NjkyMzIy NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYwky MDE0LTA1LTA2IDE2OjI5OjUwLjU0NjkyMzIyNCArMDIwMAorQEAgLTAsMCArMSw0MzYgQEAKKysv KiBmaXBzL3JhbmQvZmlwc19kcmJnX2N0ci5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVu IE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVj dC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVk ZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworK3N0YXRpYyB2b2lk IGluY18xMjgoRFJCR19DVFJfQ1RYICpjY3R4KQorKwl7CisrCWludCBpOworKwl1bnNpZ25lZCBj aGFyIGM7CisrCXVuc2lnbmVkIGNoYXIgKnAgPSBjY3R4LT5WICsgMTU7CisrCWZvciAoaSA9IDA7 IGkgPCAxNjsgaSsrKQorKwkJeworKwkJYyA9ICpwOworKwkJYysrOworKwkJKnAgPSBjOworKwkJ aWYgKGMpCisrCQkJcmV0dXJuOworKwkJcC0tOworKwkJfQorKwl9CisrCisrc3RhdGljIHZvaWQg Y3RyX1hPUihEUkJHX0NUUl9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXpl X3QgaW5sZW4pCisrCXsKKysJc2l6ZV90IGksIG47CisrCS8qIEFueSB6ZXJvIHBhZGRpbmcgd2ls bCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcmVzdWx0IGFzIHdlCisrCSAqIGFyZSBYT1JpbmcuIFNv IGp1c3QgcHJvY2VzcyBob3dldmVyIG11Y2ggaW5wdXQgd2UgaGF2ZS4KKysJICovCisrCisrCWlm ICghaW4gfHwgIWlubGVuKQorKwkJcmV0dXJuOworKworKwlpZiAoaW5sZW4gPCBjY3R4LT5rZXls ZW4pCisrCQluID0gaW5sZW47CisrCWVsc2UKKysJCW4gPSBjY3R4LT5rZXlsZW47CisrCisrCWZv ciAoaSA9IDA7IGkgPCBuOyBpKyspCisrCQljY3R4LT5LW2ldIF49IGluW2ldOworKwlpZiAoaW5s ZW4gPD0gY2N0eC0+a2V5bGVuKQorKwkJcmV0dXJuOworKworKwluID0gaW5sZW4gLSBjY3R4LT5r ZXlsZW47CisrCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKysJaWYgKG4gPiAxNikKKysJCW4g PSAxNjsKKysJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrCQljY3R4LT5WW2ldIF49IGluW2kg KyBjY3R4LT5rZXlsZW5dOworKwl9CisrCisrLyogUHJvY2VzcyBhIGNvbXBsZXRlIGJsb2NrIHVz aW5nIEJDQyBhbGdvcml0aG0gb2YgU1BQIDgwMC05MCAxMC40LjMgKi8KKysKKytzdGF0aWMgdm9p ZCBjdHJfQkNDX2Jsb2NrKERSQkdfQ1RSX0NUWCAqY2N0eCwgdW5zaWduZWQgY2hhciAqb3V0LAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbikKKysJeworKwlpbnQgaTsKKysJZm9yIChpID0g MDsgaSA8IDE2OyBpKyspCisrCQlvdXRbaV0gXj0gaW5baV07CisrCUFFU19lbmNyeXB0KG91dCwg b3V0LCAmY2N0eC0+ZGZfa3MpOworKyNpZiAwCisrZnByaW50ZihzdGRlcnIsICJCQ0MgaW4rb3V0 XG4iKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGluLCAxNik7CisrQklPX2R1bXBfZnAoc3RkZXJy LCBvdXQsIDE2KTsKKysjZW5kaWYKKysJfQorKworKy8qIEhhbmRsZSBzZXZlcmFsIEJDQyBvcGVy YXRpb25zIGZvciBhcyBtdWNoIGRhdGEgYXMgd2UgbmVlZCBmb3IgSyBhbmQgWCAqLworK3N0YXRp YyB2b2lkIGN0cl9CQ0NfYmxvY2tzKERSQkdfQ1RSX0NUWCAqY2N0eCwgY29uc3QgdW5zaWduZWQg Y2hhciAqaW4pCisrCXsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgaW4pOworKwlj dHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMTYsIGluKTsKKysJaWYgKGNjdHgtPmtleWxl biAhPSAxNikKKysJCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAzMiwgaW4pOworKwl9 CisrLyogSW5pdGlhbGlzZSBCQ0MgYmxvY2tzOiB0aGVzZSBoYXZlIHRoZSB2YWx1ZSAwLDEsMiBp biBsZWZ0bW9zdCBwb3NpdGlvbnM6CisrICogc2VlIDEwLjQuMiBzdGFnZSA3LgorKyAqLworK3N0 YXRpYyB2b2lkIGN0cl9CQ0NfaW5pdChEUkJHX0NUUl9DVFggKmNjdHgpCisrCXsKKysJbWVtc2V0 KGNjdHgtPktYLCAwLCA0OCk7CisrCW1lbXNldChjY3R4LT5ibHRtcCwgMCwgMTYpOworKwljdHJf QkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYLCBjY3R4LT5ibHRtcCk7CisrCWNjdHgtPmJsdG1wWzNd ID0gMTsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBjY3R4LT5ibHRtcCk7 CisrCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQl7CisrCQljY3R4LT5ibHRtcFszXSA9IDI7 CisrCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsKKysJ CX0KKysJfQorKworKy8qIFByb2Nlc3Mgc2V2ZXJhbCBibG9ja3MgaW50byBCQ0MgYWxnb3JpdGht LCBzb21lIHBvc3NpYmx5IHBhcnRpYWwgKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX3VwZGF0ZShE UkJHX0NUUl9DVFggKmNjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3Qg aW5sZW4pCisrCXsKKysJaWYgKCFpbiB8fCAhaW5sZW4pCisrCQlyZXR1cm47CisrCS8qIElmIHdl IGhhdmUgcGFydGlhbCBibG9jayBoYW5kbGUgaXQgZmlyc3QgKi8KKysJaWYgKGNjdHgtPmJsdG1w X3BvcykKKysJCXsKKysJCXNpemVfdCBsZWZ0ID0gMTYgLSBjY3R4LT5ibHRtcF9wb3M7CisrCQkv KiBJZiB3ZSBub3cgaGF2ZSBhIGNvbXBsZXRlIGJsb2NrIHByb2Nlc3MgaXQgKi8KKysJCWlmIChp bmxlbiA+PSBsZWZ0KQorKwkJCXsKKysJCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRt cF9wb3MsIGluLCBsZWZ0KTsKKysJCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7 CisrCQkJY2N0eC0+Ymx0bXBfcG9zID0gMDsKKysJCQlpbmxlbiAtPSBsZWZ0OworKwkJCWluICs9 IGxlZnQ7CisrCQkJfQorKwkJfQorKwkvKiBQcm9jZXNzIHplcm8gb3IgbW9yZSBjb21wbGV0ZSBi bG9ja3MgKi8KKysJd2hpbGUgKGlubGVuID49IDE2KQorKwkJeworKwkJY3RyX0JDQ19ibG9ja3Mo Y2N0eCwgaW4pOworKwkJaW4gKz0gMTY7CisrCQlpbmxlbiAtPSAxNjsKKysJCX0KKysJLyogQ29w eSBhbnkgcmVtYWluaW5nIHBhcnRpYWwgYmxvY2sgdG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8K KysJaWYgKGlubGVuID4gMCkKKysJCXsKKysJCW1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJs dG1wX3BvcywgaW4sIGlubGVuKTsKKysJCWNjdHgtPmJsdG1wX3BvcyArPSBpbmxlbjsKKysJCX0K KysJfQorKworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfZmluYWwoRFJCR19DVFJfQ1RYICpjY3R4KQor Kwl7CisrCWlmIChjY3R4LT5ibHRtcF9wb3MpCisrCQl7CisrCQltZW1zZXQoY2N0eC0+Ymx0bXAg KyBjY3R4LT5ibHRtcF9wb3MsIDAsIDE2IC0gY2N0eC0+Ymx0bXBfcG9zKTsKKysJCWN0cl9CQ0Nf YmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKKysJCX0KKysJfQorKworK3N0YXRpYyB2b2lkIGN0 cl9kZihEUkJHX0NUUl9DVFggKmNjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBz aXplX3QgaW4xbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxl biwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4pCisrCXsKKysJ c2l6ZV90IGlubGVuOworKwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+Ymx0bXA7CisrCXN0YXRp YyB1bnNpZ25lZCBjaGFyIGM4MCA9IDB4ODA7CisrCisrCWN0cl9CQ0NfaW5pdChjY3R4KTsKKysJ aWYgKCFpbjEpCisrCQlpbjFsZW4gPSAwOworKwlpZiAoIWluMikKKysJCWluMmxlbiA9IDA7Cisr CWlmICghaW4zKQorKwkJaW4zbGVuID0gMDsKKysJaW5sZW4gPSBpbjFsZW4gKyBpbjJsZW4gKyBp bjNsZW47CisrCS8qIEluaXRpYWxpc2UgTHx8TiBpbiB0ZW1wb3JhcnkgYmxvY2sgKi8KKysJKnAr KyA9IChpbmxlbiA+PiAyNCkgJiAweGZmOworKwkqcCsrID0gKGlubGVuID4+IDE2KSAmIDB4ZmY7 CisrCSpwKysgPSAoaW5sZW4gPj4gOCkgJiAweGZmOworKwkqcCsrID0gaW5sZW4gJiAweGZmOwor KwkvKiBOQiBrZXlsZW4gaXMgYXQgbW9zdCAzMiBieXRlcyAqLworKwkqcCsrID0gMDsKKysJKnAr KyA9IDA7CisrCSpwKysgPSAwOworKwkqcCA9ICh1bnNpZ25lZCBjaGFyKSgoY2N0eC0+a2V5bGVu ICsgMTYpICYgMHhmZik7CisrCWNjdHgtPmJsdG1wX3BvcyA9IDg7CisrCWN0cl9CQ0NfdXBkYXRl KGNjdHgsIGluMSwgaW4xbGVuKTsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4yLCBpbjJsZW4p OworKwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjMsIGluM2xlbik7CisrCWN0cl9CQ0NfdXBkYXRl KGNjdHgsICZjODAsIDEpOworKwljdHJfQkNDX2ZpbmFsKGNjdHgpOworKwkvKiBTZXQgdXAga2V5 IEsgKi8KKysJQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICogOCwg JmNjdHgtPmRmX2t4a3MpOworKwkvKiBYIGZvbGxvd3Mga2V5IEsgKi8KKysJQUVTX2VuY3J5cHQo Y2N0eC0+S1ggKyBjY3R4LT5rZXlsZW4sIGNjdHgtPktYLCAmY2N0eC0+ZGZfa3hrcyk7CisrCUFF U19lbmNyeXB0KGNjdHgtPktYLCBjY3R4LT5LWCArIDE2LCAmY2N0eC0+ZGZfa3hrcyk7CisrCWlm IChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQlBRVNfZW5jcnlwdChjY3R4LT5LWCArIDE2LCBjY3R4 LT5LWCArIDMyLCAmY2N0eC0+ZGZfa3hrcyk7CisrI2lmIDAKKytmcHJpbnRmKHN0ZGVyciwgIk91 dHB1dCBvZiBjdHJfZGY6XG4iKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPktYLCBjY3R4 LT5rZXlsZW4gKyAxNik7CisrI2VuZGlmCisrCX0KKysKKysvKiBOQiB0aGUgbm8tZGYgIFVwZGF0 ZSBpbiBTUDgwMC05MCBzcGVjaWZpZXMgYSBjb25zdGFudCBpbnB1dCBsZW5ndGgKKysgKiBvZiBz ZWVkbGVuLCBob3dldmVyIG90aGVyIHVzZXMgb2YgdGhpcyBhbGdvcml0aG0gcGFkIHRoZSBpbnB1 dCB3aXRoCisrICogemVyb2VzIGlmIG5lY2Vzc2FyeSBhbmQgaGF2ZSB1cCB0byB0d28gcGFyYW1l dGVycyBYT1JlZCB0b2dldGhlciwKKysgKiBoYW5kbGUgYm90aCBjYXNlcyBpbiB0aGlzIGZ1bmN0 aW9uIGluc3RlYWQuCisrICovCisrCisrc3RhdGljIHZvaWQgY3RyX1VwZGF0ZShEUkJHX0NUWCAq ZGN0eCwKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4pCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4 ID0gJmRjdHgtPmQuY3RyOworKwkvKiBrcyBpcyBhbHJlYWR5IHNldHVwIGZvciBjb3JyZWN0IGtl eSAqLworKwlpbmNfMTI4KGNjdHgpOworKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAm Y2N0eC0+a3MpOworKwkvKiBJZiBrZXlsZW4gbG9uZ2VyIHRoYW4gMTI4IGJpdHMgbmVlZCBleHRy YSBlbmNyeXB0ICovCisrCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQl7CisrCQlpbmNfMTI4 KGNjdHgpOworKwkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SyArIDE2LCAmY2N0eC0+a3Mp OworKwkJfQorKwlpbmNfMTI4KGNjdHgpOworKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5W LCAmY2N0eC0+a3MpOworKwkvKiBJZiAxOTIgYml0IGtleSBwYXJ0IG9mIFYgaXMgb24gZW5kIG9m IEsgKi8KKysJaWYgKGNjdHgtPmtleWxlbiA9PSAyNCkKKysJCXsKKysJCW1lbWNweShjY3R4LT5W ICsgOCwgY2N0eC0+ViwgOCk7CisrCQltZW1jcHkoY2N0eC0+ViwgY2N0eC0+SyArIDI0LCA4KTsK KysJCX0KKysKKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQorKwkJ eworKwkJLyogSWYgbm8gaW5wdXQgcmV1c2UgZXhpc3RpbmcgZGVyaXZlZCB2YWx1ZSAqLworKwkJ aWYgKGluMSB8fCBub25jZSB8fCBpbjIpCisrCQkJY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVuLCBu b25jZSwgbm9uY2VsZW4sIGluMiwgaW4ybGVuKTsKKysJCS8qIElmIHRoaXMgYSByZXVzZSBpbnB1 dCBpbjFsZW4gIT0gMCAqLworKwkJaWYgKGluMWxlbikKKysJCQljdHJfWE9SKGNjdHgsIGNjdHgt PktYLCBkY3R4LT5zZWVkbGVuKTsKKysJCX0KKysJZWxzZQorKwkJeworKwkJY3RyX1hPUihjY3R4 LCBpbjEsIGluMWxlbik7CisrCQljdHJfWE9SKGNjdHgsIGluMiwgaW4ybGVuKTsKKysJCX0KKysK KysJQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtz KTsKKysjaWYgMAorK2ZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHVwZGF0ZSBpczpcbiIpOwor K0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+SywgY2N0eC0+a2V5bGVuKTsKKytCSU9fZHVtcF9m cChzdGRlcnIsIGNjdHgtPlYsIDE2KTsKKysjZW5kaWYKKysJfQorKworK3N0YXRpYyBpbnQgZHJi Z19jdHJfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqZW50LCBzaXplX3QgZW50bGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBz aXplX3Qgbm9uY2VsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBl cnNsZW4pCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKwltZW1z ZXQoY2N0eC0+SywgMCwgc2l6ZW9mKGNjdHgtPkspKTsKKysJbWVtc2V0KGNjdHgtPlYsIDAsIHNp emVvZihjY3R4LT5WKSk7CisrCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3Ry ZW5ndGgsICZjY3R4LT5rcyk7CisrCWN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIHBlcnMs IHBlcnNsZW4sIG5vbmNlLCBub25jZWxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGlj IGludCBkcmJnX2N0cl9yZXNlZWQoRFJCR19DVFggKmRjdHgsIAorKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGlu LCBzaXplX3QgYWRpbmxlbikKKysJeworKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBh ZGluLCBhZGlubGVuLCBOVUxMLCAwKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50 IGRyYmdfY3RyX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCXVuc2lnbmVkIGNoYXIgKm91 dCwgc2l6ZV90IG91dGxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3Qg YWRpbmxlbikKKysJeworKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCWlm IChhZGluICYmIGFkaW5sZW4pCisrCQl7CisrCQljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5s ZW4sIE5VTEwsIDAsIE5VTEwsIDApOworKwkJLyogVGhpcyBtZWFucyB3ZSByZXVzZSBkZXJpdmVk IHZhbHVlICovCisrCQlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCisr CQkJeworKwkJCWFkaW4gPSBOVUxMOworKwkJCWFkaW5sZW4gPSAxOworKwkJCX0KKysJCX0KKysJ ZWxzZQorKwkJYWRpbmxlbiA9IDA7CisrCisrCWZvciAoOzspCisrCQl7CisrCQlpbmNfMTI4KGNj dHgpOworKwkJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5s Yl92YWxpZCkKKysJCQl7CisrCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgZGN0eC0+bGIsICZjY3R4 LT5rcyk7CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJ CWlmIChvdXRsZW4gPCAxNikKKysJCQl7CisrCQkJLyogVXNlIEsgYXMgdGVtcCBzcGFjZSBhcyBp dCB3aWxsIGJlIHVwZGF0ZWQgKi8KKysJCQlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAm Y2N0eC0+a3MpOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgY2N0eC0+Sykp CisrCQkJCXJldHVybiAwOworKwkJCW1lbWNweShvdXQsIGNjdHgtPkssIG91dGxlbik7CisrCQkJ YnJlYWs7CisrCQkJfQorKwkJQUVTX2VuY3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3MpOwor KwkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQorKwkJCXJldHVybiAwOwor KwkJb3V0ICs9IDE2OworKwkJb3V0bGVuIC09IDE2OworKwkJaWYgKG91dGxlbiA9PSAwKQorKwkJ CWJyZWFrOworKwkJfQorKworKwljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEws IDAsIE5VTEwsIDApOworKworKwlyZXR1cm4gMTsKKysKKysJfQorKworK3N0YXRpYyBpbnQgZHJi Z19jdHJfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwltZW1zZXQoJmRjdHgt PmQuY3RyLCAwLCBzaXplb2YoRFJCR19DVFJfQ1RYKSk7CisrCXJldHVybiAxOworKwl9CisrCisr aW50IGZpcHNfZHJiZ19jdHJfaW5pdChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlEUkJHX0NUUl9D VFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCisrCXNpemVfdCBrZXlsZW47CisrCisrCXN3aXRj aCAoZGN0eC0+dHlwZSkKKysJCXsKKysJCWNhc2UgTklEX2Flc18xMjhfY3RyOgorKwkJa2V5bGVu ID0gMTY7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY3RyOgorKwkJa2V5bGVu ID0gMjQ7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY3RyOgorKwkJa2V5bGVu ID0gMzI7CisrCQlicmVhazsKKysKKysJCWRlZmF1bHQ6CisrCQlyZXR1cm4gLTI7CisrCQl9Cisr CisrCWRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19jdHJfaW5zdGFudGlhdGU7CisrCWRjdHgtPnJl c2VlZCA9IGRyYmdfY3RyX3Jlc2VlZDsKKysJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2N0cl9nZW5l cmF0ZTsKKysJZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX3VuaW5zdGFudGlhdGU7Cisr CisrCWNjdHgtPmtleWxlbiA9IGtleWxlbjsKKysJZGN0eC0+c3RyZW5ndGggPSBrZXlsZW4gKiA4 OworKwlkY3R4LT5ibG9ja2xlbmd0aCA9IDE2OworKwlkY3R4LT5zZWVkbGVuID0ga2V5bGVuICsg MTY7CisrCisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKKysJCXsK KysJCS8qIGRmIGluaXRpYWxpc2F0aW9uICovCisrCQlzdGF0aWMgdW5zaWduZWQgY2hhciBkZl9r ZXlbMzJdID0KKysJCQl7CisrCQkJMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiww eDA3LAorKwkJCTB4MDgsMHgwOSwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwKKysJCQkw eDEwLDB4MTEsMHgxMiwweDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsCisrCQkJMHgxOCwweDE5LDB4 MWEsMHgxYiwweDFjLDB4MWQsMHgxZSwweDFmIAorKwkJCX07CisrCQkvKiBTZXQga2V5IHNjaGVk dWxlIGZvciBkZl9rZXkgKi8KKysJCUFFU19zZXRfZW5jcnlwdF9rZXkoZGZfa2V5LCBkY3R4LT5z dHJlbmd0aCwgJmNjdHgtPmRmX2tzKTsKKysKKysJCWRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0eC0+ a2V5bGVuOworKwkJZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCQlkY3R4 LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrCQlkY3R4LT5tYXhfbm9uY2Ug PSBEUkJHX01BWF9MRU5HVEg7CisrCQlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsK KysJCWRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKwkJfQorKwllbHNlCisrCQl7 CisrCQlkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnNlZWRsZW47CisrCQlkY3R4LT5tYXhfZW50 cm9weSA9IGRjdHgtPnNlZWRsZW47CisrCQkvKiBOb25jZSBub3QgdXNlZCAqLworKwkJZGN0eC0+ bWluX25vbmNlID0gMDsKKysJCWRjdHgtPm1heF9ub25jZSA9IDA7CisrCQlkY3R4LT5tYXhfcGVy cyA9IGRjdHgtPnNlZWRsZW47CisrCQlkY3R4LT5tYXhfYWRpbiA9IGRjdHgtPnNlZWRsZW47Cisr CQl9CisrCisrCWRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7CisrCWRjdHgtPnJlc2VlZF9pbnRl cnZhbCA9IDE8PDI0OworKworKwlyZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfaGFzaC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDc5MjMyNDggKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTQtMDUt MDYgMTY6Mjk6NTAuNTQ3OTIzMjQ4ICswMjAwCitAQCAtMCwwICsxLDM3OCBAQAorKy8qIGZpcHMv cmFuZC9maXBzX2RyYmdfaGFzaC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVu c29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysg Ki8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjZGVmaW5lIE9QRU5T U0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRf bGNsLmgiCisrCisrLyogVGhpcyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQuMSAqLwor KworK3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQljb25z dCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqaW4zLCBzaXplX3QgaW4zbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluNCwg c2l6ZV90IGluNGxlbikKKysJeworKwlFVlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQuaGFzaC5t Y3R4OworKwl1bnNpZ25lZCBjaGFyICp2dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7CisrCXVuc2ln bmVkIGNoYXIgdG1wWzZdOworKwkvKiBTdGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBi eXRlcyB3aGljaCBpcyBhbHdheXMgbGVzcyB0aGFuCisrCSAqIG1heGltdW0gcGVybWl0dGVkIHNv IG5vIG5lZWQgdG8gY2hlY2sgbGVuZ3RoLgorKwkgKi8KKysJc2l6ZV90IG91dGxlbiA9IGRjdHgt PnNlZWRsZW47CisrCXRtcFswXSA9IDE7CisrCXRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQp ICYgMHhmZjsKKysJdG1wWzJdID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOworKwl0bXBb M10gPSAoKG91dGxlbiAqIDgpID4+IDgpICYgMHhmZjsKKysJdG1wWzRdID0gKG91dGxlbiAqIDgp ICYgMHhmZjsKKysJaWYgKCFpbjEpCisrCQl7CisrCQl0bXBbNV0gPSAodW5zaWduZWQgY2hhcilp bjFsZW47CisrCQlpbjEgPSB0bXAgKyA1OworKwkJaW4xbGVuID0gMTsKKysJCX0KKysJZm9yICg7 OykKKysJCXsKKysJCWlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkp CisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkp CisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBp bjEsIGluMWxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4yICYmICFGSVBTX2RpZ2VzdHVw ZGF0ZShtY3R4LCBpbjIsIGluMmxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4zICYmICFG SVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMsIGluM2xlbikpCisrCQkJcmV0dXJuIDA7CisrCQlp ZiAoaW40ICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCisrCQkJcmV0 dXJuIDA7CisrCQlpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCisrCQkJeworKwkJCWlm ICghRklQU19kaWdlc3RmaW5hbChtY3R4LCB2dG1wLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7Cisr CQkJbWVtY3B5KG91dCwgdnRtcCwgb3V0bGVuKTsKKysJCQlPUEVOU1NMX2NsZWFuc2UodnRtcCwg ZGN0eC0+YmxvY2tsZW5ndGgpOworKwkJCXJldHVybiAxOworKwkJCX0KKysJCWVsc2UgaWYoIUZJ UFNfZGlnZXN0ZmluYWwobWN0eCwgb3V0LCBOVUxMKSkKKysJCQlyZXR1cm4gMDsKKysKKysJCW91 dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCWlmIChvdXRsZW4gPT0gMCkKKysJCQlyZXR1 cm4gMTsKKysJCXRtcFswXSsrOworKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJfQor Kwl9CisrCisrCisrLyogQWRkIGFuIHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBz dG9yaW5nIHRoZSByZXN1bHQgaW4gYnVmLiBGb3IKKysgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVu Z3RoIG9mIGlucHV0IG5ldmVyIGV4Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgorKyAqLworKworK3N0 YXRpYyB2b2lkIGN0eF9hZGRfYnVmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYs CisrCQkJCXVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisrCXsKKysJc2l6ZV90IGkg PSBpbmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqcTsKKysJdW5zaWduZWQgY2hhciBjLCAq cDsKKysJcCA9IGJ1ZiArIGRjdHgtPnNlZWRsZW47CisrCXEgPSBpbiArIGlubGVuOworKworKwlP UEVOU1NMX2Fzc2VydChpIDw9IGRjdHgtPnNlZWRsZW4pOworKworKwkvKiBTcGVjaWFsIGNhc2U6 IHplcm8gbGVuZ3RoLCBqdXN0IGluY3JlbWVudCBidWZmZXIgKi8KKysJaWYgKGkpCisrCQljID0g MDsKKysJZWxzZSAKKysJCWMgPSAxOworKworKwl3aGlsZSAoaSkKKysJCXsKKysJCWludCByOwor KwkJcC0tOworKwkJcS0tOworKwkJciA9ICpwICsgKnEgKyBjOworKwkJLyogQ2FycnkgKi8KKysJ CWlmIChyID4gMHhmZikKKysJCQljID0gMTsKKysJCWVsc2UKKysJCQljID0gMDsKKysJCSpwID0g ciAmIDB4ZmY7CisrCQlpLS07CisrCQl9CisrCisrCWkgPSBkY3R4LT5zZWVkbGVuIC0gaW5sZW47 CisrCisrCS8qIElmIG5vdCBhZGRpbmcgd2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJyaWVz ICovCisrCWlmIChjICYmIGkpCisrCQl7CisrCQlkbworKwkJCXsKKysJCQlwLS07CisrCQkJYyA9 ICpwOworKwkJCWMrKzsKKysJCQkqcCA9IGM7CisrCQkJaWYoYykKKysJCQkJcmV0dXJuOworKwkJ CX0gd2hpbGUoaS0tKTsKKysJCX0KKysJfQorKworKy8qIEZpbmFsaXNlIGFuZCBhZGQgaGFzaCB0 byBWICovCisrCQorK3N0YXRpYyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKKysJewor KwlpZiAoIUZJUFNfZGlnZXN0ZmluYWwoJmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhhc2gu dnRtcCwgTlVMTCkpCisrCQkJcmV0dXJuIDA7CisrCWN0eF9hZGRfYnVmKGRjdHgsIGRjdHgtPmQu aGFzaC5WLCBkY3R4LT5kLmhhc2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlyZXR1cm4g MTsKKysJfQorKworK3N0YXRpYyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVuc2lnbmVk IGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0g JmRjdHgtPmQuaGFzaDsKKysJaWYgKG91dGxlbiA9PSAwKQorKwkJcmV0dXJuIDE7CisrCW1lbWNw eShoY3R4LT52dG1wLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJZm9yKDs7KQorKwkJewor KwkJRklQU19kaWdlc3Rpbml0KCZoY3R4LT5tY3R4LCBoY3R4LT5tZCk7CisrCQlGSVBTX2RpZ2Vz dHVwZGF0ZSgmaGN0eC0+bWN0eCwgaGN0eC0+dnRtcCwgZGN0eC0+c2VlZGxlbik7CisrCQlpZiAo IShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQorKwkJ CXsKKysJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7Cisr CQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJCX0KKysJCWVsc2UgaWYgKG91dGxlbiA8IGRjdHgt PmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBo Y3R4LT52dG1wLCBOVUxMKTsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhj dHgtPnZ0bXApKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1jcHkob3V0LCBoY3R4LT52dG1wLCBv dXRsZW4pOworKwkJCXJldHVybiAxOworKwkJCX0KKysJCWVsc2UKKysJCQl7CisrCQkJRklQU19k aWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgb3V0LCBOVUxMKTsKKysJCQlpZiAoIWZpcHNfZHJiZ19j cHJuZ190ZXN0KGRjdHgsIG91dCkpCisrCQkJCXJldHVybiAwOworKwkJCW91dGxlbiAtPSBkY3R4 LT5ibG9ja2xlbmd0aDsKKysJCQlpZiAob3V0bGVuID09IDApCisrCQkJCXJldHVybiAxOworKwkJ CW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCQl9CisrCQljdHhfYWRkX2J1ZihkY3R4LCBo Y3R4LT52dG1wLCBOVUxMLCAwKTsKKysJCX0KKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNo X2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpl bnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6 ZV90IG5vbmNlX2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBz dHJfbGVuKQorKwl7CisrCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwlp ZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+ViwgCisrCQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9u Y2VfbGVuLCBwc3RyLCBwc3RyX2xlbiwKKysJCQlOVUxMLCAwKSkKKysJCXJldHVybiAwOworKwlp ZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgCisrCQkJTlVMTCwgMCwgaGN0eC0+ViwgZGN0eC0+ c2VlZGxlbiwKKysJCQlOVUxMLCAwLCBOVUxMLCAwKSkKKysJCXJldHVybiAwOworKworKyNpZmRl ZiBIQVNIX0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlh dGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJ aGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0 dXJuIDE7CisrCX0KKysKKysJCisrc3RhdGljIGludCBkcmJnX2hhc2hfcmVzZWVkKERSQkdfQ1RY ICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJ RFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCS8qIFYgYWJvdXQgdG8gYmUg dXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRwdXQgaW5zdGVhZCAqLworKwlpZiAoIWhhc2hfZGYoZGN0 eCwgaGN0eC0+QywKKysJCQlOVUxMLCAxLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAorKwkJCWVu dCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4pKQorKwkJcmV0dXJuIDA7CisrCW1lbWNweShoY3R4 LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgt PkMsIE5VTEwsIDAsCisrCQkJaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwg MCkpCisrCQlyZXR1cm4gMDsKKysjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCisrCWZwcmludGYoc3Rk ZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpcbiIpOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYs IGRjdHgtPnNlZWRsZW4pOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRs ZW4pOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNo X2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xl bikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJRVZQX01E X0NUWCAqbWN0eCA9ICZoY3R4LT5tY3R4OworKwl1bnNpZ25lZCBjaGFyIHRtcFs0XTsKKysJaWYg KGFkaW4gJiYgYWRpbl9sZW4pCisrCQl7CisrCQl0bXBbMF0gPSAyOworKwkJaWYgKCFGSVBTX2Rp Z2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBfRGln ZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUVWUF9EaWdl c3RVcGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCisrCQkJcmV0dXJuIDA7Cisr CQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgYWRpbiwgYWRpbl9sZW4pKQorKwkJCXJldHVy biAwOworKwkJaWYgKCFjdHhfYWRkX21kKGRjdHgpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlp ZiAoIWhhc2hfZ2VuKGRjdHgsIG91dCwgb3V0bGVuKSkKKysJCXJldHVybiAwOworKworKwl0bXBb MF0gPSAzOworKwlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCisrCQlyZXR1 cm4gMDsKKysJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrCQlyZXR1cm4g MDsKKysJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4p KQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghY3R4X2FkZF9tZChkY3R4KSkKKysJCXJldHVybiAw OworKworKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVu KTsKKysKKysJdG1wWzBdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7Cisr CXRtcFsxXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOworKwl0bXBbMl0g PSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gOCkgJiAweGZmOworKwl0bXBbM10gPSBkY3R4LT5y ZXNlZWRfY291bnRlciAmIDB4ZmY7CisrCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRtcCwg NCk7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQorKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRl ciBnZW5lcmF0ZTpcbiIpOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRs ZW4pOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRp ZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFudGlh dGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhh c2gubWN0eCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5oYXNoLCBzaXplb2YoRFJCR19I QVNIX0NUWCkpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0 KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQ7CisrCURSQkdfSEFTSF9D VFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwltZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRj dHgtPnR5cGUpOworKwlpZiAoIW1kKQorKwkJcmV0dXJuIC0yOworKwlzd2l0Y2ggKGRjdHgtPnR5 cGUpCisrCQl7CisrCQljYXNlIE5JRF9zaGExOgorKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7Cisr CQlicmVhazsKKysKKysJCWNhc2UgTklEX3NoYTIyNDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTky OworKwkJYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJZGN0eC0+c3RyZW5ndGggPSAyNTY7Cisr CQlicmVhazsKKysJCX0KKysKKysJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfaW5zdGFu dGlhdGU7CisrCWRjdHgtPnJlc2VlZCA9IGRyYmdfaGFzaF9yZXNlZWQ7CisrCWRjdHgtPmdlbmVy YXRlID0gZHJiZ19oYXNoX2dlbmVyYXRlOworKwlkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19o YXNoX3VuaW5zdGFudGlhdGU7CisrCisrCWRjdHgtPmQuaGFzaC5tZCA9IG1kOworKwlFVlBfTURf Q1RYX2luaXQoJmhjdHgtPm1jdHgpOworKworKwkvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4 MDAtOTAgMTAuMSB0YWJsZSAyICovCisrCisrCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURf c2l6ZShtZCk7CisrCWlmIChkY3R4LT5ibG9ja2xlbmd0aCA+IDMyKQorKwkJZGN0eC0+c2VlZGxl biA9IDExMTsKKysJZWxzZQorKwkJZGN0eC0+c2VlZGxlbiA9IDU1OworKworKworKwlkY3R4LT5t aW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKKysJZGN0eC0+bWF4X2VudHJvcHkgPSBE UkJHX01BWF9MRU5HVEg7CisrCisrCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5 IC8gMjsKKysJZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4LT5t YXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKKysJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9M RU5HVEg7CisrCisrCWRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7CisrCWRjdHgtPnJlc2VlZF9p bnRlcnZhbCA9IDE8PDI0OworKworKwlyZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9maXBzX2RyYmdfaG1hYy5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NDc5MjMyNDggKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTQ3OTIzMjQ4ICswMjAwCitAQCAtMCwwICsxLDI4MSBAQAorKy8qIGZp cHMvcmFuZC9maXBzX2RyYmdfaG1hYy5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4K KysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8 c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9s Y2wuaCIKKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY191cGRhdGUoRFJCR19DVFggKmRjdHgsCisr CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICppbjMsIHNpemVfdCBpbjNsZW4KKysJCQkpCisrCXsKKysJc3RhdGljIHVuc2lnbmVkIGNo YXIgYzAgPSAwLCBjMSA9IDE7CisrCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFj OworKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OworKworKwlpZiAoIUhNQUNfSW5pdF9l eChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKwkJ cmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2ts ZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMwLCAxKSkK KysJCXJldHVybiAwOworKwlpZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGlu MWxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwg aW4yLCBpbjJsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRl KGhjdHgsIGluMywgaW4zbGVuKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmluYWwo aGN0eCwgaG1hYy0+SywgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0luaXRf ZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysJ CXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2Nr bGVuZ3RoKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ ViwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFpbjFsZW4gJiYgIWluMmxlbiAmJiAh aW4zbGVuKQorKwkJcmV0dXJuIDE7CisrCisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMt PkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJ aWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQly ZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzEsIDEpKQorKwkJcmV0dXJuIDA7 CisrCWlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKKysJCXJl dHVybiAwOworKwlpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikp CisrCQlyZXR1cm4gMDsKKysJaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBp bjNsZW4pKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5L LCBOVUxMKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFj LT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7Cisr CWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJ cmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysJ CXJldHVybiAwOworKworKwlyZXR1cm4gMTsKKysKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19o bWFjX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwg c2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90 IHBzdHJfbGVuKQorKwl7CisrCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwor KwltZW1zZXQoaG1hYy0+SywgMCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwltZW1zZXQoaG1hYy0+ ViwgMSwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwK KysJCQllbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuKSkKKysJ CXJldHVybiAwOworKworKyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRlcnIs ICJLK1YgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5L LCBobWFjLT5ibG9ja2xlbmd0aCk7CisrCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+ YmxvY2tsZW5ndGgpOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQg ZHJiZ19obWFjX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAorKwkJ CWVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDApKQorKwkJcmV0dXJuIDA7Cisr CisrI2lmZGVmIEhNQUNfRFJCR19UUkFDRQorKwl7CisrCQlEUkJHX0hNQUNfQ1RYICpobWFjID0g JmRjdHgtPmQuaG1hYzsKKysJCWZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHJlc2VlZDpcbiIp OworKwkJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7CisrCQlo ZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysJfQorKyNlbmRp ZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19obWFjX2dlbmVyYXRlKERS QkdfQ1RYICpkY3R4LAorKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisr CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKysJeworKwlE UkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJSE1BQ19DVFggKmhjdHggPSAm aG1hYy0+aGN0eDsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqVnRtcCA9IGhtYWMtPlY7CisrCWlm IChhZGluX2xlbiAmJiAhZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwKKysJ CQkJCQlOVUxMLCAwLCBOVUxMLCAwKSkKKysJCXJldHVybiAwOworKwlmb3IgKDs7KQorKwkJewor KwkJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsCisr CQkJCQkJCWhtYWMtPm1kLCBOVUxMKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghSE1BQ19VcGRh dGUoaGN0eCwgVnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJCXJldHVybiAwOworKwkJaWYg KCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKKysJ CQl7CisrCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKKysJCQkJcmV0 dXJuIDA7CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJCVZ0bXAgPSBkY3R4LT5sYjsKKysJ CQljb250aW51ZTsKKysJCQl9CisrCQllbHNlIGlmIChvdXRsZW4gPiBkY3R4LT5ibG9ja2xlbmd0 aCkKKysJCQl7CisrCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIG91dCwgTlVMTCkpCisrCQkJCXJl dHVybiAwOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKKysJCQkJ cmV0dXJuIDA7CisrCQkJVnRtcCA9IG91dDsKKysJCQl9CisrCQllbHNlCisrCQkJeworKwkJCWlm ICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJ aWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBobWFjLT5WKSkKKysJCQkJcmV0dXJuIDA7 CisrCQkJbWVtY3B5KG91dCwgaG1hYy0+Viwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9Cisr CQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5n dGg7CisrCQl9CisrCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwg TlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrCX0KKysK KytzdGF0aWMgaW50IGRyYmdfaG1hY191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorKwl7 CisrCUhNQUNfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaG1hYy5oY3R4KTsKKysJT1BFTlNTTF9jbGVh bnNlKCZkY3R4LT5kLmhtYWMsIHNpemVvZihEUkJHX0hNQUNfQ1RYKSk7CisrCXJldHVybiAxOwor Kwl9CisrCisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpCisrCXsKKysJ Y29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCURSQkdfSE1BQ19DVFggKmhjdHggPSAmZGN0eC0+ ZC5obWFjOworKwlkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysJc3dpdGNoIChkY3R4LT50eXBlKQor KwkJeworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEExOgorKwkJbWQgPSBFVlBfc2hhMSgpOworKwkJ ZGN0eC0+c3RyZW5ndGggPSAxMjg7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2htYWNXaXRo U0hBMjI0OgorKwkJbWQgPSBFVlBfc2hhMjI0KCk7CisrCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsK KysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyNTY6CisrCQltZCA9IEVWUF9z aGEyNTYoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEzODQ6CisrCQlt ZCA9IEVWUF9zaGEzODQoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEE1 MTI6CisrCQltZCA9IEVWUF9zaGE1MTIoKTsKKysJCWJyZWFrOworKworKwkJZGVmYXVsdDoKKysJ CWRjdHgtPnN0cmVuZ3RoID0gMDsKKysJCXJldHVybiAtMjsKKysJCX0KKysgICAgICAgIGRjdHgt Pmluc3RhbnRpYXRlID0gZHJiZ19obWFjX2luc3RhbnRpYXRlOworKyAgICAgICAgZGN0eC0+cmVz ZWVkID0gZHJiZ19obWFjX3Jlc2VlZDsKKysgICAgICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19o bWFjX2dlbmVyYXRlOworKyAgICAgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY191 bmluc3RhbnRpYXRlOworKwlITUFDX0NUWF9pbml0KCZoY3R4LT5oY3R4KTsKKysJaGN0eC0+bWQg PSBtZDsKKysJZGN0eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKKysJZGN0eC0+ c2VlZGxlbiA9IE1fRVZQX01EX3NpemUobWQpOworKworKyAgICAgICAgZGN0eC0+bWluX2VudHJv cHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IERS QkdfTUFYX0xFTkdUSDsKKysKKysgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9l bnRyb3B5IC8gMjsKKysgICAgICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsK KysKKysgICAgICAgIGRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOworKyAgICAgICAg ZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgICAgICBkY3R4LT5tYXhf cmVxdWVzdCA9IDE8PDE2OworKyAgICAgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7 CisrCisrCXJldHVybiAxOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlw cy9maXBzX2RyYmdfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMu ZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0NzkyMzI0OCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0Nzky MzI0OCArMDIwMAorQEAgLTAsMCArMSw1NzggQEAKKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0 LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAi Zmlwc19sb2NsLmgiCisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKysvKiBTdXBwb3J0 IGZyYW1ld29yayBmb3IgU1A4MDAtOTAgRFJCR3MgKi8KKysKKytpbnQgRklQU19kcmJnX2luaXQo RFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisrCXsKKysJaW50 IHJ2OworKwltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrCWRjdHgtPnN0YXR1 cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrCWRjdHgtPnhmbGFncyA9IGZsYWdzOwor KwlkY3R4LT50eXBlID0gdHlwZTsKKysKKysJZGN0eC0+aWZsYWdzID0gMDsKKysJZGN0eC0+ZW50 cm9weV9ibG9ja2xlbiA9IDA7CisrCWRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOworKwlkY3R4 LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwgPSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKKysKKysJcnYg PSBmaXBzX2RyYmdfaGFzaF9pbml0KGRjdHgpOworKworKwlpZiAocnYgPT0gLTIpCisrCQlydiA9 IGZpcHNfZHJiZ19jdHJfaW5pdChkY3R4KTsKKysJaWYgKHJ2ID09IC0yKQorKwkJcnYgPSBmaXBz X2RyYmdfaG1hY19pbml0KGRjdHgpOworKworKwlpZiAocnYgPD0gMCkKKysJCXsKKysJCWlmIChy diA9PSAtMikKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1VOU1VQ UE9SVEVEX0RSQkdfVFlQRSk7CisrCQllbHNlCisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0lOSVQsIEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyk7CisrCQl9CisrCisrCS8qIElm IG5vdCBpbiB0ZXN0IG1vZGUgcnVuIHNlbGZ0ZXN0cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5cGUg Ki8KKysKKysJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKQorKwkJeworKwkJ aWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOworKwkJCXJldHVy biAwOworKwkJCX0KKysJCX0KKysKKysJcmV0dXJuIHJ2OworKwl9CisrCisrRFJCR19DVFggKkZJ UFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykKKysJeworKwlEUkJHX0NU WCAqZGN0eDsKKysJZGN0eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEUkJHX0NUWCkpOworKwlp ZiAoIWRjdHgpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfTkVXLCBFUlJfUl9N QUxMT0NfRkFJTFVSRSk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysKKysJaWYgKHR5cGUgPT0g MCkKKysJCXsKKysJCW1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysJCWRjdHgt PnR5cGUgPSAwOworKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsK KysJCXJldHVybiBkY3R4OworKwkJfQorKworKwlpZiAoRklQU19kcmJnX2luaXQoZGN0eCwgdHlw ZSwgZmxhZ3MpIDw9IDApCisrCQl7CisrCQlPUEVOU1NMX2ZyZWUoZGN0eCk7CisrCQlyZXR1cm4g TlVMTDsKKysJCX0KKysJCQorKwlyZXR1cm4gZGN0eDsKKysJfQorKworK3ZvaWQgRklQU19kcmJn X2ZyZWUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJaWYgKGRjdHgtPnVuaW5zdGFudGlhdGUpCisr CQlkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOworKwkvKiBEb24ndCBmcmVlIHVwIGRlZmF1bHQg RFJCRyAqLworKwlpZiAoZGN0eCA9PSBGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSkKKysJCXsKKysJ CW1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysJCWRjdHgtPnR5cGUgPSAwOwor KwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysJCX0KKysJZWxz ZQorKwkJeworKwkJT1BFTlNTTF9jbGVhbnNlKCZkY3R4LT5kLCBzaXplb2YoZGN0eC0+ZCkpOwor KwkJT1BFTlNTTF9mcmVlKGRjdHgpOworKwkJfQorKwl9CisrCisrc3RhdGljIHNpemVfdCBmaXBz X2dldF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJ aW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwl1bnNp Z25lZCBjaGFyICp0b3V0LCAqcDsKKysJc2l6ZV90IGJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xl biwgcnY7CisrCWlmICghZGN0eC0+Z2V0X2VudHJvcHkpCisrCQlyZXR1cm4gMDsKKysJaWYgKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUIHx8ICFibCkKKysJCXJldHVybiBkY3R4LT5nZXRf ZW50cm9weShkY3R4LCBwb3V0LCBlbnRyb3B5LCBtaW5fbGVuLCBtYXhfbGVuKTsKKysJcnYgPSBk Y3R4LT5nZXRfZW50cm9weShkY3R4LCAmdG91dCwgZW50cm9weSArIGJsLAorKwkJCQltaW5fbGVu ICsgYmwsIG1heF9sZW4gKyBibCk7CisrCWlmICh0b3V0ID09IE5VTEwpCisrCQlyZXR1cm4gMDsK KysJKnBvdXQgPSB0b3V0ICsgYmw7CisrCWlmIChydiA8IChtaW5fbGVuICsgYmwpIHx8IChydiAl IGJsKSkKKysJCXJldHVybiAwOworKwkvKiBDb21wYXJlIGNvbnNlY3V0aXZlIGJsb2NrcyBmb3Ig Y29udGludW91cyBQUk5HIHRlc3QgKi8KKysJZm9yIChwID0gdG91dDsgcCA8IHRvdXQgKyBydiAt IGJsOyBwICs9IGJsKQorKwkJeworKwkJaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpCisrCQkJ eworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfR0VUX0VOVFJPUFksIEZJUFNfUl9FTlRST1BZX1NP VVJDRV9TVFVDSyk7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlydiAtPSBibDsKKysJ aWYgKHJ2ID4gbWF4X2xlbikKKysJCXJldHVybiBtYXhfbGVuOworKwlyZXR1cm4gcnY7CisrCX0K KysKKytzdGF0aWMgdm9pZCBmaXBzX2NsZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0eCwKKysJ CQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pCisrCXsKKysJc2l6ZV90IGJsOwor KwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrCQlibCA9IDA7CisrCWVsc2UK KysJCWJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbjsKKysJLyogQ2FsbCBjbGVhbnVwIHdpdGgg b3JpZ2luYWwgYXJndW1lbnRzICovCisrCWRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4LCBvdXQg LSBibCwgb2xlbiArIGJsKTsKKysJfQorKworKworK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUo RFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBw ZXJzbGVuKQorKwl7CisrCXNpemVfdCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7CisrCXVuc2ln bmVkIGNoYXIgKm5vbmNlID0gTlVMTCwgKmVudHJvcHkgPSBOVUxMOworKworKyNpZiAwCisrCS8q IFB1dCBoZXJlIHNvIGVycm9yIHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCisrCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwKKysJCQkJRklQU19SX1BFUlNPTkFMSVNBVElPTl9T VFJJTkdfVE9PX0xPTkcpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUs IEZJUFNfUl9JTl9FUlJPUl9TVEFURSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNU QU5USUFURSwgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEKTsKKysJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZKTsK KysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVU UklFVklOR19OT05DRSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg RklQU19SX0lOU1RBTlRJQVRFX0VSUk9SKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lO U1RBTlRJQVRFLCBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQpOworKyNlbmRpZgorKworKwlp bnQgciA9IDA7CisrCisrCWlmIChwZXJzbGVuID4gZGN0eC0+bWF4X3BlcnMpCisrCQl7CisrCQly ID0gRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkc7CisrCQlnb3RvIGVuZDsK KysJCX0KKysKKysJaWYgKCFkY3R4LT5pbnN0YW50aWF0ZSkKKysJCXsKKysJCXIgPSBGSVBTX1Jf RFJCR19OT1RfSU5JVElBTElTRUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGRjdHgt PnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJeworKwkJaWYgKGRjdHgt PnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQU19SX0lOX0VSUk9SX1NU QVRFOworKwkJZWxzZQorKwkJCXIgPSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Cisr CisrCWVudGxlbiA9IGZpcHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVu Z3RoLAorKwkJCQlkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOworKworKwlp ZiAoZW50bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJv cHkpCisrCQl7CisrCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKKysJCWdv dG8gZW5kOworKwkJfQorKworKwlpZiAoZGN0eC0+bWF4X25vbmNlID4gMCAmJiBkY3R4LT5nZXRf bm9uY2UpCisrCQl7CisrCQlub25jZWxlbiA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAmbm9uY2Us CisrCQkJCQlkY3R4LT5zdHJlbmd0aCAvIDIsCisrCQkJCQlkY3R4LT5taW5fbm9uY2UsIGRjdHgt Pm1heF9ub25jZSk7CisrCisrCQlpZiAobm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2UgfHwgbm9u Y2VsZW4gPiBkY3R4LT5tYXhfbm9uY2UpCisrCQkJeworKwkJCXIgPSBGSVBTX1JfRVJST1JfUkVU UklFVklOR19OT05DRTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCisrCQl9CisrCisrCWlmICgh ZGN0eC0+aW5zdGFudGlhdGUoZGN0eCwgCisrCQkJCWVudHJvcHksIGVudGxlbiwKKysJCQkJbm9u Y2UsIG5vbmNlbGVuLAorKwkJCQlwZXJzLCBwZXJzbGVuKSkKKysJCXsKKysJCXIgPSBGSVBTX1Jf RVJST1JfSU5TVEFOVElBVElOR19EUkJHOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCisrCWRj dHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOworKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBE UkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOworKworKwll bmQ6CisrCisrCWlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9weSkKKysJCWZpcHNf Y2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7CisrCisrCWlmIChub25jZSAm JiBkY3R4LT5jbGVhbnVwX25vbmNlKQorKwkJZGN0eC0+Y2xlYW51cF9ub25jZShkY3R4LCBub25j ZSwgbm9uY2VsZW4pOworKworKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZ KQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFH X05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgcik7Cisr CisrCXJldHVybiAwOworKworKwl9CisrCisrc3RhdGljIGludCBkcmJnX3Jlc2VlZChEUkJHX0NU WCAqZGN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbiwg aW50IGhjaGVjaykKKysJeworKwl1bnNpZ25lZCBjaGFyICplbnRyb3B5ID0gTlVMTDsKKysJc2l6 ZV90IGVudGxlbiA9IDA7CisrCWludCByID0gMDsKKysKKysjaWYgMAorKwlGSVBTZXJyKEZJUFNf Rl9EUkJHX1JFU0VFRCwgRklQU19SX05PVF9JTlNUQU5USUFURUQpOworKwlGSVBTZXJyKEZJUFNf Rl9EUkJHX1JFU0VFRCwgRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcpOworKyNlbmRp ZgorKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCisrCQkmJiBkY3R4LT5z dGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQorKwkJeworKwkJaWYgKGRjdHgtPnN0YXR1cyA9 PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOworKwkJ ZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCQly ID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KCFhZGluKQorKwkJYWRpbmxlbiA9IDA7CisrCWVsc2UgaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhf YWRpbikKKysJCXsKKysJCXIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKKysJ CWdvdG8gZW5kOworKwkJfQorKworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsK KysJLyogUGVmb3JtIGhlYWx0aCBjaGVjayBvbiBhbGwgcmVzZWVkIG9wZXJhdGlvbnMgaWYgbm90 IGEgcHJlZGljdGlvbgorKwkgKiByZXNpc3RhbmNlIHJlcXVlc3QgYW5kIG5vdCBpbiB0ZXN0IG1v ZGUuCisrCSAqLworKwlpZiAoaGNoZWNrICYmICEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RF U1QpKQorKwkJeworKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQorKwkJCXsK KysJCQlyID0gRklQU19SX1NFTEZURVNUX0ZBSUxVUkU7CisrCQkJZ290byBlbmQ7CisrCQkJfQor KwkJfQorKworKwllbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4 LT5zdHJlbmd0aCwKKysJCQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsK KysKKysJaWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1h eF9lbnRyb3B5KQorKwkJeworKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwgZW50cm9w eSwgZW50bGVuLCBhZGluLCBhZGlubGVuKSkKKysJCWdvdG8gZW5kOworKworKwlkY3R4LT5zdGF0 dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNU T01fUkVTRUVEKSkKKysJCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKKysJZW5kOgorKworKwlp ZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCisrCQlmaXBzX2NsZWFudXBfZW50 cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOworKworKwlpZiAoZGN0eC0+c3RhdHVzID09IERS QkdfU1RBVFVTX1JFQURZKQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChyICYmICEoZGN0eC0+aWZs YWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBy KTsKKysKKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NU WCAqZGN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikK KysJeworKwlyZXR1cm4gZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7CisrCX0K KysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19jaGVjayhEUkJHX0NUWCAqZGN0eCkKKysJeworKwlp ZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrCQlyZXR1cm4gMTsKKysJZGN0eC0+ aGVhbHRoX2NoZWNrX2NudCsrOworKwlpZiAoZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA+PSBkY3R4 LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwpCisrCQl7CisrCQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhf Y2hlY2soZGN0eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DSEVDSywg RklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysJ cmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJaW50IHByZWRpY3Rpb25f cmVzaXN0YW5jZSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxl bikKKysJeworKwlpbnQgciA9IDA7CisrCisrCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlpZiAoIWZpcHNfZHJiZ19jaGVj ayhkY3R4KSkKKysJCXJldHVybiAwOworKworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RB VFVTX1JFQURZCisrCQkmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQorKwkJ eworKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQ U19SX0lOX0VSUk9SX1NUQVRFOworKwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfVU5JTklUSUFMSVNFRCkKKysJCQlyID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKG91dGxlbiA+IGRjdHgtPm1heF9yZXF1ZXN0KQorKwkJ eworKwkJciA9IEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKKysJCXJldHVybiAw OworKwkJfQorKworKwlpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQorKwkJeworKwkJciA9 IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmIChkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpCisrCQlkY3R4LT5nZW5l cmF0ZShkY3R4LCBOVUxMLCBvdXRsZW4sIE5VTEwsIDApOworKwllbHNlIGlmIChkY3R4LT5yZXNl ZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCisrCQlkY3R4LT5zdGF0dXMgPSBE UkJHX1NUQVRVU19SRVNFRUQ7CisrCisrCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNf UkVTRUVEIHx8IHByZWRpY3Rpb25fcmVzaXN0YW5jZSkKKysJCXsKKysJCS8qIElmIHByZWRpY3Rp b24gcmVzaXN0YW5jZSByZXF1ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLworKwkJaW50IGhj aGVjayA9IHByZWRpY3Rpb25fcmVzaXN0YW5jZSA/IDAgOiAxOworKwkJCisrCQlpZiAoIWRyYmdf cmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIGhjaGVjaykpCisrCQkJeworKwkJCXIgPSBGSVBT X1JfUkVTRUVEX0VSUk9SOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCWFkaW4gPSBOVUxMOwor KwkJYWRpbmxlbiA9IDA7CisrCQl9CisrCisrCWlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwgb3V0 LCBvdXRsZW4sIGFkaW4sIGFkaW5sZW4pKQorKwkJeworKwkJciA9IEZJUFNfUl9HRU5FUkFURV9F UlJPUjsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKwkJZ290byBlbmQ7 CisrCQl9CisrCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrCQl7 CisrCQlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQor KwkJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKKysJCWVsc2UKKysJCQlkY3R4 LT5yZXNlZWRfY291bnRlcisrOworKwkJfQorKworKwllbmQ6CisrCWlmIChyKQorKwkJeworKwkJ aWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfR0VORVJBVEUsIHIpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCXJldHVy biAxOworKwl9CisrCisraW50IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4 KQorKwl7CisrCWludCBydjsKKysJaWYgKCFkY3R4LT51bmluc3RhbnRpYXRlKQorKwkJcnYgPSAx OworKwllbHNlCisrCQlydiA9IGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7CisrCS8qIEFsdGhv dWdoIHdlJ2QgbGlrZSB0byBjbGVhbnNlIGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBoYXZlIHRv CisrCSAqIHRlc3QgdGhlIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0YS4KKysJ ICovCisrCW1lbXNldCgmZGN0eC0+ZCwgMCwgc2l6ZW9mKGRjdHgtPmQpKTsKKysJZGN0eC0+c3Rh dHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysJLyogSWYgbWV0aG9kIGhhcyBwcm9i bGVtcyB1bmluc3RhbnRpYXRpbmcsIHJldHVybiBlcnJvciAqLworKwlyZXR1cm4gcnY7CisrCX0K KysKKytpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrCXNpemVf dCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJ CQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQg KCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG9sZW4pLAorKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysJc2l6ZV90ICgqZ2V0X25v bmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJv cHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVhbnVwX25v bmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSkKKysJ eworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQly ZXR1cm4gMDsKKysJZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9IGVudHJvcHlfYmxvY2tsZW47Cisr CWRjdHgtPmdldF9lbnRyb3B5ID0gZ2V0X2VudHJvcHk7CisrCWRjdHgtPmNsZWFudXBfZW50cm9w eSA9IGNsZWFudXBfZW50cm9weTsKKysJZGN0eC0+Z2V0X25vbmNlID0gZ2V0X25vbmNlOworKwlk Y3R4LT5jbGVhbnVwX25vbmNlID0gY2xlYW51cF9ub25jZTsKKysJcmV0dXJuIDE7CisrCX0KKysK KytpbnQgRklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6 ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKKysJ dm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBz aXplX3Qgb2xlbiksCisrCWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qg dm9pZCAqYnVmLCBpbnQgbnVtKSwKKysJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgs CisrCQkJCWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKQorKwl7Cisr CWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCXJldHVy biAwOworKwlkY3R4LT5nZXRfYWRpbiA9IGdldF9hZGluOworKwlkY3R4LT5jbGVhbnVwX2FkaW4g PSBjbGVhbnVwX2FkaW47CisrCWRjdHgtPnJhbmRfc2VlZF9jYiA9IHJhbmRfc2VlZF9jYjsKKysJ ZGN0eC0+cmFuZF9hZGRfY2IgPSByYW5kX2FkZF9jYjsKKysJcmV0dXJuIDE7CisrCX0KKysKKyt2 b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVy biBkY3R4LT5hcHBfZGF0YTsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShE UkJHX0NUWCAqZGN0eCwgdm9pZCAqYXBwX2RhdGEpCisrCXsKKysJZGN0eC0+YXBwX2RhdGEgPSBh cHBfZGF0YTsKKysJfQorKworK3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdf Q1RYICpkY3R4KQorKwl7CisrCXJldHVybiBkY3R4LT5ibG9ja2xlbmd0aDsKKysJfQorKworK2lu dCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVybiBk Y3R4LT5zdHJlbmd0aDsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZh bChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKQorKwl7CisrCWRjdHgtPmhlYWx0aF9jaGVj a19pbnRlcnZhbCA9IGludGVydmFsOworKwl9CisrCisrdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2Vl ZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKQorKwl7CisrCWRjdHgtPnJl c2VlZF9pbnRlcnZhbCA9IGludGVydmFsOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX3N0aWNr ID0gMDsKKysKKyt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpCisrCXsKKysJZHJiZ19z dGljayA9IG9ub2ZmOworKwl9CisrCisrLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkgZnVuY3Rp b24gKi8KKytpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKm91dCkKKysJeworKwkvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8KKysJ aWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKwkJcmV0dXJuIDE7CisrCS8qIENo ZWNrIGJsb2NrIGlzIHZhbGlkOiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisrCWlmIChkY3R4LT5s Yl92YWxpZCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RF U1QsIEZJUFNfUl9JTlRFUk5BTF9FUlJPUik7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGRyYmdfc3RpY2spCisrCQltZW1jcHkoZGN0eC0+ bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwkvKiBDaGVjayBhZ2FpbnN0IGxhc3QgYmxv Y2s6IGZhaWwgaWYgbWF0Y2ggKi8KKysJaWYgKCFtZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0eC0+ YmxvY2tsZW5ndGgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RF U1QsIEZJUFNfUl9EUkJHX1NUVUNLKTsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJ CXJldHVybiAwOworKwkJfQorKwkvKiBTYXZlIGxhc3QgYmxvY2sgZm9yIG5leHQgY29tcGFyaXNv biAqLworKwltZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlyZXR1 cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMK Ky0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NDc5MjMyNDggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ3OTIzMjQ4ICsw MjAwCitAQCAtMCwwICsxLDE3MiBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfcmFuZC5jICov CisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJm aXBzX3JhbmRfbGNsLmgiCisrCisrLyogTWFwcGluZyBvZiBTUDgwMC05MCBEUkJHcyB0byBPcGVu U1NMIFJBTkRfTUVUSE9EICovCisrCisrLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBnbG9iYWwg UFJORyB1c2VkIGF0IGFueSB0aW1lIGluIE9wZW5TU0wgdXNlIGEgZ2xvYmFsCisrICogdmFyaWFi bGUgdG8gc3RvcmUgY29udGV4dC4KKysgKi8KKysKKytzdGF0aWMgRFJCR19DVFggb3NzbF9kY3R4 OworKworK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCkKKysJeworKwlyZXR1 cm4gJm9zc2xfZGN0eDsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVuc2ln bmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xf ZGN0eDsKKysJaW50IHJ2ID0gMDsKKysJdW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7CisrCXNp emVfdCBhZGlubGVuID0gMDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJ ZG8gCisrCQl7CisrCQlzaXplX3QgcmNudDsKKysJCWlmIChjb3VudCA+IChpbnQpZGN0eC0+bWF4 X3JlcXVlc3QpCisrCQkJcmNudCA9IGRjdHgtPm1heF9yZXF1ZXN0OworKwkJZWxzZQorKwkJCXJj bnQgPSBjb3VudDsKKysJCWlmIChkY3R4LT5nZXRfYWRpbikKKysJCQl7CisrCQkJYWRpbmxlbiA9 IGRjdHgtPmdldF9hZGluKGRjdHgsICZhZGluKTsKKysJCQlpZiAoYWRpbmxlbiAmJiAhYWRpbikK KysJCQkJeworKwkJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQllURVMsIEZJUFNfUl9FUlJP Ul9SRVRSSUVWSU5HX0FERElUSU9OQUxfSU5QVVQpOworKwkJCQlnb3RvIGVycjsKKysJCQkJfQor KwkJCX0KKysJCXJ2ID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwgYWRp biwgYWRpbmxlbik7CisrCQlpZiAoYWRpbikKKysJCQl7CisrCQkJaWYgKGRjdHgtPmNsZWFudXBf YWRpbikKKysJCQkJZGN0eC0+Y2xlYW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOworKwkJ CWFkaW4gPSBOVUxMOworKwkJCX0KKysJCWlmICghcnYpCisrCQkJZ290byBlcnI7CisrCQlvdXQg Kz0gcmNudDsKKysJCWNvdW50IC09IHJjbnQ7CisrCQl9CisrCXdoaWxlIChjb3VudCk7CisrCXJ2 ID0gMTsKKysJZXJyOgorKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJl dHVybiBydjsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25lZCBj aGFyICpvdXQsIGludCBjb3VudCkKKysJeworKwlpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwgY291 bnQpIDw9IDApCisrCQlyZXR1cm4gLTE7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGlu dCBmaXBzX2RyYmdfc3RhdHVzKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHggPSAmb3NzbF9k Y3R4OworKwlpbnQgcnY7CisrCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJ2 ID0gZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZID8gMSA6IDA7CisrCUNSWVBUT19y X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3RhdGlj IHZvaWQgZmlwc19kcmJnX2NsZWFudXAodm9pZCkKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZv c3NsX2RjdHg7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCUZJUFNfZHJi Z191bmluc3RhbnRpYXRlKGRjdHgpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZvaWQgKnNlZWQs IGludCBzZWVkbGVuKQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaWYg KGRjdHgtPnJhbmRfc2VlZF9jYikKKysJCXJldHVybiBkY3R4LT5yYW5kX3NlZWRfY2IoZGN0eCwg c2VlZCwgc2VlZGxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2Ry YmdfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAorKwkJCQkJZG91YmxlIGFkZF9l bnRyb3B5KQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaWYgKGRjdHgt PnJhbmRfYWRkX2NiKQorKwkJcmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNl ZWRsZW4sIGFkZF9lbnRyb3B5KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgY29uc3Qg UkFORF9NRVRIT0QgcmFuZF9kcmJnX21ldGggPQorKwl7CisrCWZpcHNfZHJiZ19zZWVkLAorKwlm aXBzX2RyYmdfYnl0ZXMsCisrCWZpcHNfZHJiZ19jbGVhbnVwLAorKwlmaXBzX2RyYmdfYWRkLAor KwlmaXBzX2RyYmdfcHNldWRvLAorKwlmaXBzX2RyYmdfc3RhdHVzCisrCX07CisrCisrY29uc3Qg UkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCkKKysJeworKwlyZXR1cm4gJnJhbmRf ZHJiZ19tZXRoOworKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X3NlbGZ0ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0ODkyMzI3MSArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCTIwMTQtMDUt MDYgMTY6Mjk6NTAuNTQ4OTIzMjcxICswMjAwCitAQCAtMCwwICsxLDg2MiBAQAorKy8qIGZpcHMv cmFuZC9maXBzX2RyYmdfc2VsZnRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3Qu CisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJm aXBzX3JhbmRfbGNsLmgiCisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpbmNsdWRlICJm aXBzX2RyYmdfc2VsZnRlc3QuaCIKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrCWludCBwb3N0Owor KwlpbnQgbmlkOworKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisrCisrCS8qIEtBVCBkYXRhIGZvciBu byBQUiAqLworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7CisrCXNpemVfdCBlbnRsZW47Cisr CWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOworKwlzaXplX3Qgbm9uY2VsZW47CisrCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnBlcnM7CisrCXNpemVfdCBwZXJzbGVuOworKwljb25zdCB1bnNpZ25l ZCBjaGFyICphZGluOworKwlzaXplX3QgYWRpbmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAq ZW50cmVzZWVkOworKwlzaXplX3QgZW50cmVzZWVkbGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFy ICphZGlucmVzZWVkOworKwlzaXplX3QgYWRpbnJlc2VlZGxlbjsKKysJY29uc3QgdW5zaWduZWQg Y2hhciAqYWRpbjI7CisrCXNpemVfdCBhZGluMmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAq a2F0OworKwlzaXplX3Qga2F0bGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyOworKwlz aXplX3Qga2F0MmxlbjsKKysKKysJLyogS0FUIGRhdGEgZm9yIFBSICovCisrCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmVudF9wcjsKKysJc2l6ZV90IGVudGxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQg Y2hhciAqbm9uY2VfcHI7CisrCXNpemVfdCBub25jZWxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQg Y2hhciAqcGVyc19wcjsKKysJc2l6ZV90IHBlcnNsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW5fcHI7CisrCXNpemVfdCBhZGlubGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFy ICplbnRwcl9wcjsKKysJc2l6ZV90IGVudHBybGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFy ICphZGluZ19wcjsKKysJc2l6ZV90IGFkaW5nbGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFy ICplbnRnX3ByOworKwlzaXplX3QgZW50Z2xlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAq a2F0X3ByOworKwlzaXplX3Qga2F0bGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQy X3ByOworKwlzaXplX3Qga2F0Mmxlbl9wcjsKKysKKysJfSBEUkJHX1NFTEZURVNUX0RBVEE7Cisr CisrI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgZmxhZywgcHIsIHApIHtwLCBuaWQs IGZsYWcgfCBEUkJHX0ZMQUdfVEVTVCwgXAorKwlwciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHBy IyNfZW50cm9weWlucHV0KSwgXAorKwlwciMjX25vbmNlLCBzaXplb2YocHIjI19ub25jZSksIFwK KysJcHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3BlcnNvbmFsaXphdGlv bnN0cmluZyksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX2FkZGl0aW9u YWxpbnB1dCksIFwKKysJcHIjI19lbnRyb3B5aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJv cHlpbnB1dHJlc2VlZCksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQsIHNpemVvZihw ciMjX2FkZGl0aW9uYWxpbnB1dHJlc2VlZCksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXQyLCBz aXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQyKSwgXAorKwlwciMjX2ludF9yZXR1cm5lZGJpdHMs IHNpemVvZihwciMjX2ludF9yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNfcmV0dXJuZWRiaXRzLCBz aXplb2YocHIjI19yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNfcHJfZW50cm9weWlucHV0LCBzaXpl b2YocHIjI19wcl9lbnRyb3B5aW5wdXQpLCBcCisrCXByIyNfcHJfbm9uY2UsIHNpemVvZihwciMj X3ByX25vbmNlKSwgXAorKwlwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHBy IyNfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAorKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1 dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0KSwgXAorKwlwciMjX3ByX2VudHJvcHlp bnB1dHByLCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRwciksIFwKKysJcHIjI19wcl9hZGRp dGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyKSwgXAorKwlwciMj X3ByX2VudHJvcHlpbnB1dHByMiwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAor KwlwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX2ludF9yZXR1cm5lZGJp dHMpLCBcCisrCXByIyNfcHJfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9yZXR1cm5lZGJp dHMpLCBcCisrCX0KKysKKysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBwciwg cCkgXAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgRFJCR19GTEFHX0NUUl9VU0VfREYsIHBy LCBwKQorKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHByLCBw KSBcCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoKGN1cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIsIHAp CisrCisrc3RhdGljIERSQkdfU0VMRlRFU1RfREFUQSBkcmJnX3Rlc3RbXSA9IHsKKysJbWFrZV9k cmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzEyOF9jdHIsIGFlc18xMjhfdXNlX2RmLCAwKSwKKysJ bWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzE5Ml9jdHIsIGFlc18xOTJfdXNlX2RmLCAw KSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzI1Nl9jdHIsIGFlc18yNTZfdXNl X2RmLCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzEyOF9jdHIsIDAsIGFlc18x Mjhfbm9fZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMTkyX2N0ciwgMCwg YWVzXzE5Ml9ub19kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18yNTZfY3Ry LCAwLCBhZXNfMjU2X25vX2RmLCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMSwg MCwgc2hhMSwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTIyNCwgMCwgc2hhMjI0 LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMjU2LCAwLCBzaGEyNTYsIDEpLAor KwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEzODQsIDAsIHNoYTM4NCwgMCksCisrCW1ha2Vf ZHJiZ190ZXN0X2RhdGEoTklEX3NoYTUxMiwgMCwgc2hhNTEyLCAwKSwKKysJbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfaG1hY1dpdGhTSEExLCAwLCBobWFjX3NoYTEsIDApLAorKwltYWtlX2RyYmdf dGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTIyNCwgMCwgaG1hY19zaGEyMjQsIDApLAorKwltYWtl X2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTI1NiwgMCwgaG1hY19zaGEyNTYsIDEpLAor KwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTM4NCwgMCwgaG1hY19zaGEzODQs IDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTUxMiwgMCwgaG1hY19z aGE1MTIsIDApLAorKwl7MCwwLDB9CisrCX07CisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsKKysJ Y29uc3QgdW5zaWduZWQgY2hhciAqZW50OworKwlzaXplX3QgZW50bGVuOworKwlpbnQgZW50Y250 OworKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZTsKKysJc2l6ZV90IG5vbmNlbGVuOworKwlp bnQgbm9uY2VjbnQ7CisrCX0gVEVTVF9FTlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X2VudHJv cHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4 X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7 CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7CisrCXQtPmVudGNudCsrOworKwly ZXR1cm4gdC0+ZW50bGVuOworKwl9CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdf Q1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisr CXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91 dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7CisrCXQtPm5vbmNlY250Kys7CisrCXJldHVy biB0LT5ub25jZWxlbjsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3NpbmdsZV9rYXQo RFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCisrCQkJCQkJCQlpbnQgcXVp Y2spCisrCXsKKysJVEVTVF9FTlQgdDsKKysJaW50IHJ2ID0gMDsKKysJc2l6ZV90IGFkaW5sZW47 CisrCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsKKysKKysJLyogSW5pdGlhbCB0ZXN0IHdp dGhvdXQgUFIgKi8KKysKKysJLyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwg bm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgorKwkgKiBzdHJpbmcuCisrCSAqLworKworKwlpZiAo IUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCisrCQlyZXR1cm4gMDsK KysJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAs IHRlc3Rfbm9uY2UsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCUZJUFNfZHJiZ19zZXRfYXBwX2Rh dGEoZGN0eCwgJnQpOworKworKwl0LmVudCA9IHRkLT5lbnQ7CisrCXQuZW50bGVuID0gdGQtPmVu dGxlbjsKKysJdC5ub25jZSA9IHRkLT5ub25jZTsKKysJdC5ub25jZWxlbiA9IHRkLT5ub25jZWxl bjsKKysJdC5lbnRjbnQgPSAwOworKwl0Lm5vbmNlY250ID0gMDsKKysKKysJaWYgKCFGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKKysJCWdvdG8gZXJy OworKworKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwgaW5wdXQg dmFsdWVzCisrCSAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1Y2Ug YWRpbmxlbgorKwkgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGluLgor KwkgKi8KKysJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlw ZSwgJmRjdHgtPmlmbGFncykpCisrCQlhZGlubGVuID0gdGQtPmFkaW5sZW4gLyAyOworKwllbHNl CisrCQlhZGlubGVuID0gdGQtPmFkaW5sZW47CisrCisrCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIg YW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCisrCWlmICghRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGlu LCBhZGlubGVuKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5r YXQsIHRkLT5rYXRsZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdM RV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQor KwkvKiBJZiBhYmJyZXZpYXRlZCBQT1NUIGVuZCBvZiB0ZXN0ICovCisrCWlmIChxdWljaykKKysJ CXsKKysJCXJ2ID0gMTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBSZXNlZWQgRFJCRyB3aXRo IHRlc3QgZW50cm9weSBhbmQgYWRkaXRpb25hbCBpbnB1dCAqLworKwl0LmVudCA9IHRkLT5lbnRy ZXNlZWQ7CisrCXQuZW50bGVuID0gdGQtPmVudHJlc2VlZGxlbjsKKysKKysJaWYgKCFGSVBTX2Ry YmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlucmVzZWVkLCB0ZC0+YWRpbnJlc2VlZGxlbikpCisrCQln b3RvIGVycjsKKysKKysJLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBt YXRjaGVzIGV4cGVjdGVkIGRhdGEgKi8KKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwg cmFuZG91dCwgdGQtPmthdDJsZW4sIDAsCisrCQkJCXRkLT5hZGluMiwgdGQtPmFkaW4ybGVuKSkK KysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+a2F0 MmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQ U19SX05PUFJfVEVTVDJfRkFJTFVSRSk7CisrCQlnb3RvIGVycjI7CisrCQl9CisrCisrCUZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOworKworKwkvKiBOb3cgdGVzdCB3aXRoIFBSICovCisr CisrCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJz b25hbGlzYXRpb24KKysJICogc3RyaW5nLgorKwkgKi8KKysJaWYgKCFGSVBTX2RyYmdfaW5pdChk Y3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQU19kcmJn X3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkK KysJCXJldHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysK KysJdC5lbnQgPSB0ZC0+ZW50X3ByOworKwl0LmVudGxlbiA9IHRkLT5lbnRsZW5fcHI7CisrCXQu bm9uY2UgPSB0ZC0+bm9uY2VfcHI7CisrCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW5fcHI7Cisr CXQuZW50Y250ID0gMDsKKysJdC5ub25jZWNudCA9IDA7CisrCisrCWlmICghRklQU19kcmJnX2lu c3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzX3ByLCB0ZC0+cGVyc2xlbl9wcikpCisrCQlnb3RvIGVy cjsKKysKKysJLyogTm93IGdlbmVyYXRlIHdpdGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJv cHkgYXMgdGhpcyB3aWxsCisrCSAqIHBlcmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVjayBv dXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KKysJICovCisrCisrCXQuZW50ID0gdGQtPmVu dHByX3ByOworKwl0LmVudGxlbiA9IHRkLT5lbnRwcmxlbl9wcjsKKysKKysJLyogTm90ZSBmb3Ig Q1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcworKwkgKiBpZ25vcmUg Ynl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KKysJICogdG8gaGFs ZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KKysJICovCisrCWlmICghZmlwc19w b3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQor KwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByIC8gMjsKKysJZWxzZQorKwkJYWRpbmxlbiA9IHRk LT5hZGlubGVuX3ByOworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0 ZC0+a2F0bGVuX3ByLCAxLAorKwkJCQl0ZC0+YWRpbl9wciwgYWRpbmxlbikpCisrCQlnb3RvIGVy cjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0X3ByLCB0ZC0+a2F0bGVuX3ByKSkK KysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfUFJf VEVTVDFfRkFJTFVSRSk7CisrCQlnb3RvIGVycjI7CisrCQl9CisrCisrCS8qIE5vdyBnZW5lcmF0 ZSBhZ2FpbiB3aXRoIFBSOiBzdXBwbHkgbmV3IGVudHJvcHkgYWdhaW4uCisrCSAqIENoZWNrIG91 dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgorKwkgKi8KKysKKysJdC5lbnQgPSB0ZC0+ZW50 Z19wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50Z2xlbl9wcjsKKysKKysJaWYgKCFGSVBTX2RyYmdf Z2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW5fcHIsIDEsCisrCQkJCXRkLT5hZGlu Z19wciwgdGQtPmFkaW5nbGVuX3ByKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJh bmRvdXQsIHRkLT5rYXQyX3ByLCB0ZC0+a2F0Mmxlbl9wcikpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUpOworKwkJ Z290byBlcnIyOworKwkJfQorKwkvKiBBbGwgT0ssIHRlc3QgY29tcGxldGUgKi8KKysJcnYgPSAx OworKworKwllcnI6CisrCWlmIChydiA9PSAwKQorKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X1NJTkdMRV9LQVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwllcnIyOgorKwlGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysJCisrCXJldHVybiBydjsKKysKKysJfQorKworKy8q IEluaXRpYWxpc2UgYSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KKysKKytzdGF0aWMg aW50IGRvX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwg VEVTVF9FTlQgKnQpCisrCXsKKysKKysJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlk LCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghRklQU19kcmJnX3NldF9jYWxs YmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysJCXJldHVy biAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsIHQpOworKworKwl0LT5lbnQg PSB0ZC0+ZW50OworKwl0LT5lbnRsZW4gPSB0ZC0+ZW50bGVuOworKwl0LT5ub25jZSA9IHRkLT5u b25jZTsKKysJdC0+bm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrCXQtPmVudGNudCA9IDA7Cisr CXQtPm5vbmNlY250ID0gMDsKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBJbml0aWFsaXNlIGFu ZCBpbnN0YW50aWF0ZSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KKytzdGF0aWMgaW50 IGRvX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAq dGQsCisrCQkJCQkJCQlURVNUX0VOVCAqdCkKKysJeworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4 LCB0ZCwgdCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0 eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4gMTsK KysJfQorKworKy8qIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgZXh0ZW5zaXZlIGVycm9yIGNoZWNr aW5nIGFzIHJlcXVpcmVkIGJ5IFNQODAwLTkwLgorKyAqIEluZHVjZSBzZXZlcmFsIGZhaWx1cmUg bW9kZXMgYW5kIGNoZWNrIGFuIGVycm9yIGNvbmRpdGlvbiBpcyBzZXQuCisrICogVGhpcyBmdW5j dGlvbiBhbG9uZyB3aXRoIGZpcHNfZHJiZ19zaW5nbGVfa2F0IHBlZm9ybXMgdGhlIGhlYWx0aCBj aGVja2luZworKyAqIG9wZXJhdGlvbi4KKysgKi8KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19l cnJvcl9jaGVjayhEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCkKKysJewor Kwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrCVRFU1RfRU5UIHQ7CisrCXNpemVfdCBp OworKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXJfdG1wOworKwl1bnNpZ25lZCBjaGFyICpw ID0gKHVuc2lnbmVkIGNoYXIgKilkY3R4OworKworKwkvKiBJbml0aWFsaXNlIERSQkcgKi8KKysK KysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKworKwkv KiBEb24ndCByZXBvcnQgaW5kdWNlZCBlcnJvcnMgKi8KKysJZGN0eC0+aWZsYWdzIHw9IERSQkdf RkxBR19OT0VSUjsKKysKKysJLyogUGVyc29uYWxpc2F0aW9uIHN0cmluZyB0ZXN0cyAqLworKwor KwkvKiBUZXN0IGRldGVjdGlvbiBvZiB0b28gbGFyZ2UgcGVyc29ubGlzYXRpb24gc3RyaW5nICov CisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIGRjdHgtPm1h eF9wZXJzICsgMSkgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290 byBlcnI7CisrCQl9CisrCisrCS8qIEVudHJvcHkgc291cmNlIHRlc3RzICovCisrCisrCS8qIFRl c3QgZW50cm9weSBzb3VyY2UgZmFpbHVyZSBkZXRlY2lvbjogaS5lLiByZXR1cm5zIG5vIGRhdGEg Ki8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRj dHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUcnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZyb20g dW5pbnN0YW50aWF0ZWQgRFJCRyAqLworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJh bmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9HRU5FUkFU RV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxh Z3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICgh ZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZs YWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJLyogVGVzdCBpbnN1ZmZpY2llbnQgZW50cm9w eSAqLworKworKwl0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKKysKKysJaWYgKEZJ UFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJP UFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZs YWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUo ZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBU ZXN0IHRvbyBtdWNoIGVudHJvcHkgKi8KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQs ICZ0KSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJS OworKworKwl0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKKysKKysJaWYgKEZJUFNf ZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlf RVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdz ICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0 eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBOb25j ZSB0ZXN0cyAqLworKworKwkvKiBUZXN0IHRvbyBzbWFsbCBub25jZSAqLworKworKwlpZiAoZGN0 eC0+bWluX25vbmNlKQorKwkJeworKworKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0 KSkKKysJCQlnb3RvIGVycjsKKysKKysJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7 CisrCisrCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWluX25vbmNlIC0gMTsKKysKKysJCWlmIChGSVBT X2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQkJ eworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNF X0VSUk9SX1VOREVURUNURUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWRjdHgtPmlm bGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShkY3R4KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwor KwkJfQorKworKwkvKiBUZXN0IHRvbyBsYXJnZSBub25jZSAqLworKworKwlpZiAoZGN0eC0+bWF4 X25vbmNlKQorKwkJeworKworKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJ CQlnb3RvIGVycjsKKysKKysJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisr CQl0Lm5vbmNlbGVuID0gZGN0eC0+bWF4X25vbmNlICsgMTsKKysKKysJCWlmIChGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQkJeworKwkJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9S X1VOREVURUNURUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWRjdHgtPmlmbGFncyAm PSB+RFJCR19GTEFHX05PRVJSOworKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4 KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJfQor KworKwkvKiBJbnN0YW50aWF0ZSB3aXRoIHZhbGlkIGRhdGEuICovCisrCWlmICghZG9fZHJiZ19p bnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOworKworKwkvKiBDaGVjayBn ZW5lcmF0aW9uIGlzIG5vdyBPSyAqLworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBy YW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJ Z290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCS8q IFJlcXVlc3QgdG9vIG11Y2ggZGF0YSBmb3Igb25lIHJlcXVlc3QgKi8KKysJaWYgKEZJUFNfZHJi Z19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCBkY3R4LT5tYXhfcmVxdWVzdCArIDEsIDAsCisrCQkJ CXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUcnkgdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5w dXQgKi8KKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVu LCAwLAorKwkJCQl0ZC0+YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSkKKysJCXsKKysJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRf RVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogQ2hlY2sgcHJl ZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKKysJICog ZmFpbHVyZS4KKysJICovCisrCisrCXQuZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNfZHJiZ19n ZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAxLAorKwkJCQl0ZC0+YWRpbiwgdGQt PmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQor KwkJCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJi Z191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsK KysJCX0KKysKKysKKysJLyogSW5zdGFudGlhdGUgYWdhaW4gd2l0aCB2YWxpZCBkYXRhICovCisr CisrCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJy OworKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCisrCS8qIFNhdmUgaW5pdGlhbCBy ZXNlZWQgY291bnRlciAqLworKwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291 bnRlcjsKKysJLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLworKwlk Y3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKKysKKysJLyogR2Vu ZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVz ZWVkICovCisrCXQuZW50Y250ID0gMDsKKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwg cmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJ CWdvdG8gZXJyOworKwlpZiAodC5lbnRjbnQgIT0gMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1Jf UkVTRUVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBo YXMgYmVlbiByZXNldCAqLworKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2Nv dW50ZXJfdG1wICsgMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQor KworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7Cisr CQl9CisrCisrCS8qIENoZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlm IGVudHJvcHkgc291cmNlCisrCSAqIGZhaWx1cmUuCisrCSAqLworKworKwl0LmVudGxlbiA9IDA7 CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCWlmIChGSVBTX2RyYmdf Z2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysJCQkJdGQtPmFkaW4sIHRk LT5hZGlubGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0K KysJCQorKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysKKysJaWYgKCFGSVBT X2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBl cnI7CisrCQl9CisrCisrCisrCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQp KQorKwkJCWdvdG8gZXJyOworKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCisrCS8q IFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKwlyZXNlZWRfY291bnRlcl90bXAgPSBk Y3R4LT5yZXNlZWRfY291bnRlcjsKKysJLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBp bnRlcnZhbCAqLworKwlkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZh bDsKKysKKysJLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJl cXVlc3RlZCBmb3IgcmVzZWVkICovCisrCXQuZW50Y250ID0gMDsKKysJaWYgKCFGSVBTX2RyYmdf Z2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRk LT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOworKwlpZiAodC5lbnRjbnQgIT0gMSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9U X1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBDaGVjayBy ZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLworKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50 ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysJCWdv dG8gZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJ aWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwor KwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIEV4cGxpY2l0IHJlc2VlZCB0ZXN0cyAqLworKwor KwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0 ICovCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysK KysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJaWYgKEZJUFNfZHJiZ19y ZXNlZWQoZGN0eCwgdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkgPiAwKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfQURESVRJT05BTF9J TlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0 IGV4cGxpY2l0IHJlc2VlZCB3aXRoIGVudHJvcHkgc291cmNlIGZhaWx1cmUgKi8KKysKKysJdC5l bnRsZW4gPSAwOworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQt PmFkaW5sZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJ CX0KKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVk IHdpdGggdG9vIG11Y2ggZW50cm9weSAqLworKworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0 ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9F UlI7CisrCisrCXQuZW50bGVuID0gZGN0eC0+bWF4X2VudHJvcHkgKyAxOworKworKwlpZiAoRklQ U19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJS T1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7Cisr CQl9CisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5 ICovCisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsK KysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJdC5lbnRsZW4gPSBk Y3R4LT5taW5fZW50cm9weSAtIDE7CisrCisrCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRk LT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdv dG8gZXJyOworKwkJfQorKworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJcCA9ICh1bnNpZ25l ZCBjaGFyICopJmRjdHgtPmQ7CisrCS8qIFN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0byBjaGVjayB1 bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMKKysJICogdGhlIGRhdGEuLi4KKysJICovCisrCWZv ciAoaSA9IDA7IGkgPCBzaXplb2YoZGN0eC0+ZCk7IGkrKykKKysJCXsKKysJCWlmICgqcCAhPSAw KQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJ CXArKzsKKysJCX0KKysKKysJcmV0dXJuIDE7CisrCisrCWVycjoKKysJLyogQSByZWFsIGVycm9y IGFzIG9wcG9zZWQgdG8gYW4gaW5kdWNlZCBvbmU6IHVuZGVybHlpbmcgZnVuY3Rpb24gd2lsbAor KwkgKiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisrCSAqLworKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBE UkJHX0ZMQUdfTk9FUlIpKQorKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfRlVOQ1RJT05fRVJST1IpOworKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4 KTsKKysJcmV0dXJuIDA7CisrCisrCX0KKysKKytpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAq ZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKQorKwl7CisrCURSQkdfU0VMRlRFU1Rf REFUQSAqdGQ7CisrCWZsYWdzIHw9IERSQkdfRkxBR19URVNUOworKwlmb3IgKHRkID0gZHJiZ190 ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCisrCQl7CisrCQlpZiAodGQtPm5pZCA9PSBuaWQgJiYg dGQtPmZsYWdzID09IGZsYWdzKQorKwkJCXsKKysJCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0 KGRjdHgsIHRkLCAwKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJcmV0dXJuIGZpcHNfZHJiZ19lcnJv cl9jaGVjayhkY3R4LCB0ZCk7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMDsKKysJfQorKworK2lu dCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWludCBydjsK KysJRFJCR19DVFggKnRjdHggPSBOVUxMOworKwl0Y3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsK KysJZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54 ZmxhZ3MpOworKwlpZiAoIXRjdHgpCisrCQlyZXR1cm4gMDsKKysJcnYgPSBmaXBzX2RyYmdfa2F0 KHRjdHgsIGRjdHgtPnR5cGUsIGRjdHgtPnhmbGFncyk7CisrCWlmICh0Y3R4KQorKwkJRklQU19k cmJnX2ZyZWUodGN0eCk7CisrCWlmIChydikKKysJCWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVT VF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysJZWxzZQorKwkJZmlwc19wb3N0 X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrCWlm ICghcnYpCisrCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysJZWxzZQorKwkJ ZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7CisrCXJldHVybiBydjsKKysJfQorKworK2ludCBG SVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkKKysJeworKwlEUkJHX0NUWCAqZGN0eDsKKysJRFJCR19T RUxGVEVTVF9EQVRBICp0ZDsKKysJaW50IHJ2ID0gMTsKKysJZGN0eCA9IEZJUFNfZHJiZ19uZXco MCwgMCk7CisrCWlmICghZGN0eCkKKysJCXJldHVybiAwOworKwlmb3IgKHRkID0gZHJiZ190ZXN0 OyB0ZC0+bmlkICE9IDA7IHRkKyspCisrCQl7CisrCQlpZiAodGQtPnBvc3QgIT0gMSkKKysJCQlj b250aW51ZTsKKysJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5u aWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJldHVybiAxOworKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xl X2thdChkY3R4LCB0ZCwgMSkpCisrCQkJeworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNU X0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250aW51ZTsK KysJCQl9CisrCQlpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlk LCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJRklQU19kcmJnX2ZyZWUoZGN0 eCk7CisrCXJldHVybiBydjsKKysJfQorKworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxs KHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHg7CisrCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7 CisrCWludCBydiA9IDE7CisrCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOworKwlpZiAoIWRj dHgpCisrCQlyZXR1cm4gMDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0 ZCsrKQorKwkJeworKwkJaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQt Pm5pZCwgJnRkLT5mbGFncykpCisrCQkJcmV0dXJuIDE7CisrCQlpZiAoIWZpcHNfZHJiZ19zaW5n bGVfa2F0KGRjdHgsIHRkLCAwKSkKKysJCQl7CisrCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RF U1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7CisrCQkJcnYgPSAwOworKwkJCWNvbnRpbnVl OworKwkJCX0KKysJCWlmICghZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKSkKKysJCQl7 CisrCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFn cyk7CisrCQkJcnYgPSAwOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmICghZmlwc19wb3N0 X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJldHVy biAwOworKwkJfQorKwlGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysJcmV0dXJuIHJ2OworKwl9Cisr CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3Qu aC5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCist LS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcwky MDE0LTA1LTA2IDE2OjI5OjUwLjU0ODkyMzI3MSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ4OTIz MjcxICswMjAwCitAQCAtMCwwICsxLDIzMzUgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrLyog U2VsZnRlc3QgYW5kIGhlYWx0aCBjaGVjayBkYXRhIGZvciB0aGUgU1A4MDAtOTAgRFJCRyAqLwor KworKyNkZWZpbmUgX19maXBzX2NvbnN0c2VnCisrCisrLyogQUVTLTEyOCB1c2UgZGYgUFIgICov CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91 c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NjEsMHg1MiwweDdjLDB4ZTMsMHgy MywweDdkLDB4MGEsMHgwNywweDEwLDB4MGMsMHg1MCwweDMzLAorKwkweGM4LDB4ZGIsMHhmZiww eDEyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg1MSwweDBkLDB4ODUsMHg3 NywweGVkLDB4MjIsMHg5NywweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQorKwl7CisrCTB4NTksMHg5ZiwweGJiLDB4Y2QsMHhkNSwweDI1LDB4NjksMHhiNSww eGNiLDB4YjUsMHgwMywweGZlLAorKwkweGQ3LDB4ZDcsMHgwMSwweDY3CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZf cHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZWYsMHg4OCwweDc2LDB4MDEsMHhhZiww eDNjLDB4ZmUsMHg4YiwweGFmLDB4MjYsMHgwNiwweDllLAorKwkweDlhLDB4NDcsMHgwOCwweDc2 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhlMiwweDc2LDB4 ZjksMHhmNiwweDNhLDB4YmEsMHgxMCwweDlmLDB4YmYsMHg0NywweDBlLDB4NTEsCisrCTB4MDks MHhmYiwweGEzLDB4YjYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4ZDQsMHg5OCwweDhhLDB4NDYsMHg4MCwweDRjLDB4ZGIsMHhhMywweDU5LDB4MDIsMHg1 NywweDUyLAorKwkweDY2LDB4MWMsMHhlYSwweDViCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25h bGlucHV0MltdID0KKysJeworKwkweDg4LDB4OGMsMHg5MSwweGQ2LDB4YmUsMHg1NiwweDZlLDB4 MDgsMHg5YSwweDYyLDB4MmIsMHgxMSwKKysJMHgzZiwweDVlLDB4MzEsMHgwNgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGMwLDB4NWMsMHg2YiwweDk4LDB4 MDEsMHgwZCwweDU4LDB4MTgsMHg1MSwweDE4LDB4OTYsMHhhZSwKKysJMHhhNywweGUzLDB4YTgs MHg2NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGNmLDB4MDEs MHhhYywweDIyLDB4MzEsMHgwNiwweDhlLDB4ZmMsMHhjZSwweDU2LDB4ZWEsMHgyNCwKKysJMHgw ZiwweDM4LDB4NDMsMHhjNgorKwl9OworKworKworKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBSICAq LworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDFmLDB4OGUsMHgzNCwweDgyLDB4MGMs MHhiNywweGJlLDB4YzUsMHgwMSwweDNlLDB4ZDAsMHhhMywKKysJMHg5ZCwweDdkLDB4MWMsMHg5 YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX25vbmNlW10gPQorKwl7CisrCTB4ZDUsMHg0ZCwweGJkLDB4NGEsMHg5 MywweDdmLDB4YjgsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweGFiLDB4ZDYsMHgzZiwweDA0LDB4ZmUsMHgyNywweDZiLDB4MmQsMHhkNywweGMz LDB4MWMsMHhmMywKKysJMHgzOCwweDY2LDB4YmEsMHgxYgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9u YWxpbnB1dFtdID0KKysJeworKwkweGZlLDB4ZjQsMHgwOSwweGE4LDB4YjcsMHg3MywweDI3LDB4 OWMsMHg1ZiwweGE3LDB4ZWEsMHg0NiwKKysJMHhiNSwweGUyLDB4YjIsMHg0MQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0MiwweGU0LDB4NGUsMHg3YiwweDI3 LDB4ZGQsMHhjYiwweGJjLDB4MGEsMHhjZiwweGE2LDB4NjcsCisrCTB4ZTcsMHg1NywweDExLDB4 YjQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHgxNCwweDI2 LDB4NjksMHhkOSwweGYzLDB4NjUsMHgwMywweGQ2LDB4NmIsMHhiOSwweDQ0LDB4MGIsCisrCTB4 YzcsMHhjNCwweDllLDB4MzkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 CisrCXsKKysJMHg1NSwweDJlLDB4NjAsMHg5YSwweDA1LDB4NzIsMHg4YSwweGE4LDB4ZWYsMHgy MiwweDgxLDB4NWEsCisrCTB4YzgsMHg5MywweGZhLDB4ODQKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlv bmFsaW5wdXQyW10gPQorKwl7CisrCTB4M2MsMHg0MCwweGM4LDB4YzQsMHgxNiwweDBjLDB4MjEs MHhhNCwweDM3LDB4MmMsMHg4ZiwweGE1LAorKwkweDA2LDB4MGMsMHgxNSwweDJjCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91 c2VfZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTEsMHgzZSwweDk5LDB4OTgsMHg4Niww eDY3LDB4MGIsMHg2MywweDdiLDB4YmUsMHgzZiwweDg4LAorKwkweDQ2LDB4ODEsMHhjNywweDE5 CisrCX07CisrCisrCisrLyogQUVTLTE5MiB1c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlu cHV0W10gPQorKwl7CisrCTB4MmIsMHg0ZSwweDhiLDB4ZTEsMHhmMSwweDM0LDB4ODAsMHg1Niww eDgxLDB4ZjksMHg3NCwweGVjLAorKwkweDE3LDB4NDQsMHgyYSwweGYxLDB4MTQsMHhiMCwweGJm LDB4OTcsMHgzOSwweGI3LDB4MDQsMHg3ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX25vbmNlW10gPQorKwl7 CisrCTB4ZDYsMHg5ZCwweGViLDB4MTQsMHg0ZSwweDZjLDB4MzAsMHgxZSwweDM5LDB4NTUsMHg3 MywweGQwLAorKwkweGQxLDB4ODAsMHg3OCwweGZhCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZmMsMHg0MywweDRhLDB4ZjgsMHg5YSwweDU1LDB4 YjMsMHg1MywweDgzLDB4ZTIsMHgxOCwweDE2LAorKwkweDBjLDB4ZGMsMHhjZCwweDVlLDB4NGYs MHhhMCwweDAzLDB4MDEsMHgyYiwweDlmLDB4ZTQsMHhkNSwKKysJMHg3ZCwweDQ5LDB4ZjAsMHg0 MSwweDllLDB4M2QsMHg5OSwweDA0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10g PQorKwl7CisrCTB4NWUsMHg5ZiwweDQ5LDB4NmYsMHgyMSwweDhiLDB4MWQsMHgzMiwweGQ1LDB4 ODQsMHg1YywweGFjLAorKwkweGFmLDB4ZGYsMHhlNCwweDc5LDB4OWUsMHhhZiwweGE5LDB4ODIs MHhkMCwweGY4LDB4NGYsMHhjYiwKKysJMHg2OSwweDEwLDB4MGEsMHg3ZSwweDgxLDB4NTcsMHhi NSwweDM2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhkNCww eDgxLDB4MGMsMHhkNywweDY2LDB4MzksMHhlYywweDQyLDB4NTMsMHg4NywweDQxLDB4YTUsCisr CTB4MWUsMHg3ZCwweDgwLDB4OTEsMHg4ZSwweGJiLDB4ZWQsMHhhYywweDE0LDB4MDIsMHgxYSww eGQ1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGRmLDB4 MWQsMHgzOSwweDQ1LDB4N2MsMHg5YiwweGM2LDB4MmIsMHg3ZCwweDhjLDB4OTMsMHhlOSwKKysJ MHgxOSwweDMwLDB4NmIsMHg2NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 CisrCXsKKysJMHgwMCwweDcxLDB4MjcsMHg0ZSwweGQzLDB4MTQsMHhmMSwweDIwLDB4N2YsMHg0 YSwweDQxLDB4MzIsCisrCTB4MmEsMHg5NywweDExLDB4NDMsMHg4ZiwweDRhLDB4MTUsMHg3Yiww eDliLDB4NTEsMHg3OSwweGRhLAorKwkweDQ5LDB4M2QsMHhkZSwweGU4LDB4YmMsMHg5MywweDkx LDB4OTkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHg5MCww eGVlLDB4NzYsMHhhMSwweDQ1LDB4OGQsMHhiNywweDQwLDB4YjAsMHgxMSwweGJmLDB4ZDAsCisr CTB4NjUsMHhkNywweDNjLDB4N2MsMHg0ZiwweDIwLDB4M2YsMHg0ZSwweDExLDB4OWQsMHhiMyww eDVlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MjQsMHgzYiww eDIwLDB4YTQsMHgzNywweDY2LDB4YmEsMHg3MiwweDM5LDB4M2YsMHhjZiwweDNjLAorKwkweDdl LDB4MWEsMHgyYiwweDgzCisrCX07CisrCisrCisrLyogQUVTLTE5MiB1c2UgZGYgTm8gUFIgICov CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91 c2VfZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4OGQsMHg3NCwweGE0LDB4NTAsMHgxYSww eDAyLDB4NjgsMHgwYywweDJhLDB4NjksMHhjNCwweDgyLAorKwkweDNiLDB4YmIsMHhkYSwweDBl LDB4N2YsMHg3NywweGEzLDB4MTcsMHg3OCwweDU3LDB4YjIsMHg3YgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX25v bmNlW10gPQorKwl7CisrCTB4NzUsMHhkNSwweDFmLDB4YWMsMHhhNCwweDhkLDB4NDIsMHg3OCww eGQ3LDB4NjksMHg4NiwweDlkLAorKwkweDc3LDB4ZDcsMHg0MSwweDBlCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NGUsMHgzMywweDQxLDB4M2MsMHg5 YywweGMyLDB4ZDIsMHg1MywweGFmLDB4OTAsMHhlYSwweGNmLAorKwkweDE5LDB4NTAsMHgxZSww eGU2LDB4NmYsMHg2MywweGM4LDB4MzIsMHgyMiwweGRjLDB4MDcsMHg2NSwKKysJMHg5YywweGQz LDB4ZjgsMHgzMCwweDllLDB4ZWQsMHgzNSwweDcwCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlu cHV0W10gPQorKwl7CisrCTB4NWQsMHg4YiwweDhjLDB4YzEsMHhkZiwweDBlLDB4MDIsMHg3OCww eGZiLDB4MTksMHhiOCwweDY5LAorKwkweDc4LDB4NGUsMHg5YywweDUyLDB4YmMsMHhjNywweDIw LDB4YzksMHhlNiwweDVlLDB4NzcsMHgyMiwKKysJMHgyOCwweDNkLDB4MGMsMHg5ZSwweDY4LDB4 YTgsMHg0NSwweGQ3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eGQ1LDB4ZTcsMHgwOCwweGM1LDB4MTksMHg5OSwweGQ1LDB4MzEsMHgwMywweDBhLDB4NzQsMHhi NiwKKysJMHhiNywweGVkLDB4ZTksMHhlYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0KKysJeworKwkweDljLDB4MjYsMHhkYSwweGYxLDB4YWMsMHhkOSwweDVhLDB4ZDYsMHhh OCwweDY1LDB4ZjUsMHgwMiwKKysJMHg4ZiwweGRjLDB4YTIsMHgwOSwweDU0LDB4YTYsMHhlMiww eGE0LDB4ZGUsMHgzMiwweGUwLDB4MDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHg5YiwweDkwLDB4YjAsMHgzYSwweDBlLDB4M2EsMHg4MCwweDA3LDB4 NGEsMHhmNCwweGRhLDB4NzYsCisrCTB4MjgsMHgzMCwweDNjLDB4ZWUsMHg1NCwweDFiLDB4OTQs MHg1OSwweDUxLDB4NDMsMHg1NiwweDc3LAorKwkweGFmLDB4ODgsMHhkZCwweDYzLDB4ODksMHg0 NywweDA2LDB4NjUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 M2MsMHgxMSwweDY0LDB4N2EsMHg5NiwweGY1LDB4ZDgsMHhiOCwweGFlLDB4ZDYsMHg3MCwweDRl LAorKwkweDE2LDB4OTYsMHhkZSwweGU5LDB4NjIsMHhiYywweGVlLDB4MjgsMHgyZiwweDI2LDB4 YTYsMHhmMCwKKysJMHg1NiwweGVmLDB4YTMsMHhmMSwweDZiLDB4YTEsMHhiMSwweDc3CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MGIsMHhlMiwweDU2LDB4MDMsMHgx ZSwweGRiLDB4MmMsMHg2ZCwweDdmLDB4MWIsMHgxNSwweDU4LAorKwkweDFhLDB4ZjksMHgxMyww eDI4CisrCX07CisrCisrCisrLyogQUVTLTI1NiB1c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9w eWlucHV0W10gPQorKwl7CisrCTB4NjEsMHg2OCwweGZjLDB4MWEsMHhmMCwweGI1LDB4OTUsMHg2 YiwweDg1LDB4MDksMHg5YiwweDc0LAorKwkweDNmLDB4MTMsMHg3OCwweDQ5LDB4M2IsMHg4NSww eGVjLDB4OTMsMHgxMywweDNiLDB4YTksMHg0ZiwKKysJMHg5NiwweGFiLDB4MmMsMHhlNCwweGM4 LDB4OGYsMHhkZCwweDZhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhhZCww eGQyLDB4YmIsMHhiYSwweGI3LDB4NjUsMHg4OSwweGMzLDB4MjEsMHg2YywweDU1LDB4MzMsCisr CTB4MmIsMHgzNiwweGZmLDB4YTQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9CisrCXsKKysJMHg2ZSwweGNhLDB4ZTcsMHgyMCwweDcyLDB4ZDMsMHg4NCwweDVhLDB4 MzIsMHhkMywweDRiLDB4MjQsCisrCTB4NzIsMHhjNCwweDYzLDB4MmIsMHg5ZCwweDEyLDB4MjQs MHgwYywweDIzLDB4MjYsMHg4ZSwweDgzLAorKwkweDE2LDB4MzcsMHgwYiwweGQxLDB4MDYsMHg0 ZiwweDY4LDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHg3ZSwweDA4LDB4NGEsMHhiYiwweGUzLDB4MjEsMHg3YywweGM5LDB4MjMsMHhkMiwweGY4LDB4 YjAsCisrCTB4NzMsMHg5OCwweGJhLDB4ODQsMHg3NCwweDIzLDB4YWIsMHgwNiwweDhhLDB4ZTIs MHgyMiwweGQzLAorKwkweDdiLDB4Y2UsMHg5YiwweGQyLDB4NGEsMHg3NiwweGI4LDB4ZGUKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDBiLDB4MjMsMHhhZiww eGRmLDB4ZjEsMHg2MiwweGQ3LDB4ZDMsMHg0MywweDk3LDB4ZjgsMHg3NywKKysJMHgwNCwweGE4 LDB4NDIsMHgyMCwweGJkLDB4ZjYsMHgwZiwweGMxLDB4MTcsMHgyZiwweDlmLDB4NTQsCisrCTB4 YmIsMHg1NiwweDE3LDB4ODYsMHg2OCwweDBlLDB4YmEsMHhhOQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgzMSwweDhlLDB4YWQsMHhhZiwweDQwLDB4ZWIs MHg2YiwweDc0LDB4MzEsMHg0NiwweDgwLDB4YzcsCisrCTB4MTcsMHhhYiwweDNjLDB4N2EKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OTQsMHg2YiwweGM5 LDB4OWYsMHhhYiwweDhkLDB4YzUsMHhlYywweDcxLDB4ODgsMHgxZCwweDAwLAorKwkweDhjLDB4 ODksMHg2OCwweGU0LDB4YzgsMHgwNywweDc3LDB4MzYsMHgxNywweDZkLDB4NzksMHg3OCwKKysJ MHhjNywweDA2LDB4NGUsMHg5OSwweDA0LDB4MjgsMHgyOSwweGMzCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJf ZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4YmYsMHg2YywweDU5LDB4MmEsMHgwZCwweDQ0 LDB4MGYsMHhhZSwweDlhLDB4NWUsMHgwMywweDczLAorKwkweGQ4LDB4YTYsMHhlMSwweGNmLDB4 MjUsMHg2MSwweDM4LDB4MjQsMHg4NiwweDllLDB4NTMsMHhlOCwKKysJMHhhNCwweGRmLDB4NTYs MHhmNCwweDA2LDB4MDcsMHg5YywweDBmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4MjIsMHg0YSwweGI0LDB4YjgsMHhiNiwweGVlLDB4N2QsMHhiMSwweDllLDB4 YzksMHhmOSwweGEwLAorKwkweGQ5LDB4ZTIsMHg5NywweDAwCisrCX07CisrCisrCisrLyogQUVT LTI1NiB1c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YTUs MHgzZSwweDM3LDB4MTAsMHgxNywweDQzLDB4OTEsMHg5MywweDU5LDB4MWUsMHg0NywweDUwLAor KwkweDg3LDB4YWEsMHhkZCwweGQ1LDB4YzEsMHhjMywweDg2LDB4Y2QsMHhjYSwweDBkLDB4ZGIs MHg2OCwKKysJMHhlMCwweDAyLDB4ZDgsMHgwZiwweGRjLDB4NDAsMHgxYSwweDQ3CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfbm9uY2VbXSA9CisrCXsKKysJMHhhOSwweDRkLDB4YTUsMHg1YSwweGZkLDB4YzUsMHgw YywweGU1LDB4MWMsMHg5YSwweDNiLDB4OGEsCisrCTB4NGMsMHg0NCwweDg0LDB4NDAKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg4YiwweDUyLDB4YTIs MHg0YSwweDkzLDB4YzMsMHg0ZSwweGE3LDB4MWUsMHgxYywweGE3LDB4MDUsCisrCTB4ZWIsMHg4 MiwweDliLDB4YTYsMHg1ZCwweGU0LDB4ZDQsMHhlMCwweDdmLDB4YTMsMHhkOCwweDZiLAorKwkw eDM3LDB4ODQsMHg1ZiwweGYxLDB4YzcsMHhkNSwweGY2LDB4ZDIKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRp dGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgyMCwweGY0LDB4MjIsMHhlZCwweGY4LDB4NWMsMHhh MSwweDZhLDB4MDEsMHhjZiwweGJlLDB4NWYsCisrCTB4OGQsMHg2YywweDk0LDB4N2YsMHhhZSww eDEyLDB4YTgsMHg1NywweGRiLDB4MmEsMHhhOSwweGJmLAorKwkweGM3LDB4YjMsMHg2NSwweDgx LDB4ODAsMHg4ZCwweDBkLDB4NDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4NGUsMHg0NCwweGZkLDB4ZjMsMHg5ZSwweDI5LDB4YTIsMHhiOCwweDBmLDB4NWQs MHg2YywweGUxLAorKwkweDI4LDB4MGMsMHgzYiwweGMxCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4ZGQsMHg0MCwweGU1LDB4OTgsMHg3YiwweDI3LDB4MTYs MHg3MywweDE1LDB4NjgsMHhkMiwweDc2LAorKwkweGJmLDB4MGMsMHg2NywweDE1LDB4NzUsMHg3 OSwweDAzLDB4ZDMsMHhkZSwweGRlLDB4OTEsMHg0NiwKKysJMHg0MiwweGRkLDB4ZDQsMHg2Nyww eGM4LDB4NzksMHhjOCwweDFlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10g PQorKwl7CisrCTB4N2YsMHhkOCwweDFmLDB4YmQsMHgyYSwweGI1LDB4MWMsMHgxMSwweDVkLDB4 ODMsMHg0ZSwweDk5LAorKwkweGY2LDB4NWMsMHhhNSwweDQwLDB4MjAsMHhlZCwweDM4LDB4OGUs MHhkNSwweDllLDB4ZTAsMHg3NSwKKysJMHg5MywweGZlLDB4MTIsMHg1ZSwweDVkLDB4NzMsMHhm YiwweDc1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGNkLDB4 MmMsMHhmZiwweDE0LDB4NjksMHgzZSwweDRjLDB4OWUsMHhmZCwweGZlLDB4MjYsMHgwZCwKKysJ MHhlOSwweDg2LDB4MDAsMHg0OSwweDMwLDB4YmEsMHhiMSwweGM2LDB4NTAsMHg1NywweDc3LDB4 MmEsCisrCTB4NjIsMHgzOSwweDJjLDB4M2IsMHg3NCwweGViLDB4YzksMHgwZAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDRmLDB4NzgsMHhiZSwweGI5LDB4NGQsMHg5 NywweDhjLDB4ZTksMHhkMCwweDk3LDB4ZmUsMHhhZCwKKysJMHhmYSwweGZkLDB4MzUsMHg1ZQor Kwl9OworKworKworKy8qIEFFUy0xMjggbm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHg5YSwweDI1LDB4NjUsMHgxMCwweDY3LDB4ZDUsMHhiNiwweDZiLDB4NzAs MHhhMSwweGIzLDB4YTQsCisrCTB4NDMsMHg5NSwweDgwLDB4YzAsMHg4NCwweDBhLDB4NzksMHhi MCwweDg4LDB4NzQsMHhmMiwweGJmLAorKwkweDMxLDB4NmMsMHgzMywweDM4LDB4MGIsMHgwMCww eGIyLDB4NWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4NzgsMHg0NywweDZi LDB4ZjcsMHg5MCwweDhlLDB4ODcsMHhmMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQorKwl7CisrCTB4ZjcsMHgyMiwweDFkLDB4M2EsMHhiZSwweDFkLDB4Y2EsMHgz MiwweDFiLDB4YmQsMHg4NywweDBjLAorKwkweDUxLDB4MjQsMHgxOSwweGVlLDB4YTMsMHgyMyww eDA5LDB4NjMsMHgzMywweDNkLDB4YTgsMHgwYywKKysJMHgxYywweGZhLDB4NDIsMHg4OSwweGNj LDB4NmYsMHhhMCwweGE4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHhjOSwweGUwLDB4ODAsMHhiZiwweDhjLDB4NDUsMHg1OCwweDM5LDB4ZmYsMHgwMCwweGFi LDB4MDIsCisrCTB4NGMsMHgzZSwweDNhLDB4OTUsMHg5YiwweDgwLDB4YTgsMHgyMSwweDJhLDB4 ZWUsMHhiYSwweDczLAorKwkweGIxLDB4ZDksMHhjZiwweDI4LDB4ZjYsMHg4ZiwweDliLDB4MTIK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4NGMsMHhhOCwweGM1 LDB4ZjAsMHg1OSwweDllLDB4YTYsMHg4ZCwweDI2LDB4NTMsMHhkNywweDhhLAorKwkweGE5LDB4 ZDgsMHhmNywweGVkLDB4YjIsMHhmOSwweDEyLDB4NDIsMHhlMSwweGU1LDB4YmQsMHhlNywKKysJ MHhlNywweDFkLDB4NzQsMHg5OSwweDAwLDB4OWQsMHgzMSwweDNlCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9p bnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTIsMHhhYywweDIwLDB4ZjAsMHg4MCwweGU3 LDB4YmMsMHg3ZSwweDljLDB4N2IsMHg2NSwweDcxLAorKwkweGFmLDB4MTksMHgzMiwweDE2Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MzIsMHg3ZiwweDM4 LDB4OGIsMHg3MywweDBhLDB4NzgsMHg4MywweGRjLDB4MzAsMHhiZSwweDlmLAorKwkweDEwLDB4 MWYsMHhmNSwweDFmLDB4Y2EsMHgwMCwweGI1LDB4MGQsMHhkNiwweDlkLDB4NjAsMHg4MywKKysJ MHg1MSwweDU0LDB4N2QsMHgzOCwweDIzLDB4M2EsMHg1MiwweDUwCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgxOCwweDYxLDB4NTMsMHg1NiwweGVkLDB4ZWQs MHhkNywweDIwLDB4ZmIsMHg3MSwweDA0LDB4N2EsCisrCTB4YjIsMHhhYywweGMxLDB4MjgsMHhj ZCwweGYyLDB4YzIsMHhmYywweGFhLDB4YjEsMHgwNiwweDA3LAorKwkweGU5LDB4NDYsMHg5NSww eDAyLDB4NDgsMHgwMSwweDc4LDB4ZjkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0K KysJeworKwkweDI5LDB4YzgsMHgxYiwweDE1LDB4YjEsMHhkMSwweGMyLDB4ZjYsMHg3MSwweDg2 LDB4NjgsMHgzMywKKysJMHg1NywweDgyLDB4MzMsMHhhZgorKwl9OworKworKworKy8qIEFFUy0x Mjggbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhjOSwweGM1 LDB4NzksMHhiYywweGU4LDB4YzUsMHgxOSwweGQ4LDB4YmMsMHg2NiwweDczLDB4NjcsCisrCTB4 ZjYsMHhkMywweDcyLDB4YWEsMHhhNiwweDE2LDB4YjgsMHg1MCwweGI3LDB4NDcsMHgzYSwweDQy LAorKwkweGFiLDB4ZjQsMHgxNiwweGIyLDB4OTYsMHhkMiwweGI2LDB4NjAKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X25vbmNlW10gPQorKwl7CisrCTB4NWYsMHhiZiwweDk3LDB4MGMsMHg0YiwweGE0LDB4ODcsMHgx MworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4Y2UsMHhm YiwweDdiLDB4M2YsMHhkNCwweDZiLDB4MjksMHgwZCwweDY5LDB4MDYsMHhmZiwweGJiLAorKwkw eGYyLDB4ZTUsMHhjNiwweDZjLDB4MGEsMHgxMCwweGEwLDB4Y2YsMHgxYSwweDQ4LDB4YzcsMHg4 YiwKKysJMHgzYywweDE2LDB4ODgsMHhlZCwweDUwLDB4MTMsMHg4MSwweGNlCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19k Zl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg0YiwweDIyLDB4NDYsMHgxOCwweDAyLDB4 N2IsMHhkMiwweDFiLDB4MjIsMHg0MiwweDdjLDB4MzcsCisrCTB4ZDksMHhmNiwweGU4LDB4OWIs MHgxMiwweDMwLDB4NWYsMHhlOSwweDkwLDB4ZTgsMHgwOCwweDI0LAorKwkweDRmLDB4MDYsMHg2 NiwweGRiLDB4MTksMHgyYiwweDEzLDB4OTUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2ludF9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHgyZSwweDk2LDB4NzAsMHg2NCwweGZhLDB4ZGYsMHhkZiwweDU3LDB4YjUs MHg4MiwweGVlLDB4ZDYsCisrCTB4ZWQsMHgzZSwweDY1LDB4YzIKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJv cHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDI2LDB4YzAsMHg3MiwweDE2LDB4M2EsMHg0Yiww eGI3LDB4OTksMHhkNCwweDA3LDB4YWYsMHg2NiwKKysJMHg2MiwweDM2LDB4OTYsMHhhNCwweDUx LDB4MTcsMHhmYSwweDA3LDB4OGIsMHgxNywweDVlLDB4YTEsCisrCTB4MmYsMHgzYywweDEwLDB4 ZTcsMHg5MCwweGQwLDB4NDYsMHgwMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4ODMsMHgzOSwweDM3LDB4N2IsMHgwMiwweDA2LDB4ZDIsMHgxMiwweDEz LDB4OGQsMHg4YiwweGYyLAorKwkweGYwLDB4ZjYsMHgyNiwweGViLDB4YTQsMHgyMiwweDdiLDB4 YzIsMHhlNywweGJhLDB4NzksMHhlNCwKKysJMHgzYiwweDc3LDB4NWQsMHg0ZCwweDQ3LDB4YjIs MHgyZCwweGI0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MGIs MHhiOSwweDY3LDB4MzcsMHhkYiwweDgzLDB4ZGYsMHhjYSwweDgxLDB4OGIsMHhmOSwweDNmLAor KwkweGYxLDB4MTEsMHgxYiwweDJmLDB4ZjAsMHg2MSwweGE2LDB4ZGYsMHhiYSwweGEzLDB4YjEs MHhhYywKKysJMHhkMywweGU2LDB4MDksMHhiOCwweDJjLDB4NmEsMHg2NywweGQ2CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgxZSwweGE3LDB4YTQsMHhlNCwweGUxLDB4 YTYsMHg3YywweDY5LDB4OWEsMHg0NCwweDZjLDB4MzYsCisrCTB4ODEsMHgzNywweDE5LDB4ZDQK KysJfTsKKysKKysKKysvKiBBRVMtMTkyIG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0 W10gPQorKwl7CisrCTB4OWQsMHgyYywweGQyLDB4NTUsMHg2NiwweGVhLDB4ZTAsMHhiZSwweDE4 LDB4YjcsMHg3NiwweGU3LAorKwkweDczLDB4MzUsMHhkOCwweDFmLDB4YWQsMHgzYSwweGUzLDB4 ODEsMHgwZSwweDkyLDB4ZDAsMHg2MSwKKysJMHhjOSwweDEyLDB4MjYsMHhmNiwweDFjLDB4ZGYs MHhmZSwweDQ3LDB4YWEsMHhmZSwweDdkLDB4NWEsCisrCTB4MTcsMHgxZiwweDhkLDB4OWEKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX25vX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4NDQsMHg4MiwweGVkLDB4ZTgsMHg0Yyww eDI4LDB4NWEsMHgxNCwweGZmLDB4ODgsMHg4ZCwweDE5LAorKwkweDYxLDB4NWMsMHhlZSwweDBm CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg0Nyww eGQ3LDB4OWIsMHg5OSwweGFhLDB4Y2IsMHhlNywweGQyLDB4NTcsMHg2NiwweDJjLDB4ZTEsCisr CTB4NzgsMHhkNiwweDJjLDB4ZWEsMHhhMywweDIzLDB4NWYsMHgyYSwweGMxLDB4M2EsMHhmMCww eGE0LAorKwkweDIwLDB4M2IsMHhmYSwweDA3LDB4ZDUsMHgwNSwweDAyLDB4ZTQsMHg1NywweDAx LDB4YjYsMHgxMCwKKysJMHg1NywweDJlLDB4ZTcsMHg1NQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRp b25hbGlucHV0W10gPQorKwl7CisrCTB4NGIsMHg3NCwweDBiLDB4NDAsMHhjZSwweDZiLDB4YzIs MHg2YSwweDI0LDB4YjQsMHhmMywweGFkLAorKwkweDdhLDB4YTUsMHg3YSwweGEyLDB4MTUsMHhl MiwweGM4LDB4NjEsMHgxNSwweGM2LDB4YjcsMHg4NSwKKysJMHg2OSwweDExLDB4YWQsMHg3Yiww eDE0LDB4ZDIsMHhmNiwweDEyLDB4YTEsMHg5NSwweDVkLDB4M2YsCisrCTB4ZTIsMHhkMCwweDBj LDB4MmYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4MGMsMHg5 YywweGFkLDB4MDUsMHhlZSwweGFlLDB4NDgsMHgyMywweDg5LDB4NTksMHhhMSwweDk0LAorKwkw eGQ3LDB4ZDgsMHg3NSwweGQ1LDB4NTQsMHg5MywweGM3LDB4NGEsMHhkOSwweDI2LDB4ZGUsMHhl YiwKKysJMHhiYSwweGIwLDB4N2UsMHgzMCwweDFkLDB4NWYsMHg2OSwweDQwLDB4OWMsMHgzYiww eDE3LDB4NTgsCisrCTB4MWQsMHgzMCwweGIzLDB4NzgKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2ludF9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHhmNywweDkzLDB4YjAsMHg2ZCwweDc3LDB4ODMsMHhkNSww eDM4LDB4MDEsMHhlMSwweDUyLDB4NDAsCisrCTB4N2UsMHgzZSwweDBjLDB4MjYKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhiYywweDRiLDB4MzcsMHg0NCww eDFjLDB4YzUsMHg0NSwweDVmLDB4OGYsMHg1MSwweDYyLDB4OGEsCisrCTB4ODUsMHgzMCwweDFk LDB4N2MsMHhlNCwweGNmLDB4ZjcsMHg0NCwweGNlLDB4MzIsMHgzZSwweDU3LAorKwkweDk1LDB4 YTQsMHgyYSwweGRmLDB4ZmQsMHg5ZSwweDM4LDB4NDEsMHhiMywweGY2LDB4YzUsMHhlZSwKKysJ MHgwYywweDRiLDB4ZWUsMHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQor Kwl7CisrCTB4ZWMsMHhhZiwweGY2LDB4NGYsMHhiMSwweGEwLDB4NTQsMHhiNSwweDViLDB4ZTMs MHg0NiwweGIwLAorKwkweDc2LDB4NWEsMHg3YywweDNmLDB4N2IsMHg5NCwweDY5LDB4MjEsMHg1 MSwweDAyLDB4ZTUsMHg5ZiwKKysJMHgwNCwweDU5LDB4MDIsMHg5OCwweGM2LDB4NDMsMHgyYyww eGNjLDB4MjYsMHg0YywweDg3LDB4NmIsCisrCTB4OGUsMHgwYSwweDgzLDB4ZGYKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDc0LDB4NDUsMHhmYiwweDUzLDB4ODQs MHg5NiwweGJlLDB4ZmYsMHgxNSwweGNjLDB4NDEsMHg5MSwKKysJMHhiOSwweGExLDB4MjEsMHg2 OAorKwl9OworKworKworKy8qIEFFUy0xOTIgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5aW5w dXRbXSA9CisrCXsKKysJMHgzYywweDdkLDB4YjUsMHhlMCwweDU0LDB4ZDksMHg2ZSwweDhjLDB4 YTksMHg4NiwweGNlLDB4NGUsCisrCTB4NmIsMHhhZiwweGViLDB4MmYsMHhlNywweDc1LDB4ZTAs MHg4YiwweGE0LDB4M2IsMHgwNywweGZlLAorKwkweGJlLDB4MzMsMHg3NSwweDkzLDB4ODAsMHgy NywweGI1LDB4MjksMHg0NywweDhiLDB4YzcsMHgyOCwKKysJMHg5NCwweGMzLDB4NTksMHg2Mwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfbm9fZGZfbm9uY2VbXSA9CisrCXsKKysJMHg0MywweGYxLDB4N2QsMHhiOCwweGMzLDB4 ZmUsMHhkMCwweDIzLDB4NmIsMHhiNCwweDkyLDB4ZGIsCisrCTB4MjksMHhmZCwweDQ1LDB4NzEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDlmLDB4MjQs MHgyOSwweDk5LDB4OWUsMHgwMSwweGFiLDB4ZTksMHgxOSwweGQ4LDB4MjMsMHgwOCwKKysJMHhi NywweGQ2LDB4N2UsMHg4YywweGMwLDB4OWUsMHg3ZiwweDZlLDB4NWIsMHgzMywweDIwLDB4OTYs CisrCTB4MGIsMHgyMywweDJjLDB4YTUsMHg2YSwweGY4LDB4MWIsMHgwNCwweDI2LDB4ZGIsMHgy ZSwweDJiLAorKwkweDNiLDB4ODgsMHhjZSwweDM1CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5w dXRbXSA9CisrCXsKKysJMHg5NCwweGU5LDB4N2MsMHgzZCwweGE3LDB4ZGIsMHg2MCwweDgzLDB4 MWYsMHg5OCwweDNmLDB4MGIsCisrCTB4ODgsMHg1OSwweDU3LDB4NTEsMHg4OCwweDlmLDB4NzYs MHg0OSwweDlmLDB4YTYsMHhkYSwweDcxLAorKwkweDFkLDB4MGQsMHg0NywweDE2LDB4NjMsMHhj NSwweDY4LDB4ZTQsMHg1ZCwweDM5LDB4NjksMHhiMywKKysJMHgzZSwweGJlLDB4ZDQsMHg4ZQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGY5LDB4ZDcsMHhhZCww eDY5LDB4YWIsMHg4ZiwweDIzLDB4NTYsMHg3MCwweDE3LDB4NGYsMHgyYSwKKysJMHg0NSwweGU3 LDB4NGEsMHhjNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 YTYsMHg3MSwweDZhLDB4M2QsMHhiYSwweGQxLDB4ZTgsMHg2NiwweGE2LDB4ZWYsMHhiMiwweDBl LAorKwkweGE4LDB4OWMsMHhhYSwweDRlLDB4YWYsMHgxNywweDg5LDB4NTAsMHgwMCwweGRhLDB4 YTEsMHhiMSwKKysJMHgwYiwweGE0LDB4ZDksMHgzNSwweDg5LDB4YzgsMHhlNSwweGIwLDB4ZDks MHhiNywweGM0LDB4MzMsCisrCTB4OWIsMHhjYiwweDdlLDB4NzUKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDI3LDB4MjEsMHhmYywweGMyLDB4YmQsMHhm MywweDNjLDB4Y2UsMHhjMywweGNhLDB4YzEsMHgwMSwKKysJMHhlMCwweGZmLDB4OTMsMHgxMiww eDdkLDB4NTQsMHg0MiwweGUzLDB4OWYsMHgwMywweGRmLDB4MjcsCisrCTB4MDQsMHgwNywweDNj LDB4NTMsMHg3ZiwweGE4LDB4NjYsMHhjOCwweDk3LDB4NGIsMHg2MSwweDQwLAorKwkweDVkLDB4 N2EsMHgyNSwweDc5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 MmQsMHg4ZSwweDE2LDB4NWQsMHgwYiwweDlmLDB4ZWIsMHhhYSwweGQ2LDB4ZWMsMHgyOCwweDcx LAorKwkweDdjLDB4MGIsMHhjMSwweDFkLDB4ZDQsMHg0NCwweDE5LDB4NDcsMHhmZCwweDFkLDB4 N2MsMHhlNSwKKysJMHhmMywweDI3LDB4ZTEsMHhiNiwweDcyLDB4MGEsMHhlMCwweGVjLDB4MGUs MHhjZCwweGVmLDB4MWEsCisrCTB4OTEsMHg2YSwweGUzLDB4NWYKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3JldHVy bmVkYml0c1tdID0KKysJeworKwkweGU1LDB4ZGEsMHhiOCwweGUwLDB4NjMsMHg1OSwweDVhLDB4 Y2MsMHgzZCwweGRjLDB4OWYsMHhlOCwKKysJMHg2NiwweDY3LDB4MmMsMHg5MgorKwl9OworKwor KworKy8qIEFFUy0yNTYgbm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsK KysJMHgxNSwweGM3LDB4NWQsMHhjYiwweDQxLDB4NGIsMHgxNiwweDAxLDB4M2EsMHhkMSwweDQ0 LDB4ZTgsCisrCTB4MjIsMHgzMiwweGM2LDB4OWMsMHgzZiwweGU3LDB4NDMsMHhmNSwweDlhLDB4 ZDMsMHhlYSwweGYyLAorKwkweGQ3LDB4NGUsMHg2ZSwweDZhLDB4NTUsMHg3MywweDQwLDB4ZWYs MHg4OSwweGFkLDB4MGQsMHgwMywKKysJMHg5NiwweDdlLDB4NzgsMHg4MSwweDJmLDB4OTEsMHgx YiwweDQ0LDB4YjAsMHgwMiwweGJhLDB4MWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNlW10gPQorKwl7 CisrCTB4ZGMsMHhlNCwweGQ0LDB4MjcsMHg3YSwweDkwLDB4ZDcsMHg5OSwweDQzLDB4YTEsMHgz YywweDMwLAorKwkweGNjLDB4NGIsMHhlZSwweDJlCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhlMywweGU2LDB4YjksMHgxMSwweGU0LDB4N2EsMHhh NCwweDQwLDB4NmIsMHhmOCwweDczLDB4ZjcsCisrCTB4N2UsMHhlYywweGM3LDB4YjksMHg5Nyww eGJmLDB4ZjgsMHgyNSwweDdiLDB4YmUsMHgxMSwweDliLAorKwkweDViLDB4NmEsMHgwYywweDJl LDB4MmIsMHgwMSwweDUxLDB4Y2QsMHg0MSwweDRiLDB4NmIsMHhhYywKKysJMHgzMSwweGE4LDB4 MGIsMHhmNywweGU2LDB4NTksMHg0MiwweGI4LDB4MDMsMHgwYywweGY4LDB4MDYKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDZhLDB4OWYsMHgwMCwweDkxLDB4 YWUsMHhmZSwweGNmLDB4ODQsMHg5OSwweGNlLDB4YjEsMHg0MCwKKysJMHg2ZCwweDVkLDB4MzMs MHgyOCwweDg0LDB4ZjQsMHg4YywweDYzLDB4NGMsMHg3ZSwweGJkLDB4MmMsCisrCTB4ODAsMHg3 NiwweGVlLDB4NWEsMHhhYSwweDE1LDB4MDcsMHgzMSwweGQ4LDB4YmIsMHg4YywweDY5LAorKwkw eDlkLDB4OWQsMHhiYywweDdlLDB4NDksMHhhZSwweGVjLDB4MzksMHg2YiwweGQxLDB4MWYsMHg3 ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhmMywweGI5LDB4 NzUsMHg5YywweGJkLDB4ODgsMHhlYSwweGEyLDB4NTAsMHhhZCwweGQ2LDB4MTYsCisrCTB4MWEs MHgxMiwweDNjLDB4ODYsMHg2OCwweGFmLDB4NmYsMHhiZSwweDE5LDB4ZjIsMHhlZSwweGNjLAor KwkweGE1LDB4NzAsMHg4NCwweDUzLDB4NTAsMHhjYiwweDlmLDB4MTQsMHhhOSwweGU1LDB4ZWUs MHhiOSwKKysJMHg0OCwweDQ1LDB4NDAsMHhlMiwweGM3LDB4YzksMHg5YSwweDc0LDB4ZmYsMHg4 YywweDk5LDB4MWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHgyZSwweGYyLDB4NDUsMHg0YywweDYyLDB4MmUsMHgwYSwweGI5LDB4NmIsMHhhMiwweGZkLDB4 NTYsCisrCTB4NzksMHg2MCwweDkzLDB4Y2YKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9CisrCXsKKysJMHhhZiwweDY5LDB4MjAsMHhlOSwweDNiLDB4MzcsMHg5ZCwweDNmLDB4 YjQsMHg4MCwweDAyLDB4N2EsCisrCTB4MjUsMHg3ZCwweGI4LDB4ZGUsMHg3MSwweGM1LDB4MDYs MHgwYywweGI0LDB4ZTIsMHg4ZiwweDM1LAorKwkweGQ4LDB4MTQsMHgwZCwweDdmLDB4NzYsMHg2 MywweDRlLDB4YjUsMHhlZSwweGU5LDB4NmYsMHgzNCwKKysJMHhjNywweDVmLDB4NTYsMHgxNCww eDRhLDB4ZTgsMHg3MywweDk1LDB4NWIsMHgxYywweGI5LDB4Y2IKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2Vu dHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGU1LDB4YjAsMHgyZSwweDdlLDB4NTIsMHgzMCww eGUzLDB4NjMsMHg4MiwweGI2LDB4NDQsMHhkMywKKysJMHgyNSwweDE5LDB4MDUsMHgyNCwweDlh LDB4OWYsMHg1ZiwweDI3LDB4NmEsMHgyOSwweGFiLDB4ZmEsCisrCTB4MDcsMHhhMiwweDQyLDB4 MGYsMHhjNSwweGE4LDB4OTQsMHg3YywweDE3LDB4N2IsMHg4NSwweDgzLAorKwkweDBjLDB4MjUs MHgwZSwweDYzLDB4MGIsMHhlOSwweDEyLDB4NjAsMHhjZCwweGVmLDB4ODAsMHgwZgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf bm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NWUsMHhmMiwweDI2LDB4ZWYsMHg5 ZiwweDU4LDB4NWQsMHhkNSwweDRhLDB4MTAsMHhmZSwweGE3LAorKwkweDJkLDB4NWYsMHg0YSww eDQ2CisrCX07CisrCisrCisrLyogQUVTLTI1NiBubyBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlp bnB1dFtdID0KKysJeworKwkweGZiLDB4Y2YsMHgxYiwweDYxLDB4MTYsMHg4OSwweDc4LDB4MjMs MHhmNSwweGQ4LDB4OTYsMHhlMywKKysJMHg0ZSwweDY0LDB4MGIsMHgyOSwweDlhLDB4M2YsMHhm OCwweGE1LDB4ZWQsMHhmMiwweGZlLDB4ZGIsCisrCTB4MTYsMHhjYSwweDdmLDB4MTAsMHhmYSww eDVlLDB4MTgsMHg3NiwweDJjLDB4NjMsMHg1ZSwweDk2LAorKwkweGNmLDB4YjMsMHhkNiwweGZj LDB4YWYsMHg5OSwweDM5LDB4MjgsMHg5YywweDYxLDB4ZTgsMHhiMworKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfbm9u Y2VbXSA9CisrCXsKKysJMHgxMiwweDk2LDB4ZjAsMHg1MiwweGYzLDB4OGQsMHg4MSwweGNmLDB4 ZGUsMHg4NiwweGYyLDB4OTksCisrCTB4NDMsMHg5NiwweGI5LDB4ZjAKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDYzLDB4MGQsMHg3OCwweGY1LDB4OTAs MHg4ZSwweDMyLDB4NDcsMHhiMCwweDRkLDB4MzcsMHg2MCwKKysJMHgwOSwweDk2LDB4YmMsMHhi ZiwweDk3LDB4N2EsMHg2MiwweDE0LDB4NDUsMHhiZCwweDhkLDB4Y2MsCisrCTB4NjksMHhmYiww eDAzLDB4ZTEsMHg4MCwweDFjLDB4YzcsMHhlMiwweDJhLDB4ZjksMHgzNywweDNmLAorKwkweDY2 LDB4NGQsMHg2MiwweGQ5LDB4MTAsMHhlMCwweGFkLDB4YzgsMHg5YSwweGYwLDB4YTgsMHg2ZAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MzYsMHhjNiwweDEzLDB4 NjAsMHhiYiwweDE0LDB4YWQsMHgyMiwweGIwLDB4MzgsMHhhYywweGE2LAorKwkweDE4LDB4MTYs MHg5MywweDI1LDB4ODYsMHhiNywweGRjLDB4ZGMsMHgzNiwweDk4LDB4MmIsMHhmOSwKKysJMHg2 OCwweDMzLDB4ZDMsMHhjNiwweGZmLDB4Y2UsMHg4ZCwweDE1LDB4NTksMHg4MiwweDc2LDB4ZWQs CisrCTB4NmYsMHg4ZCwweDQ5LDB4NzQsMHgyZiwweGRhLDB4ZGMsMHgxZiwweDE3LDB4ZDAsMHhk ZSwweDE3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MTYsMHgy ZiwweDhlLDB4M2YsMHgyMSwweDdhLDB4MWMsMHgyMCwweDU2LDB4ZDEsMHg5MiwweGY2LAorKwkw eGQyLDB4MjUsMHg3NSwweDBlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Cisr CXsKKysJMHg5MSwweDc5LDB4NzYsMHhlZSwweGUwLDB4Y2YsMHg5ZSwweGMyLDB4ZDUsMHhkNCww eDIzLDB4OWIsCisrCTB4MTIsMHg4YywweDdlLDB4MGEsMHhiNywweGQyLDB4OGIsMHhkNiwweDdj LDB4YTMsMHhjNiwweGU1LAorKwkweDBlLDB4YWEsMHhjNywweDZiLDB4YWUsMHgwZCwweGZhLDB4 NTMsMHgwNiwweDc5LDB4YTEsMHhlZCwKKysJMHg0ZCwweDZhLDB4MGUsMHhkOCwweDlkLDB4YmUs MHgxYiwweDMxLDB4OTMsMHg3YiwweGVjLDB4ZmIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1 dHJlc2VlZFtdID0KKysJeworKwkweGQyLDB4NDYsMHg1MCwweDIyLDB4MTAsMHgxNCwweDYzLDB4 ZjcsMHhlYSwweDBmLDB4YjksMHg3ZSwKKysJMHgwZCwweGUxLDB4OTQsMHgwNywweGFmLDB4MDks MHg0NCwweDMxLDB4ZWEsMHg2NCwweGE0LDB4MTgsCisrCTB4NWIsMHhmOSwweGQ4LDB4YzIsMHhm YSwweDAzLDB4NDcsMHhjNSwweDM5LDB4NDMsMHhkNSwweDNiLAorKwkweDYyLDB4ODYsMHg2NCww eGVhLDB4MmMsMHg3MywweDhjLDB4YWUsMHg5ZCwweDk4LDB4OTgsMHgyOQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZf YWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDhjLDB4YWIsMHgxOCwweGY4LDB4YzMsMHhl YywweDE4LDB4NWMsMHhiMywweDFlLDB4OWQsMHhiZSwKKysJMHgzZiwweDAzLDB4YjQsMHgwMCww eDk4LDB4OWQsMHhhZSwweGViLDB4ZjQsMHg5NCwweGY4LDB4NDIsCisrCTB4OGYsMHhlMywweDM5 LDB4MDcsMHhlMSwweGM5LDB4YWQsMHgwYiwweDFmLDB4ZWQsMHhjMCwweGJhLAorKwkweGY2LDB4 ZDEsMHhlYywweDI3LDB4ODYsMHg3YiwweGQ2LDB4NTUsMHg5YiwweDYwLDB4YTUsMHhjNgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZWYsMHhkMiwweGQ4LDB4NWMsMHhk YywweDYyLDB4MjUsMHg5ZiwweGFhLDB4MWUsMHgyYywweDY3LAorKwkweGY2LDB4MDIsMHgzMiww eGUyCisrCX07CisrCisrCisrLyogU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJ MHhkMiwweDM2LDB4YTUsMHgyNywweDMxLDB4NzMsMHhkZCwweDExLDB4NGYsMHg5MywweGJkLDB4 ZTIsCisrCTB4MzEsMHhhNSwweDkxLDB4MTMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX25vbmNlW10gPQorKwl7CisrCTB4YjUs MHhiMywweDYwLDB4ZWYsMHhmNywweDYzLDB4MzEsMHhmMworKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQorKwl7CisrCTB4ZDQsMHhiYiwweDAyLDB4MTAsMHhiMiwweDcxLDB4ZGIsMHg4 MSwweGQ2LDB4ZjAsMHg0MiwweDYwLAorKwkweGRhLDB4ZWEsMHg3NywweDUyCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRp dGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg0ZCwweGQyLDB4NmMsMHg4NywweGZiLDB4MmMsMHg0 ZiwweGE2LDB4OGQsMHgxNiwweDYzLDB4MjIsCisrCTB4NmEsMHg1MSwweGUzLDB4ZjgKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3By X2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4YzksMHg4MywweDllLDB4MTYsMHhmNiwweDFj LDB4MGYsMHhiMiwweGVjLDB4NjAsMHgzMSwweGE5LAorKwkweGNiLDB4YTksMHgzNiwweDdhCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTgsMHgxMywweDRmLDB4ZjQsMHgz MSwweDAyLDB4NDQsMHhlMywweGQzLDB4M2QsMHg2MSwweDllLAorKwkweGU1LDB4YzYsMHgzZSww eDg5LDB4YjUsMHg5YiwweDBmLDB4MzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsK KysJMHhmOSwweGU4LDB4ZDIsMHg3MiwweDEzLDB4MzQsMHg5NSwweDZmLDB4MTUsMHg0OSwweDQ3 LDB4OTksCisrCTB4MTYsMHgwMywweDE5LDB4NDcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0K KysJeworKwkweDRlLDB4OGMsMHg0OSwweDliLDB4NGEsMHg1YywweDliLDB4OWMsMHgzYSwweGVl LDB4ZmIsMHhkMiwKKysJMHhhZSwweGNkLDB4OGMsMHhjNAorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4NTAsMHhiNCwweGI0LDB4Y2QsMHg2OCwweDU3LDB4ZmMsMHgyZSwweGMxLDB4 NTIsMHhjYywweGY2LAorKwkweDY4LDB4YTQsMHg4MSwweGVkLDB4N2UsMHhlNCwweDFkLDB4ODcK KysJfTsKKysKKysKKysvKiBTSEEtMSBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGE5 LDB4NDcsMHgxYiwweDI5LDB4MmQsMHgxYywweDA1LDB4ZGYsMHg3NiwweGQwLDB4NjIsMHhmOSwK KysJMHhlMiwweDdmLDB4NGMsMHg3YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfbm9uY2VbXSA9CisrCXsKKysJMHg1MywweDIzLDB4 MjQsMHhlMywweGVjLDB4MGMsMHg1NCwweDE0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 CisrCXsKKysJMHg3YSwweDg3LDB4YTEsMHhhYywweDFjLDB4ZmQsMHhhYiwweGFlLDB4ZjcsMHhk NiwweGZiLDB4NzYsCisrCTB4MjgsMHhlYywweDZkLDB4Y2EKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dFtd ID0KKysJeworKwkweGZjLDB4OTIsMHgzNSwweGQ2LDB4N2UsMHhiNywweDI0LDB4NjUsMHhmZCww eDEyLDB4MjcsMHgzNSwKKysJMHhjMCwweDcyLDB4Y2EsMHgyOAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVkYml0 c1tdID0KKysJeworKwkweDU3LDB4ODgsMHg4MiwweGU1LDB4MjUsMHhhNSwweDJjLDB4NGEsMHgw NiwweDIwLDB4NmMsMHg3MiwKKysJMHg1NSwweDYxLDB4ZGQsMHg5MCwweDcxLDB4OWYsMHg5NSww eGVhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg2OSwweGE1LDB4NDAsMHg2 MiwweDk4LDB4NDcsMHg1NiwweDczLDB4NGEsMHg4ZiwweDYwLDB4OTYsCisrCTB4ZDYsMHg5OSww eDI3LDB4ZWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGU1LDB4NDAs MHg0ZSwweGJkLDB4NTAsMHgwMCwweGY1LDB4MTUsMHhhNiwweGVlLDB4NDUsMHhkYSwKKysJMHg4 NCwweDNkLDB4ZDQsMHhjMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDExLDB4 NTEsMHgxNCwweGYwLDB4MDksMHgxYiwweDRlLDB4NTYsMHgwZCwweGU5LDB4ZjYsMHgxZSwKKysJ MHg1MiwweDY1LDB4Y2QsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTEsMHg5 YywweDk0LDB4NmUsMHgyOSwweGUxLDB4MzMsMHgwZCwweDMyLDB4ZDYsMHhhYSwweGNlLAorKwkw eDcxLDB4M2YsMHg1MiwweDcyLDB4OGIsMHg0MiwweGE4LDB4ZDcKKysJfTsKKysKKysKKysvKiBT SEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxMiwweDY5LDB4MzIsMHg0 ZiwweDgzLDB4YTYsMHhmNSwweDE0LDB4ZTMsMHg0OSwweDNlLDB4NzUsCisrCTB4M2UsMHhkZSww eGFkLDB4YTEsMHgyOSwweGMzLDB4ZjMsMHgxOSwweDIwLDB4YjUsMHg0YywweGQ5CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3By X25vbmNlW10gPQorKwl7CisrCTB4NmEsMHg3OCwweGQwLDB4ZWIsMHhiYiwweDVhLDB4ZjAsMHhl ZSwweGU4LDB4YzMsMHhiYSwweDcxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweGQ1LDB4YjgsMHhiNiwweGJjLDB4YzEsMHg1YiwweDYwLDB4MzEsMHgzYywweGY1 LDB4ZTUsMHhjMCwKKysJMHg4ZSwweDUyLDB4N2EsMHhiZCwweGVhLDB4NDcsMHhhOSwweDVmLDB4 OGYsMHhmOSwweDhiLDB4YWUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4 MWYsMHg1NSwweGVjLDB4YWUsMHgxNiwweDEyLDB4ODQsMHhiYSwweDg0LDB4MTYsMHgxOSwweDg4 LAorKwkweDhlLDB4YjgsMHgzMywweDI1LDB4NTQsMHhmZiwweGNhLDB4NzksMHhhZiwweDA3LDB4 MjUsMHg1MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDkyLDB4YTMsMHgz MiwweGE4LDB4OWEsMHgwYSwweDU4LDB4N2MsMHgxZCwweDVhLDB4N2UsMHhlMSwKKysJMHhiMiww eDczLDB4YWIsMHgwZSwweDE2LDB4NzksMHgyMywweGQzLDB4MjksMHg4OSwweDgxLDB4ZTEKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGYzLDB4MzgsMHg5MSwweDQwLDB4 MzcsMHg3YSwweDUxLDB4NzIsMHg0MiwweDc0LDB4NzgsMHgwYSwKKysJMHg2OSwweGZkLDB4YTYs MHg0NCwweDQzLDB4NDUsMHg2YywweDBjLDB4NWEsMHgxOSwweGZmLDB4ZjEsCisrCTB4NTQsMHg2 MCwweGVlLDB4NmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDc1LDB4 ZjMsMHgwNCwweDI1LDB4ZGQsMHgzNiwweGE4LDB4MzcsMHg0NiwweGFlLDB4MGMsMHg1MiwKKysJ MHgwNSwweDc5LDB4NGMsMHgyNiwweGRiLDB4ZTksMHg3MSwweDE2LDB4NGMsMHgwYSwweGYyLDB4 NjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZWEsMHhjNSwweDAzLDB4 MGEsMHg0ZiwweGIwLDB4MzgsMHg4ZCwweDIzLDB4ZDQsMHhjOCwweDc3LAorKwkweGUyLDB4NmQs MHg5YywweDBiLDB4NDQsMHhmNywweDJkLDB4NWIsMHhiZiwweDVkLDB4MmEsMHgxMQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9w cl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg2MCwweDUwLDB4MmIsMHhlNywweDg2LDB4ZDgs MHgyNiwweDczLDB4ZTMsMHgxZCwweDk1LDB4MjAsCisrCTB4YjMsMHgyYywweDMyLDB4MWMsMHhm NSwweGNlLDB4NTcsMHhhNiwweDY3LDB4MmIsMHhkYywweDRlLAorKwkweGRkLDB4MTEsMHg0Yyww eGM0CisrCX07CisrCisrCisrLyogU0hBLTIyNCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0W10gPQorKwl7 CisrCTB4YjIsMHgxYywweDc3LDB4NGQsMHhmNiwweGQzLDB4YjYsMHg0MCwweGI3LDB4MzAsMHgz ZSwweDI5LAorKwkweGIwLDB4ODUsMHgxYywweGJlLDB4NGEsMHhlYSwweDZiLDB4NWEsMHhiNSww eDhhLDB4OTcsMHhlYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTIyNF9ub25jZVtdID0KKysJeworKwkweDQyLDB4MDIsMHgwYSwweDFj LDB4OTgsMHg5YSwweDc3LDB4OWUsMHg5ZiwweDgwLDB4YmEsMHhlMAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg5OCwweGI4LDB4MDQsMHg0MSwweGZjLDB4YzEsMHg1 ZCwweGM1LDB4ZTksMHhiOSwweDA4LDB4ZGEsCisrCTB4ZjksMHhmYSwweDBkLDB4OTAsMHhjZSww eGRmLDB4MWQsMHgxMCwweGE5LDB4OGQsMHg1MCwweDBjCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtd ID0KKysJeworKwkweDlhLDB4OGQsMHgzOSwweDQ5LDB4NDIsMHhkNSwweDBiLDB4YWUsMHhlMSww eGFmLDB4YjcsMHgwMCwKKysJMHgwMiwweGZhLDB4OTYsMHhiMSwweGE1LDB4MWQsMHgyZCwweDI1 LDB4NzgsMHhlZSwweDgzLDB4M2YKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eGU0LDB4ZjUsMHg1MywweDc5LDB4NWEsMHg5NywweDU4LDB4MDYsMHgwOCwweGJhLDB4N2IsMHhm YSwKKysJMHhmMCwweDgzLDB4MDUsMHg4YywweDIyLDB4YzAsMHhjOSwweGRiLDB4MTUsMHhlNyww eGRlLDB4MjAsCisrCTB4NTUsMHgyMiwweDlhLDB4YWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4NjcsMHgwOSwweDQ4LDB4YWEsMHgwNywweDE2LDB4OTksMHg4OSwweDdm LDB4NmQsMHhhMCwweGU1LAorKwkweDhmLDB4ZGYsMHhiYywweGRiLDB4ZmUsMHhlNSwweDZjLDB4 N2EsMHg5NSwweDRhLDB4NjYsMHgxNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Cisr CXsKKysJMHgwZiwweDRiLDB4MWMsMHg2ZiwweGI3LDB4ZTMsMHg0NywweGU1LDB4NWQsMHg3ZCww eDM4LDB4ZDYsCisrCTB4MjgsMHg5YiwweGViLDB4NTUsMHg2MywweDA5LDB4M2UsMHg3YywweDU2 LDB4ZWEsMHhmOCwweDE5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgyZCww eDI2LDB4N2MsMHgzNywweGU0LDB4N2EsMHgyOCwweDVlLDB4NWEsMHgzYywweGFmLDB4M2QsCisr CTB4NWEsMHg4ZSwweDU1LDB4YTIsMHgxYSwweDZlLDB4YzAsMHhlNSwweGY2LDB4MjEsMHhkMyww eGY2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDRkLDB4ODMsMHgzNSwweGRmLDB4 NjcsMHhhOSwweGZjLDB4MTcsMHhkYSwweDcwLDB4Y2MsMHg4YiwKKysJMHg3ZiwweDc3LDB4YWUs MHhhMiwweDVmLDB4YjksMHg3ZSwweDc0LDB4NGMsMHgyNiwweGMxLDB4N2EsCisrCTB4M2IsMHhh NywweDVjLDB4OTMKKysJfTsKKysKKysKKysvKiBTSEEtMjU2IFBSICAqLworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHhjZSwweDQ5LDB4MDAsMHg3YSwweDU2LDB4ZTMsMHg2NywweDhmLDB4ZTEs MHhiNiwweGE3LDB4ZDQsCisrCTB4NGYsMHgwOCwweDdhLDB4MWIsMHgwMSwweGY0LDB4ZmEsMHg2 YiwweGVmLDB4YjcsMHhlNSwweGViLAorKwkweDA3LDB4M2QsMHgxMSwweDBkLDB4YzgsMHhlYSww eDJiLDB4ZmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg3MywweDQxLDB4YzgsMHg5Miww eDk0LDB4ZTIsMHhjNSwweDVmLDB4OTMsMHhmZCwweDM5LDB4NWQsCisrCTB4MmIsMHg5MSwweDRk LDB4MzgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NTAsMHg2 ZCwweDAxLDB4MDEsMHgwNywweDVhLDB4ODAsMHgzNSwweDdhLDB4NTYsMHgxYSwweDU2LAorKwkw eDJmLDB4OWEsMHgwYiwweDM1LDB4YjIsMHhiMSwweGM5LDB4ZTUsMHhjYSwweDY5LDB4NjEsMHg0 OCwKKysJMHhmZiwweGZiLDB4MGYsMHhkOSwweDRiLDB4NzksMHgxZCwweGJhCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDIwLDB4YjgsMHhkZiwweDQ0LDB4NzcsMHg1YSww eGI4LDB4ZDMsMHhiZiwweGY2LDB4Y2YsMHhhYywKKysJMHg1ZSwweGE2LDB4OTYsMHg2MiwweDcz LDB4NDQsMHg0MCwweDRhLDB4MzAsMHhmYiwweDM4LDB4YTUsCisrCTB4N2IsMHgwZCwweGU0LDB4 MGQsMHhjNiwweGU0LDB4OWEsMHgxZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJewor KwkweDA0LDB4YzQsMHg2NSwweGY0LDB4ZDMsMHhiZiwweDgzLDB4NGIsMHhhYiwweGM4LDB4NDEs MHhhOCwKKysJMHhjMiwweGUwLDB4NDQsMHg2MywweDc3LDB4NGMsMHg2ZiwweDZjLDB4NDksMHg0 NiwweGZmLDB4OTQsCisrCTB4MTcsMHhlYSwweGU2LDB4MWEsMHg5ZCwweDVlLDB4NjYsMHg3OAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MDcsMHg0ZCwweGFjLDB4OWIs MHg4NiwweGNhLDB4NGEsMHhhYSwweDZlLDB4N2EsMHgwMywweGEyLAorKwkweDVkLDB4MTAsMHhl YSwweDBiLDB4ZjksMHg4MywweGNjLDB4ZDEsMHhmYywweGUyLDB4MDcsMHhjNywKKysJMHgwNiww eDM0LDB4NjAsMHg2ZiwweDgzLDB4OTQsMHg5OSwweDc2CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9CisrCXsKKysJMHg4OSwweDRlLDB4NDUsMHg4YywweDExLDB4ZjksMHhiYywweDViLDB4 YWMsMHg3NCwweDhiLDB4NGIsCisrCTB4NWYsMHhmNywweDE5LDB4ZjMsMHhmNSwweDI0LDB4NTQs MHgxNCwweGQxLDB4MTUsMHhiMSwweDQzLAorKwkweDEyLDB4YTQsMHg1ZiwweGQ0LDB4ZWMsMHhm YywweGNkLDB4MDkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4MGUsMHhl YiwweDFmLDB4ZDcsMHhmYywweGQxLDB4OWQsMHhkNCwweDA1LDB4MzYsMHg4YiwweGIyLAorKwkw eGZiLDB4ZTQsMHhmNCwweDUxLDB4MGMsMHg4NywweDliLDB4MDIsMHg0NCwweGQ1LDB4OTIsMHg0 ZCwKKysJMHg0NCwweGZlLDB4MWEsMHgwMywweDQzLDB4NTYsMHhiZCwweDg2CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweDAyLDB4YWEsMHhiNiwweDFkLDB4N2UsMHgyYSwweDQw LDB4MDMsMHg2OSwweDJkLDB4NDksMHhhMywKKysJMHg0MSwweGU3LDB4NDQsMHgwYiwweGFmLDB4 N2IsMHg4NSwweGU0LDB4NWYsMHg1MywweDNiLDB4NjQsCisrCTB4YmMsMHg4OSwweGM4LDB4ODIs MHhkNCwweDc4LDB4MzcsMHhhMgorKwl9OworKworKworKy8qIFNIQS0yNTYgTm8gUFIgICovCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJv cHlpbnB1dFtdID0KKysJeworKwkweDViLDB4MWIsMHhlYywweDRkLDB4YTksMHgzOCwweDc0LDB4 NWEsMHgzNCwweDBiLDB4N2IsMHhjNSwKKysJMHhlNSwweGQ3LDB4NjYsMHg3YywweGJjLDB4ODIs MHhiOSwweDBlLDB4MmQsMHgxZiwweDkyLDB4ZDcsCisrCTB4YzEsMHhiYywweDY3LDB4NjksMHhl YywweDZiLDB4MDMsMHgzYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9ub25jZVtdID0KKysJeworKwkweGE0LDB4MGMsMHhkOCww eDljLDB4NjEsMHhkOCwweGMzLDB4NTQsMHhmZSwweDUzLDB4YzksMHhlNSwKKysJMHg1ZCwweDZm LDB4NmQsMHgzNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgyMiww eDVlLDB4NjIsMHg5MywweDQyLDB4ODMsMHg3OCwweDI0LDB4ZDgsMHg0MCwweDhjLDB4ZGUsCisr CTB4NmYsMHhmOSwweGE0LDB4N2EsMHhjNSwweGE3LDB4M2IsMHg4OCwweGEzLDB4ZWUsMHg0Miww eDIwLAorKwkweGZkLDB4NjEsMHg1NiwweGM2LDB4NGMsMHgxMywweDQxLDB4OWMKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRk aXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4YmYsMHg3NCwweDViLDB4ZjYsMHhjNSwweDY0LDB4 NWUsMHg5OSwweDM0LDB4OGYsMHhiYywweGE0LAorKwkweGUyLDB4YmQsMHhkOCwweDg1LDB4MjYs MHgzNywweGVhLDB4YmEsMHg0ZiwweGYyLDB4OWEsMHg5YSwKKysJMHg2NiwweGZjLDB4ZGYsMHg2 MywweDI2LDB4MjYsMHgxOSwweDg3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHhiMywweGM2LDB4MDcsMHgwNywweGQ2LDB4NzUsMHhmNiwweDJiLDB4ZDYsMHgyMSwweDk2LDB4 ZjEsCisrCTB4YWUsMHhkYiwweDJiLDB4YWMsMHgyNSwweDJhLDB4YWUsMHhhZSwweDQxLDB4NzIs MHgwMywweDVlLAorKwkweGJmLDB4ZDMsMHg2NCwweGJjLDB4NTksMHhmOSwweGMwLDB4NzYKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YmYsMHgyMCwweDMzLDB4NTYsMHgy OSwweGE4LDB4MzcsMHgwNCwweDFmLDB4NzgsMHgzNCwweDNkLAorKwkweDgxLDB4MmEsMHhjOSww eDg2LDB4YzYsMHg3YSwweDJmLDB4ODgsMHg1ZSwweGQ1LDB4YmUsMHgzNCwKKysJMHg0NiwweDIw LDB4YTQsMHgzNSwweGViLDB4YzcsMHhlMiwweDlkCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2Vl ZFtdID0KKysJeworKwkweDliLDB4YWUsMHgyZCwweDJkLDB4NjEsMHhhNCwweDg5LDB4ZWIsMHg0 MywweDQ2LDB4YTcsMHhkYSwKKysJMHhlZiwweDQwLDB4Y2EsMHg0YSwweDk5LDB4MTEsMHg0MSww eGRjLDB4NWMsMHg5NCwweGU5LDB4YWMsCisrCTB4ZDQsMHhkMCwweGU2LDB4YmQsMHhmYiwweDAz LDB4OWMsMHhhOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MjMsMHhhYSww eDBjLDB4YmQsMHgyOCwweDMzLDB4ZTIsMHg1MSwweGZjLDB4NzEsMHhkMiwweDE1LAorKwkweDFm LDB4NzYsMHhmZCwweDBkLDB4ZTAsMHhiNywweGI1LDB4ODQsMHg3NSwweDViLDB4YmUsMHhmMywK KysJMHg1YywweGNhLDB4YzUsMHgzMCwweGYyLDB4NzUsMHgxZiwweGRhCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3JldHVybmVk Yml0c1tdID0KKysJeworKwkweDkwLDB4M2MsMHhjMSwweDEwLDB4OGMsMHgxMiwweDAxLDB4YzYs MHhhNiwweDNhLDB4MGYsMHg0ZCwKKysJMHhiNiwweDNhLDB4NGYsMHg0MSwweDljLDB4NjEsMHg3 NSwweDg0LDB4ZTksMHg3NCwweDc1LDB4ZmQsCisrCTB4ZmUsMHhmMiwweDFmLDB4NDMsMHhkOCww eDVlLDB4MjQsMHhhMworKwl9OworKworKworKy8qIFNIQS0zODQgUFIgICovCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1 dFtdID0KKysJeworKwkweDcxLDB4OWQsMHhiMiwweDVhLDB4NzEsMHg2ZCwweDA0LDB4ZTksMHgx ZSwweGM3LDB4OTIsMHgyNCwKKysJMHg2ZSwweDEyLDB4MzMsMHhhOSwweDUyLDB4NjQsMHgzMSww eGVmLDB4NzEsMHhlYiwweDIyLDB4NTUsCisrCTB4MjgsMHg5NywweDA2LDB4NmEsMHhjMCwweDBj LDB4YTAsMHg3ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9wcl9ub25jZVtdID0KKysJeworKwkweGY1LDB4MGQsMHhmYSwweGIw LDB4ZWMsMHg2YSwweDdjLDB4ZDYsMHhiZCwweDliLDB4MDUsMHhmZCwKKysJMHgzOCwweDNlLDB4 MmUsMHg1NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg3NCww eGFjLDB4N2UsMHg2ZCwweGIxLDB4YTQsMHhlNywweDIxLDB4ZDEsMHgxZSwweDZlLDB4OTYsCisr CTB4NmQsMHg0ZCwweDUzLDB4NDYsMHg4MiwweDk2LDB4NmUsMHhjZiwweGFhLDB4ODEsMHg4ZCww eDdkLAorKwkweDllLDB4ZTEsMHgwZiwweDE1LDB4ZWEsMHg0MSwweGJmLDB4ZTMKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJf YWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZGEsMHg5NSwweGQ0LDB4ZDAsMHhiOCwweDEx LDB4ZDMsMHg0OSwweDI3LDB4NWQsMHhhOSwweDM5LAorKwkweDY4LDB4ZjMsMHhhOCwweGU5LDB4 NWQsMHgxOSwweDhhLDB4MmIsMHg2NiwweGU4LDB4NjksMHgwNiwKKysJMHg3YywweDllLDB4MDMs MHhhMSwweDhiLDB4MjYsMHgyZCwweDZlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7 CisrCTB4NDksMHhkZiwweDQ0LDB4MDAsMHhlNCwweDFjLDB4NzUsMHgwYiwweDI2LDB4NWEsMHg1 OSwweDY0LAorKwkweDFmLDB4NGUsMHhiMSwweGIyLDB4MTMsMHhmMSwweDIyLDB4NGUsMHhiNCww eDZkLDB4OWEsMHhjYywKKysJMHhhMCwweDQ4LDB4ZTYsMHhjZiwweDFkLDB4ZDEsMHg5MiwweDBk CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhjOCwweDUyLDB4YWUsMHhi ZiwweDA0LDB4M2MsMHgyNywweGI3LDB4NzgsMHgxOCwweGFhLDB4OGYsCisrCTB4ZmYsMHhjZiww eGE0LDB4ZjEsMHhjYywweGU3LDB4NjgsMHhmYSwweDIyLDB4YTIsMHgxMywweDQ1LAorKwkweGU4 LDB4ZGQsMHg4NywweGU2LDB4ZjIsMHg2ZSwweGRkLDB4YzcsMHg1MiwweDkwLDB4OWYsMHg3YiwK KysJMHhmYSwweDYxLDB4MmQsMHg5ZCwweDllLDB4Y2YsMHg5OCwweGFjLDB4NTIsMHg0MCwweGNl LDB4YWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDYxLDB4N2MsMHgw MywweDlhLDB4M2UsMHg1MCwweDU3LDB4NjAsMHhjNSwweDgzLDB4YzksMHhiMiwKKysJMHhkMSww eDg3LDB4ODUsMHg2NiwweDkyLDB4NWQsMHg4NCwweDBlLDB4NTMsMHhmYiwweDcwLDB4MDMsCisr CTB4NzIsMHhmZCwweGJhLDB4YWUsMHg5YywweDhmLDB4ZjgsMHgxOAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9CisrCXsKKysJMHhmOCwweGViLDB4ODksMHhiMSwweDhkLDB4NzgsMHhiZSww eDIxLDB4ZTAsMHhiYiwweDlkLDB4YjcsCisrCTB4OTUsMHgwZSwweGQ5LDB4NDYsMHgwYywweDhj LDB4ZTIsMHg2MywweGI3LDB4OWQsMHg2NywweDkwLAorKwkweGJkLDB4YzcsMHgwYiwweGE1LDB4 Y2UsMHhiMiwweDY1LDB4ODEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTYs MHg5ZiwweGZlLDB4NjgsMHhkNiwweGI1LDB4NzksMHhmMSwweDA2LDB4NWYsMHhhMywweGJiLAor KwkweDIzLDB4ODUsMHhkOCwweGYwLDB4MjksMHg1YSwweDY4LDB4OWUsMHhmNSwweGY0LDB4YTYs MHgxMiwKKysJMHhlMCwweDlhLDB4ZTIsMHhhYywweDAwLDB4MWQsMHg5OCwweDI2LDB4ZmMsMHg1 MywweDk1LDB4NTMsCisrCTB4ZTQsMHgzZSwweDE3LDB4ZDUsMHgwOCwweDBiLDB4NzAsMHgzZCww eDY3LDB4OTksMHhhYywweDY2CisrCX07CisrCisrCisrLyogU0hBLTM4NCBObyBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9w eWlucHV0W10gPQorKwl7CisrCTB4MDcsMHgxNSwweDI3LDB4MmEsMHhhZiwweDc0LDB4MjQsMHgz NywweGJjLDB4ZDUsMHgxNCwweDY5LAorKwkweGNlLDB4MTEsMHhmZiwweGEyLDB4NmIsMHhiOCww eDA1LDB4NjcsMHgzNCwweGY4LDB4YmQsMHg2ZCwKKysJMHg2YSwweGNjLDB4Y2QsMHg2MCwweGEz LDB4NjgsMHhjYSwweGY0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X25vbmNlW10gPQorKwl7CisrCTB4NzAsMHgxNywweGMyLDB4 NWIsMHg1ZCwweDIyLDB4MGIsMHgwNiwweDE1LDB4NTQsMHg3OCwweDc3LAorKwkweDQ0LDB4YWYs MHgyZiwweDA5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDg5LDB4 MzksMHgyOCwweGIwLDB4NjAsMHhlYiwweDNkLDB4ZGMsMHg1NSwweDc1LDB4ODYsMHhlYiwKKysJ MHhhZSwweGEyLDB4OGYsMHhiYywweDFiLDB4NzUsMHhkNCwweGUxLDB4MGYsMHhhYSwweDM4LDB4 Y2EsCisrCTB4NjIsMHg4YiwweGNiLDB4MmMsMHgyNiwweGY2LDB4YmMsMHhiMQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRp dGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMCwweDJiLDB4NDIsMHgzNSwweGVmLDB4ZGEsMHg0 MCwweDU1LDB4MjgsMHhjNiwweDk1LDB4ZmIsCisrCTB4NTQsMHgwMSwweDYyLDB4ZDcsMHg4Nyww eDE0LDB4NDgsMHg2ZCwweDkwLDB4NGMsMHhhOSwweDAyLAorKwkweDU0LDB4NDAsMHgyMiwweGM4 LDB4NjYsMHhhNSwweDQ4LDB4NDgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eDgyLDB4YzQsMHhhMSwweDljLDB4MjEsMHhkMiwweGU3LDB4YTUsMHhhNiwweGY2LDB4NWYsMHgw NCwKKysJMHg1YywweGM3LDB4MzEsMHg5ZCwweDhkLDB4NTksMHg3NCwweDUwLDB4MTksMHg4OSww eDJmLDB4NjMsCisrCTB4ZDUsMHhiNywweDdlLDB4ZWIsMHgxNSwweGUzLDB4NzAsMHg4MywweGEx LDB4MjQsMHg1OSwweGZhLAorKwkweDJjLDB4NTYsMHhmNiwweDg4LDB4M2EsMHg5MiwweDkzLDB4 YTEsMHhmYiwweDc5LDB4YzEsMHg3YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsK KysJMHgzOSwweGE2LDB4ZTgsMHg1YywweDgyLDB4MTcsMHg3MSwweDI2LDB4NTcsMHg0ZiwweDlm LDB4YzIsCisrCTB4NTUsMHhmZiwweDVjLDB4OWIsMHg1MywweDFhLDB4ZDEsMHg1ZiwweGJjLDB4 NjIsMHhlNCwweDI3LAorKwkweDJkLDB4MzIsMHhmMCwweGU0LDB4NTIsMHg4YywweGM1LDB4MGMK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OGQsMHhjYiwweDhkLDB4 Y2UsMHgwOCwweGVhLDB4ODAsMHhlOCwweDliLDB4NjEsMHhhOCwweDBmLAorKwkweGFmLDB4NDks MHgyMCwweDllLDB4NzQsMHhjYiwweDU3LDB4ODAsMHg0MiwweGIwLDB4ODQsMHg1ZSwKKysJMHgz MCwweDJhLDB4NjcsMHgwOCwweGY0LDB4ZTMsMHg0MCwweDIyCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1 dDJbXSA9CisrCXsKKysJMHg3YywweDhmLDB4YzIsMHhhZSwweDIyLDB4NGEsMHhkNiwweGY2LDB4 MDUsMHhhNCwweDdhLDB4ZWEsCisrCTB4YmIsMHgyNSwweGQwLDB4YjcsMHg1YSwweGQ2LDB4Y2Ys MHg5ZCwweGYzLDB4NmMsMHhlMiwweGIyLAorKwkweDRlLDB4YjQsMHhiZCwweGY0LDB4ZTUsMHg0 MCwweDgwLDB4OTQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEzODRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OWUsMHg3ZSwweGZi LDB4NTksMHhiYiwweGFhLDB4M2MsMHhmNywweGUxLDB4ZjgsMHg3NiwweGRkLAorKwkweDYzLDB4 NWYsMHhhZiwweDIzLDB4ZDYsMHg2NCwweDYxLDB4YzAsMHg5YSwweDA5LDB4NDcsMHhjOSwKKysJ MHgzMywweGRmLDB4NmQsMHg1NSwweDkxLDB4MzQsMHg3OSwweDcwLDB4YzQsMHg5OSwweDZlLDB4 NTQsCisrCTB4MDksMHg2NCwweDIxLDB4MWEsMHhiZCwweDFlLDB4ODAsMHg0MCwweDM0LDB4YWQs MHhmYSwweGQ3CisrCX07CisrCisrCisrLyogU0hBLTUxMiBQUiAgKi8KKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0W10g PQorKwl7CisrCTB4MTMsMHhmNywweDYxLDB4NzUsMHg2NSwweDI4LDB4YTIsMHg1OSwweDEzLDB4 NWEsMHg0YSwweDRmLAorKwkweDU2LDB4NjAsMHg4YywweDUzLDB4N2QsMHhiMCwweGJkLDB4MDYs MHg0ZiwweGVkLDB4Y2MsMHhkMiwKKysJMHhhMiwweGI1LDB4ZmQsMHg1YiwweDNhLDB4YWIsMHhl YywweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX3ByX25vbmNlW10gPQorKwl7CisrCTB4YmUsMHhhMywweDkxLDB4OTMsMHgx ZCwweGMzLDB4MzEsMHgzYSwweDIzLDB4MzMsMHg1MCwweDY3LAorKwkweDg4LDB4YzcsMHhhMiww eGM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDFmLDB4NTks MHg0ZCwweDdiLDB4ZTYsMHg0NiwweDkxLDB4NDgsMHhjMSwweDI1LDB4ZmEsMHhmZiwKKysJMHg4 OSwweDEyLDB4NzcsMHgzNSwweGRmLDB4M2UsMHhmNCwweDgwLDB4NWYsMHhkOSwweGIwLDB4MDcs CisrCTB4MjIsMHg0MSwweGRkLDB4NDgsMHg3OCwweDZiLDB4NzcsMHgyYgorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9hZGRp dGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMCwweGZmLDB4NjMsMHg2ZiwweGFjLDB4ZDksMHg4 NCwweDM5LDB4NmYsMHhlNCwweDk5LDB4Y2UsCisrCTB4OTEsMHg3ZCwweDdlLDB4YzgsMHg1OCww eGYyLDB4MTIsMHhjMywweGI2LDB4YWQsMHhkYSwweDIyLAorKwkweDA0LDB4YTAsMHhkMiwweDIx LDB4ZmUsMHhmMiwweDk1LDB4MWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJ MHg2NCwweDU0LDB4MTMsMHhlYywweDRmLDB4NzcsMHhkYSwweGIyLDB4OTIsMHgyZSwweDUyLDB4 ODAsCisrCTB4MTEsMHgxMCwweGMyLDB4ZjgsMHhlNiwweGE3LDB4Y2QsMHg0YiwweGZjLDB4MzIs MHgyZSwweDllLAorKwkweGViLDB4YmIsMHhiMSwweGJmLDB4MTUsMHg1YywweDczLDB4MDgKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1 MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGVmLDB4MWUsMHhkYywweDBhLDB4 YTQsMHgzNiwweDkxLDB4OWMsMHgzZCwweDI3LDB4OTcsMHg1MCwKKysJMHg4ZCwweDM2LDB4Mjks MHg4ZCwweGNlLDB4NmEsMHgwYywweGY3LDB4MjEsMHhjMCwweDkxLDB4YWUsCisrCTB4MGMsMHg5 NiwweDcyLDB4YmQsMHg1MiwweDgxLDB4NTgsMHhmYywweDZkLDB4ZTUsMHhmNywweGE1LAorKwkw eGZkLDB4NWQsMHhhNywweDU4LDB4NjgsMHhjOCwweDk5LDB4NTgsMHg4ZSwweGM4LDB4Y2UsMHg5 NSwKKysJMHgwMSwweDdkLDB4ZmYsMHhhNCwweGM4LDB4ZjcsMHg2MywweGZlLDB4NWYsMHg2OSww eDgzLDB4NTMsCisrCTB4ZTIsMHhjNiwweDhiLDB4YzMKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0 MltdID0KKysJeworKwkweGU2LDB4OWIsMHhjNCwweDg4LDB4MzQsMHhjYSwweGVhLDB4MjksMHgy ZiwweDk4LDB4MDUsMHhhNCwKKysJMHhkMywweGMwLDB4N2IsMHgxMSwweGU4LDB4YmIsMHg3NSww eGYyLDB4YmQsMHgyOSwweGI3LDB4NDAsCisrCTB4MjUsMHg3ZiwweGMxLDB4YjcsMHhiMSwweGYx LDB4MjUsMHg2MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgyMywweDZk LDB4ZmYsMHhkZSwweGZiLDB4ZDEsMHhiYSwweDMzLDB4MTgsMHhlNiwweGJlLDB4YjUsCisrCTB4 NDgsMHg3NywweDZkLDB4N2YsMHhhNywweGUxLDB4NGQsMHg0OCwweDFlLDB4M2MsMHhhNywweDM0 LAorKwkweDFhLDB4YzgsMHg2MCwweGRiLDB4OGYsMHg5OSwweDE1LDB4OTkKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcmV0 dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NzAsMHgyNywweDMxLDB4ZGIsMHg5MiwweDcwLDB4MjEs MHhmZSwweDE2LDB4YjYsMHhjOCwweDUxLAorKwkweDM0LDB4ODcsMHg2NSwweGQwLDB4NGUsMHhm ZCwweGZlLDB4NjgsMHhlYywweGFjLDB4ZGMsMHg5MywKKysJMHg0MSwweDM4LDB4OTIsMHg5MCww eGI0LDB4OTQsMHhmOSwweDBkLDB4YTQsMHhmNywweDRlLDB4ODAsCisrCTB4OTIsMHg2NywweDQ4 LDB4NDAsMHhhNywweDA4LDB4YzcsMHhiYywweDY2LDB4MDAsMHhmZCwweGY3LAorKwkweDRjLDB4 OGIsMHgxNywweDZlLDB4ZDEsMHg4ZiwweDliLDB4ZjMsMHg2ZiwweGY2LDB4MzQsMHhkZCwKKysJ MHg2NywweGY3LDB4NjgsMHhkZAorKwl9OworKworKworKy8qIFNIQS01MTIgTm8gUFIgICovCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJv cHlpbnB1dFtdID0KKysJeworKwkweGI2LDB4MGIsMHhiNywweGJjLDB4ODQsMHg1NiwweGY2LDB4 MTIsMHhhZiwweDQ1LDB4NjcsMHgxNywKKysJMHg3YywweGQxLDB4YjIsMHg3OCwweDJiLDB4YTAs MHhmMiwweGJlLDB4YjYsMHg2ZCwweDhiLDB4NTYsCisrCTB4YzYsMHhiYywweDRkLDB4ZTEsMHhm NywweGJlLDB4Y2UsMHhiZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9ub25jZVtdID0KKysJeworKwkweDlkLDB4ZWQsMHhjMCww eGU1LDB4NWEsMHg5OCwweDZhLDB4Y2IsMHg1MSwweDdkLDB4NzYsMHgzMSwKKysJMHg1YSwweDY0 LDB4ZjAsMHhmNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhjMiww eDZkLDB4YTMsMHhjMywweDA2LDB4NzQsMHhlNSwweDAxLDB4NWMsMHgxMCwweDE3LDB4YzcsCisr CTB4YWYsMHg4MywweDlkLDB4NTksMHg4ZCwweDJkLDB4MjksMHgzOCwweGM1LDB4NTksMHg3MCww eDhiLAorKwkweDQ2LDB4NDgsMHgyZCwweGNmLDB4MzYsMHg3ZCwweDU5LDB4YzAKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRk aXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZWMsMHg4YywweGQ0LDB4ZjcsMHg2MSwweDZlLDB4 MGQsMHg5NSwweDc5LDB4YjcsMHgyOCwweGFkLAorKwkweDVmLDB4NjksMHg3NCwweDVmLDB4MmQs MHgzNiwweDA2LDB4OGEsMHg2YiwweGFjLDB4NTQsMHg5NywKKysJMHhjNCwweGExLDB4MTIsMHg4 NSwweDBhLDB4ZGYsMHg0YiwweDM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHg4NCwweDJmLDB4MWYsMHg2OCwweDZhLDB4YTMsMHhhZCwweDFlLDB4ZmIsMHhmNCwweDE1LDB4 YmQsCisrCTB4ZGUsMHgzOCwweGQ0LDB4MzAsMHg4MCwweDUxLDB4ZTksMHhkMywweGM3LDB4MjAs MHg4OCwweGU5LAorKwkweGY1LDB4Y2MsMHhkZiwweDU3LDB4NWMsMHg0NywweDJmLDB4NTcsMHgz YywweDVmLDB4MTMsMHg1NiwKKysJMHhjYywweGM1LDB4NGYsMHg4NCwweGY4LDB4MTAsMHg0MSww eGQ1LDB4N2UsMHg1OCwweDZlLDB4MTksCisrCTB4MTksMHg5ZSwweGFmLDB4YzIsMHgyMiwweDU4 LDB4NDEsMHg1MCwweDc5LDB4YzIsMHhkOCwweDA0LAorKwkweDI4LDB4ZDQsMHgzOSwweDlhCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh NTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGZhLDB4N2YsMHg0NiwweDUxLDB4 ODMsMHg2MiwweDk4LDB4MTYsMHg5YSwweDE5LDB4YTIsMHg0OSwKKysJMHhhOSwweGU2LDB4NGEs MHhkOCwweDg1LDB4ZTcsMHhkNCwweDNiLDB4MmMsMHg4MiwweGM1LDB4ODIsCisrCTB4YmYsMHgx MSwweGY5LDB4OWUsMHhiYywweGQwLDB4MDEsMHhlZQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHhiOSwweDEyLDB4ZTAsMHg0ZiwweGY3LDB4YTcsMHhjNCwweGQ4LDB4 ZDAsMHg4ZSwweDk5LDB4MjksCisrCTB4N2MsMHg5YSwweGU5LDB4Y2YsMHhjNCwweDZjLDB4Zjgs MHhjMywweGE3LDB4NDEsMHg4MywweGQ2LAorKwkweDJlLDB4ZmEsMHhiOCwweDVlLDB4OGUsMHg2 YiwweDc4LDB4MjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGQ3LDB4MDcs MHg1MiwweGI5LDB4ODMsMHgyYywweDAzLDB4NzEsMHhlZSwweGM5LDB4YzAsMHg4NSwKKysJMHhl MSwweDU3LDB4YjIsMHhjZCwweDNhLDB4ZjAsMHhjOSwweDM0LDB4MjQsMHg0MSwweDFjLDB4NDIs CisrCTB4OTksMHhiMiwweDg0LDB4ZTksMHgxNywweGQyLDB4NzYsMHg5MgorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHgzNiwweDE3LDB4NWQsMHg5OCwweDJiLDB4NjUsMHgyNSwweDhl LDB4YzgsMHgyOSwweGRmLDB4MjcsCisrCTB4MDUsMHgzNiwweDI2LDB4MTIsMHg4YSwweDY4LDB4 NzQsMHgyNywweDM3LDB4ZDQsMHg3ZiwweDMyLAorKwkweGIxLDB4MTIsMHhkNiwweDg1LDB4ODMs MHhlYiwweDJlLDB4YTAsMHhlZCwweDRiLDB4YjUsMHg3YiwKKysJMHg2ZiwweDM5LDB4M2MsMHg3 MSwweDc3LDB4MDIsMHgxMiwweGNjLDB4MmMsMHgzYSwweDhlLDB4NjMsCisrCTB4ZGYsMHg0YSww eGJkLDB4NmYsMHg2ZSwweDJlLDB4ZWQsMHgwYSwweDg1LDB4YTUsMHgyZiwweGEyLAorKwkweDY4 LDB4ZGUsMHg0MiwweGI1CisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMSBQUiAgKi8KKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50 cm9weWlucHV0W10gPQorKwl7CisrCTB4MjYsMHg1ZiwweDM2LDB4MTQsMHhmZiwweDNkLDB4ODMs MHhmYSwweDczLDB4NWUsMHg3NSwweGRjLAorKwkweDJjLDB4MTgsMHgxNywweDFiCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEx X3ByX25vbmNlW10gPQorKwl7CisrCTB4YzgsMHhlMywweDU3LDB4YTUsMHg3YiwweDc0LDB4ODYs MHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg2ZSww eGRiLDB4MGQsMHhmZSwweDdkLDB4YWMsMHg3OSwweGQwLDB4YTUsMHgzYSwweDQ4LDB4ODUsCisr CTB4ODAsMHhlMiwweDdmLDB4MmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7 CisrCTB4MzEsMHhjZCwweDVlLDB4NDMsMHhkYywweGZiLDB4N2EsMHg3OSwweGNhLDB4ODgsMHhk ZSwweDFmLAorKwkweGQ3LDB4YmIsMHg0MiwweDA5CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHBy W10gPQorKwl7CisrCTB4N2MsMHgyMywweDk1LDB4MzgsMHgwMCwweDk1LDB4YzEsMHg3OCwweDFm LDB4OGYsMHhkNywweDYzLAorKwkweDIzLDB4ODcsMHgyYSwweGVkCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhiYiwweDM0LDB4ZTcsMHg5MywweGEzLDB4MDIsMHgy YywweDRhLDB4ZDAsMHg4OSwweGRhLDB4N2YsCisrCTB4ZWQsMHhmNCwweDRjLDB4ZGUsMHgxNyww eGVjLDB4ZTUsMHg2YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 NDksMHhiYywweDJkLDB4MmMsMHhiNywweDMyLDB4Y2IsMHgyMCwweGRmLDB4ZjUsMHg3NywweDU4 LAorKwkweGEwLDB4NGIsMHg5MywweDZlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0K KysJeworKwkweDNjLDB4YWEsMHhiMCwweDIxLDB4NDIsMHhiMCwweGRkLDB4MzQsMHhmMCwweDE2 LDB4N2YsMHgwYywKKysJMHgwZiwweGZmLDB4MmUsMHhhZgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHg4ZSwweGNiLDB4YTMsMHg2NCwweGIyLDB4YjgsMHgzMywweDZjLDB4 NjQsMHgzYiwweDc4LDB4MTYsCisrCTB4OTksMHgzNSwweGM4LDB4MzAsMHhjYiwweDNlLDB4YTAs MHhkOAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTEgTm8gUFIgICovCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dFtd ID0KKysJeworKwkweDMyLDB4OWEsMHgyYSwweDg3LDB4N2IsMHg4OSwweDdjLDB4ZjYsMHhjYiww eDk1LDB4ZDUsMHg0MCwKKysJMHgxNywweGZlLDB4NDcsMHg3MAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9ub25jZVtdID0K KysJeworKwkweDE2LDB4ZDgsMHhlMCwweGM3LDB4NTIsMHhjZiwweDRhLDB4MjUKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MzUsMHgzNSwweGE5LDB4YTUsMHg0 MCwweGJlLDB4OWIsMHhkMSwweDU2LDB4ZGQsMHg0NCwweDAwLAorKwkweDcyLDB4ZjcsMHhkMyww eDVlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDFiLDB4MmMsMHg4NCww eDJkLDB4NGEsMHg4OSwweDhmLDB4NjksMHgxOSwweGYxLDB4ZjMsMHhkYiwKKysJMHhiYiwweGUz LDB4YWEsMHhlYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4Y2YsMHhm YSwweDdkLDB4NzIsMHgwZiwweGU2LDB4YzcsMHg5NiwweGEwLDB4NjksMHgzMSwweDExLAorKwkw eDliLDB4MGIsMHgxYSwweDIwLDB4MWYsMHgzZiwweGFhLDB4ZDEKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4OTAsMHg3NSwweDE1LDB4MDQsMHg5NSwweGYxLDB4YmEs MHg4MSwweDBjLDB4MzcsMHg5NCwweDZmLAorKwkweDg2LDB4NTIsMHg2ZCwweDljCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEx X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDViLDB4NDAsMHhiYSwweDVmLDB4 MTcsMHg3MCwweGYwLDB4NGIsMHhkZiwweGM5LDB4OTcsMHg5MiwKKysJMHg3OSwweGM1LDB4ODIs MHgyOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OTcsMHhjOCwweDgw LDB4OTAsMHhiMywweGFhLDB4NmUsMHg2MCwweGVhLDB4ODMsMHg3YSwweGUzLAorKwkweDhhLDB4 Y2EsMHhhNCwweDdmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDkwLDB4YmQs MHgwNSwweDU2LDB4NmQsMHhiNSwweDIyLDB4ZDUsMHhiOSwweDVhLDB4MjksMHgyZCwKKysJMHhl OSwweDBiLDB4ZTEsMHhhYywweGRlLDB4MjcsMHgwYiwweGIwCisrCX07CisrCisrCisrLyogSE1B QyBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDE3LDB4MzIs MHgyYiwweDJlLDB4NmYsMHgxYiwweDljLDB4NmQsMHgzMSwweGUwLDB4MzQsMHgwNywKKysJMHhj ZiwweGVkLDB4ZjYsMHhiNiwweDVhLDB4NzYsMHg0YywweGJjLDB4NjIsMHg4NSwweDAxLDB4OTAK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9wcl9ub25jZVtdID0KKysJeworKwkweDM4LDB4YmYsMHg1ZiwweDIwLDB4YjMs MHg2OCwweDJmLDB4NDMsMHg2MSwweDA1LDB4OGYsMHgyMworKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGMwLDB4YzksMHg0NSwweGFjLDB4OGQsMHgyNyww eDc3LDB4MDgsMHgwYiwweDE3LDB4NmQsMHhlZCwKKysJMHhjMSwweDdkLDB4ZDUsMHgwNywweDlk LDB4NmUsMHhmOCwweDIzLDB4MmEsMHgyMiwweDEzLDB4YmQKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlv bmFsaW5wdXRbXSA9CisrCXsKKysJMHhhNCwweDNjLDB4ZTcsMHgzYiwweGVhLDB4MTksMHg0NSww eDMyLDB4YzIsMHg4MywweDZkLDB4MjEsCisrCTB4OGEsMHhjMCwweGVlLDB4NjcsMHg0NSwweGRl LDB4MTMsMHg3ZCwweDlkLDB4NjEsMHgwMCwweDNiCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0 cHJbXSA9CisrCXsKKysJMHgxNSwweDA1LDB4NzQsMHg0YSwweDdmLDB4OGQsMHg1YywweDYwLDB4 MTYsMHhlNSwweDdiLDB4YWQsCisrCTB4ZjUsMHg0MSwweDhmLDB4NTUsMHg2MCwweGM0LDB4MDks MHhlZSwweDFlLDB4MTEsMHg4MSwweGFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1td ID0KKysJeworKwkweDZmLDB4ZjUsMHg5YSwweGUyLDB4NTQsMHg1MywweDMwLDB4M2QsMHg1YSww eDI3LDB4MjksMHgzOCwKKysJMHgyNywweGYyLDB4MGQsMHgwNSwweGU5LDB4MjYsMHhjYiwweDE2 LDB4YzMsMHg1MSwweDVmLDB4MTMsCisrCTB4NDEsMHhmZSwweDk5LDB4ZjIKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4NzMsMHg4MSwweDg4LDB4ODQsMHg4Ziww eGVkLDB4NmYsMHgxMCwweDlmLDB4OTMsMHhiZiwweDE3LAorKwkweDM1LDB4N2MsMHhlZiwweGQ1 LDB4OGQsMHgyNiwweGE2LDB4N2EsMHhlOCwweDA5LDB4MzYsMHg0ZgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2Vu dHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGU2LDB4Y2YsMHhjZiwweDdlLDB4MTIsMHhlNSww eDQzLDB4ZDIsMHgzOCwweGQ4LDB4MjQsMHg2ZiwKKysJMHg1YSwweDM3LDB4NjgsMHhiZiwweDRm LDB4YTAsMHhmZiwweGQ1LDB4NjEsMHg4YSwweDkzLDB4ZTAKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHhhZiwweGY5LDB4ZDgsMHgxOSwweDkxLDB4MzAsMHg4MiwweDZm LDB4YTksMHgxZSwweDlkLDB4ZDcsCisrCTB4ZjMsMHg1MCwweGUwLDB4YzcsMHhkNSwweDY0LDB4 OTYsMHg3ZCwweDRjLDB4NGQsMHg3OCwweDAzLAorKwkweDZkLDB4ZDgsMHg5ZSwweDcyCisrCX07 CisrCisrCisrLyogSE1BQyBTSEEtMjI0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KKysJ eworKwkweDExLDB4ODIsMHhmZCwweGQ5LDB4NDIsMHhmNCwweGZhLDB4YzgsMHhmMiwweDQxLDB4 ZTYsMHg1NCwKKysJMHgwMSwweGFlLDB4MjIsMHg2ZSwweGM2LDB4YWYsMHhhZiwweGQwLDB4YTYs MHhiMiwweGUyLDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9ub25jZVtdID0KKysJeworKwkweGE5LDB4NDgsMHhk NywweDkyLDB4MzksMHg3ZSwweDJhLDB4ZGMsMHgzMCwweDFmLDB4MGUsMHgyYgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDExLDB4ZDUsMHhmNCwweGJkLDB4 NjcsMHg4YywweDMxLDB4Y2YsMHhhMywweDNmLDB4MWUsMHg2YiwKKysJMHhhOCwweDA3LDB4MDIs MHgwYiwweGM4LDB4MmUsMHg2YywweDY0LDB4NDEsMHg1YiwweGM4LDB4MzcKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg2OCwweDE4LDB4YzIsMHgwNiwweGViLDB4M2Us MHgwNCwweDk1LDB4NDQsMHg1ZSwweGZiLDB4ZTYsCisrCTB4NDEsMHhjMSwweDVjLDB4Y2MsMHg0 MCwweDJmLDB4YjcsMHhkMiwweDBmLDB4ZjMsMHg2YiwweGU3CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfaW50X3JldHVy bmVkYml0c1tdID0KKysJeworKwkweDdmLDB4NDUsMHhjNywweDVkLDB4MzIsMHhlNiwweDE3LDB4 NjAsMHhiYSwweGRjLDB4YjgsMHg0MiwKKysJMHgxYiwweDljLDB4ZjEsMHhmYSwweDNiLDB4NGQs MHgyOSwweDU0LDB4YzYsMHg5MCwweGZmLDB4NWMsCisrCTB4Y2QsMHhkNiwweGE5LDB4Y2MKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhjNCwweDhlLDB4MzcsMHg5 NSwweDY5LDB4NTMsMHgyOCwweGQ3LDB4MzcsMHhiYiwweDcwLDB4OTUsCisrCTB4MWMsMHgwNyww eDFkLDB4ZDksMHhiNywweGU2LDB4MWIsMHhiYiwweGZlLDB4NDEsMHhlYiwweGM5CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy MjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NTMsMHgxNywweGExLDB4NmEs MHhmYSwweDc3LDB4NDcsMHhiMCwweDk1LDB4NTYsMHg5YSwweDIwLAorKwkweDU3LDB4ZGUsMHg1 YywweDg5LDB4OWYsMHg3ZiwweGUyLDB4ZGUsMHgxNywweDNhLDB4NTAsMHgyMworKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgzYSwweDMyLDB4ZjksMHg4NSwweDBjLDB4 YzEsMHhlZCwweDc2LDB4MmQsMHhkZiwweDQwLDB4YzMsCisrCTB4MDYsMHgyMiwweDY2LDB4ZDQs MHg5YSwweDlhLDB4ZmYsMHg1YSwweDdlLDB4N2EsMHhmMywweDk2CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4NDMsMHhiNCwweDU3LDB4NWMsMHgzOCwweDI1LDB4OWQsMHhh ZSwweGVjLDB4OTYsMHhkMSwweDg1LAorKwkweDNhLDB4ODQsMHg4ZCwweGZlLDB4NjgsMHhkNSww eDBlLDB4NWMsMHg4ZiwweDY1LDB4YTUsMHg0ZSwKKysJMHg0NSwweDg0LDB4YTgsMHg5NAorKwl9 OworKworKworKy8qIEhNQUMgU0hBLTI1NiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9Cisr CXsKKysJMHg0ZCwweGIwLDB4NDMsMHhkOCwweDM0LDB4NGIsMHgxMCwweDcwLDB4YjEsMHg4Yiww eGVkLDB4ZWEsCisrCTB4MDcsMHg5MiwweDlmLDB4NmMsMHg3OSwweDMxLDB4YWYsMHg4MSwweDI5 LDB4ZWIsMHg2ZSwweGNhLAorKwkweDMyLDB4NDgsMHgyOCwweGU3LDB4MDIsMHg1ZCwweGE2LDB4 YTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9wcl9ub25jZVtdID0KKysJeworKwkweDNhLDB4YWUsMHgxNSwweGE5LDB4 OTksMHhkYywweGU0LDB4NjcsMHgzNCwweDNiLDB4NzAsMHgxNSwKKysJMHhhYSwweGQzLDB4MzAs MHg5YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDEz LDB4MWQsMHgyNCwweDA0LDB4YjAsMHgxOCwweDgxLDB4MTUsMHgyMSwweDUxLDB4MmEsMHgyNCwK KysJMHg1MiwweDYxLDB4YmUsMHg2NCwweDgyLDB4NmIsMHg1NSwweDJmLDB4ZTIsMHhmMSwweDQw LDB4N2QsCisrCTB4NzEsMHhkOCwweDAxLDB4ODYsMHgxNSwweGI3LDB4OGIsMHhiNQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDhmLDB4YTYsMHg1NCwweDVmLDB4 YjEsMHhkMCwweGQ4LDB4YzMsMHhlNywweDBjLDB4MTUsMHhhOSwKKysJMHgyMywweDZlLDB4ZmUs MHhmYiwweDkzLDB4ZjcsMHgzYSwweGJkLDB4NTksMHgwMSwweGZhLDB4MTgsCisrCTB4OGUsMHhl OSwweDFhLDB4YTksMHg3OCwweGZjLDB4NzksMHgwYgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1 dHByW10gPQorKwl7CisrCTB4Y2YsMHgyNCwweGI5LDB4ZWIsMHhiMywweGQ0LDB4Y2QsMHgxNyww eDM3LDB4MzgsMHg3NSwweDc5LAorKwkweDE1LDB4Y2IsMHgyZCwweDc1LDB4NTEsMHhmMSwweGNj LDB4YWEsMHgzMiwweGE0LDB4YTcsMHgzNiwKKysJMHg3YywweDVjLDB4ZTQsMHg0NywweGYxLDB4 M2UsMHgxZCwweGU1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eDUyLDB4NDIsMHhmYSwweGViLDB4ODUsMHhlMCwweDMwLDB4MjIsMHg3OSwweDAwLDB4MTYsMHhi MiwKKysJMHg4OCwweDJmLDB4MTQsMHg2YSwweGI3LDB4ZmMsMHhiNywweDUzLDB4ZGMsMHg0YSww eDEyLDB4ZWYsCisrCTB4NTQsMHhkNiwweDMzLDB4ZTksMHgyMCwweGQ2LDB4ZmQsMHg1NgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhmNCwweGY2LDB4NDksMHhh MSwweDJkLDB4NjQsMHgyYiwweDMwLDB4NTgsMHhmOCwweGJkLDB4YjgsCisrCTB4NzUsMHhlYiww eGJiLDB4NWUsMHgxYywweDliLDB4ODEsMHg2YSwweGRhLDB4MTQsMHg4NiwweDZlLAorKwkweGQw LDB4ZGEsMHgxOCwweGI3LDB4ODgsMHhmYiwweDU5LDB4ZjMKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9CisrCXsKKysJMHgyMSwweGNkLDB4NmUsMHg0NiwweGFkLDB4OTksMHgwNyww eDE3LDB4YjQsMHgzZCwweDc2LDB4MGEsCisrCTB4ZmYsMHg1YiwweDUyLDB4NTAsMHg3OCwweGRm LDB4MWYsMHgyNCwweDA2LDB4MGQsMHgzZiwweDc0LAorKwkweGE5LDB4YzksMHgzNywweGNmLDB4 ZDgsMHgyNiwweDI1LDB4OTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHhhNywweGFmLDB4MmYsMHgyOSwweGUwLDB4M2EsMHg3MiwweDk1LDB4OTYsMHgxYywweGE5LDB4 ZjAsCisrCTB4NGEsMHgxNywweDRkLDB4NjYsMHgwNiwweDEwLDB4YmYsMHgzOSwweDg5LDB4ODgs MHhiOCwweDkxLAorKwkweDM3LDB4MTgsMHg5OSwweGNmLDB4OGMsMHg1MywweDNiLDB4N2UKKysJ fTsKKysKKysKKysvKiBITUFDIFNIQS0yNTYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0W10gPQor Kwl7CisrCTB4OTYsMHhiNywweDUzLDB4MjIsMHgxZSwweDUyLDB4MmEsMHg5NiwweGIxLDB4MTUs MHgzYywweDM1LAorKwkweDVhLDB4OGIsMHhkMywweDRhLDB4YTYsMHg2YywweDgzLDB4MGEsMHg3 ZCwweGEzLDB4MjMsMHgzZCwKKysJMHg0MywweGExLDB4MDcsMHgyYywweDJkLDB4ZTMsMHg4MSww eGNjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyNTZfbm9uY2VbXSA9CisrCXsKKysJMHhmMSwweGFjLDB4OTcsMHhjYiwweDVl LDB4MDYsMHg0OCwweGQyLDB4OTQsMHhiZSwweDE1LDB4MmUsCisrCTB4YzcsMHhmYywweGMyLDB4 MDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg5OCwweGM1 LDB4MWUsMHgzNSwweDVlLDB4ODksMHgwZCwweGNlLDB4NjQsMHg2ZCwweDE4LDB4YTcsCisrCTB4 NWEsMHhjNiwweGYzLDB4ZTcsMHhkNiwweDllLDB4YzAsMHhlYSwweGI3LDB4M2EsMHg4ZCwweDY1 LAorKwkweGI4LDB4ZWIsMHgxMCwweGQ3LDB4NTcsMHgxOCwweGEwLDB4MzIKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgxYiwweDEwLDB4YWYsMHhhYywweGQwLDB4NjUs MHg5NSwweGFkLDB4MDQsMHhhZCwweDAzLDB4MWMsCisrCTB4ZTAsMHg0MCwweGQ2LDB4M2UsMHgx YywweDQ2LDB4NTMsMHgzOSwweDdjLDB4ZTIsMHhiYywweGRhLAorKwkweDhjLDB4YTIsMHgzMyww eGE3LDB4OWEsMHgyNiwweGQzLDB4MjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4YmEsMHg2MSwweDBlLDB4NTUsMHhmZSwweDExLDB4OGEsMHg5ZSwweDBmLDB4ODAs MHhkZiwweDFkLAorKwkweDAzLDB4MGEsMHhmZSwweDE1LDB4OTQsMHgyOCwweDRiLDB4YmEsMHhm NCwweDlmLDB4NTEsMHgyNSwKKysJMHg4OCwweGU1LDB4NGUsMHhmYiwweGFmLDB4Y2UsMHg2OSww eDkwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NjIsMHg3Ziww eDFlLDB4NmIsMHhlOCwweDhlLDB4ZTEsMHgzNSwweDdkLDB4OWIsMHg0ZiwweGM3LAorKwkweGVj LDB4YzgsMHhhYywweGVmLDB4NmIsMHgxMywweDllLDB4MDUsMHg1NiwweGMxLDB4MDgsMHhmOSwK KysJMHgyZiwweDBmLDB4MjcsMHg5YywweGQ0LDB4MTUsMHhlZCwweDJkCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRk aXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YzcsMHg3NiwweDZlLDB4YTksMHhkMiww eGIyLDB4NzYsMHg0MCwweDgyLDB4MjUsMHgyYywweGIzLAorKwkweDZmLDB4YWMsMHhlOSwweDc0 LDB4ZWYsMHg4ZiwweDNjLDB4OGUsMHhjZCwweGYxLDB4YmYsMHhiMywKKysJMHg0OSwweDc3LDB4 MzQsMHg4OCwweDUyLDB4MzYsMHhlNiwweDJlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0Mltd ID0KKysJeworKwkweDhkLDB4YjgsMHgwYywweGQxLDB4YmYsMHg3MCwweGY2LDB4MTksMHhjMyww eDQxLDB4ODAsMHg5ZiwKKysJMHhlMSwweGE1LDB4YTQsMHgxZiwweDJjLDB4MjYsMHhiMSwweGU1 LDB4ZDgsMHhlYiwweGJlLDB4ZjgsCisrCTB4ZGYsMHg4OCwweDZhLDB4ODksMHhkNiwweDA1LDB4 ZDgsMHg5ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjU2X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDQzLDB4MTIsMHgy YSwweDJjLDB4NDAsMHg1MywweDJlLDB4N2MsMHg2NiwweDM0LDB4YWMsMHhjMywKKysJMHg0Myww eGUzLDB4ZTAsMHg2YSwweGZjLDB4ZmEsMHhlYSwweDg3LDB4MjEsMHgxZiwweGUyLDB4MjYsCisr CTB4YzQsMHhmOSwweDA5LDB4OWEsMHgwZCwweDZlLDB4N2YsMHhlMAorKwl9OworKworKworKy8q IEhNQUMgU0hBLTM4NCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2OSww eDgxLDB4OTgsMHg4OCwweDQ0LDB4ZjUsMHhkNiwweDJlLDB4MDAsMHgwOCwweDNiLDB4YzUsCisr CTB4ZmIsMHhkNywweDhlLDB4NmYsMHgyMywweGY4LDB4NmQsMHgwOSwweGQ2LDB4ODUsMHg0OSww eGQxLAorKwkweGY4LDB4NmQsMHhhNCwweDU4LDB4NTQsMHhmZCwweDg4LDB4YTkKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9wcl9ub25jZVtdID0KKysJeworKwkweDZlLDB4MzgsMHg4MSwweGNhLDB4YjcsMHhlOCwweDZl LDB4NjYsMHg0OSwweDhhLDB4YjIsMHg1OSwKKysJMHhlZSwweDE2LDB4YzksMHhkZQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh Mzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGZlLDB4NGMsMHhkOSww eGY0LDB4NzgsMHgzYiwweDA4LDB4NDEsMHg4ZCwweDhmLDB4NTUsMHhjNCwKKysJMHg0MywweDU2 LDB4YjYsMHgxMiwweDM2LDB4NmIsMHgzMCwweGI3LDB4NWUsMHhlMSwweGI5LDB4NDcsCisrCTB4 MDQsMHhiMSwweDRlLDB4YTksMHgwMCwweGExLDB4NTIsMHhhMQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0KKysJeworKwkweDg5LDB4ZTksMHhjYywweDhmLDB4MjcsMHgzYywweDI2 LDB4ZDEsMHg5NSwweGM4LDB4N2QsMHgwZiwKKysJMHg1YiwweDFhLDB4ZjAsMHg3OCwweDM5LDB4 NTYsMHg2ZiwweGE0LDB4MjMsMHhlNywweGQxLDB4ZGEsCisrCTB4N2MsMHg2NiwweDMzLDB4YTAs MHg5MCwweGM5LDB4OTIsMHg4OAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7 CisrCTB4YmUsMHgzZCwweDdjLDB4MGQsMHhjYSwweGRhLDB4N2MsMHg0OSwweGI4LDB4MTIsMHgz NiwweGMwLAorKwkweGRiLDB4YWQsMHgzNSwweGE4LDB4YzcsMHgwYiwweDJhLDB4MmMsMHg2OSww eDZkLDB4MjUsMHg1NiwKKysJMHg2MywweDgyLDB4MTEsMHgzZSwweGE3LDB4MzMsMHg3MCwweDcy CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDgyLDB4M2QsMHhl NiwweDU0LDB4ODAsMHg0MiwweGY4LDB4YmEsMHg5MCwweDRmLDB4MDYsMHhhNiwKKysJMHhkMiww eDdmLDB4YmYsMHg3OSwweDdjLDB4MTIsMHg3ZCwweGE2LDB4YTIsMHg2NiwweGU4LDB4YTYsCisr CTB4YzAsMHhkNiwweDRhLDB4NTUsMHhiZiwweGQ4LDB4MGEsMHhjNSwweGY4LDB4MDMsMHg4OCww eGRkLAorKwkweDhlLDB4ODcsMHhkMSwweDVhLDB4NDgsMHgyNiwweDcyLDB4MmEsMHg4ZSwweGNm LDB4ZWUsMHhiYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4 ZiwweGZmLDB4ZDksMHg4NCwweGJiLDB4ODUsMHgzYSwweDY2LDB4YTEsMHgyMSwweGNlLDB4YjIs CisrCTB4M2EsMHgzYSwweDE3LDB4MjIsMHgxOSwweGFlLDB4YzcsMHhiNiwweDYzLDB4ODEsMHhk NSwweGZmLAorKwkweDBkLDB4YzgsMHhlMSwweGFmLDB4NTcsMHhkMiwweGNiLDB4NjAKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhkNywweGZiLDB4YzksMHhlOCww eGUyLDB4ZjIsMHhhYSwweDRjLDB4YjgsMHg1MSwweDJmLDB4ZTEsCisrCTB4MjIsMHhiYSwweGYz LDB4ZGEsMHgwYSwweDE5LDB4NzYsMHg3MSwweDU3LDB4YjIsMHgxZCwweDk0LAorKwkweDA5LDB4 NjksMHg2YywweGQzLDB4OTcsMHg1MSwweDgxLDB4ODcKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHhlNiwweDE5LDB4MjgsMHhhOCwweDIxLDB4Y2UsMHg1ZSwweGRiLDB4 MjQsMHg3OSwweDhjLDB4NzYsCisrCTB4NWQsMHg3MywweGIyLDB4ZGYsMHhhYywweGVmLDB4ODUs MHhhNywweDNiLDB4MTksMHgwOSwweDhiLAorKwkweDdmLDB4OTgsMHgyOCwweGE5LDB4OTMsMHhk OCwweDdhLDB4YWQsMHg1NSwweDhiLDB4MjQsMHg5ZCwKKysJMHhlNiwweDk4LDB4ZmUsMHg0Nyww eGQ1LDB4NDgsMHhjMSwweDIzLDB4ZDgsMHgxZCwweDYyLDB4NzUKKysJfTsKKysKKysKKysvKiBI TUFDIFNIQS0zODQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YzMsMHg1 NiwweDJiLDB4MWQsMHhjMiwweGJiLDB4YTgsMHhmMCwweGFlLDB4MWIsMHgwZCwweGQzLAorKwkw eDVhLDB4NmMsMHhkYSwweDU3LDB4OGUsMHhhNSwweDhhLDB4MGQsMHg2YywweDRiLDB4MTgsMHhi MSwKKysJMHgwNCwweDNlLDB4YjQsMHg5OSwweDM1LDB4YzQsMHhjMCwweDVmCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf bm9uY2VbXSA9CisrCXsKKysJMHhjNSwweDQ5LDB4MWUsMHg2NiwweDI3LDB4OTIsMHhiZSwweGVj LDB4YjUsMHgxZSwweDRiLDB4YjEsCisrCTB4MzgsMHhlMywweGViLDB4NjIKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhiZSwweGU3LDB4NmIsMHg1NywweGRl LDB4ODgsMHgxMSwweDk2LDB4OWIsMHg2ZSwweGVhLDB4ZTUsCisrCTB4NjMsMHg4MywweDRjLDB4 YjYsMHg4ZCwweDY2LDB4YWEsMHgxZiwweDhiLDB4NTQsMHhlNywweDYyLAorKwkweDZkLDB4NWEs MHhmYywweGJmLDB4OTcsMHhiYSwweGNkLDB4NzcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRb XSA9CisrCXsKKysJMHhlNSwweDI4LDB4NWYsMHg0MywweGY1LDB4ODMsMHg2ZSwweDBhLDB4ODMs MHg1YywweGUzLDB4ODEsCisrCTB4MDMsMHhmMiwweGY4LDB4NzgsMHgwMCwweDdjLDB4OTUsMHg4 NywweDE2LDB4ZDYsMHg2YywweDU4LAorKwkweDMzLDB4NmMsMHg1MywweDM1LDB4MGQsMHg2Niww eGUzLDB4Y2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTIsMHgx ZiwweGYzLDB4ZGEsMHgwZCwweDE5LDB4OTksMHg4NywweGM0LDB4OTAsMHhhMiwweDMxLAorKwkw eGNhLDB4MmEsMHg4OSwweDU4LDB4NDMsMHg0NCwweGI4LDB4ZGUsMHhjZiwweGE0LDB4YmUsMHgz YiwKKysJMHg1MywweDI2LDB4MjIsMHgzMSwweDc2LDB4NDEsMHgyMiwweGI1LDB4YTgsMHg3MCww eDJmLDB4NGIsCisrCTB4NjQsMHg5NSwweDRkLDB4NDgsMHg5NiwweDM1LDB4ZTYsMHhiZCwweDNj LDB4MzQsMHhkYiwweDFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7Cisr CTB4NzcsMHg2MSwweGJhLDB4YmMsMHhmMiwweGMxLDB4ZjMsMHg0YiwweDg2LDB4NjUsMHhmZCww eDQ4LAorKwkweDBlLDB4M2MsMHgwMiwweDVlLDB4YTIsMHg3YSwweDZiLDB4N2MsMHhlZCwweDIx LDB4NWUsMHhmOSwKKysJMHhjZCwweGNkLDB4NzcsMHgwNywweDJiLDB4YmUsMHhjNSwweDVjCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4MTgsMHgyNCwweDVm LDB4YzYsMHg4NCwweGQxLDB4NjcsMHhjMywweDlhLDB4MTEsMHhhNSwweDhjLAorKwkweDA3LDB4 MzksMHgyMSwweDgzLDB4NGQsMHgwNCwweGM0LDB4NmEsMHgyOCwweDE5LDB4Y2YsMHg5MiwKKysJ MHgyMSwweGQ5LDB4OWUsMHg0MSwweDcyLDB4NmMsMHg5ZSwweDYzCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRp b25hbGlucHV0MltdID0KKysJeworKwkweDk2LDB4NjcsMHg0MSwweDI4LDB4OWIsMHhiNywweDky LDB4OGQsMHg2NCwweDNiLDB4ZTQsMHhjZiwKKysJMHg3ZSwweGFhLDB4MWUsMHhiMSwweDRiLDB4 MWQsMHgwOSwweDU2LDB4NjcsMHg5YywweGM2LDB4NmQsCisrCTB4M2IsMHhlOCwweDkxLDB4OWQs MHhlMSwweDhhLDB4YjcsMHgzMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3JldHVybmVkYml0c1tdID0KKysJeworKwkw eGUzLDB4NTksMHg2MSwweDM4LDB4OTIsMHhlYywweGUyLDB4M2MsMHhmZiwweGI3LDB4ZGIsMHgx OSwKKysJMHgwZiwweDViLDB4OTMsMHg2OCwweDBkLDB4YTQsMHg5NCwweDQwLDB4NzIsMHgwYiww eGUwLDB4ZWQsCisrCTB4NGQsMHhjZCwweDY4LDB4YTAsMHgxZSwweGZlLDB4NjcsMHhiMiwweGZh LDB4MjEsMHg1NiwweDc0LAorKwkweGE0LDB4YWQsMHhjZiwweGI3LDB4NjAsMHg2NiwweDJlLDB4 NDAsMHhkZSwweDgyLDB4Y2EsMHhmYgorKwl9OworKworKworKy8qIEhNQUMgU0hBLTUxMiBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhhYSwweDllLDB4NDUsMHg2NywweDBl LDB4MDAsMHgyYSwweDY3LDB4OTgsMHhkNiwweGRhLDB4MGIsCisrCTB4MGYsMHgxNywweDdlLDB4 YWMsMHhmZCwweDI3LDB4YzQsMHhjYSwweDg0LDB4ZGYsMHhkZSwweGJhLAorKwkweDg1LDB4ZDks MHhiZSwweDhmLDB4ZjMsMHhmZiwweDkxLDB4NGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9ub25jZVtdID0KKysJ eworKwkweDhjLDB4NDksMHgyZiwweDU4LDB4MWUsMHg3YSwweGRhLDB4NGIsMHg3ZSwweDhhLDB4 MzAsMHg3YiwKKysJMHg4NiwweGVhLDB4YWYsMHhhMgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KKysJeworKwkweDcxLDB4ZTEsMHhiYiwweGFkLDB4YTcsMHg0YiwweDJl LDB4MzEsMHgzYiwweDBiLDB4ZWMsMHgyNCwKKysJMHg5OSwweDM4LDB4YmMsMHhhYSwweDA1LDB4 NGMsMHg0NiwweDQ0LDB4ZmEsMHhhZCwweDhlLDB4MDIsCisrCTB4YzEsMHg3ZSwweGFkLDB4ZWMs MHg1NCwweGE2LDB4ZDAsMHhhZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJ eworKwkweDNkLDB4NmUsMHhhNiwweGE4LDB4MjksMHgyYSwweGIyLDB4ZjUsMHg5OCwweDQyLDB4 ZTQsMHg5MiwKKysJMHg3OCwweDIyLDB4NjcsMHhmZCwweDFiLDB4MTUsMHgxZSwweDI5LDB4YWEs MHg3MSwweDNjLDB4M2MsCisrCTB4ZTcsMHgwNSwweDIwLDB4YTksMHgyOSwweGM2LDB4NzUsMHg3 MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4YWIsMHhiOSwweDE2 LDB4ZDgsMHg1NSwweDM1LDB4NTQsMHhiNywweDk3LDB4M2YsMHg5NCwweGJjLAorKwkweDJmLDB4 N2MsMHg3MCwweGM3LDB4ZDAsMHhlZCwweGI3LDB4NGIsMHhmNywweGY2LDB4NmMsMHgwMywKKysJ MHgwYywweGIwLDB4MDMsMHhkOCwweGJiLDB4NzEsMHhkOSwweDEwCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfaW50 X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDhlLDB4ZDMsMHhmZCwweDUyLDB4OWUsMHg4Myww eDA4LDB4NDksMHgxOCwweDZlLDB4MjMsMHg1NiwKKysJMHg1YywweDQ1LDB4OTMsMHgzNCwweDA1 LDB4ZTIsMHg5OCwweDhmLDB4MGMsMHhkNCwweDMyLDB4MGMsCisrCTB4ZmQsMHhkYSwweDVmLDB4 OTIsMHgzYSwweDhjLDB4ODEsMHhiZCwweGY2LDB4NmMsMHg1NSwweGZkLAorKwkweGI4LDB4MjAs MHhjZSwweDhkLDB4OTcsMHgyNywweGU4LDB4ZTgsMHhlMCwweGIzLDB4ODUsMHg1MCwKKysJMHhh MiwweGMyLDB4YjIsMHg5NSwweDFkLDB4NDgsMHhkMywweDdiLDB4NGIsMHg3OCwweDEzLDB4MzUs CisrCTB4MDUsMHgxNywweGJlLDB4MGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PQorKwl7CisrCTB4YzMsMHhmYywweDk1LDB4YWEsMHg2OSwweDA2LDB4YWUsMHg1OSwweDQxLDB4 Y2UsMHgyNiwweDA4LAorKwkweDI5LDB4NmQsMHg0NSwweGRhLDB4ZTgsMHhiMywweDZjLDB4OTUs MHg2MCwweDBmLDB4NzAsMHgyYywKKysJMHgxMCwweGJhLDB4MzgsMHg4YywweGNmLDB4MjksMHg5 OSwweGFhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4M2IsMHg5 YSwweDI1LDB4Y2UsMHhkNywweGY5LDB4NWMsMHhkMSwweDNhLDB4M2UsMHhhYSwweDcxLAorKwkw eDE0LDB4M2UsMHgxOSwweGU4LDB4Y2UsMHhlNiwweGZlLDB4NTEsMHg4NCwweGU5LDB4MWIsMHhm ZSwKKysJMHgzZiwweGE3LDB4ZjIsMHhmZCwweDc2LDB4NWYsMHg2YSwweGU3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YjcsMHg4MiwweGE5LDB4NTcsMHg4MSwweDY3 LDB4NTMsMHhiNSwweGExLDB4ZTksMHgzZCwweDM1LAorKwkweGY5LDB4ZTQsMHg5NywweGJlLDB4 YTYsMHhjYSwweGYxLDB4MDEsMHgxMywweDA5LDB4ZTcsMHgyMSwKKysJMHhjMCwweGVkLDB4OTMs MHg1ZCwweDRiLDB4ZjQsMHhlYiwweDhkLDB4NTMsMHgyNSwweDhhLDB4YzQsCisrCTB4YjEsMHg2 ZiwweDZlLDB4MzcsMHhjZCwweDJlLDB4YWMsMHgzOSwweGIyLDB4YjYsMHg5OSwweGEzLAorKwkw eDgyLDB4MDAsMHhiMCwweDIxLDB4ZjAsMHhjNywweDJmLDB4NGMsMHg3MywweDkyLDB4ZmQsMHgw MCwKKysJMHhiNiwweGFmLDB4YmMsMHhkMworKwl9OworKworKworKy8qIEhNQUMgU0hBLTUxMiBO byBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2ZSwweDg1LDB4ZTYsMHgyNSww eDk2LDB4MjksMHhhNywweDUyLDB4NWIsMHg2MCwweGJhLDB4YWEsCisrCTB4ZGUsMHhkYiwweDM2 LDB4MGEsMHg1MSwweDlhLDB4MTUsMHhhZSwweDZlLDB4MTgsMHhkMywweGZlLAorKwkweDM5LDB4 YjksMHg0YSwweDk2LDB4ZjgsMHg3NywweGNiLDB4OTUKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9ub25jZVtdID0KKysJ eworKwkweGUwLDB4YTYsMHg1ZCwweDA4LDB4YzMsMHg3YywweGFlLDB4MjUsMHgyZSwweDgwLDB4 ZDEsMHgzZSwKKysJMHhkOSwweGFmLDB4NDMsMHgzYworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KKysJeworKwkweDUzLDB4OTksMHg1MiwweDVmLDB4MTEsMHhhOSwweDY0LDB4 NjYsMHgyMCwweDVlLDB4MWIsMHg1ZiwKKysJMHg0MiwweGIzLDB4ZjQsMHhkYSwweGVkLDB4YmIs MHg2MywweGMxLDB4MjMsMHhhZiwweGQwLDB4MDEsCisrCTB4OTAsMHgzYiwweGQwLDB4NzgsMHhl NCwweDBiLDB4YTcsMHgyMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkw eDg1LDB4OTAsMHg4MCwweGQzLDB4OTgsMHhmMSwweDUzLDB4NmQsMHg2OCwweDE1LDB4OGYsMHhl NSwKKysJMHg2MCwweDNmLDB4MTcsMHgyOSwweDU1LDB4OGQsMHgzMywweGIxLDB4NDUsMHg2NCww eDY0LDB4OGQsCisrCTB4NTAsMHgyMSwweDg5LDB4YWUsMHhmNiwweGZkLDB4MzIsMHg3MworKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyOCwweDU2LDB4MzAsMHg2Ziww eGY0LDB4YTEsMHg0OCwweGUwLDB4YzksMHhmNSwweDc1LDB4OTAsCisrCTB4Y2MsMHhmYiwweGRm LDB4ZGYsMHg3MSwweDNkLDB4MGEsMHg5YSwweDAzLDB4NjUsMHgzYiwweDE4LAorKwkweDYxLDB4 ZTMsMHhkMSwweGRhLDB4Y2MsMHg0YSwweGZlLDB4NTUsMHgzOCwweGY4LDB4MjEsMHg2YiwKKysJ MHhmYSwweDE4LDB4MDEsMHg0MiwweDM5LDB4MmYsMHg5OSwweDUzLDB4MzgsMHgxNSwweDgyLDB4 MzQsCisrCTB4YzUsMHg5MywweDkyLDB4YmMsMHg0ZCwweDc1LDB4MWEsMHg1ZiwweDIxLDB4Mjcs MHhjYywweGExLAorKwkweGIxLDB4NTcsMHg2OSwweGU4CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0 cmVzZWVkW10gPQorKwl7CisrCTB4OGMsMHg1MiwweDdlLDB4NzcsMHg3MiwweDNmLDB4YTMsMHgw NCwweDk3LDB4MTAsMHg5YiwweDQxLAorKwkweGJkLDB4ZTgsMHhmZiwweDg5LDB4ZWQsMHg4MCww eGUzLDB4YmQsMHhhYSwweDEyLDB4MmQsMHhjYSwKKysJMHg3NSwweDgyLDB4MzYsMHg3NywweDg4 LDB4Y2QsMHhhNiwweDczCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7 CisrCTB4N2UsMHgzMiwweGUzLDB4NjksMHg2OSwweDA3LDB4MzQsMHhhMiwweDE2LDB4YTIsMHg1 ZCwweDFhLAorKwkweDEwLDB4OTEsMHhkMywweGUyLDB4MjEsMHhhMiwweGEzLDB4ZGQsMHhjZCww eDBjLDB4MDksMHg4NiwKKysJMHgxMSwweGUxLDB4NTAsMHhmZiwweDVjLDB4YjcsMHhlYiwweDVj CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDdmLDB4NzgsMHg2Niww eGQ4LDB4ZmIsMHg2NywweGNmLDB4OGQsMHg4YywweDA4LDB4MzAsMHhhNSwKKysJMHhmOCwweDdk LDB4Y2YsMHg0NCwweDU5LDB4Y2UsMHhmOCwweGRmLDB4NTgsMHhkMywweDYwLDB4Y2IsCisrCTB4 YTgsMHg2MCwweGI5LDB4MDcsMHhjNCwweGIxLDB4OTUsMHg0OAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3JldHVybmVk Yml0c1tdID0KKysJeworKwkweGRmLDB4YTcsMHgzNiwweGQ0LDB4ZGMsMHg1ZCwweDRkLDB4MzEs MHhhZCwweDY5LDB4NDYsMHg5ZiwKKysJMHhmMSwweDdjLDB4ZDcsMHgzYiwweDRmLDB4NTUsMHhm MiwweGQ3LDB4YjksMHg5ZCwweGFkLDB4N2EsCisrCTB4NzksMHgwOCwweDU5LDB4YTUsMHhkYyww eDc0LDB4ZjUsMHg5YiwweDczLDB4ZDIsMHgxMywweDI1LAorKwkweDBiLDB4ODEsMHgwOCwweDA4 LDB4MjUsMHhmYiwweDM5LDB4ZjIsMHhmMCwweGEzLDB4YTQsMHg4ZCwKKysJMHhlZiwweDA1LDB4 OWUsMHhiOCwweGM3LDB4NTIsMHhlNCwweDBlLDB4NDIsMHhhYSwweDdjLDB4NzksCisrCTB4YzIs MHhkNiwweGZkLDB4YTUKKysJfTsKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9m aXBzX2RzYV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19k c2Ffc2VsZnRlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwkyMDE0LTA1 LTA2IDE2OjI5OjUwLjU0ODkyMzI3MSArMDIwMAorQEAgLTAsMCArMSwxOTMgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisr ICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgImZpcHNfbG9j bC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBkc2FfdGVzdF8yMDQ4X3BbXSA9IHsKKysJMHhhOCwweDUzLDB4NzgsMHhkOCwweGZkLDB4 M2YsMHg4ZCwweDcyLDB4ZWMsMHg3NCwweDE4LDB4MDgsCisrCTB4MGQsMHhhMiwweDEzLDB4MTcs MHhlNCwweDNlLDB4YzQsMHhiNiwweDJiLDB4YTgsMHhjOCwweDYyLAorKwkweDNiLDB4N2UsMHg0 ZCwweDA0LDB4NDQsMHgxZCwweGQxLDB4YTAsMHg2NSwweDg2LDB4NjIsMHg1OSwKKysJMHg2NCww eDkzLDB4Y2EsMHg4ZSwweDllLDB4OGYsMHhiYiwweDdlLDB4MzQsMHhhYSwweGRkLDB4YjYsCisr CTB4MmUsMHg1ZCwweDY3LDB4YjYsMHhkMCwweDlhLDB4NmUsMHg2MSwweGI3LDB4NjksMHhlNyww eGMzLAorKwkweDUyLDB4YWEsMHgyYiwweDEwLDB4ZTIsMHgwYywweGEwLDB4NjMsMHg2OSwweDYz LDB4YjUsMHg1MiwKKysJMHgzZSwweDg2LDB4NDcsMHgwZCwweGVjLDB4YmIsMHhlZCwweGEwLDB4 MjcsMHhlNywweDk3LDB4ZTcsCisrCTB4YjYsMHg3NiwweDM1LDB4ZDQsMHhkNCwweDljLDB4MzAs MHg3MCwweDBlLDB4NzQsMHhhZiwweDhhLAorKwkweDBmLDB4ZjEsMHg1NiwweGE4LDB4MDEsMHhh ZiwweDU3LDB4YTIsMHg2ZSwweDcwLDB4NzgsMHhmMSwKKysJMHhkOCwweDJmLDB4NzQsMHg5MCww eDhlLDB4Y2IsMHg2ZCwweDA3LDB4ZTcsMHgwYiwweDM1LDB4MDMsCisrCTB4ZWUsMHhkOSwweDRm LDB4YTMsMHgyYywweGYxLDB4N2EsMHg3ZiwweGMzLDB4ZDYsMHhjZiwweDQwLAorKwkweGRjLDB4 N2IsMHgwMCwweDgzLDB4MGUsMHg2YSwweDI1LDB4NjYsMHhkYywweDA3LDB4M2UsMHgzNCwKKysJ MHgzMywweDEyLDB4NTEsMHg3YywweDZhLDB4YTUsMHgxNSwweDJiLDB4NGIsMHhmZSwweGNkLDB4 MmUsCisrCTB4NTUsMHgxZiwweGVlLDB4MzQsMHg2MywweDE4LDB4YTEsMHg1MywweDQyLDB4M2Ms MHg5OSwweDZiLAorKwkweDBkLDB4NWQsMHhjYiwweDkxLDB4MDIsMHhhZSwweGRkLDB4MzgsMHg3 OSwweDg2LDB4MTYsMHhmMSwKKysJMHhmMSwweGUwLDB4ZDYsMHhjNCwweDAzLDB4NTIsMHg1Yiww eDFmLDB4OWIsMHgzZCwweDRkLDB4YzcsCisrCTB4NjYsMHhkZSwweDJkLDB4ZmMsMHg0YSwweDU2 LDB4ZDcsMHhiOCwweGJhLDB4NTksMHg2MywweGQ2LAorKwkweDBmLDB4M2UsMHgxNiwweDMxLDB4 ODgsMHg3MCwweGFkLDB4NDMsMHg2OSwweDUyLDB4ZTUsMHg1NywKKysJMHg2NSwweDM3LDB4NGUs MHhhYiwweDg1LDB4ZTgsMHhlYywweDE3LDB4ZDYsMHhiOSwweGE0LDB4NTQsCisrCTB4N2IsMHg5 YiwweDVmLDB4MjcsMHg1MiwweGYzLDB4MTAsMHg1YiwweGU4LDB4MDksMHhiMiwweDNhLAorKwkw eDJjLDB4OGQsMHg3NCwweDY5LDB4ZGIsMHgwMiwweGUyLDB4NGQsMHg1OSwweDIzLDB4OTQsMHhh NywKKysJMHhkYiwweGEwLDB4NjksMHhlOQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgZHNhX3Rlc3RfMjA0OF9xW10gPSB7CisrCTB4ZDIsMHg3NywweDA0LDB4NGUsMHg1MCww eGY1LDB4YTQsMHhlMywweGY1LDB4MTAsMHhhNSwweDBhLAorKwkweDBiLDB4ODQsMHhmZCwweGZm LDB4YmMsMHhhMCwweDQ3LDB4ZWQsMHgyNywweDYwLDB4MjAsMHg1NiwKKysJMHg3NCwweDQxLDB4 YTAsMHhhNQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0 OF9nW10gPSB7CisrCTB4MTMsMHhkNywweDU0LDB4ZTIsMHgxZiwweGQyLDB4NDEsMHg2NSwweDVk LDB4YTgsMHg5MSwweGM1LAorKwkweDIyLDB4YTYsMHg1YSwweDcyLDB4YTgsMHg5YiwweGRjLDB4 NjQsMHhlYywweDliLDB4NTQsMHhhOCwKKysJMHgyMSwweGVkLDB4NGEsMHg4OSwweDhiLDB4NDks MHgwZSwweDBjLDB4NGYsMHhjYiwweDcyLDB4MTksCisrCTB4MmEsMHg0YSwweDIwLDB4ZjUsMHg0 MSwweGYzLDB4ZjIsMHg5MiwweDUzLDB4OTksMHhmMCwweGJhLAorKwkweGVjLDB4ZjksMHgyOSww eGFhLDB4ZmIsMHhmNywweDlkLDB4ZmUsMHg0MywweDMyLDB4MzksMHgzYiwKKysJMHgzMiwweGNk LDB4MmUsMHgyZiwweGNmLDB4MjcsMHgyZiwweDMyLDB4YTYsMHgyNywweDQzLDB4NGEsCisrCTB4 MGQsMHhmMiwweDQyLDB4YjcsMHg1YiwweDQxLDB4NGQsMHhmMywweDcyLDB4MTIsMHgxZSwweDUz LAorKwkweGE1LDB4NTMsMHhmMiwweDIyLDB4ZjgsMHgzNiwweGIwLDB4MDAsMHhmMCwweDE2LDB4 NDgsMHg1YiwKKysJMHg2YiwweGQwLDB4ODksMHg4NCwweDUxLDB4ODAsMHgxZCwweGNkLDB4OGQs MHhlNiwweDRjLDB4ZDUsCisrCTB4MzYsMHg1NiwweDk2LDB4ZmYsMHhjNSwweDMyLDB4ZDUsMHgy OCwweGM1LDB4MDYsMHg2MiwweDBhLAorKwkweDk0LDB4MmEsMHgwMywweDA1LDB4MDQsMHg2ZCww eDhmLDB4MTgsMHg3NiwweDM0LDB4MWYsMHgxZSwKKysJMHg1NywweDBiLDB4YzMsMHg5NywweDRi LDB4YTYsMHhiOSwweGE0LDB4MzgsMHhlOSwweDcwLDB4MjMsCisrCTB4MDIsMHhhMiwweGU2LDB4 ZTYsMHg3YiwweGZkLDB4MDYsMHhkMywweDJiLDB4YzYsMHg3OSwweDk2LAorKwkweDIyLDB4NzEs MHhkNywweGI0LDB4MGMsMHhkNywweDJmLDB4MzgsMHg2ZSwweDY0LDB4ZTAsMHhkNywKKysJMHhl ZiwweDg2LDB4Y2EsMHg4YywweGE1LDB4ZDEsMHg0MiwweDI4LDB4ZGMsMHgyYSwweDRmLDB4MTYs CisrCTB4ZTMsMHgxOCwweDk4LDB4ODYsMHhiNSwweDk5LDB4MDYsMHg3NCwweGY0LDB4MjAsMHgw ZiwweDNhLAorKwkweDRjLDB4ZjYsMHg1YSwweDNmLDB4MGQsMHhkYiwweGExLDB4ZmEsMHg2Nyww eDJkLDB4ZmYsMHgyZiwKKysJMHg1ZSwweDE0LDB4M2QsMHgxMCwweGU0LDB4ZTksMHg3YSwweGU4 LDB4NGYsMHg2ZCwweGEwLDB4OTUsCisrCTB4MzUsMHhkNSwweGI5LDB4ZGYsMHgyNSwweDkxLDB4 ODEsMHhhNywweDliLDB4NjMsMHhiMCwweDY5LAorKwkweGU5LDB4NDksMHg5NywweDJiLDB4MDIs MHhiYSwweDM2LDB4YjMsMHg1OCwweDZhLDB4YWIsMHg3ZSwKKysJMHg0NSwweGYzLDB4MjIsMHhm OCwweDJlLDB4NGUsMHg4NSwweGNhLDB4M2EsMHhiOCwweDU1LDB4OTEsCisrCTB4YjMsMHhjMiww eGE5LDB4NjYKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIw NDhfcHViX2tleVtdID0geworKwkweDI0LDB4NTIsMHhmMywweGNjLDB4YmUsMHg5ZSwweGQ1LDB4 Y2EsMHg3ZCwweGM3LDB4NGMsMHg2MCwKKysJMHgyYiwweDk5LDB4MjIsMHg2ZSwweDhmLDB4MmYs MHhhYiwweDM4LDB4ZTcsMHhkNywweGRkLDB4ZmIsCisrCTB4NzUsMHg1MywweDliLDB4MTcsMHgx NSwweDVlLDB4OWYsMHhjZiwweGQxLDB4YWIsMHhhNSwweDY0LAorKwkweGViLDB4ODUsMHgzNSww eGQ4LDB4MTIsMHhjOSwweGMyLDB4ZGMsMHhmOSwweDcyLDB4ODQsMHg0NCwKKysJMHgxYiwweGM0 LDB4ODIsMHgyNCwweDM2LDB4MjQsMHhjNywweGY0LDB4NTcsMHg1OCwweDBjLDB4MWMsCisrCTB4 MzgsMHhhNSwweDdjLDB4NDYsMHhjNCwweDU3LDB4MzksMHgyNCwweDcwLDB4ZWQsMHhiNSwweDJj LAorKwkweGI1LDB4YTYsMHhlMCwweDNmLDB4ZTYsMHgyOCwweDdiLDB4YjYsMHhmNCwweDlhLDB4 NDIsMHhhMiwKKysJMHgwNiwweDVhLDB4MDUsMHg0ZiwweDAzLDB4MDgsMHgzOSwweGRmLDB4MWYs MHhkMywweDE0LDB4OWMsCisrCTB4NGMsMHhhMCwweDUzLDB4MWQsMHhkOCwweGNhLDB4OGEsMHhh YSwweDljLDB4YzcsMHgzMywweDcxLAorKwkweDkzLDB4MzgsMHg3MywweDQ4LDB4MzMsMHg2MSww eDE4LDB4MjIsMHg0NSwweDQ1LDB4ZTgsMHg4YywKKysJMHg4MCwweGZmLDB4ZDgsMHg3NiwweDVk LDB4NzQsMHgzNiwweDAzLDB4MzMsMHhjYywweGFiLDB4OTksCisrCTB4NzIsMHg3NywweDliLDB4 NjUsMHgyNSwweGE2LDB4NWIsMHhkZCwweDBkLDB4MTAsMHhjNiwweDc1LAorKwkweGMxLDB4MDks MHhiYiwweGQzLDB4ZTUsMHhiZSwweDRkLDB4NzIsMHhlZiwweDZlLDB4YmEsMHg2ZSwKKysJMHg0 MywweDhkLDB4NTIsMHgyNiwweDIzLDB4N2QsMHhiOCwweDg4LDB4MzcsMHg5YywweDVmLDB4Y2Ms CisrCTB4NDcsMHhhMywweDg0LDB4N2YsMHhmNiwweDM3LDB4MTEsMHhiYSwweGVkLDB4NmQsMHgw MywweGFmLAorKwkweGU4LDB4MWUsMHg2OSwweDRhLDB4NDEsMHgzYiwweDY4LDB4MGIsMHhkMyww eDhhLDB4YjQsMHg5MCwKKysJMHgzZiwweDgzLDB4NzAsMHhhNywweDA3LDB4ZWYsMHg1NSwweDFk LDB4NDksMHg0MSwweDAyLDB4NmQsCisrCTB4OTUsMHg3OSwweGQ2LDB4OTEsMHhkZSwweDhlLDB4 ZGEsMHhhMSwweDYxLDB4MDUsMHhlYiwweDlkLAorKwkweGJhLDB4M2MsMHgyZiwweDRjLDB4MWIs MHhlYywweDUwLDB4ODIsMHg3NSwweGFhLDB4MDIsMHgwNywKKysJMHhlMiwweDUxLDB4YjUsMHhl YywweGNiLDB4MjgsMHg2YSwweDRiLDB4MDEsMHhkNCwweDQ5LDB4ZDMsCisrCTB4MGEsMHhjYiww eDY3LDB4MzcsMHgxNywweGEwLDB4ZDIsMHhmYiwweDNiLDB4NTAsMHhjOCwweDkzLAorKwkweGY3 LDB4ZGEsMHhiMSwweDRmCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2Ff dGVzdF8yMDQ4X3ByaXZfa2V5W10gPSB7CisrCTB4MGMsMHg0YiwweDMwLDB4ODksMHhkMSwweGI4 LDB4NjIsMHhjYiwweDNjLDB4NDMsMHg2NCwweDkxLAorKwkweGYwLDB4OTEsMHg1NCwweDcwLDB4 YzUsMHgyNywweDk2LDB4ZTMsMHhhYywweGJlLDB4ZTgsMHgwMCwKKysJMHhlYywweDU1LDB4ZjYs MHhjYworK307CisrCisrc3RhdGljIGludCBjb3JydXB0X2RzYTsKKysKKyt2b2lkIEZJUFNfY29y cnVwdF9kc2EoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfZHNhID0gMTsKKysgICAgfQorKworK2lu dCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCisrCXsKKysJRFNBICpkc2EgPSBOVUxMOworKwlFVlBfUEtF WSAqcGsgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysKKysJZHNhID0gRFNBX25ldygpOworKwor KwlpZihkc2EgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlmaXBzX2xvYWRfa2V5X2NvbXBv bmVudChkc2EsIHAsIGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChk c2EsIHEsIGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIGcs IGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHB1Yl9rZXks IGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHByaXZfa2V5 LCBkc2FfdGVzdF8yMDQ4KTsKKysKKysJaWYgKGNvcnJ1cHRfZHNhKQorKwkJQk5fc2V0X2JpdChk c2EtPnB1Yl9rZXksIDIwNDcpOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxM KQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7CisrCisr CWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAorKwkJCQkJTlVMTCwg MCwgRVZQX3NoYTI1NigpLCAwLAorKwkJCQkJIkRTQSBTSEEyNTYiKSkKKysJCWdvdG8gZXJyOwor KwlyZXQgPSAxOworKworKwllcnI6CisrCWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOwor KwllbHNlIGlmIChkc2EpCisrCQlEU0FfZnJlZShkc2EpOworKwlyZXR1cm4gcmV0OworKwl9Cisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZp cHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYworLS0tIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTky MzI5NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NDk5MjMyOTQgKzAyMDAKK0BAIC0wLDAgKzEsMTkxIEBACisrLyog ZmlwZS9ldnAvZmlwc19lbmMuYyAqLworKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMg WW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBi eSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9u IHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAor KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lh bCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJl ZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZv dW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gs IERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVu dGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5 IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMg VGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1h aW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisr ICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBp cyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRp b24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgor KyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dy YW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBw cm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdh cmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRo ZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJv bSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJl bGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNv ZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVj dG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRp bSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAq IFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVy bXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2 ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qg c2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24g bGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisr CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysKKytjb25zdCBFVlBfQ0lQSEVSICpGSVBTX2dldF9jaXBoZXJieW5pZChp bnQgbmlkKQorKwl7CisrCXN3aXRjaCAobmlkKQorKwkJeworKwkJY2FzZSBOSURfYWVzXzEyOF9j YmM6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2JjKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4 X2NjbToKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18x MjhfY2ZiMToKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jZmIxKCk7CisrCisrCQljYXNlIE5JRF9h ZXNfMTI4X2NmYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysKKysJCWNh c2UgTklEX2Flc18xMjhfY2ZiODoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jZmI4KCk7CisrCisr CQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKKysK KysJCWNhc2UgTklEX2Flc18xMjhfZWNiOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2VjYigpOwor KworKwkJY2FzZSBOSURfYWVzXzEyOF9nY206CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfZ2NtKCk7 CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X29mYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9v ZmIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfeHRzOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4 X3h0cygpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jYmM6CisrCQlyZXR1cm4gRVZQX2Flc18x OTJfY2JjKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NjbToKKysJCXJldHVybiBFVlBfYWVz XzE5Ml9jY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY2ZiMToKKysJCXJldHVybiBFVlBf YWVzXzE5Ml9jZmIxKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjEyODoKKysJCXJldHVy biBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY2ZiODoKKysJ CXJldHVybiBFVlBfYWVzXzE5Ml9jZmI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoK KysJCXJldHVybiBFVlBfYWVzXzE5Ml9jdHIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfZWNi OgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2VjYigpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9n Y206CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfZ2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTky X29mYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9vZmIoKTsKKysKKysJCWNhc2UgTklEX2Fl c18yNTZfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NiYygpOworKworKwkJY2FzZSBOSURf YWVzXzI1Nl9jY206CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2NtKCk7CisrCisrCQljYXNlIE5J RF9hZXNfMjU2X2NmYjE6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMSgpOworKworKwkJY2Fz ZSBOSURfYWVzXzI1Nl9jZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMTI4KCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMjU2X2NmYjg6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiOCgp OworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jdHI6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY3Ry KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2VjYjoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9l Y2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfZ2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2 X2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9vZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Fl c18yNTZfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X3h0czoKKysJCXJldHVybiBFVlBf YWVzXzI1Nl94dHMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVfZWNiOgorKwkJcmV0dXJuIEVW UF9kZXNfZWRlKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19lY2I6CisrCQlyZXR1cm4gRVZQ X2Rlc19lZGUzKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19jYmM6CisrCQlyZXR1cm4gRVZQ X2Rlc19lZGUzX2NiYygpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiMToKKysJCXJldHVy biBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6Cisr CQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjY0KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19j ZmI4OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmI4KCk7CisrCisrCQljYXNlIE5JRF9kZXNf ZWRlM19vZmI2NDoKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfb2ZiKCk7CisrCisrCQljYXNlIE5J RF9kZXNfZWRlX2NiYzoKKysJCXJldHVybiBFVlBfZGVzX2VkZV9jYmMoKTsKKysKKysJCWNhc2Ug TklEX2Rlc19lZGVfY2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2ZiNjQoKTsKKysKKysJ CWNhc2UgTklEX2Rlc19lZGVfb2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfb2ZiKCk7Cisr CisrCQlkZWZhdWx0OgorKwkJcmV0dXJuIE5VTEw7CisrCisrCQl9CisrCX0KKysKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2ZpcHMuaAorLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHMuaC5m aXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCisrKysgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2ZpcHMvZmlwcy5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAw CitAQCAtMCwwICsxLDI3OSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+ CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vycm9y IEZJUFMgaXMgZGlzYWJsZWQuCisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor KyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1Y3Qg ZHNhX3N0OworK3N0cnVjdCByc2Ffc3Q7Cisrc3RydWN0IGV2cF9wa2V5X3N0OworK3N0cnVjdCBl bnZfbWRfc3Q7Cisrc3RydWN0IGVudl9tZF9jdHhfc3Q7Cisrc3RydWN0IGV2cF9jaXBoZXJfc3Q7 Cisrc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OworK3N0cnVjdCBkaF9tZXRob2Q7Cisrc3RydWN0 IENNQUNfQ1RYX3N0OworK3N0cnVjdCBobWFjX2N0eF9zdDsKKysKKytpbnQgRklQU19tb2R1bGVf bW9kZV9zZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKTsKKytpbnQgRklQU19tb2R1bGVf bW9kZSh2b2lkKTsKKytjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7CisraW50IEZJ UFNfc2VsZnRlc3Qodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOworK3Zv aWQgRklQU19jb3JydXB0X3NoYTEodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Fl cyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpOworK2ludCBGSVBTX3Nl bGZ0ZXN0X2Flc19nY20odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cyh2b2lkKTsK KytpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZv aWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9y c2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKytpbnQgRklQ U19zZWxmdGVzdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOworK3Zv aWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZHNh KHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJUFNfcm5nX3N0 aWNrKHZvaWQpOworK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZik7Cisrdm9pZCBGSVBT X2RyYmdfc3RpY2soaW50IG9ub2ZmKTsKKytpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7Cisr aW50IEZJUFNfc2VsZnRlc3RfeDkzMSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9obWFjKHZv aWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rf ZHJiZ19hbGwodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfY21hYyh2b2lkKTsKKysKKyt2b2lk IEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3Ry KTsKKysKKysjZGVmaW5lIEZJUFNfRVJST1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUoX19GSUxF X18sIF9fTElORV9fLCBcCisrCQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdvcml0 aG0gZXJyb3IgaWdub3JlZCIpOworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3Ry dWN0IGV2cF9wa2V5X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50 IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRs ZW4sCisrCQkJY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRf ZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpOworKworK2ludCBmaXBzX2NpcGhlcl90 ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJCWNvbnN0IHN0cnVjdCBldnBf Y2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4 dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pOwor KworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKysKKytjb25zdCBzdHJ1Y3Qg ZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKKysKKytjb25zdCBzdHJ1 Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7CisrCisrCisr LyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKysvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRv IGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcworKyAqIG1hZGUg YWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5l eHQgcnVuLgorKyAqLworK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOworKworKy8q IEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCisrCisrLyogRnVuY3Rpb24g Y29kZXMuICovCisrI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJCQkgMTAwCisr I2RlZmluZSBGSVBTX0ZfREhfSU5JVAkJCQkJIDE0OAorKyNkZWZpbmUgRklQU19GX0RSQkdfUkVT RUVECQkJCSAxNjIKKysjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMDEK KysjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIJCQkgMTA3CisrI2RlZmluZSBG SVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgorKyNkZWZpbmUgRklQU19GX0RTQV9ET19WRVJJRlkJ CQkJIDEwMworKyNkZWZpbmUgRklQU19GX0VDREhfQ09NUFVURV9LRVkJCQkJIDE2MworKyNkZWZp bmUgRklQU19GX0VDRFNBX0RPX1NJR04JCQkJIDE2NAorKyNkZWZpbmUgRklQU19GX0VDRFNBX0RP X1ZFUklGWQkJCQkgMTY1CisrI2RlZmluZSBGSVBTX0ZfRUNfS0VZX0dFTkVSQVRFX0tFWQkJCSAx NjYKKysjZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKKysjZGVmaW5lIEZJ UFNfRl9FVlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNL X0RTQQkJCQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0FfUFJORwkJCSAxNTEK KysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDCQkJCSAxNDIKKysjZGVmaW5lIEZJUFNfRl9G SVBTX0NIRUNLX0VDX1BSTkcJCQkgMTUyCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNP UkVfRklOR0VSUFJJTlQJCSAxMDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkg MTA2CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0FfUFJORwkJCSAxNTAKKysjZGVmaW5l IEZJUFNfRl9GSVBTX0NJUEhFUgkJCQkgMTYwCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJJ TklUCQkJCSAxNDMKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUl9DVFhfQ1RSTAkJCSAxNjEK KysjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVEZJTkFMCQkJCSAxNTgKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0RJR0VTVElOSVQJCQkJIDEyOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUVVBE QVRFCQkJIDE1OQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19CWVRFUwkJCQkgMTMxCisrI2Rl ZmluZSBGSVBTX0ZfRklQU19EUkJHX0NIRUNLCQkJCSAxNDYKKysjZGVmaW5lIEZJUFNfRl9GSVBT X0RSQkdfQ1BSTkdfVEVTVAkJCSAxMzIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfRVJST1Jf Q0hFQ0sJCQkgMTM2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFCQkJIDEzNAor KyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTklUCQkJCSAxMzUKKysjZGVmaW5lIEZJUFNfRl9G SVBTX0RSQkdfSU5TVEFOVElBVEUJCQkgMTM4CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX05F VwkJCQkgMTM5CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX1JFU0VFRAkJCQkgMTQwCisrI2Rl ZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQJCQkgMTQxCisrI2RlZmluZSBGSVBTX0Zf RklQU19EU0FfQ0hFQ0sJCS8qIHVudXNlZCAqLwkgMTA3CisrI2RlZmluZSBGSVBTX0ZfRklQU19E U0FfU0lHTl9ESUdFU1QJCQkgMTU0CisrI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfVkVSSUZZX0RJ R0VTVAkJCSAxNTUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZCQkJCSAxNDcKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VUCQkvKiB1bnVzZWQgKi8JIDEwOAorKyNkZWZpbmUg RklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VUCQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJUFNf UEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQURE CQkJCSAxMzcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEyMgorKyNkZWZp bmUgRklQU19GX0ZJUFNfUkFORF9QU0VVRE9fQllURVMJCQkgMTY3CisrI2RlZmluZSBGSVBTX0Zf RklQU19SQU5EX1NFRUQJCQkJIDE2OAorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRVRfTUVU SE9ECQkJIDEyNgorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMJCQkJIDEyNworKyNk ZWZpbmUgRklQU19GX0ZJUFNfUlNBX1NJR05fRElHRVNUCQkJIDE1NgorKyNkZWZpbmUgRklQU19G X0ZJUFNfUlNBX1ZFUklGWV9ESUdFU1QJCQkgMTU3CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxG VEVTVF9BRVMJCQkgMTEwCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNCQkJ IDE0NQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTQkJCSAxMjkKKysjZGVm aW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMJCQkgMTQ0CisrI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9DTUFDCQkJIDEzMAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf REVTCQkJIDExMQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgorKyNk ZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRUNEU0EJCQkgMTMzCisrI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9ITUFDCQkJIDExMworKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf Uk5HCS8qIHVudXNlZCAqLwkgMTE0CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEEx CQkJIDExNQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMQkJCSAxMTQKKysjZGVm aW5lIEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWQkJCSAxNTMKKysjZGVmaW5lIEZJUFNfRl9IQVNI X0ZJTkFMCQkJCSAxMjMKKysjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTE2 CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9JTklUCQkJCSAxNDkKKysjZGVmaW5lIEZJUFNfRl9S U0FfRUFZX1BSSVZBVEVfREVDUllQVAkJCSAxMTcKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BS SVZBVEVfRU5DUllQVAkJCSAxMTgKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNS WVBUCQkJIDExOQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkgMTIw CisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEyMQorKyNkZWZp bmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCS8qIHVudXNlZCAqLwkgMTIyCisrCisrLyogUmVh c29uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5E RVRFQ1RFRAkgMTUwCisrI2RlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORwkJ IDEyNQorKyNkZWZpbmUgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVECQkJIDEzNAorKyNkZWZp bmUgRklQU19SX0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUJCQkgMTUxCisrI2RlZmluZSBGSVBTX1Jf Q0FOTk9UX1JFQURfRVhFCQkvKiB1bnVzZWQgKi8JIDEwMworKyNkZWZpbmUgRklQU19SX0NBTk5P VF9SRUFEX0VYRV9ESUdFU1QJLyogdW51c2VkICovCSAxMDQKKysjZGVmaW5lIEZJUFNfUl9DT05U UkFESUNUSU5HX0VWSURFTkNFCQkJIDExNAorKyNkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJ QUxJU0VECQkJIDE1MgorKyNkZWZpbmUgRklQU19SX0RSQkdfU1RVQ0sJCQkJIDEwMworKyNkZWZp bmUgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRAkJCSAxMDQKKysjZGVmaW5lIEZJUFNf Ul9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRAkJIDEwNQorKyNkZWZpbmUgRklQU19S X0VOVFJPUFlfU09VUkNFX1NUVUNLCQkJIDE0MgorKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOSVRJ QUxJU0lOR19EUkJHCQkJIDExNQorKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdf RFJCRwkJCSAxMjcKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxf SU5QVVQJIDEyNAorKyNkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWQkJCSAx MjIKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFCQkJIDE0MAorKyNkZWZp bmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0ggICAvKiB1bnVzZWQgKi8JIDEwNQor KyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkgMTEwCisrI2RlZmlu ZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEK KysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFT SU5HIDExMgorKyNkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKKysj ZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKKysjZGVmaW5lIEZJUFNf Ul9GVU5DVElPTl9FUlJPUgkJCQkgMTE2CisrI2RlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJST1IJ CQkJIDEzNworKyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQJCSAxMTgK KysjZGVmaW5lIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUgkJCSAxMTkKKysjZGVmaW5lIEZJUFNf Ul9JTlNVRkZJQ0lFTlRfU0VDVVJJVFlfU1RSRU5HVEgJCSAxMjAKKysjZGVmaW5lIEZJUFNfUl9J TlRFUk5BTF9FUlJPUgkJCQkgMTIxCisrI2RlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RI CQkJIDEwOQorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfUEFSQU1FVEVSUwkJCSAxNDQKKysjZGVm aW5lIEZJUFNfUl9JTl9FUlJPUl9TVEFURQkJCQkgMTIzCisrI2RlZmluZSBGSVBTX1JfS0VZX1RP T19TSE9SVAkJCQkgMTA4CisrI2RlZmluZSBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRAkJ CSAxNDkKKysjZGVmaW5lIEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZpbmUg RklQU19SX05PUFJfVEVTVDFfRkFJTFVSRQkJCSAxNDUKKysjZGVmaW5lIEZJUFNfUl9OT1BSX1RF U1QyX0ZBSUxVUkUJCQkgMTQ2CisrI2RlZmluZSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRAkJCQkg MTI2CisrI2RlZmluZSBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3CisrI2RlZmlu ZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQJCSAxMjgKKysjZGVmaW5l IEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HCQkgMTI5CisrI2RlZmluZSBG SVBTX1JfUFJOR19TVFJFTkdUSF9UT09fTE9XCQkJIDE0MworKyNkZWZpbmUgRklQU19SX1BSX1RF U1QxX0ZBSUxVUkUJCQkJIDE0NworKyNkZWZpbmUgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUJCQkJ IDE0OAorKyNkZWZpbmUgRklQU19SX1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQJCSAx MzAKKysjZGVmaW5lIEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRwkJIDEzMQorKyNk ZWZpbmUgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SCQkJIDEzMgorKyNkZWZpbmUgRklQU19S X1JFU0VFRF9FUlJPUgkJCQkgMTMzCisrI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IJ LyogdW51c2VkICovCSAxMTUKKysjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkvKiB1 bnVzZWQgKi8JIDExNgorKyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCisr I2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRQkJCQkgMTM1CisrI2RlZmluZSBGSVBTX1Jf U1RSRU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzNgorKyNkZWZpbmUgRklQU19SX1RFU1RfRkFJ TFVSRQkJCQkgMTE3CisrI2RlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUgkJCSAxNDEK KysjZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IJCSAxMzgKKysjZGVm aW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUJCQkgMTM5CisrI2RlZmluZSBGSVBTX1Jf VU5TVVBQT1JURURfUExBVEZPUk0JCQkgMTEzCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK30K KysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2Zp cHNfaG1hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19o bWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2htYWNf c2VsZnRlc3QuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxNC0wNS0w NiAxNjoyOTo1MC41NDk5MjMyOTQgKzAyMDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQp OworKwljb25zdCBjaGFyICprZXksICppdjsKKysJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFY X01EX1NJWkVdOworK30gSE1BQ19LQVQ7CisrCisrc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3Rv cltdID0geworKyAgICB7CUVWUF9zaGExLAorKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292 L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLworKwkiMDEyMzQ1Njc4 OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4 NWYsMHhhYSwweDNkLDB4MTksCisrCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3 ZCwweDVjLAorKwkgIDB4YzYsMHhjNywweDVkLDB4MjQgfQorKyAgICB9LAorKyAgICB7CUVWUF9z aGEyMjQsCisrCS8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCisrCSIwMTIz NDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ZGQsMHhlZiwweDBhLDB4 NDAsMHhjYiwweDdkLDB4NTAsMHhmYiwKKysJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhi YSwweDI2LDB4YWEsCisrCSAgMHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFi LAorKwkgIDB4OGMsMHg4ZCwweDEyLDB4YzcgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEyNTYs CisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4YjgsMHhm MiwweDBkLDB4YjUsMHg0MSwweGVhLDB4NDMsMHgwOSwKKysJICAweGNhLDB4NGUsMHhhOSwweDM4 LDB4MGMsMHhkMCwweGU4LDB4MzQsCisrCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIs MHg2MSwweDM4LAorKwkgIDB4MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9 CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTM4NCwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwK KysJIlNhbXBsZSAjMiIsCisrCXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4Nyww eGFkLAorKwkgIDB4OWEsMHgxZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKKysJICAw eGI3LDB4MTgsMHgwNiwweGE1LDB4NzcsMHhjZCwweDQ5LDB4MDQsCisrCSAgMHg4OSwweGYxLDB4 ZTYsMHgyMywweDQ0LDB4NTEsMHg1MSwweDlmLAorKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgw YywweGJkLDB4NGQsMHg1MCwKKysJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4 LDB4N2YgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGE1MTIsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/ QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDVi LDB4OTUsMHg0MSwKKysJICAweDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMs CisrCSAgMHg0NCwweGQ1LDB4YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAorKwkgIDB4NGUs MHg4NiwweDY0LDB4MTIsMHhjMCwweDkwLDB4NzcsMHg2OCwKKysJICAweGYxLDB4ODcsMHhiNyww eDdjLDB4NGYsMHhhZSwweDJjLDB4MmYsCisrCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4 NGYsMHg0YiwweGE3LAorKwkgIDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0 NSwKKysJICAweGJkLDB4NGYsMHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQorKyAgICB9 LAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfaG1hYygpCisrICAgIHsKKysgICAgaW50IG47 CisrICAgIHVuc2lnbmVkIGludCAgICBvdXRsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgICBvdXRb RVZQX01BWF9NRF9TSVpFXTsKKysgICAgY29uc3QgRVZQX01EICAgKm1kOworKyAgICBjb25zdCBI TUFDX0tBVCAqdDsKKysKKysgICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9z aXplb2YodmVjdG9yWzBdKTsgbisrLHQrKykKKysJeworKwltZCA9ICgqdC0+YWxnKSgpOworKwlI TUFDKG1kLHQtPmtleSxzdHJsZW4odC0+a2V5KSwKKysJCShjb25zdCB1bnNpZ25lZCBjaGFyICop dC0+aXYsc3RybGVuKHQtPml2KSwKKysJCW91dCwmb3V0bGVuKTsKKysKKysJaWYobWVtY21wKG91 dCx0LT5rYXZhbCxvdXRsZW4pKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19T RUxGVEVTVF9ITUFDLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7Cisr CSAgICB9CisrCX0KKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9m aXBzX2xvY2wuaC5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAxNC0wNS0wNiAxNjoyOTo1 MC41NDk5MjMyOTQgKzAyMDAKK0BAIC0wLDAgKzEsNzEgQEAKKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoK KysgKi8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cwor K2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1Rf U0laRQkzMgorKyNkZWZpbmUgZmlwc19sb2FkX2tleV9jb21wb25lbnQoa2V5LCBjb21wLCBwcmUp IFwKKysJa2V5LT5jb21wID0gQk5fYmluMmJuKHByZSMjXyMjY29tcCwgc2l6ZW9mKHByZSMjXyMj Y29tcCksIGtleS0+Y29tcCk7IFwKKysJaWYgKCFrZXktPmNvbXApIFwKKysJCWdvdG8gZXJyCisr CisrI2RlZmluZSBmaXBzX3Bvc3Rfc3RhcnRlZChpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBm aXBzX3Bvc3Rfc3VjY2VzcyhpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3RfZmFp bGVkKGlkLCBzdWJpZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJp ZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNfcG9zdF9zdGF0dXMoKSAxCisrCisrI2lmZGVmICBfX2Nw bHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2ZpcHNfbWQuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNf bWQuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19tZC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCitAQCAt MCwwICsxLDE0NSBAQAorKy8qIGZpcHMvZXZwL2ZpcHNfbWQuYyAqLworKy8qIENvcHlyaWdodCAo QykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0 aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICog VGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRz Y2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFs IGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFw cGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0 LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2Rl LiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1 dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0 aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAor KyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHly aWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAq IElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQg YmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0 aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVh bCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9u bGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQg aWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5v dCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBX aW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAq ICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVk ZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAor KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFu ZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9u IG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUu IHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5v dGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMg TGljZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDE5OTgt MjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KKysgKgorKyAqLworKworKy8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZlcnNp b25zIG9mIERpZ2VzdCBvcGVyYXRpb25zICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkK KysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBF VlBfTUQgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpCisrCXsKKysJc3dpdGNoIChuaWQp CisrCQl7CisrCQljYXNlIE5JRF9zaGExOgorKwkJcmV0dXJuIEVWUF9zaGExKCk7CisrCisrCQlj YXNlIE5JRF9zaGEyMjQ6CisrCQlyZXR1cm4gRVZQX3NoYTIyNCgpOworKworKwkJY2FzZSBOSURf c2hhMjU2OgorKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKKysKKysJCWNhc2UgTklEX3NoYTM4NDoK KysJCXJldHVybiBFVlBfc2hhMzg0KCk7CisrCisrCQljYXNlIE5JRF9zaGE1MTI6CisrCQlyZXR1 cm4gRVZQX3NoYTUxMigpOworKworKwkJZGVmYXVsdDoKKysJCXJldHVybiBOVUxMOworKwkJfQor Kwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCistLS0gb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU0OTky MzI5NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIw MTQtMDUtMDYgMTY6Mjk6NTAuNTQ5OTIzMjk0ICswMjAwCitAQCAtMCwwICsxLDIwNSBAQAorKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu CisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysKKysvKiBQb3dlciBvbiBzZWxmIHRlc3QgKFBPU1QpIHN1cHBvcnQgZnVuY3Rp b25zICovCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX2xv Y2wuaCIKKysKKysvKiBSdW4gYWxsIHNlbGZ0ZXN0cyAqLworK2ludCBGSVBTX3NlbGZ0ZXN0KHZv aWQpCisrCXsKKysJaW50IHJ2ID0gMTsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkKKysJ CXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X3g5MzEoKSkKKysJCXJ2ID0gMDsKKysgICAg CWlmICghRklQU19zZWxmdGVzdF9zaGExKCkpCisrCQlydiA9IDA7CisrICAgIAlpZiAoIUZJUFNf c2VsZnRlc3Rfc2hhMigpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfaG1hYygp KQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfY21hYygpKQorKwkJcnYgPSAwOwor KwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxm dGVzdF9hZXNfY2NtKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9hZXNfZ2Nt KCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9hZXNfeHRzKCkpCisrCQlydiA9 IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9kZXMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBT X3NlbGZ0ZXN0X3JzYSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfZHNhKCkp CisrCQlydiA9IDA7CisrCXJldHVybiBydjsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHB1Ymxp YyBrZXkgdGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKKysgKiBzdXBw bGllZCBpbiB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGln ZXN0CisrICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5V TEwgaXQgd2lsbAorKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMg aXQ6IGEga25vd24gYW5zd2VyIHRlc3QKKysgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNl ZCBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQorKyAqIG9mIGZhaWx1cmUuIElm ICJwa2V5IiBpcyBOVUxMIGp1c3QgcGVyZm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgorKyAq LworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBFVlBfTUQgKmRpZ2Vz dCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQorKwl7 CQorKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNp Z3RtcDsKKysJdW5zaWduZWQgaW50IHNpZ2xlbjsKKysJRVZQX01EX0NUWCBtY3R4OworKwlFVlBf TURfQ1RYX2luaXQoJm1jdHgpOworKworKwlpZiAoZGlnZXN0ID09IE5VTEwpCisrCQlkaWdlc3Qg PSBFVlBfc2hhMjU2KCk7CisrCisrCWlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCisr CQkmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKQorKwkJewor KwkJc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKKysJCWlm ICghc2lnKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RF U1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysK KysJaWYgKHRic2xlbiA9PSAtMSkKKysJCXRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7Cisr CisrCWlmIChtZF9mbGFncykKKysJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFn cyk7CisrCisrCWlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQorKwkJ Z290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQor KwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4s IHBrZXkpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRs ZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVuKSkpCisrCQlnb3RvIGVycm9yOworKworKwlp ZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQorKwkJZ290byBlcnJv cjsKKysJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisrCQlnb3Rv IGVycm9yOworKwlyZXQgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5 KTsKKysKKysJZXJyb3I6CisrCWlmIChzaWcgIT0gc2lndG1wKQorKwkJT1BFTlNTTF9mcmVlKHNp Zyk7CisrCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrCWlmIChyZXQgIT0gMSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9G QUlMVVJFKTsKKysJCWlmIChmYWlsX3N0cikKKysJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5 cGU9IiwgZmFpbF9zdHIpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCXJldHVybiAxOworKwl9Cisr CisrLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQg ZGF0YSwgdmVyaWZ5IHJlc3VsdAorKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFu ZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50ZXh0LgorKyAqLworKworK2ludCBmaXBzX2Np cGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwK KysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAq aXYsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmNpcGhlcnRleHQsCisrCQkJaW50IGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFy IHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOworKwl1bnNpZ25lZCBjaGFyIGNpdG1w W0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOworKworKwlPUEVOU1NMX2Fzc2VydChsZW4gPD0g RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrCW1lbXNldChwbHRtcCwgMCwgRklQU19NQVhf Q0lQSEVSX1RFU1RfU0laRSk7CisrCW1lbXNldChjaXRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RF U1RfU0laRSk7CisrCisrCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwg a2V5LCBpdiwgMSkgPD0gMCkKKysJCXJldHVybiAwOworKwlpZiAoRVZQX0NpcGhlcihjdHgsIGNp dG1wLCBwbGFpbnRleHQsIGxlbikgPD0gMCkKKysJCXJldHVybiAwOworKwlpZiAobWVtY21wKGNp dG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChFVlBfQ2lwaGVySW5p dF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKKysJCXJldHVybiAwOwor KwlpZiAoRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKSA8PSAwKQorKwkJcmV0dXJu IDA7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKKysJCXJldHVybiAwOwor KwlyZXR1cm4gMTsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3Jh bmQuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NTA5MjMzMTcgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX3JhbmQuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MDkyMzMxNyArMDIwMAor QEAgLTAsMCArMSw0NTcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw NyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKgorKyAq IFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4y LjQuCisrICovCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgImVfb3Mu aCIKKysKKysvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3Ry dWN0IHRpbWV2YWwgd29uJ3QKKysgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24n dCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMKKysgICBsaWtlIERFQyBDIGluIEFO U0kgQyBtb2RlLiAgKi8KKysjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKysjZGVmaW5l IF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaWYgIShkZWZpbmVkKE9Q RU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpKQorKyMgaW5j bHVkZSA8c3lzL3RpbWUuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdP UktTKQorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4K KysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrIyBpZmRlZiBPUEVOU1NMX1VOSVNURAorKyMg IGluY2x1ZGUgT1BFTlNTTF9VTklTVEQKKysjIGVsc2UKKysjICBpbmNsdWRlIDx1bmlzdGQuaD4K KysjIGVuZGlmCisrI2VuZGlmCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xf RklQUworKworK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOworKworKyNkZWZpbmUgQUVTX0JM T0NLX0xFTkdUSAkxNgorKworKworKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8K KysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwlpbnQgc2VlZGVkOworKwlpbnQga2V5ZWQ7Cisr CWludCB0ZXN0X21vZGU7CisrCWludCBzZWNvbmQ7CisrCWludCBlcnJvcjsKKysJdW5zaWduZWQg bG9uZyBjb3VudGVyOworKwlBRVNfS0VZIGtzOworKwlpbnQgdnBvczsKKysJLyogVGVtcG9yYXJ5 IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KKysJdW5zaWduZWQg Y2hhciB0bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JM T0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVu c2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJfSBGSVBTX1BSTkdfQ1RYOwor KworK3N0YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3Bybmdf ZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQorKwl7CisrCWZp cHNfcHJuZ19mYWlsID0gb25vZmY7CisrCX0KKysKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQp CisrCXsKKysJRklQU194OTMxX3N0aWNrKDEpOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19y YW5kX3BybmdfcmVzZXQoRklQU19QUk5HX0NUWCAqY3R4KQorKwl7CisrCWN0eC0+c2VlZGVkID0g MDsKKysJY3R4LT5rZXllZCA9IDA7CisrCWN0eC0+dGVzdF9tb2RlID0gMDsKKysJY3R4LT5jb3Vu dGVyID0gMDsKKysJY3R4LT5zZWNvbmQgPSAwOworKwljdHgtPmVycm9yID0gMDsKKysJY3R4LT52 cG9zID0gMDsKKysJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7Cisr CU9QRU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKKysJfQorKwkKKysK KytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQlj b25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCisrCXsKKysJaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NF VF9QUk5HX0tFWSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0K KysJaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQorKwkJ eworKwkJLyogZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8KKysJCXJldHVybiAwOworKwkJfQor KwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKKysJaWYg KGtleWxlbiA9PSAxNikKKysJCXsKKysJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOwor KwkJY3R4LT5rZXllZCA9IDI7CisrCQl9CisrCWVsc2UKKysJCWN0eC0+a2V5ZWQgPSAxOworKwlj dHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsKKysJcmV0dXJuIDE7CisrCX0KKysK KytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgdW5zaWduZWQgaW50IHNlZWRsZW4pCisrCXsKKysJ dW5zaWduZWQgaW50IGk7CisrCWlmICghY3R4LT5rZXllZCkKKysJCXJldHVybiAwOworKwkvKiBJ biB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0IHN1cHBsaWVkIGRhdGEgKi8KKysJaWYgKGN0eC0+dGVz dF9tb2RlKQorKwkJeworKwkJaWYgKHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQly ZXR1cm4gMDsKKysJCW1lbWNweShjdHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOworKwkJ Y3R4LT5zZWVkZWQgPSAxOworKwkJcmV0dXJuIDE7CisrCQl9CisrCS8qIE91dHNpZGUgdGVzdCBt b2RlIFhPUiBzdXBwbGllZCBkYXRhIHdpdGggZXhpc3Rpbmcgc2VlZCAqLworKwlmb3IgKGkgPSAw OyBpIDwgc2VlZGxlbjsgaSsrKQorKwkJeworKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVk W2ldOworKwkJaWYgKGN0eC0+dnBvcyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQlj dHgtPnZwb3MgPSAwOworKwkJCS8qIFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkg bGVuZ3RoIGVxdWFscworKyAJCQkgKiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBu b3QgbWF0Y2guCisrIAkJCSAqLyAKKysJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQorKwkJCQl7Cisr CQkJCWlmICghbWVtY21wKGN0eC0+dG1wX2tleSwgY3R4LT5WLCAxNikpCisrCQkJCQl7CisrCQkJ CQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQsCisrCQkJCQkJUkFORF9SX1BSTkdf U0VFRF9NVVNUX05PVF9NQVRDSF9LRVkpOworKwkJCQkJcmV0dXJuIDA7CisrCQkJCQl9CisrCQkJ CU9QRU5TU0xfY2xlYW5zZShjdHgtPnRtcF9rZXksIDE2KTsKKysJCQkJY3R4LT5rZXllZCA9IDE7 CisrCQkJCX0KKysJCQljdHgtPnNlZWRlZCA9IDE7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsK KysJfQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0 eCkKKysJeworKwlpZiAoY3R4LT5rZXllZCkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNf U0VUX1RFU1RfTU9ERSxSQU5EX1JfUFJOR19LRVlFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJ Y3R4LT50ZXN0X21vZGUgPSAxOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX3g5MzFf dGVzdF9tb2RlKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7 CisrCX0KKysKKytpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQorKwl7CisrCXJldHVybiBm aXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOworKwl9CisrCisrCisraW50IEZJUFNfeDkzMV9zZXRf ZHQodW5zaWduZWQgY2hhciAqZHQpCisrCXsKKysJaWYgKCFzY3R4LnRlc3RfbW9kZSkKKysJCXsK KysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfWDkzMV9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01P REUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NL X0xFTkdUSCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5z aWduZWQgY2hhciAqZHQpCisrCXsKKysJaWYgKCFzY3R4LnRlc3RfbW9kZSkKKysJCXsKKysJCVJB TkRlcnIoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwor KwkJcmV0dXJuIDA7CisrCQl9CisrCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdU SCk7CisrCXJldHVybiAxOworKwl9CisrCisrdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVk IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cikKKysJeworKyNpZmRlZiBPUEVOU1NMX1NZ U19XSU4zMgorKwlGSUxFVElNRSBmdDsKKysjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09S S1MpCisrICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisrI2Vsc2UKKysJc3RydWN0IHRpbWV2 YWwgdHY7CisrI2VuZGlmCisrCisrI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJdW5z aWduZWQgbG9uZyBwaWQ7CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisr CUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFy KSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIp ICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVuc2lnbmVk IGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1 bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKwlidWZb NF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzVd ID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKwli dWZbNl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYp OworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAm IDB4ZmYpOworKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKKysJY2xvY2tfZ2V0 dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKKysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0 cy50dl9zZWMgJiAweGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2Vj ID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+ PiAxNikgJiAweGZmKTsKKysJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+ IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X25zZWMgJiAw eGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiA4KSAmIDB4 ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4 ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDI0KSAmIDB4 ZmYpOworKyNlbHNlCisrCWdldHRpbWVvZmRheSgmdHYsTlVMTCk7CisrCWJ1ZlswXSA9ICh1bnNp Z25lZCBjaGFyKSAodHYudHZfc2VjICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFy KSAoKHR2LnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikg KCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAo KHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0 di50dl91c2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3Vz ZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNl YyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNl YyA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpICgq cGN0ciAmIDB4ZmYpOworKwlidWZbOV0gPSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiA4KSAm IDB4ZmYpOworKwlidWZbMTBdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMTYpICYgMHhm Zik7CisrCWJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiAyNCkgJiAweGZmKTsK KysKKysJKCpwY3RyKSsrOworKworKworKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisr CXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQoKTsKKysJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFy KSAocGlkICYgMHhmZik7CisrCWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkg JiAweGZmKTsKKysJYnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZm KTsKKysJYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKKysj ZW5kaWYKKysgICAgfQorKworK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0 eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGludCBvdXRsZW4pCisrCXsKKysJ dW5zaWduZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOwor Kwl1bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJaW50IGk7CisrCWlmIChj dHgtPmVycm9yKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5H X0VSUk9SKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQl7Cisr CQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOworKwkJcmV0dXJu IDA7CisrCQl9CisrCWlmICghY3R4LT5zZWVkZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9G SVBTX1JBTkQsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJ Zm9yICg7OykKKysJCXsKKysJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJRklQU19nZXRfdGlt ZXZlYyhjdHgtPkRULCAmY3R4LT5jb3VudGVyKTsKKysJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEks ICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisr CQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsKKysJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0 eC0+a3MpOworKwkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKKysJCQl0 bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysJCUFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5r cyk7CisrCQkvKiBDb250aW51b3VzIFBSTkcgdGVzdCAqLworKwkJaWYgKGN0eC0+c2Vjb25kKQor KwkJCXsKKysJCQlpZiAoZmlwc19wcm5nX2ZhaWwpCisrCQkJCW1lbWNweShjdHgtPmxhc3QsIFIs IEFFU19CTE9DS19MRU5HVEgpOworKwkJCWlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JM T0NLX0xFTkdUSCkpCisrCQkJCXsKKysJICAgIAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxS QU5EX1JfUFJOR19TVFVDSyk7CisrCQkJCWN0eC0+ZXJyb3IgPSAxOworKwkJCQlmaXBzX3NldF9z ZWxmdGVzdF9mYWlsKCk7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJbWVtY3B5 KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCQlpZiAoIWN0eC0+c2Vjb25kKQor KwkJCXsKKysJCQljdHgtPnNlY29uZCA9IDE7CisrCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysJ CQkJY29udGludWU7CisrCQkJfQorKworKwkJaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RI KQorKwkJCXsKKysJCQltZW1jcHkob3V0LCBSLCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJCX0K KysKKysJCW1lbWNweShvdXQsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJb3V0ICs9IEFFU19C TE9DS19MRU5HVEg7CisrCQlvdXRsZW4gLT0gQUVTX0JMT0NLX0xFTkdUSDsKKysJCX0KKysJcmV0 dXJuIDE7CisrCX0KKysKKysKKytpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LCBpbnQga2V5bGVuKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2so Q1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXks IGtleWxlbik7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJu IHJldDsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQorKwl7CisrCXJldHVybiBGSVBTX3g5MzFf c2V0X2tleShrZXksIGtleWxlbik7CisrCX0KKysKKytpbnQgRklQU194OTMxX3NlZWQoY29uc3Qg dm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBz ZWVkLCBzZWVkbGVuKTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwly ZXR1cm4gcmV0OworKwl9CisrCisrCisraW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFy ICpvdXQsIGludCBjb3VudCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBU T19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOworKwlD UllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysK KytpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT19y X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IHNjdHguc2VlZGVkOworKwlDUllQVE9f cl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKyt2b2lk IEZJUFNfeDkzMV9yZXNldCh2b2lkKQorKwl7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tf UkFORCk7CisrCWZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKKysJQ1JZUFRPX3dfdW5sb2Nr KENSWVBUT19MT0NLX1JBTkQpOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2Vl ZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKysJeworKwlGSVBTX3g5MzFfc2VlZChz ZWVkLCBzZWVkbGVuKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZG9f cmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4sCisrCQkJCQlkb3VibGUgYWRk X2VudHJvcHkpCisrCXsKKysJRklQU194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCXJldHVy biAxOworKwl9CisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRoPQor KyAgICB7CisrICAgIGZpcHNfZG9fcmFuZF9zZWVkLAorKyAgICBGSVBTX3g5MzFfYnl0ZXMsCisr ICAgIEZJUFNfeDkzMV9yZXNldCwKKysgICAgZmlwc19kb19yYW5kX2FkZCwKKysgICAgRklQU194 OTMxX2J5dGVzLAorKyAgICBGSVBTX3g5MzFfc3RhdHVzCisrICAgIH07CisrCisrY29uc3QgUkFO RF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCkKKyt7CisrICByZXR1cm4gJnJhbmRfeDkz MV9tZXRoOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9m aXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5k LmgKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTQt MDUtMDYgMTY6Mjk6NTAuNTUwOTIzMzE3ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTA5MjMzMTcgKzAyMDAKK0BA IC0wLDAgKzEsMTQ1IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lmbmRlZiBI RUFERVJfRklQU19SQU5EX0gKKysjZGVmaW5lIEhFQURFUl9GSVBTX1JBTkRfSAorKworKyNpbmNs dWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrCisrI2lmZGVm IE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysj ZW5kaWYKKysKKytpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCBpbnQga2V5bGVuKTsKKytpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQg bnVtKTsKKytpbnQgRklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG91dGxl bik7CisrCisraW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3g5MzFf cmVzZXQodm9pZCk7CisraW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwor KworK2ludCBGSVBTX3g5MzFfc3RhdHVzKHZvaWQpOworKworK2NvbnN0IFJBTkRfTUVUSE9EICpG SVBTX3g5MzFfbWV0aG9kKHZvaWQpOworKworK3R5cGVkZWYgc3RydWN0IGRyYmdfY3R4X3N0IERS QkdfQ1RYOworKy8qIERSQkcgZXh0ZXJuYWwgZmxhZ3MgKi8KKysvKiBGbGFnIGZvciBDVFIgbW9k ZSBvbmx5OiB1c2UgZGVyaXZhdGlvbiBmdW5jdGlvbiBjdHJfZGYgKi8KKysjZGVmaW5lCURSQkdf RkxBR19DVFJfVVNFX0RGCQkweDEKKysvKiBQUk5HIGlzIGluIHRlc3Qgc3RhdGUgKi8KKysjZGVm aW5lCURSQkdfRkxBR19URVNUCQkJMHgyCisrCisrRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50 IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisraW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RY ICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKytpbnQgRklQU19kcmJnX2lu c3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJz LCBzaXplX3QgcGVyc2xlbik7CisraW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKytpbnQgRklQU19k cmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBv dXRsZW4sCisrCQkJaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKKysJCQljb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCisraW50IEZJUFNfZHJiZ191bmluc3Rh bnRpYXRlKERSQkdfQ1RYICpkY3R4KTsKKyt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpk Y3R4KTsKKysKKytpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisr CXNpemVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91 dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisr CXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91 dCwgc2l6ZV90IG9sZW4pLAorKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysJc2l6ZV90ICgq Z2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50 IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVh bnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVu KSk7CisrCisraW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgs CisrCXNpemVfdCAoKmdldF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91 dCksCisrCXZvaWQgKCpjbGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG9sZW4pLAorKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgs IGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSksCisrCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NU WCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSk7 CisrCisrdm9pZCAqRklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKKyt2b2lk IEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2RhdGEpOwor K3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKKytpbnQg RklQU19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCk7Cisrdm9pZCBGSVBTX2RyYmdf c2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOworK3ZvaWQg RklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZh bCk7CisrCisraW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgpOworKwor K0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCk7CisrY29uc3QgUkFORF9NRVRI T0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCk7CisrCisrCisraW50IEZJUFNfcmFuZF9zZXRfbWV0 aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKTsKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19y YW5kX2dldF9tZXRob2Qodm9pZCk7CisrCisrdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5i aXRzKTsKKysKKytpbnQgRklQU19yYW5kX3N0cmVuZ3RoKHZvaWQpOworKworKy8qIDEuMC4wIGNv bXBhdCBmdW5jdGlvbnMgKi8KKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7CisraW50IEZJUFNfcmFuZF9zZWVk KGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pOworK2ludCBGSVBTX3JhbmRf Ynl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7CisraW50 IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7 CisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOworK2ludCBGSVBTX3Jh bmRfc3RhdHVzKHZvaWQpOworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZv aWQpOworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgu ZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKKy0tLSBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcwkyMDE0LTA1LTA2IDE2 OjI5OjUwLjU1MDkyMzMxNyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2Zp cHNfcmFuZF9sY2wuaAkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MDkyMzMxNyArMDIwMAorQEAgLTAs MCArMSwyMTkgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19yYW5kX2xjbC5oICovCisrLyogV3JpdHRl biBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVu U1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg Ki8KKysKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7Cisr dHlwZWRlZiBzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdCBEUkJHX0hNQUNfQ1RYOworK3R5cGVkZWYg c3RydWN0IGRyYmdfY3RyX2N0eF9zdCBEUkJHX0NUUl9DVFg7CisrCisrLyogODg4IGJpdHMgZnJv bSAxMC4xIHRhYmxlIDIgKi8KKysjZGVmaW5lIEhBU0hfUFJOR19NQVhfU0VFRExFTgkxMTEKKysK KytzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdAorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQ7CisrCUVW UF9NRF9DVFggbWN0eDsKKysJdW5zaWduZWQgY2hhciBWW0hBU0hfUFJOR19NQVhfU0VFRExFTl07 CisrCXVuc2lnbmVkIGNoYXIgQ1tIQVNIX1BSTkdfTUFYX1NFRURMRU5dOworKwkvKiBUZW1wb3Jh cnkgdmFsdWUgc3RvcmFnZTogc2hvdWxkIGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5ndGgg Ki8KKysJdW5zaWduZWQgY2hhciB2dG1wW0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrCX07Cisr Cisrc3RydWN0IGRyYmdfaG1hY19jdHhfc3QKKysJeworKwljb25zdCBFVlBfTUQgKm1kOworKwlI TUFDX0NUWCBoY3R4OworKwl1bnNpZ25lZCBjaGFyIEtbRVZQX01BWF9NRF9TSVpFXTsKKysJdW5z aWduZWQgY2hhciBWW0VWUF9NQVhfTURfU0laRV07CisrCX07CisrCisrc3RydWN0IGRyYmdfY3Ry X2N0eF9zdAorKwl7CisrCUFFU19LRVkga3M7CisrCXNpemVfdCBrZXlsZW47CisrCXVuc2lnbmVk IGNoYXIgS1szMl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07CisrCS8qIFRlbXAgdmFyaWFibGVz IHVzZWQgYnkgZGVyaXZhdGlvbiBmdW5jdGlvbiAqLworKwlBRVNfS0VZIGRmX2tzOworKwlBRVNf S0VZIGRmX2t4a3M7CisrCS8qIFRlbXBvcmFyeSBibG9jayBzdG9yYWdlIHVzZWQgYnkgY3RyX2Rm ICovCisrCXVuc2lnbmVkIGNoYXIgYmx0bXBbMTZdOworKwlzaXplX3QgYmx0bXBfcG9zOworKwl1 bnNpZ25lZCBjaGFyIEtYWzQ4XTsKKysJfTsKKysKKysvKiBEUkJHIGludGVybmFsIGZsYWdzICov CisrCisrLyogRnVuY3Rpb25zIHNob3VsZG4ndCBjYWxsIGVyciBsaWJyYXJ5ICovCisrI2RlZmlu ZQlEUkJHX0ZMQUdfTk9FUlIJCQkweDEKKysvKiBDdXN0b20gcmVzZWVkIGNoZWNraW5nICovCisr I2RlZmluZQlEUkJHX0NVU1RPTV9SRVNFRUQJCTB4MgorKworKy8qIERSQkcgc3RhdHVzIHZhbHVl cyAqLworKy8qIG5vdCBpbml0aWFsaXNlZCAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfVU5JTklU SUFMSVNFRAkwCisrLyogb2sgYW5kIHJlYWR5IHRvIGdlbmVyYXRlIHJhbmRvbSBiaXRzICovCisr I2RlZmluZSBEUkJHX1NUQVRVU19SRUFEWQkJMQorKy8qIHJlc2VlZCByZXF1aXJlZCAqLworKyNk ZWZpbmUgRFJCR19TVEFUVVNfUkVTRUVECQkyCisrLyogZmF0YWwgZXJyb3IgY29uZGl0aW9uICov CisrI2RlZmluZSBEUkJHX1NUQVRVU19FUlJPUgkJMworKworKy8qIEEgZGVmYXVsdCBtYXhpbXVt IGxlbmd0aDogbGFyZ2VyIHRoYW4gYW55IHJlYXNvbmFibGUgdmFsdWUgdXNlZCBpbiBwcmF0aWNl ICovCisrCisrI2RlZmluZSBEUkJHX01BWF9MRU5HVEgJCQkweDdmZmZmZmYwCisrLyogTWF4aW11 bSBEUkJHIGJsb2NrIGxlbmd0aDogYWxsIG1kIHNpemVzIGFyZSBiaWdnZXIgdGhhbiBjaXBoZXIg YmxvY2tzIHNpemVzCisrICogc28gdXNlIG1heCBkaWdlc3QgbGVuZ3RoLgorKyAqLworKyNkZWZp bmUgRFJCR19NQVhfQkxPQ0sJCQlFVlBfTUFYX01EX1NJWkUKKysKKysjZGVmaW5lIERSQkdfSEVB TFRIX0lOVEVSVkFMCQkoMSA8PCAyNCkKKysKKysvKiBEUkJHIGNvbnRleHQgc3RydWN0dXJlICov CisrCisrc3RydWN0IGRyYmdfY3R4X3N0CisrCXsKKysJLyogRmlyc3QgdHlwZXMgY29tbW9uIHRv IGFsbCBpbXBsZW1lbnRhdGlvbnMgKi8KKysJLyogRFJCRyB0eXBlOiBhIE5JRCBmb3IgdGhlIHVu ZGVybHlpbmcgYWxnb3JpdGhtICovCisrCWludCB0eXBlOworKwkvKiBWYXJpb3VzIGV4dGVybmFs IGZsYWdzICovCisrCXVuc2lnbmVkIGludCB4ZmxhZ3M7CisrCS8qIFZhcmlvdXMgaW50ZXJuYWwg dXNlIG9ubHkgZmxhZ3MgKi8KKysJdW5zaWduZWQgaW50IGlmbGFnczsKKysJLyogVXNlZCBmb3Ig cGVyaW9kaWMgaGVhbHRoIGNoZWNrcyAqLworKwlpbnQgaGVhbHRoX2NoZWNrX2NudCwgaGVhbHRo X2NoZWNrX2ludGVydmFsOworKworKwkvKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHNl dHVwIGJ5IG1lY2hhbmlzbSBkcmJnX2luaXQoKSBjYWxsICovCisrCWludCBzdHJlbmd0aDsKKysJ c2l6ZV90IGJsb2NrbGVuZ3RoOworKwlzaXplX3QgbWF4X3JlcXVlc3Q7CisrCisrCXNpemVfdCBt aW5fZW50cm9weSwgbWF4X2VudHJvcHk7CisrCXNpemVfdCBtaW5fbm9uY2UsIG1heF9ub25jZTsK KysJc2l6ZV90IG1heF9wZXJzLCBtYXhfYWRpbjsKKysJdW5zaWduZWQgaW50IHJlc2VlZF9jb3Vu dGVyOworKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2ludGVydmFsOworKwlzaXplX3Qgc2VlZGxlbjsK KysJaW50IHN0YXR1czsKKysJLyogQXBwbGljYXRpb24gZGF0YTogdHlwaWNhbGx5IHVzZWQgYnkg dGVzdCBnZXRfZW50cm9weSAqLworKwl2b2lkICphcHBfZGF0YTsKKysJLyogSW1wbGVtZW50YXRp b24gc3BlY2lmaWMgc3RydWN0dXJlcyAqLworKwl1bmlvbiAKKysJCXsKKysJCURSQkdfSEFTSF9D VFggaGFzaDsKKysJCURSQkdfSE1BQ19DVFggaG1hYzsKKysJCURSQkdfQ1RSX0NUWCAgY3RyOwor KwkJfSBkOworKwkvKiBJbml0aWFsaWFzZSBQUk5HIGFuZCBzZXR1cCBjYWxsYmFja3MgYmVsb3cg Ki8KKysJaW50ICgqaW5pdCkoRFJCR19DVFggKmN0eCwgaW50IG5pZCwgaW50IHNlY3VyaXR5LCB1 bnNpZ25lZCBpbnQgZmxhZ3MpOworKwkvKiBJbnRhbnRpYXRlIFBSTkcgKi8KKysJaW50ICgqaW5z dGFudGlhdGUpKERSQkdfQ1RYICpjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwg c2l6ZV90IGVudGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBu b25jZWxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4p OworKwkvKiByZXNlZWQgKi8KKysJaW50ICgqcmVzZWVkKShEUkJHX0NUWCAqY3R4LAorKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKysJLyogZ2VuZXJhdCBvdXRwdXQgKi8K KysJaW50ICgqZ2VuZXJhdGUpKERSQkdfQ1RYICpjdHgsCisrCQkJCXVuc2lnbmVkIGNoYXIgKm91 dCwgc2l6ZV90IG91dGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90 IGFkaW5sZW4pOworKwkvKiB1bmluc3RhbnRpYXRlICovCisrCWludCAoKnVuaW5zdGFudGlhdGUp KERSQkdfQ1RYICpjdHgpOworKworKwkvKiBFbnRyb3B5IHNvdXJjZSBibG9jayBsZW5ndGggKi8K KysJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW47CisrCisrCS8qIGVudHJvcHkgZ2F0aGVyaW5nIGZ1 bmN0aW9uICovCisrCXNpemVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3Qg bWF4X2xlbik7CisrCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggZW50cm9weSBi dWZmZXIgKi8KKysJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWdu ZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrCisrCS8qIG5vbmNlIGdhdGhlcmluZyBmdW5j dGlvbiAqLworKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhf bGVuKTsKKysJLyogSW5kaWNhdGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBub25jZSBidWZmZXIg Ki8KKysJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG9sZW4pOworKworKwkvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIgdGVz dCB0ZW1wb3JhcnkgYXJlYSAqLworKwkvKiBMYXN0IGJsb2NrICovCQorKwl1bnNpZ25lZCBjaGFy IGxiW0VWUF9NQVhfTURfU0laRV07CisrCS8qIHNldCBpZiBsYiBpcyB2YWxpZCAqLworKwlpbnQg bGJfdmFsaWQ7CisrCisrCS8qIENhbGxiYWNrcyB1c2VkIHdoZW4gY2FsbGVkIHRocm91Z2ggUkFO RCBpbnRlcmZhY2UgKi8KKysJLyogR2V0IGFueSBhZGRpdGlvbmFsIGlucHV0IGZvciBnZW5lcmF0 ZSAqLworKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq KnBvdXQpOworKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysJLyogQ2FsbGJhY2sgZm9yIFJBTkRfc2VlZCgpLCBS QU5EX2FkZCgpICovCisrCWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qg dm9pZCAqYnVmLCBpbnQgbnVtKTsKKysJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgs CisrCQkJCWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpOworKwl9Owor KworKworK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBmaXBz X2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2htYWNfaW5p dChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGlu dCBuaWQsIHVuc2lnbmVkIGludCBmbGFncyk7CisraW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERS QkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXQpOworKworK2NvbnN0IHN0cnVj dCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpOworKworK2NvbnN0IHN0 cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKKysKKysj ZGVmaW5lIEZJUFNfZGlnZXN0aW5pdCBFVlBfRGlnZXN0SW5pdAorKyNkZWZpbmUgRklQU19kaWdl c3R1cGRhdGUgRVZQX0RpZ2VzdFVwZGF0ZQorKyNkZWZpbmUgRklQU19kaWdlc3RmaW5hbCBFVlBf RGlnZXN0RmluYWwKKysjZGVmaW5lIE1fRVZQX01EX3NpemUgRVZQX01EX3NpemUKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUwOTIz MzE3ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5j CTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUwOTIzMzE3ICswMjAwCitAQCAtMCwwICsxLDE5MSBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNp bWlsYXIgdG8gUkFORCBmdW5jdGlvbmFsaXR5IGJ1dCB3aXRob3V0CisrICogRU5HSU5FIGFuZCBh ZGRpdGlvbmFsIGNoZWNraW5nIGZvciBub24tRklQUyByYW5kIG1ldGhvZHMuCisrICovCisrCisr c3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EICpmaXBzX3JhbmRfbWV0aCA9IE5VTEw7Cisrc3RhdGlj IGludCBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDA7Cisrc3RhdGljIGludCBmaXBzX3JhbmRf Yml0cyA9IDA7CisrCisrLyogQWxsb3dzIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBv ZiBiaXRzIGFuZCB1c2VzIG5vbi1GSVBTIG1ldGhvZHMgKi8KKyt2b2lkIEZJUFNfcmFuZF9zZXRf Yml0cyhpbnQgbmJpdHMpCisrCXsKKysJZmlwc19yYW5kX2JpdHMgPSBuYml0czsKKysJfQorKwor K2ludCBGSVBTX3JhbmRfc2V0X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKKysJewor KwlpZiAoIWZpcHNfcmFuZF9iaXRzKQorKwkJeworKwkJaWYgKG1ldGggPT0gRklQU19kcmJnX21l dGhvZCgpKQorKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKKysJCWVsc2UgaWYgKG1l dGggPT0gRklQU194OTMxX21ldGhvZCgpKQorKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0g MjsKKysJCWVsc2UKKysJCQl7CisrCQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOworKwkJ CWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQkJCXsKKysJCQkJRklQU2VycihGSVBTX0ZfRklQ U19SQU5EX1NFVF9NRVRIT0QsCisrCQkJCQkJRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQkJ CXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJfQorKwlmaXBzX3JhbmRfbWV0aCA9IG1ldGg7 CisrCXJldHVybiAxOworKwl9CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRf bWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfcmFuZF9tZXRoOworKwl9CisrCisrY29u c3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCkKKysJeworKwlyZXR1cm4gRklQ U19yYW5kX2dldF9tZXRob2QoKTsKKysJfQorKworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQp CisrCXsKKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQor KwkJZmlwc19yYW5kX21ldGgtPmNsZWFudXAoKTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2Vl ZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKQorKwl7CisrCWlmICghZmlw c19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQ U2VycihGSVBTX0ZfRklQU19SQU5EX1NFRUQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJ cmV0dXJuIDA7CisrCQl9CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+ c2VlZCkKKysJCWZpcHNfcmFuZF9tZXRoLT5zZWVkKGJ1ZixudW0pOworKwlyZXR1cm4gMTsKKysJ fQorKworK3ZvaWQgRklQU19yYW5kX2FkZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJs ZSBlbnRyb3B5KQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19t b2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0FERCwgRklQ U19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm47CisrCQl9CisrCWlmIChmaXBzX3JhbmRf bWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+YWRkKQorKwkJZmlwc19yYW5kX21ldGgtPmFkZChidWYs bnVtLGVudHJvcHkpOworKwl9CisrCisraW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFy ICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9y YW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RklQU19SQU5EX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOwor KwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmJ5dGVzKQorKwkJ cmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5ieXRlcyhidWYsbnVtKTsKKysJcmV0dXJuIDA7CisrCX0K KysKKytpbnQgRklQU19yYW5kX3BzZXVkb19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBu dW0pCisrCXsKKysJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9t b2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19y YW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnBzZXVkb3JhbmQpCisrCQlyZXR1cm4gZmlwc19y YW5kX21ldGgtPnBzZXVkb3JhbmQoYnVmLG51bSk7CisrCXJldHVybiAtMTsKKysJfQorKworK2lu dCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpCisrCXsKKysJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRf bWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X1JBTkRfU1RBVFVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJ fQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnN0YXR1cykKKysJCXJl dHVybiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKCk7CisrCXJldHVybiAwOworKwl9CisrCisrLyog UmV0dXJuIGluc3RhbnRpYXRlZCBzdHJlbmd0aCBvZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlzIGFu IGludGVybmFsCisrICogcGFyYW1ldGVyLiBGb3IgWDkuMzEgUFJORyBpdCBpcyA4MCBiaXRzIChm cm9tIFNQODAwLTEzMSkuIEFueSBvdGhlcgorKyAqIHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92 ZWQgYW5kIHJldHVybnMgMCBpbiBGSVBTIG1vZGUgYW5kIG1heGltdW0KKysgKiAyNTYgb3V0c2lk ZSBGSVBTIG1vZGUuCisrICovCisrCisraW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQorKwl7 CisrCWlmIChmaXBzX3JhbmRfYml0cykKKysJCXJldHVybiBmaXBzX3JhbmRfYml0czsKKysJaWYg KGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDEpCisrCQlyZXR1cm4gRklQU19kcmJnX2dldF9z dHJlbmd0aChGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSk7CisrCWVsc2UgaWYgKGZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoID09IDIpCisrCQlyZXR1cm4gODA7CisrCWVsc2UgaWYgKGZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoID09IDApCisrCQl7CisrCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQorKwkJ CXJldHVybiAwOworKwkJZWxzZQorKwkJCXJldHVybiAyNTY7CisrCQl9CisrCXJldHVybiAwOwor Kwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlw cwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MDkyMzMxNyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUw OTIzMzE3ICswMjAwCitAQCAtMCwwICsxLDE4MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1 bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWduZWQg Y2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19UVjsKKysKKysvKiBUaGUgZm9sbG93aW5nIHRlc3Qg dmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAqLworKworK3N0 YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9CisrCQl7MHhmMywweGIxLDB4NjYs MHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAorKwkJIDB4ZWQsMHgwNiwweDFjLDB4YWIsMHhiOCww eGQ0LDB4NjIsMHgwMn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xMjhfdHYgPSAKKysJ eworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEs MHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4Zjl9LAorKwkJ CQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAor KwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIg Ki8KKysJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhiMCwweGMwLDB4NTUsCisrCQkgMHg4 NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQxfQorKwl9OworKworK3N0YXRpYyB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9CisrCQl7MHgxNSwweGQ4LDB4NzgsMHgwZCww eDYyLDB4ZDMsMHgyNSwweDZlLAorKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJiLDB4 YTksMHhiYywKKysJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9Owor KworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2ID0gCisrCXsKKysJCQkJLyogRFQgKi8K KysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiww eDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwKKysJCQkJLyogViAqLworKwkJezB4 ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgxNywweDA3 LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAorKwkJIDB4YTUsMHgwYywweGJmLDB4MjUs MHhlNSwweDU2LDB4YjQsMHg5M30KKysJfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNf MjU2X2tleVszMl0gPQorKwkJezB4NmQsMHgxNCwweDA2LDB4NmMsMHhiNiwweGQ4LDB4MjEsMHgy ZCwKKysJCSAweDgyLDB4OGQsMHhmYSwweGYyLDB4N2EsMHgwMywweGI3LDB4OWYsCisrCQkgMHgw YywweGM3LDB4M2UsMHhjZCwweDc2LDB4ZWIsMHhlZSwweGI1LAorKwkJIDB4MjEsMHgwNSwweDhj LDB4NGYsMHgzMSwweDdhLDB4ODAsMHhiYn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18y NTZfdHYgPQorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFk LDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUs MHg4OH0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK KysJCQkJLyogUiAqLworKwkJezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhi YywKKysJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9CisrCX07Cisr Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKCkKKysgICAgeworKyAgICBhZXNfMTkyX3R2LlZbMF0r KzsKKysgICAgfQorKworKyNkZWZpbmUgZmlwc194OTMxX3Rlc3Qoa2V5LCB0dikgXAorKwlkb194 OTMxX3Rlc3Qoa2V5LCBzaXplb2Yga2V5LCAmdHYpCisrCisrc3RhdGljIGludCBkb194OTMxX3Rl c3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAorKwkJCUFFU19QUk5HX1RWICp0dikK KysJeworKwl1bnNpZ25lZCBjaGFyIFJbMTZdLCBWWzE2XTsKKysJaW50IHJ2ID0gMTsKKysJbWVt Y3B5KFYsIHR2LT5WLCBzaXplb2YoVikpOworKwlpZiAoIUZJUFNfeDkzMV9zZXRfa2V5KGtleSwg a2V5bGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVT VF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKwkJcmV0dXJuIDE7CisrCWlmICghZmlwc19wb3N0X2Nv cnJ1cHQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCisrCQlWWzBdKys7CisrCUZJUFNf eDkzMV9zZWVkKFYsIDE2KTsKKysJRklQU194OTMxX3NldF9kdCh0di0+RFQpOworKwlGSVBTX3g5 MzFfYnl0ZXMoUiwgMTYpOworKwlpZiAobWVtY21wKFIsIHR2LT5SLCAxNikpCisrCQl7CisrCQlm aXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpOworKwkJcnYgPSAw OworKwkJfQorKwllbHNlIGlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX1g5MzEsIGtl eWxlbiwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJcmV0dXJuIHJ2OworKwl9CisrCisraW50IEZJ UFNfc2VsZnRlc3RfeDkzMSgpCisrCXsKKysJaW50IHJ2ID0gMTsKKysJRklQU194OTMxX3Jlc2V0 KCk7CisrCWlmICghRklQU194OTMxX3Rlc3RfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJu IDA7CisrCQl9CisrCWlmICghZmlwc194OTMxX3Rlc3QoYWVzXzEyOF9rZXksYWVzXzEyOF90dikp CisrCQlydiA9IDA7CisrCWlmICghZmlwc194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18xOTJf dHYpKQorKwkJcnYgPSAwOworKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18yNTZfa2V5LCBhZXNf MjU2X3R2KSkKKysJCXJ2ID0gMDsKKysJRklQU194OTMxX3Jlc2V0KCk7CisrCWlmICghcnYpCisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEsRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKQor Kwl7CisrCXJldHVybiBGSVBTX3NlbGZ0ZXN0X3g5MzEoKTsKKysJfQorKworKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCistLS0gb3BlbnNzbC0xLjAu MWcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41 NTE5MjMzNDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JhbmR0 ZXN0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTE5MjMzNDAgKzAyMDAKK0BAIC0wLDAgKzEsMjUw IEBACisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBp cyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBj cnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMg dG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlz IGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisr ICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmli dXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBu b3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRl ZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0 IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBh bmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90 IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0 LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRo b3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4g dGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICog aW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBh Y2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK KysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmlj IFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBo aWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICog ICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4g SWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZl IHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBj b2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0 c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZ T1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdF UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICog CisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2Fs bHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5u b3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3Bp ZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1 ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoK KysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlICJlX29z LmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7CisrICAg IHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1bnNp Z25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWduZWQgY2hh ciBSWzE2XTsKKysJfSBBRVNfUFJOR19NQ1Q7CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9CisrCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIsMHhm MywweDM0LDB4YjUsCisrCSAweGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9 OworKworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7CisrCQkJ LyogRFQgKi8KKysJezB4NjMsMHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKKysJ IDB4NjcsMHhjOSwweDI1LDB4ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCisrCQkJLyogViAqLwor Kwl7MHg1NywweDJjLDB4OGUsMHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAorKwkgMHg3ZSwweDc0 LDB4ZmIsMHhkZCwweGM0LDB4OTUsMHgwMSwweGQxfSwKKysJCQkvKiBSICovCisrCXsweDQ4LDB4 ZTksMHhiZCwweDBkLDB4MDYsMHhlZSwweDE4LDB4ZmIsCisrCSAweGU0LDB4NTcsMHg5MCwweGQ1 LDB4YzMsMHhmYywweDliLDB4NzN9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX21jdF9rZXlbMjRdID0KKysJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3 LDB4YWIsMHg3MywKKysJIDB4NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwK KysJIDB4YmMsMHgzNSwweDUxLDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07CisrCisrc3RhdGlj IGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTkyX21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7 MHg4NCwweGNlLDB4MjIsMHg3ZCwweDkxLDB4NWEsMHhhMywweGM5LAorKwkgMHg4NCwweDNjLDB4 MGEsMHhiMywweGE5LDB4NjMsMHgxNSwweDUyfSwKKysJCQkvKiBWICovCisrCXsweGI2LDB4YWYs MHhlNiwweDhmLDB4OTksMHg5ZSwweDkwLDB4NjQsCisrCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4 YmIsMHg5MCwweDNhLDB4NmR9LAorKwkJCS8qIFIgKi8KKysJezB4ZmMsMHg4NSwweDYwLDB4OWEs MHgyOSwweDZmLDB4ZWYsMHgyMSwKKysJIDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4 NmYsMHg0N30KKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0 X2tleVszMl0gPQorKwl7MHg5YiwweDA1LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAor KwkgMHhhNiwweDNhLDB4YTgsMHhjYiwweDRlLDB4NzEsMHhiMiwweGUwLAorKwkgMHhiOCwweDdl LDB4ZjEsMHgzNywweGI2LDB4YjQsMHhmNiwweDZkLAorKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiww eDVlLDB4MWQsMHgxZSwweDUwfTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18y NTZfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4YjEs MHg0NCwweGYwLDB4ZWUsCisrCSAweDYyLDB4NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4 NGN9LAorKwkJCS8qIFYgKi8KKysJezB4NGYsMHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4NGQs MHhhMSwKKysJIDB4M2UsMHgwZSwweDU2LDB4NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCisrCQkJ LyogUiAqLworKwl7MHhjOCwweDg3LDB4YzIsMHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAorKwkg MHhlNywweGYzLDB4OGIsMHhkNywweDViLDB4ZDUsMHhmMSwweDhkfQorK307CisrCisrc3RhdGlj IHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpiLGludCBuKQorKyAgICB7CisrICAgIHdo aWxlKG4tLSA+IDApCisrCXsKKysJcHJpbnRmKCIgJTAyeCIsKmIrKyk7CisrCX0KKysgICAgfQor KworK3N0YXRpYyB2b2lkIGNvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLAorKwkJICAgIGludCBuKQorKyAgICB7CisrICAgIGlu dCBpOworKworKyAgICBmb3IoaT0wIDsgaSA8IG4gOyArK2kpCisrCWlmKHJlc3VsdFtpXSAhPSBl eHBlY3RlZFtpXSkKKysJICAgIHsKKysJICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290 OiIpOworKwkgICAgZHVtcChyZXN1bHQsbik7CisrCSAgICBwdXRzKCJcbiAgICAgICAgICAgICAg IGV4cGVjdGVkOiIpOworKwkgICAgZHVtcChleHBlY3RlZCxuKTsKKysJICAgIHB1dGNoYXIoJ1xu Jyk7CisrCSAgICBFWElUKDEpOworKwkgICAgfQorKyAgICB9CisrCisrCisrc3RhdGljIHZvaWQg cnVuX3Rlc3QoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAorKwkJCQkJCQlj b25zdCBBRVNfUFJOR19NQ1QgKnR2KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2 XSwgZHRbMTZdOworKyAgICBpbnQgaSwgajsKKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAg IEZJUFNfeDkzMV90ZXN0X21vZGUoKTsKKysgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXls ZW4pOworKyAgICBGSVBTX3g5MzFfc2VlZCh0di0+ViwgMTYpOworKyAgICBtZW1jcHkoZHQsIHR2 LT5EVCwgMTYpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKysJeworKyAgICAJ RklQU194OTMxX3NldF9kdChkdCk7CisrCUZJUFNfeDkzMV9ieXRlcyhidWYsIDE2KTsKKysJLyog SW5jcmVtZW50IERUICovCisrCWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCXsKKysJCWR0 W2pdKys7CisrCQlpZiAoZHRbal0pCisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysgICAgY29t cGFyZShidWYsdHYtPlIsIDE2KTsKKysgICAgfQorKworK2ludCBtYWluKCkKKysJeworKwlydW5f dGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOworKwlwcmludGYoIkZJ UFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQs ICZhZXNfMTkyX21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsK KysJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKKysJcHJp bnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOworKwlyZXR1cm4gMDsKKysJfQorKworKyNl bmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMK Ky0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMJ MjAxNC0wNS0wNiAxNjoyOTo1MC41NTE5MjMzNDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUxOTIz MzQwICswMjAwCitAQCAtMCwwICsxLDQ0NCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisr ICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlm CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5o PgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBuW10gPQorKyJceDAwXHhCQlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4 QUNceDJCXHg5RFx4QThceDcxIgorKyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4 QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1IgorKyJceDFGXHhCOFx4REZceEJBXHhBRlx4 MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4NDhceENFXHhFQlx4NkZceENEIgorKyJceDQ4XHg3Nlx4 RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgor KyJceDdGXHhBRlx4QjhceEUwXHhBM1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhE OVx4M0FceDI1IgorKyJceDg0XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgz NFx4QjJceDQ1XHg0NVx4OThceDM5IgorKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhB NVx4MUZceDUyXHg3QVx4OUFceDQxXHhGNlx4QzFceDY4IgorKyJceDdGXHhFMlx4NTNceDcyXHg5 OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgorKyJceENCIjsK KysKKytzdGF0aWMgaW50IGNvcnJ1cHRfcnNhOworKworK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJT QSAqa2V5KQorKyAgICB7CisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJc eDExIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KKysiXHgwMFx4 QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhD RCIKKysiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgw MVx4NTdceDk2XHg0MSIKKysiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2 NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKKysiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhB OVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNFXHhEQSIKKysiXHhDOVx4N0ZceEYzXHhB RFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKKysiXHg0 NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQy XHgwQSIKKysiXHg5M1x4OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEEx XHhDRVx4Q0NceDQ4XHg5NCIKKysiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0 XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKKysiXHhDMSI7CisrCisrICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9CisrIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4Qjlc eEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhCNVx4NjAiCisrIlx4MDFceDk5XHhFQlx4OUZc eDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCisrIlx4MzJc eDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4 MEEiCisrIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4 MkFceDU4XHhGQlx4NjUiCisrIlx4OTkiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBxW10gPQorKyJceDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgx Mlx4MzNceEVBXHhBQVx4RDFceEQ5IgorKyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhC MVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlEIgorKyJceDg2XHg5OFx4NDBceEI0XHgx Nlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgorKyJceENGXHhD RVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1 IgorKyJceDAzIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0K KysiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4 RDZceDlBXHg1QSIKKysiXHhFQlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4 NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKKysiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4 MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlBXHgyRSIKKysiXHgyMFx4MkJceDM4XHhGQ1x4 OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7CisrCisrICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcTFbXSA9CisrIlx4NDdceDFFXHgwMlx4OTBc eEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCisrIlx4NjFc eEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4 QTciCisrIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4 RTRceDdBXHgyMlx4MEQiCisrIlx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4 RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOworKyAgICAKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaXFtcFtdID0KKysiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFc eDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgyMyIKKysiXHhCM1x4ODBceEYyXHg3MVx4Rjdc eDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKKysiXHg5Rlx4Qzlc eDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIK KysiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4 NzlceDgwXHgzOSIKKysiXHhGNyI7CisrCisrICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXpl b2YobiktMSwga2V5LT5uKTsKKysgICAgaWYgKGNvcnJ1cHRfcnNhKQorKwlCTl9zZXRfYml0KGtl eS0+biwgMTAyNCk7CisrICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5 LT5lKTsKKysgICAga2V5LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOwor KyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7CisrICAgIGtl eS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSktMSwga2V5LT5xKTsKKysgICAga2V5LT5kbXAx ID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOworKyAgICBrZXkt PmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7CisrICAg IGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsK KysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQorKyAg ICB7CisrICAgIGNvcnJ1cHRfcnNhID0gMTsKKysgICAgfQorKworKy8qIEtub3duIEFuc3dlciBU ZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZworKyAq IGthdF90YnMuCisrICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1td ID0gIk9wZW5TU0wgRklQUyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKKysgIDB4MkQsIDB4QUYs IDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4 MEYsCisrICAweDAxLCAweDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAw eDFELCAweEQyLCAweDkwLCAweEJCLAorKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwg MHg1MSwgMHhCQiwgMHhFOCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywKKysgIDB4RDEsIDB4REYs IDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4 NEMsCisrICAweDdGLCAweDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAw eDUxLCAweDYwLCAweEQwLCAweEE3LAorKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3Mywg MHhEOSwgMHgwNywgMHhFMywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKKysgIDB4QjYsIDB4RjMs IDB4RjIsIDB4NUUsIDB4NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4 NDUsCisrICAweDBBLCAweEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAw eDBGLCAweEY4LCAweEI3LCAweDMxLAorKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwg MHg4MSwgMHhENCwgMHhFNiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKKysgIDB4MjMsIDB4QjUs IDB4N0YsIDB4REMsIDB4MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4 ODQsCisrICAweDI2LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9 IHsKKysgIDB4MzksIDB4NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4 RUYsIDB4QzUsIDB4NTgsIDB4QTcsCisrICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAw eDlBLCAweDJDLCAweDgyLCAweDk4LCAweDA4LCAweDk1LCAweEZBLAorKyAgMHhCMSwgMHg5RSwg MHhEMiwgMHg1NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1 NywKKysgIDB4MzAsIDB4OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4 NTUsIDB4NTQsIDB4MUMsIDB4ODksCisrICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAw eDkwLCAweDJFLCAweDE2LCAweENDLCAweDg2LCAweDA1LCAweEVFLAorKyAgMHhCMSwgMHhFNiwg MHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgy MiwKKysgIDB4MTUsIDB4NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4 NjQsIDB4NjIsIDB4RDEsIDB4QjUsCisrICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAw eEY5LCAweEQyLCAweEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAorKyAgMHg1OCwgMHhEMiwg MHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgy RCwKKysgIDB4QzgsIDB4NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4 QUYsIDB4OTUsIDB4QzAsIDB4MDAsCisrICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAw eEIyLCAweEVFLCAweEMwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1BTU19TSEEyNTZbXSA9IHsKKysgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4 NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCisrICAweDAwLCAweDk3LCAw eEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhG LAorKyAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4 RCwgMHg3RCwgMHg3MywgMHgyOCwKKysgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4 MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCisrICAweDdELCAweDJFLCAw eDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1 LAorKyAgMHhBQiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgx RCwgMHg2RCwgMHgyNiwgMHhCQSwKKysgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4 RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCisrICAweDBCLCAweDQ3LCAw eDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlG LAorKyAgMHgyMSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0 NywgMHgxMiwgMHhFNCwgMHg2RCwKKysgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4 MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCisrICAweDcyLCAweEY0LCAw eEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJELCAweDFDCisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEzODRbXSA9IHsKKysgIDB4NDAsIDB4RkIsIDB4 QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIs CisrICAweEVDLCAweDFDLCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3 LCAweDQ1LCAweENELCAweDVFLAorKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhE RSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKKysgIDB4QUEsIDB4MjUsIDB4 RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0Ys CisrICAweDZGLCAweDAyLCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMx LCAweERDLCAweDQyLCAweDZDLAorKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhB MiwgMHhFNiwgMHg3MSwgMHhGMywgMHhBQywgMHg0RiwgMHhGQiwKKysgIDB4OTEsIDB4Q0EsIDB4 RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYs CisrICAweDNBLCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMy LCAweEFELCAweDQyLCAweDg5LAorKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhG QywgMHgzOCwgMHhBQywgMHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKKysgIDB4NDgsIDB4RjYsIDB4 QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUs CisrICAweDQ4LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsK KysgIDB4MDcsIDB4MUUsIDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcs IDB4QUUsIDB4NjMsIDB4OEMsCisrICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJC LCAweEYyLCAweEM2LCAweDhGLCAweDEyLCAweDUzLCAweDlBLAorKyAgMHg5QiwgMHg1NCwgMHg5 RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwK KysgIDB4NEIsIDB4RjMsIDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAs IDB4NzksIDB4MjMsIDB4MzksCisrICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5 LCAweDlBLCAweDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAorKyAgMHg3QywgMHhFMywgMHg3 RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwK KysgIDB4NTcsIDB4RTMsIDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAs IDB4QjAsIDB4ODUsIDB4MTMsCisrICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1 LCAweEM4LCAweEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYzLAorKyAgMHgyRCwgMHg2MCwgMHhG NSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwK KysgIDB4NzYsIDB4RjIsIDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0Ys IDB4ODAsIDB4QzIsIDB4ODgsCisrICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5 LCAweDE0LCAweDhCCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1NIQTFbXSA9IHsKKysgIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMs IDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCisrICAweDRBLCAweEZELCAweDFBLCAweDA1 LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAorKyAgMHhF NywgMHhGRCwgMHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3Nywg MHg5MCwgMHhDRiwKKysgIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUs IDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4RjgsCisrICAweDgwLCAweEQxLCAweDhCLCAweEMy LCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAorKyAgMHgy MCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwg MHgzMCwgMHhCQSwKKysgIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYs IDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCisrICAweEJDLCAweDI5LCAweEE4LCAweDY3 LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAorKyAgMHgz NSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywg MHg0OCwgMHgxRiwKKysgIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMs IDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4OTUsCisrICAweERGLCAweEYxLCAweDVGLCAweDg0 LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1NIQTIyNFtdID0geworKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgx OCwgMHgwRSwgMHg1RiwgMHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKKysgIDB4MjUsIDB4 QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgs IDB4OEQsCisrICAweDVCLCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYw LCAweEM1LCAweDFBLCAweEM1LCAweDg5LAorKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2 MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKKysgIDB4QTQsIDB4 MDIsIDB4QUQsIDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEs IDB4RTUsCisrICAweEVFLCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUx LCAweDVFLCAweDBCLCAweEE5LCAweENDLAorKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgw OSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKKysgIDB4MEIsIDB4 NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0Us IDB4QjIsCisrICAweDU4LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUy LCAweEMwLCAweDY2LCAweEU2LCAweDM1LAorKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1 RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKKysgIDB4NDAsIDB4 MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7CisrICAweDBELCAweDU1LCAw eEUyLCAweEFBLCAweDgxLCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIz LAorKyAgMHhFNywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgy MCwgMHg3QiwgMHhBQSwgMHgyMywKKysgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4 ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCisrICAweDk4LCAweDJELCAw eDY5LCAweDg0LCAweEJGLCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZF LAorKyAgMHgyQywgMHg0NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2 QSwgMHg5MCwgMHgyRCwgMHgxOCwKKysgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4 QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCisrICAweEJFLCAweDIyLCAw eEM3LCAweEQzLCAweEVDLCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNB LAorKyAgMHg3QywgMHg4NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhE RSwgMHg4MSwgMHhBNiwgMHgzOCwKKysgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4 OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCisrICAweDI3LCAweDQ4LCAw eDJCLCAweEY1LCAweEFCLCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkw LAorKyAgMHhCRCwgMHg0NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQorK307 CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKKysg IDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4 RUYsIDB4RTYsIDB4MUYsCisrICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAw eEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAorKyAgMHg2RiwgMHgyMiwgMHgxNiwg MHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKKysg IDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4 QTksIDB4QTYsIDB4NTUsCisrICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAw eEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2LCAweENGLAorKyAgMHg4MiwgMHhERCwgMHg3RSwg MHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKKysg IDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4 N0QsIDB4RUIsIDB4OEMsCisrICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAw eDRELCAweEJGLCAweDhGLCAweDhCLCAweDlDLCAweENELAorKyAgMHhFQSwgMHg4NSwgMHhFRSwg MHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKKysg IDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4 MzcsIDB4REMsIDB4MDQsCisrICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAw eDU2LCAweEJGCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NI QTUxMltdID0geworKyAgMHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwg MHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwgMHhDRiwKKysgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEs IDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAweDE1 LCAweEVBLCAweDVDLCAweEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAw eDMyLCAweEYxLAorKyAgMHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwg MHhCNiwgMHg0QywgMHg1NCwgMHg5RiwgMHhEOCwKKysgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEs IDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAweDgw LCAweEUyLCAweEJDLCAweERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAw eDkyLCAweDZCLAorKyAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywg MHhERiwgMHgxQiwgMHgxRCwgMHg0NywgMHhFNiwKKysgIDB4NTksIDB4NTYsIDB4QTUsIDB4Qjks IDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCisrICAweDZG LCAweDBFLCAweDJCLCAweDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAw eEUwLCAweDJELAorKyAgMHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwg MHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5MSwKKysgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUs IDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7CisrICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAw eEQxLCAweDgwLCAweEI2LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAorKyAgMHhFOSwg MHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhC MiwgMHg3NSwKKysgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4 MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMsCisrICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAw eDVDLCAweEY4LCAweDM4LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAorKyAgMHg3MCwg MHhGQiwgMHg1RSwgMHhFNywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhC RSwgMHhENiwKKysgIDB4NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4 Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTksCisrICAweEVFLCAweDUxLCAweENDLCAweDkyLCAw eERELCAweEJDLCAweDYzLCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAorKyAgMHg2Riwg MHg0QywgMHgzQywgMHgzNywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgx QywgMHg5OSwKKysgIDB4NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4 QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4NzYsCisrICAweDhFLCAweDZFLCAweENBLCAweDdFLCAw eDRFLCAweDE0LCAweEJBLCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAorKyAgMHhBMywg MHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQorK307CisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0geworKyAgMHg3RSwg MHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1 NCwgMHg4OSwKKysgIDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4 QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQsCisrICAweEVBLCAweEEyLCAweDJELCAweDVDLCAw eEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAorKyAgMHgxNiwg MHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhD OCwgMHg5QiwKKysgIDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4 QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4NEIsCisrICAweDAwLCAweDg1LCAweEYzLCAweERELCAw eDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAorKyAgMHhBRCwg MHg0RSwgMHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgw MSwgMHhFQywKKysgIDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4 ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4OEMsCisrICAweDMzLCAweDFELCAweDgyLCAweDhDLCAw eDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAorKyAgMHgyMSwg MHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1 QiwgMHhEQywKKysgIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4 ODAKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEz ODRbXSA9IHsKKysgIDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4 MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4N0IsCisrICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAw eEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAorKyAgMHhFNiwg MHg0RiwgMHg1RSwgMHgwQSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgy RSwgMHhFMywKKysgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4 OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4RjYsCisrICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAw eDUxLCAweDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAorKyAgMHhEOCwg MHg2OSwgMHhFOSwgMHhBQiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4 RCwgMHhGMSwKKysgIDB4M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4 RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4NzksCisrICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAw eEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAorKyAgMHgwRSwg MHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0 NCwgMHgzNSwKKysgIDB4RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4 NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQsCisrICAweEUyLCAweENELCAweDg1LCAweERCLCAw eDczLCAweDgyLCAweDY1LCAweDI4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7CisrICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAw eDRGLCAweEIzLCAweDg2LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAorKyAgMHhGQywg MHhBMSwgMHhBQSwgMHhDQiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhE QSwgMHhBQywKKysgIDB4RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4 QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcsCisrICAweDNBLCAweEJELCAweDVFLCAweDUzLCAw eDA5LCAweDRBLCAweEU2LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAorKyAgMHhBMCwg MHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhG OCwgMHhDNSwKKysgIDB4NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4 MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4QUYsCisrICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAw eDc5LCAweEY2LCAweDA0LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAorKyAgMHhDRSwg MHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1 RiwgMHgwOSwKKysgIDB4OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4 RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4N0MsCisrICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAw eEMzLCAweEZELCAweDkyLCAweDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAorKyAgMHg2MCwg MHg4MywgMHgxOCwgMHg4OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMworK307CisrCisrCisraW50 IEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJUlNBICprZXk7Cisr CUVWUF9QS0VZICpwayA9IE5VTEw7CisrCisrCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkK KysJCWdvdG8gZXJyOworKwlzZXRyc2FrZXkoa2V5KTsKKysJaWYgKChwaz1FVlBfUEtFWV9uZXco KSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBr ZXkpOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEEx KSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJT QSBTSEExIFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NI QTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1 NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJ IlJTQSBTSEEyNTYgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9S U0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQorKwkJ Z290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0Ff U0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAor KwkJCQkiUlNBIFNIQTUxMiBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJ CQkJa2F0X1JTQV9QU1NfU0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAorKwkJCQlFVlBf c2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEExIFBTUyIpKQor KwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihr YXRfUlNBX1BTU19TSEEyMjQpLAorKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19Q QURfUFNTLAorKwkJCQkiUlNBIFNIQTIyNCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK KysJCQkJa2F0X1JTQV9QU1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKKysJ CQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEy NTYgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTM4 NCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTM4NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQorKwkJZ290byBlcnI7 CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19T SEE1MTIpLAorKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJ CQkiUlNBIFNIQTUxMiBQU1MiKSkKKysJCWdvdG8gZXJyOworKworKworKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlr YXRfUlNBX1g5MzFfU0hBMSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKKysJCQlFVlBfc2hh MSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEExIFg5MzEiKSkKKysJ CWdvdG8gZXJyOworKwkvKiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KKysJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEy NTYpLAorKwkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJS U0EgU0hBMjU2IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5 MzFfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCisrCQkJRVZQX3NoYTM4NCgp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEEzODQgWDkzMSIpKQorKwkJ Z290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRf UlNBX1g5MzFfU0hBNTEyKSwKKysJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURf WDkzMSwKKysJCQkiUlNBIFNIQTUxMiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysKKysKKysJcmV0 ID0gMTsKKysKKysJZXJyOgorKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJZWxz ZSBpZiAoa2V5KQorKwkJUlNBX2ZyZWUoa2V5KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNl bmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMv Zmlwc19yc2FfeDkzMWcuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcnNh X3g5MzFnLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MTkyMzM0MCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMJMjAxNC0wNS0wNiAxNjoy OTo1MC41NTE5MjMzNDAgKzAyMDAKK0BAIC0wLDAgKzEsMjgyIEBACisrLyogY3J5cHRvL3JzYS9y c2FfZ2VuLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBw YWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRl biBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxp YnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxv bmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlz IGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4s IGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAq IGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBj b3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlv dW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2Rl IGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBh IHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMg dGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNh biBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAg b3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0 aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICog ICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5 cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJh cnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4K KysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRl cml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxp Y2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysg KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU CisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFH RS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkg cHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBj b2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQor KyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysg KiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNsdWRl IDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysKKytleHRlcm4gaW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKTsKKysj ZW5kaWYKKysKKysvKiBYOS4zMSBSU0Ega2V5IGRlcml2YXRpb24gYW5kIGdlbmVyYXRpb24gKi8K KysKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0g KnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25z dCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKlhxMSwg Y29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklHTlVNICpl LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJQklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxM LCpyMz1OVUxMOworKwlCTl9DVFggKmN0eD1OVUxMLCpjdHgyPU5VTEw7CisrCisrCWlmICghcnNh KSAKKysJCWdvdG8gZXJyOworKworKwljdHggPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4KSAK KysJCWdvdG8gZXJyOworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysKKysJcjAgPSBCTl9DVFhfZ2V0 KGN0eCk7CisrCXIxID0gQk5fQ1RYX2dldChjdHgpOworKwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsK KysJcjMgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmIChyMyA9PSBOVUxMKQorKwkJZ290byBl cnI7CisrCWlmICghcnNhLT5lKQorKwkJeworKwkJcnNhLT5lID0gQk5fZHVwKGUpOworKwkJaWYg KCFyc2EtPmUpCisrCQkJZ290byBlcnI7CisrCQl9CisrCWVsc2UKKysJCWUgPSByc2EtPmU7Cisr CisrCS8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQg d2UgY2FuLgorKwkgKiBUaGlzIGFsbG93cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxlY3Rp dmUgcGFyYW1ldGVycy4KKysJICovCisrCisrCWlmIChYcCAmJiAhcnNhLT5wKQorKwkJeworKwkJ cnNhLT5wID0gQk5fbmV3KCk7CisrCQlpZiAoIXJzYS0+cCkKKysJCQlnb3RvIGVycjsKKysKKysJ CWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCisrCQkJCQlYcCwg WHAxLCBYcDIsIGUsIGN0eCwgY2IpKQorKwkJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoWHEg JiYgIXJzYS0+cSkKKysJCXsKKysJCXJzYS0+cSA9IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnEp CisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwg cTEsIHEyLAorKwkJCQkJWHEsIFhxMSwgWHEyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVycjsK KysJCX0KKysKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKKysJCXsKKysJCUJOX0NUWF9lbmQo Y3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQlyZXR1cm4gMjsKKysJCX0KKysKKysJLyog U2luY2UgYm90aCBwcmltZXMgYXJlIHNldCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVtYWlu aW5nIAorKwkgKiBjb21wb25lbnRzLgorKwkgKi8KKysKKysJLyogY2FsY3VsYXRlIG4gKi8KKysJ cnNhLT5uPUJOX25ldygpOworKwlpZiAocnNhLT5uID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJ aWYgKCFCTl9tdWwocnNhLT5uLHJzYS0+cCxyc2EtPnEsY3R4KSkKKysJCWdvdG8gZXJyOworKwor KwkvKiBjYWxjdWxhdGUgZCAqLworKwlpZiAoIUJOX3N1YihyMSxyc2EtPnAsQk5fdmFsdWVfb25l KCkpKQorKwkJZ290byBlcnI7CS8qIHAtMSAqLworKwlpZiAoIUJOX3N1YihyMixyc2EtPnEsQk5f dmFsdWVfb25lKCkpKQorKwkJZ290byBlcnI7CS8qIHEtMSAqLworKwlpZiAoIUJOX211bChyMCxy MSxyMixjdHgpKQorKwkJZ290byBlcnI7CS8qIChwLTEpKHEtMSkgKi8KKysKKysJaWYgKCFCTl9n Y2QocjMsIHIxLCByMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX2RpdihyMCwg TlVMTCwgcjAsIHIzLCBjdHgpKQorKwkJZ290byBlcnI7CS8qIExDTSgocC0xKShxLTEpKSAqLwor KworKwljdHgyID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eDIpCisrCQlnb3RvIGVycjsKKysK KysJcnNhLT5kPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5lLHIwLGN0eDIpOwkvKiBkICovCisr CWlmIChyc2EtPmQgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCBt b2QgKHAtMSkgKi8KKysJcnNhLT5kbXAxPUJOX25ldygpOworKwlpZiAocnNhLT5kbXAxID09IE5V TEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgp KQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLworKwlyc2Et PmRtcTE9Qk5fbmV3KCk7CisrCWlmIChyc2EtPmRtcTEgPT0gTlVMTCkKKysJCWdvdG8gZXJyOwor KwlpZiAoIUJOX21vZChyc2EtPmRtcTEscnNhLT5kLHIyLGN0eCkpCisrCQlnb3RvIGVycjsKKysK KysJLyogY2FsY3VsYXRlIGludmVyc2Ugb2YgcSBtb2QgcCAqLworKwlyc2EtPmlxbXA9Qk5fbW9k X2ludmVyc2UoTlVMTCxyc2EtPnEscnNhLT5wLGN0eDIpOworKworKwllcnI6CisrCWlmIChjdHgp CisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQor KwlpZiAoY3R4MikKKysJCUJOX0NUWF9mcmVlKGN0eDIpOworKwkvKiBJZiB0aGlzIGlzIHNldCBh bGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLworKwlpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxMKQor KwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworKworKwl9CisrCisraW50IFJTQV9YOTMxX2dl bmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VO Q0IgKmNiKQorKwl7CisrCWludCBvayA9IDA7CisrCUJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBO VUxMOworKwlCTl9DVFggKmN0eCA9IE5VTEw7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp ICYmIAorKwkJKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkg ICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNf Ul9LRVlfVE9PX1NIT1JUKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKworKwlpZiAoYml0 cyAmIDB4ZmYpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFU RV9LRVlfRVgsRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCk7CisrCSAgICByZXR1cm4gMDsKKysJ ICAgIH0KKysKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJ UFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrI2VuZGlmCisrCisrCWN0eCA9 IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgpCisrCQlnb3RvIGVycm9yOworKworKwlCTl9DVFhf c3RhcnQoY3R4KTsKKysJWHAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCVhxID0gQk5fQ1RYX2dldChj dHgpOworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0cywgY3R4KSkKKysJ CWdvdG8gZXJyb3I7CisrCisrCXJzYS0+cCA9IEJOX25ldygpOworKwlyc2EtPnEgPSBCTl9uZXco KTsKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8qIEdl bmVyYXRlIHR3byBwcmltZXMgZnJvbSBYcCwgWHEgKi8KKysKKysJaWYgKCFCTl9YOTMxX2dlbmVy YXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCisrCQkJCQll LCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9w cmltZV9leChyc2EtPnEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhxLAorKwkJCQkJZSwgY3R4 LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwkvKiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+cSBh cmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJpdmUKKysJICogcmVtYWluaW5nIFJTQSBj b21wb25lbnRzLgorKwkgKi8KKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBlLCBjYikpCisrCQlnb3RvIGVycm9yOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ aWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwor KwlvayA9IDE7CisrCisrCWVycm9yOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChj dHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysKKysJaWYgKG9rKQorKwkJcmV0dXJu IDE7CisrCisrCXJldHVybiAwOworKworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Zp cHMvZmlwc19zaGFfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2Zp cHNfc2hhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MTkyMzM0MCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJMjAx NC0wNS0wNiAxNjoyOTo1MC41NTE5MjMzNDAgKzAyMDAKK0BAIC0wLDAgKzEsMTQwIEBACisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvc2hhLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYyBjb25zdCBj aGFyIHRlc3RbXVs2MF09CisrICAgIHsKKysgICAgIiIsCisrICAgICJhYmMiLAorKyAgICAiYWJj ZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCisr ICAgIH07CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hBX0RJR0VTVF9M RU5HVEhdPQorKyAgICB7CisrICAgIHsgMHhkYSwweDM5LDB4YTMsMHhlZSwweDVlLDB4NmIsMHg0 YiwweDBkLDB4MzIsMHg1NSwKKysgICAgICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5MCww eGFmLDB4ZDgsMHgwNywweDA5IH0sCisrICAgIHsgMHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3LDB4 MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwKKysgICAgICAweDI1LDB4NzEsMHg3OCwweDUwLDB4YzIs MHg2YywweDljLDB4ZDAsMHhkOCwweDlkIH0sCisrICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0NCww eDFjLDB4M2IsMHhkMiwweDZlLDB4YmEsMHhhZSwKKysgICAgICAweDRhLDB4YTEsMHhmOSwweDUx LDB4MjksMHhlNSwweGU1LDB4NDYsMHg3MCwweGYxIH0sCisrICAgIH07CisrCisrc3RhdGljIGlu dCBjb3JydXB0X3NoYTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKKysgICAgeworKyAg ICBjb3JydXB0X3NoYSA9IDE7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKCkK KysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3Np emVvZih0ZXN0WzBdKSA7ICsrbikKKysJeworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1Rf TEVOR1RIXTsKKysKKysJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKStjb3JydXB0 X3NoYSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChtZCxyZXRbbl0s c2l6ZW9mIG1kKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1Rf U0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQor Kwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgbXNnX3NoYTI1NltdID0geyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAw eDFmLCAweDMwLAorKwkJCQkJICAgIDB4ZmMgfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBkaWdfc2hhMjU2W10gPSB7IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEsIDB4 NjgsIDB4NWIsCisrCQkJCQkgICAgMHg5ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhiYiwgMHg3NSwg MHhiZiwgMHgwMSwKKysJCQkJCSAgICAweDE3LCAweDBjLCAweDg0LCAweDAwLCAweDAxLCAweDdh LCAweDk0LCAweDgzLAorKwkJCQkJICAgIDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4 NjksIDB4ODgsIDB4OGEgfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hh NTEyW10gPSB7IDB4MzcsIDB4ZDEsIDB4MzUsIDB4OWQsIDB4MTgsIDB4NDEsIDB4ZTksIDB4Yjcs CisrCQkJCQkgICAgMHg2ZCwgMHg5YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZCB9Owor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGE1MTJbXSA9IHsgMHgxMSwgMHgxMywg MHhjNCwgMHgxOSwgMHhlZCwgMHgyYiwgMHgxZCwgMHgxNiwKKysJCQkJCSAgICAweDExLCAweGVi LCAweDliLCAweGJlLCAweGYwLCAweDdmLCAweGNmLCAweDQ0LAorKwkJCQkJICAgIDB4OGIsIDB4 ZDcsIDB4NTcsIDB4YmQsIDB4OGQsIDB4YTksIDB4MjUsIDB4YjAsCisrCQkJCQkgICAgMHg0Nywg MHgyNSwgMHhkNiwgMHg2YywgMHg5YSwgMHg1NCwgMHg3ZiwgMHg4ZiwKKysJCQkJCSAgICAweDBi LCAweDUzLCAweDFhLCAweDEwLCAweDY4LCAweDMyLCAweDAzLCAweDM4LAorKwkJCQkJICAgIDB4 ODIsIDB4YzQsIDB4ODcsIDB4YzQsIDB4ZWEsIDB4MGUsIDB4ZDEsIDB4MDQsCisrCQkJCQkgICAg MHhhOSwgMHg5OCwgMHhjMSwgMHgwNSwgMHhhMywgMHhmMywgMHhmOCwgMHhiMSwKKysJCQkJCSAg ICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAweDdlLCAweGVlLCAweDNkLCAweDQzIH07CisrCisr aW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgbWRbU0hB NTEyX0RJR0VTVF9MRU5HVEhdOworKworKwlFVlBfRGlnZXN0KG1zZ19zaGEyNTYsIHNpemVvZiht c2dfc2hhMjU2KSwgbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChk aWdfc2hhMjU2LCBtZCwgc2l6ZW9mKGRpZ19zaGEyNTYpKSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7 CisrCQl9CisrCisrCUVWUF9EaWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBt ZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKTsKKysJaWYobWVtY21wKGRpZ19zaGE1MTIsIG1k LCBzaXplb2YoZGlnX3NoYTUxMikpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RF X1NFVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJ cmV0dXJuIDE7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2Zp cHMvZmlwc19zdGFuZGFsb25lX2htYWMuYy5maXBzCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUxOTIz MzQwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25l X2htYWMuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MTkyMzM0MCArMDIwMAorQEAgLTAsMCArMSwx ODAgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4K KysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZm5kZWYgRklQU0NBTklTVEVSX08KKytpbnQgRklQ U19zZWxmdGVzdF9mYWlsZWQoKSB7IHJldHVybiAwOyB9Cisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2No ZWNrKCkge30KKyt2b2lkIE9QRU5TU0xfY2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9Cisr I2VuZGlmCisrCisrI2lmCWRlZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAg fHwgZGVmaW5lZChfTV9JWDg2KSB8fCBcCisrCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisrCWRl ZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2 NCkgfHwgZGVmaW5lZChfTV9YNjQpCisrCisrdW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBf UFsyXTsKKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIHZvaWQg aG1hY19pbml0KFNIQTI1Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCwKKysJCSAgICAg IGNvbnN0IGNoYXIgKmtleSkKKysgICAgeworKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwor KyAgICBpbnQgaTsKKysgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0td OworKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxPQ0tdOworKworKyAgICBp ZiAobGVuID4gU0hBX0NCTE9DSykKKysJeworKwlTSEEyNTZfSW5pdChtZF9jdHgpOworKwlTSEEy NTZfVXBkYXRlKG1kX2N0eCxrZXksbGVuKTsKKysJU0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7 CisrCWxlbj1TSEEyNTZfRElHRVNUX0xFTkdUSDsKKysJfQorKyAgICBlbHNlCisrCW1lbWNweShr ZXltZCxrZXksbGVuKTsKKysgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURf Q0JMT0NLLWxlbik7CisrCisrICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsg aSsrKQorKwlwYWRbaV09MHgzNl5rZXltZFtpXTsKKysgICAgU0hBMjU2X0luaXQobWRfY3R4KTsK KysgICAgU0hBMjU2X1VwZGF0ZShtZF9jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOworKworKyAgICBm b3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4NWNea2V5 bWRbaV07CisrICAgIFNIQTI1Nl9Jbml0KG9fY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0 eCxwYWQsU0hBMjU2X0NCTE9DSyk7CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBobWFjX2ZpbmFs KHVuc2lnbmVkIGNoYXIgKm1kLFNIQTI1Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkK KysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Cisr CisrICAgIFNIQTI1Nl9GaW5hbChidWYsbWRfY3R4KTsKKysgICAgU0hBMjU2X1VwZGF0ZShvX2N0 eCxidWYsc2l6ZW9mIGJ1Zik7CisrICAgIFNIQTI1Nl9GaW5hbChtZCxvX2N0eCk7CisrICAgIH0K KysKKysjZW5kaWYKKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgewor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElU ZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysgICAgaW50IG4sYmluYXJ5PTA7CisrCisrICAgIGlm KGFyZ2MgPCAyKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlsw XSk7CisrCWV4aXQoMSk7CisrCX0KKysKKysgICAgbj0xOworKyAgICBpZiAoIXN0cmNtcChhcmd2 W25dLCItYmluYXJ5IikpCisrCXsKKysJbisrOworKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkg ZmluZ2VycHJpbnQuLi4gKi8KKysJfQorKworKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKKysJ eworKwlGSUxFICpmPWZvcGVuKGFyZ3Zbbl0sInJiIik7CisrCVNIQTI1Nl9DVFggbWRfY3R4LG9f Y3R4OworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysJaW50IGk7 CisrCisrCWlmKCFmKQorKwkgICAgeworKwkgICAgcGVycm9yKGFyZ3Zbbl0pOworKwkgICAgZXhp dCgyKTsKKysJICAgIH0KKysKKysJaG1hY19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7CisrCWZv ciggOyA7ICkKKysJICAgIHsKKysJICAgIGNoYXIgYnVmWzEwMjRdOworKwkgICAgc2l6ZV90IGw9 ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1ZixmKTsKKysKKysJICAgIGlmKGwgPT0gMCkKKysJCXsKKysJ CWlmKGZlcnJvcihmKSkKKysJCSAgICB7CisrCQkgICAgcGVycm9yKGFyZ3Zbbl0pOworKwkJICAg IGV4aXQoMyk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIGJyZWFrOworKwkJfQorKwkgICAg U0hBMjU2X1VwZGF0ZSgmbWRfY3R4LGJ1ZixsKTsKKysJICAgIH0KKysJaG1hY19maW5hbChtZCwm bWRfY3R4LCZvX2N0eCk7CisrCisrCWlmIChiaW5hcnkpCisrCSAgICB7CisrCSAgICBmd3JpdGUo bWQsU0hBMjU2X0RJR0VTVF9MRU5HVEgsMSxzdGRvdXQpOworKwkgICAgYnJlYWs7CS8qIC4uLiBm b3Igc2luZ2xlKCEpIGZpbGUgKi8KKysJICAgIH0KKysKKysvKglwcmludGYoIkhNQUMtU0hBMSgl cyk9ICIsYXJndltuXSk7ICovCisrCWZvcihpPTAgOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEgg OyArK2kpCisrCSAgICBwcmludGYoIiUwMngiLG1kW2ldKTsKKysJcHJpbnRmKCJcbiIpOworKwl9 CisrI2VuZGlmCisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MjkyMzM2 MyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5j CTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUyOTIzMzYzICswMjAwCitAQCAtMCwwICsxLDU4OCBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICoKKysgKiBUaGlzIGNvbW1hbmQgaXMg aW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZlciBmb3IgdGhlIEZJUFMtMTQwIHRlc3RpbmcKKysgKiBs YWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2YWxpZGF0aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1 c2Ugb2YgdGhlCisrICogT3BlblNTTCBsaWJyYXJ5IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBj b21tb24gY3J5cHRvZ3JhcGhpYworKyAqIGZ1bmN0aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0 IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxpYmVyYXRlbHkKKysgKiBwb2ludGluZyB0byBhbiBpbnZh bGlkIGV4ZWN1dGFibGUgaGFzaAorKyAqCisrICogQ29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVl c3MuCisrICoKKysgKi8KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+ CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxz dGRsaWIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9k ZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2Eu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysK KysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCisrICAgIHsKKysgICAgcHJpbnRmKCJObyBGSVBTIHN1cHBvcnRcbiIpOworKyAgICByZXR1 cm4oMCk7CisrICAgIH0KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysvKiBBRVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25v d24gcGxhaW50ZXh0LCB2ZXJpZnkgcmVzdWx0IG1hdGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0Cisr Ki8KKytzdGF0aWMgaW50IEZJUFNfYWVzX3Rlc3Qodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsK KysJdW5zaWduZWQgY2hhciBwbHRtcFsxNl07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOwor Kwl1bnNpZ25lZCBjaGFyIGtleVsxNl0gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEz LDE0LDE1LDE2fTsKKysJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRs Y3UiOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7 CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBr ZXksIE5VTEwsIDEpIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRt cCwgcGxhaW50ZXh0LCAxNik7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVz XzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQ X0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDE2KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxh aW50ZXh0LCAxNikpCisrCQlnb3RvIGVycjsKKysJcmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQ SEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrc3RhdGljIGlu dCBGSVBTX2RlczNfdGVzdCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBj aGFyIHBsdG1wWzhdOworKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzhdOworKyAgICAJdW5zaWduZWQg Y2hhciBrZXlbXSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcs MTgsCisrCQkgICAgICAgICAgICAgIDE5LDIwLDIxLDIyLDIzLDI0fTsKKysgICAgCXVuc2lnbmVk IGNoYXIgcGxhaW50ZXh0W10gPSB7ICdlJywgJ3QnLCAnYScsICdvJywgJ24nLCAncicsICdpJywg J3MnIH07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4 KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxM LCBrZXksIE5VTEwsIDEpIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBj aXRtcCwgcGxhaW50ZXh0LCA4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9k ZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJ RVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDgpOworKwlpZiAobWVtY21wKHBsdG1wLCBw bGFpbnRleHQsIDgpKQorKwkJZ290byBlcnI7CisrCXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJ UEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKy8qCisrICog RFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAq LworK3N0YXRpYyBpbnQgRklQU19kc2FfdGVzdChpbnQgYmFkKQorKyAgICB7CisrICAgIERTQSAq ZHNhID0gTlVMTDsKKysgICAgRVZQX1BLRVkgcGs7CisrICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtd ID0gImV0YW9ucmlzaGRsYyI7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzYwXTsKKysgICAgdW5z aWduZWQgaW50IHNsZW47CisrICAgIGludCByID0gMDsKKysgICAgRVZQX01EX0NUWCBtY3R4Owor KworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsK KysgICAgZHNhID0gRFNBX25ldygpOworKyAgICBpZiAoIWRzYSkKKysJZ290byBlbmQ7CisrICAg IGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5V TEwsTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkK KysJZ290byBlbmQ7CisrICAgIGlmIChiYWQpCisrCSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9r ZXksIDEpOworKworKyAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKyAgICBway5wa2V5LmRz YSA9IGRzYTsKKysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCks IE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdz dCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmlu YWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCisrCWdvdG8gZW5kOworKworKyAgICBpZiAoIUVW UF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7Cisr ICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkp CisrCWdvdG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4s ICZwayk7CisrICAgIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAg aWYgKGRzYSkKKysgIAkgIERTQV9mcmVlKGRzYSk7CisrICAgIGlmIChyICE9IDEpCisrCXJldHVy biAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qCisrICogUlNBOiBnZW5lcmF0ZSBr ZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQg RklQU19yc2FfdGVzdChpbnQgYmFkKQorKyAgICB7CisrICAgIFJTQSAqa2V5OworKyAgICB1bnNp Z25lZCBjaGFyIGlucHV0X3B0ZXh0W10gPSAiZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQg Y2hhciBidWZbMjU2XTsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIEJJR05VTSAqYm47 CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysgICAgRVZQX1BLRVkgcGs7CisrICAgIGludCByID0g MDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0 eCk7CisrICAgIGtleSA9IFJTQV9uZXcoKTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYg KCFrZXkgfHwgIWJuKQorKwlyZXR1cm4gMDsKKysgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsK KysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0 dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAgICBpZiAoYmFkKQorKwkgICAgQk5fYWRkX3dv cmQoa2V5LT5uLCAxKTsKKysKKysgICAgcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKKysgICAgcGsu cGtleS5yc2EgPSBrZXk7CisrCisrICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBf c2hhMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1j dHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOwor KyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCisrCWdvdG8g ZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBO VUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5w dXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIg PSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAg ICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAoa2V5KQorKyAgCSAgICBSU0Ff ZnJlZShrZXkpOworKyAgICBpZiAociAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7 CisrICAgIH0KKysKKysvKiBTSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1 ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyov Cisrc3RhdGljIGludCBGSVBTX3NoYTFfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hh ciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5HVEhdID0KKysgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5 YSwgMHgzYSwgMHhlYywgMHgxYSwgMHgxZSwgMHg4ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwg MHgwYywgMHg4YiwgMHgxZSwgMHgyYywgMHhlOCwgMHhiMywgMHhjNSwgMHgxOCB9OworKyAgICB1 bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFy IG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAg IGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgp LCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkp KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hB MjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBr bm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBT X3NoYTI1Nl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZf RElHRVNUX0xFTkdUSF0gPQorKwl7MHhmNSwgMHg1MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAw eGVlLCAweDE3LCAweDliLCAweDkzLCAweGM5LCAweDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkx LAorKwkgMHg2LCAweGVjLCAweDhlLCAweDExLCAweDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFm LCAweDY0LCAweDIyLCAweGU2LCAweDUwLCAweDRmLCAweDQ3LCAweDU3fTsKKysgICAgdW5zaWdu ZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtT SEEyNTZfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBp ZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1Nigp LCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkp KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hB NTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBr bm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBT X3NoYTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJf RElHRVNUX0xFTkdUSF0gPQorKwl7MHg5OSwgMHhjOSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwg MHg3OCwgMHg4OCwgMHhkZiwgMHg4OCwgMHg1ZiwgMHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhj YSwKKysJIDB4MTYsIDB4MWYsIDB4M2QsIDB4ZjQsIDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4 MDMsIDB4OTksIDB4YjIsIDB4ZDAsIDB4ZTcsIDB4MGIsIDB4OTQsIDB4NGEsCisrCSAweDQ1LCAw eGQyLCAweDZjLCAweDRmLCAweDIwLCAweDA2LCAweGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdm LCAweDI0LCAweGIxLCAweGQ5LCAweDQwLCAweDIyLAorKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhj MiwgMHgyMiwgMHg5ZCwgMHgyNywgMHhmZSwgMHhiZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwg MHg0MiwgMHgxZCwgMHhhM307CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNo ZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKwor KyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yo c3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBp ZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAg ICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBr bm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBj b3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTFfdGVzdCgpCisrICAg IHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWdu ZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtF VlBfTUFYX01EX1NJWkVdID0KKysJezB4NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQs IDB4ZWQsIDB4ZGQsIDB4MGEsIDB4ZWEsIDB4ZWEsIDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4 NzAsCisrCSAweGIyLCAweGZiLCAweGVjLCAweGM2fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBv dXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAg RVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yo a2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAo bWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVy biAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEyMjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24g ZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVj dCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpCisrICAgIHsK KysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQg Y2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBf TUFYX01EX1NJWkVdID0KKysJezB4NzUsIDB4NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4 ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4YmUsIDB4MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUs CisrCSAweGU1LCAweDYyLCAweDQ5LCAweGI2LCAweDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0 LCAweDMzLCAweDNhLCAweDE5fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9N RF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vy cm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hhMjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYs c2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0 LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKysvKiBITUFDLVNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFs dWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysq LworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTI1Nl90ZXN0KCkKKysgICAgeworKyAgICB1bnNp Z25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10g PSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0la RV0gPQorKwl7MHhlOSwgMHgxNywgMHhjMSwgMHg3YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwg MHhkMiwgMHgzMCwgMHgzNiwgMHgwMiwgMHhmNSwgMHg3MiwgMHgzMywgMHg4NywKKysJIDB4OWYs IDB4YzYsIDB4NmUsIDB4N2IsIDB4N2UsIDB4YTgsIDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4 ZWUsIDB4NTEsIDB4ZmYsIDB4ZGEsIDB4MjQsIDB4ZjR9OworKworKyAgICB1bnNpZ25lZCBjaGFy IG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6 ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAg aWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBy ZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2ln bmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxb RVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0 LCAweGUzLCAweDMxLCAweGI2LCAweDYzLCAweDA4LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAw eDEwLAorKwkgMHhlMiwgMHhkZiwgMHhmOCwgMHhmZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwg MHg4MSwgMHgyYSwgMHgxYiwgMHhhYywgMHhiMCwgMHgwNywgMHgzOSwgMHgwOCwKKysJIDB4ZjMs IDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYsIDB4ZDYsIDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4 YzMsIDB4ZjMsIDB4YjgsIDB4OWIsIDB4ODgsIDB4MWN9OworKworKyAgICB1bnNpZ25lZCBjaGFy IG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6 ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAg aWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBy ZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2ln bmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxb RVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGNkLCAweDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJj LCAweDdmLCAweDlhLCAweDIzLCAweGFmLCAweGYzLCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAw eGU2LAorKwkgMHhmNywgMHhkMSwgMHg1MSwgMHg5NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwg MHhhNiwgMHgzYiwgMHhjMSwgMHhhZCwgMHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKKysJIDB4ZDcs IDB4NzksIDB4MGEsIDB4YTUsIDB4ZWEsIDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4 NTIsIDB4NmIsIDB4NjEsIDB4N2YsIDB4ZWIsIDB4OWMsCisrCSAweDQ3LCAweDg2LCAweDVkLCAw eDc0LCAweDJiLCAweDg4LCAweGRmLCAweGVlLCAweDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2 LCAweGQ5LCAweDJhLCAweDUzfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9N RF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vy cm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hhNTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYs c2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0 LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKysKKysvKiBESDogZ2VuZXJhdGUgc2hhcmVkIHBhcmFtZXRlcnMKKysqLworK3N0YXRp YyBpbnQgZGhfdGVzdCgpCisrICAgIHsKKysgICAgREggKmRoOworKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKKysgICAgZGggPSBGSVBTX2RoX25ldygpOworKyAgICBpZiAoIWRoKQorKwlyZXR1cm4g MDsKKysgICAgaWYgKCFESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxM KSkKKysJcmV0dXJuIDA7CisrICAgIEZJUFNfZGhfZnJlZShkaCk7CisrICAgIHJldHVybiAxOwor KyAgICB9CisrCisrLyogWmVyb2l6ZQorKyovCisrc3RhdGljIGludCBaZXJvaXplKCkKKysgICAg eworKyAgICBSU0EgKmtleTsKKysgICAgQklHTlVNICpibjsKKysgICAgdW5zaWduZWQgY2hhciB1 c2Vya2V5WzE2XSA9IAorKwl7IDB4NDgsIDB4NTAsIDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4 ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4N2YsIDB4ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4Njgg fTsKKysgICAgaW50IGksIG47CisrCisrICAgIGtleSA9IEZJUFNfcnNhX25ldygpOworKyAgICBi biA9IEJOX25ldygpOworKyAgICBpZiAoIWtleSB8fCAhYm4pCisrCXJldHVybiAwOworKyAgICBC Tl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5 LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgQk5fZnJlZShibik7CisrICAgIAor KyAgICBuID0gQk5fbnVtX2J5dGVzKGtleS0+ZCk7CisrICAgIHByaW50ZigiIEdlbmVyYXRlZCAl ZCBieXRlIFJTQSBwcml2YXRlIGtleVxuIiwgbik7CisrICAgIHByaW50ZigiXHRCTiBrZXkgYmVm b3JlIG92ZXJ3cml0aW5nOlxuIik7CisrICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsK KysgICAgQk5fcmFuZChrZXktPmQsbio4LC0xLDApOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGFm dGVyIG92ZXJ3cml0aW5nOlxuIik7CisrICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsK KysKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxu XHRcdCIpOworKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRm KCIlMDJ4IiwgdXNlcmtleVtpXSk7CisrICAgICAgICBwcmludGYoIlxuIik7CisrICAgIFJBTkRf Ynl0ZXModXNlcmtleSwgc2l6ZW9mIHVzZXJrZXkpOworKyAgICBwcmludGYoIlx0Y2hhciBidWZm ZXIga2V5IGFmdGVyIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwg c2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAg ICAgcHJpbnRmKCJcbiIpOworKworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBp bnQgRXJyb3I7CisrY29uc3QgY2hhciAqIEZhaWwoY29uc3QgY2hhciAqbXNnKQorKyAgICB7Cisr ICAgIGRvX3ByaW50X2Vycm9ycygpOworKyAgICBFcnJvcisrOworKyAgICByZXR1cm4gbXNnOyAK KysgICAgfQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrCisr ICAgIGludCBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4g PSAwOworKyAgICBpbnQgYmFkX3JzYSA9IDAsIGJhZF9kc2EgPSAwOworKyAgICBpbnQgZG9fcm5n X3N0aWNrID0gMDsKKysgICAgaW50IG5vX2V4aXQgPSAwOworKworKyAgICBwcmludGYoIlx0RklQ Uy1tb2RlIHRlc3QgYXBwbGljYXRpb25cblxuIik7CisrCisrICAgIC8qIExvYWQgZW50cm9weSBm cm9tIGV4dGVybmFsIGZpbGUsIGlmIGFueSAqLworKyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIs IDEwMjQpOworKworKyAgICBpZiAoYXJndlsxXSkgeworKyAgICAgICAgLyogQ29ycnVwdGVkIEtB VCB0ZXN0cyAqLworKyAgICAgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgImFlcyIpKSB7CisrICAg ICAgICAgICAgRklQU19jb3JydXB0X2FlcygpOworKyAgICAgICAgICAgIHByaW50ZigiQUVTIGVu Y3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNf Y29ycnVwdF9kZXMoKTsKKysgICAgICAgICAgICBwcmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24v ZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKGFyZ3ZbMV0sICJkc2EiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9k c2EoKTsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0 dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNhIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1 cHRfcnNhKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9 IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleSIpKSB7CisrICAgICAgICAgICAgcHJp bnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29y cnVwdGVkIGtleS4uLlxuIik7CisrCSAgICBiYWRfcnNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAx OworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgewor KwkgICAgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAg ICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRh dGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJkc2FrZXkiKSkgeworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXku Li5cbiIpOworKwkgICAgYmFkX2RzYSA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5Z2VuIikpIHsKKysJICAgIGRvX2Nv cnJ1cHRfZHNhX2tleWdlbiA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBw cmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAic2hhMSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKKysgICAg ICAgICAgICBwcmludGYoIlNIQS0xIGhhc2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysJ fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmciKSkgeworKwkgICAgRklQU19jb3JydXB0 X3JuZygpOworKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikpIHsKKysJ ICAgIGRvX3JuZ19zdGljayA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysJICAgIHByaW50Zigi Uk5HIHRlc3Qgd2l0aCBzdHVjayBjb250aW51b3VzIHRlc3QuLi5cbiIpOworKyAgICAgICAgfSBl bHNlIHsKKysgICAgICAgICAgICBwcmludGYoIkJhZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3Zb MV0pOworKyAgICAgICAgICAgIGV4aXQoMSk7CisrICAgICAgICB9CisrCWlmICghbm9fZXhpdCkg eworKyAgICAgICAgCWlmICghRklQU19tb2RlX3NldCgxKSkgeworKyAJCSAgICBkb19wcmludF9l cnJvcnMoKTsKKysgICAgICAgIAkgICAgcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVk XG4iKTsKKysJCSAgICBleGl0KDEpOworKwkJfQorKyAgICAgICAgCXByaW50ZigiUG93ZXItdXAg c2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIpOworKyAgICAgICAgCWV4aXQoMCk7CisrCX0KKysgICAg fQorKworKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAg Ki8KKysgICAgcHJpbnRmKCIxLiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24g dGVzdC4uLlxuIik7CisrICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCku Li4iKTsKKysgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJG QUlMRUQhXG4iKSApOworKworKyAgICAvKiBQb3dlci11cCBzZWxmIHRlc3QKKysgICAgKi8KKysg ICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIHByaW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVw IHNlbGYgdGVzdC4uLiIpOworKyAgICBpZiAoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9f cHJpbnRfZXJyb3JzKCk7CisrICAgICAgICBwcmludGYoRmFpbCgiRkFJTEVEIVxuIikpOworKwll eGl0KDEpOworKwl9CisrICAgIHByaW50Zigic3VjY2Vzc2Z1bFxuIik7CisrICAgIGlmIChkb19j b3JydXB0X2RzYV9rZXlnZW4pCisrICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4o KTsKKysgICAgaWYgKGRvX2NvcnJ1cHRfcnNhX2tleWdlbikKKysgICAgICAgICAgICBGSVBTX2Nv cnJ1cHRfcnNhX2tleWdlbigpOworKyAgICBpZiAoZG9fcm5nX3N0aWNrKQorKyAgICAgICAgICAg IEZJUFNfcm5nX3N0aWNrKCk7CisrCisrICAgIC8qIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24K KysgICAgKi8KKysgICAgcHJpbnRmKCIzLiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7 CisrICAgIHByaW50ZiggRklQU19hZXNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0 aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRp b24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfcnNh X3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwor KworKyAgICAvKiBERVMtQ0JDIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBw cmludGYoIjUuIERFUy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50 ZiggRklQU19kZXMzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRp b24KKysgICAgKi8KKysgICAgcHJpbnRmKCI2LiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25h dHVyZSB2YWxpZGF0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNh KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNI QS0xIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3YS4gU0hBLTEgaGFzaC4uLiIpOworKyAg ICBwcmludGYoIEZJUFNfc2hhMV90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlM RUQhXG4iKSApOworKworKyAgICAvKiBTSEEtMjU2IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRm KCI3Yi4gU0hBLTI1NiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hB LTUxMiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOwor KyAgICBwcmludGYoIEZJUFNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTEgaGFzaAorKyAgICAqLworKyAg ICBwcmludGYoIjdkLiBITUFDLVNIQS0xIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2ht YWNfc2hhMV90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwor KworKyAgICAvKiBITUFDLVNIQS0yMjQgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdlLiBI TUFDLVNIQS0yMjQgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVz dCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyog SE1BQy1TSEEtMjU2IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2 IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNj ZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTM4 NCBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7 CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTM4NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6 ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAorKyAg ICAqLworKyAgICBwcmludGYoIjdoLiBITUFDLVNIQS01MTIgaGFzaC4uLiIpOworKyAgICBwcmlu dGYoIEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKKysKKysgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0 aW9uCisrICAgICovCisrICAgIHByaW50ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMg b3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3Jp dGhtIChELUgpLi4uIik7CisrICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMg ZXhwZWN0ZWRcbiIKKysJICAgIDogRmFpbCgiZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysK KysgICAgLyogWmVyb2l6YXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRp b24uLi5cbiIpOworKyAgICBwcmludGYoIFplcm9pemUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhw ZWN0ZWRcbiIKKysJICAgIDogRmFpbCgiXHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKwor KyAgICBwcmludGYoIlxuQWxsIHRlc3RzIGNvbXBsZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJy b3IpOworKyAgICByZXR1cm4gRXJyb3IgPyAxIDogMDsKKysgICAgfQorKworKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZmlwcy9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBz L01ha2VmaWxlLmZpcHMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTI5MjMzNjMgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1 MjkyMzM2MyArMDIwMAorQEAgLTAsMCArMSwzNDAgQEAKKysjCisrIyBPcGVuU1NML2NyeXB0by9m aXBzL01ha2VmaWxlCisrIworKworK0RJUj0JZmlwcworK1RPUD0JLi4vLi4KKytDQz0JY2MKKytJ TkNMVURFUz0KKytDRkxBRz0tZworK01BS0VGSUxFPQlNYWtlZmlsZQorK0FSPQkJYXIgcgorKwor K0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKKysKKytHRU5FUkFMPU1ha2VmaWxlCisrVEVT VD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3JhbmR0ZXN0LmMKKytBUFBTPQorKworK1BST0dSQU09 IGZpcHNfc3RhbmRhbG9uZV9obWFjCisrRVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQorKworK0xJ Qj0kKFRPUCkvbGliY3J5cHRvLmEKKytMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rl c19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwK KysgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBz X2RzYV9zZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlw c19wb3N0LmMgZmlwc19kcmJnX2N0ci5jIGZpcHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMu YyBcCisrICAgIGZpcHNfZHJiZ19saWIuYyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxm dGVzdC5jIGZpcHNfcmFuZF9saWIuYyBcCisrICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNf ZW5jLmMgZmlwc19tZC5jCisrCisrTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNf c2VsZnRlc3QubyBmaXBzX2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCisr ICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8gZmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19k c2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8gXAorKyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNf cG9zdC5vIGZpcHNfZHJiZ19jdHIubyBmaXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8g XAorKyAgICBmaXBzX2RyYmdfbGliLm8gZmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRl c3QubyBmaXBzX3JhbmRfbGliLm8gXAorKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2Vu Yy5vIGZpcHNfbWQubworKworK0xJQkNSWVBUTz0tTC4uIC1sY3J5cHRvCisrCisrU1JDPSAkKExJ QlNSQykgZmlwc19zdGFuZGFsb25lX2htYWMuYworKworK0VYSEVBREVSPSBmaXBzLmggZmlwc19y YW5kLmgKKytIRUFERVI9CSQoRVhIRUFERVIpCisrCisrQUxMPSAgICAkKEdFTkVSQUwpICQoU1JD KSAkKEhFQURFUikKKysKKyt0b3A6CisrCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBT RElSUz0kKERJUikgc3ViX2FsbCkKKysKKythbGw6CWxpYiBleGUKKysKKytsaWI6CSQoTElCT0JK KQorKwkkKEFSKSAkKExJQikgJChMSUJPQkopCisrCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBO ZXZlciBtaW5kLgorKwlAdG91Y2ggbGliCisrCisrZXhlOgkkKEVYRSkKKysKKytmaWxlczoKKysJ JChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KKysK KytsaW5rczoKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUv b3BlbnNzbCAkKEVYSEVBREVSKQorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4v Li4vdGVzdCAkKFRFU1QpCisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9h cHBzICQoQVBQUykKKysKKytpbnN0YWxsOgorKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNo b3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCisrCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVS KSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKKysJZG8gIFwKKysJKGNwICQkaSAkKElOU1RB TExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAorKwljaG1vZCA2 NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsg XAorKwlkb25lOworKworK3RhZ3M6CisrCWN0YWdzICQoU1JDKQorKworK3Rlc3RzOgorKworK2xp bnQ6CisrCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgorKworK2RlcGVuZDoK KysJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2Vm aWxlLi4uCisrCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFH KSAtLSAkKFBST0dTKSAkKExJQlNSQykKKysKKytkY2xlYW46CisrCSQoUEVSTCkgLXBlICdpZiAo L14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJ TEUpID5NYWtlZmlsZS5uZXcKKysJbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCisrCisr Y2xlYW46CisrCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xk ICouYmFrIGZsdWZmCisrCisrJChFWEUpOiAkKFBST0dSQU0pLm8KKysJRklQU19TSEFfQVNNPSIi OyBmb3IgaSBpbiAkKFNIQTFfQVNNX09CSikgc2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRG SVBTX1NIQV9BU00gLi4vc2hhLyQkaSIgOyBkb25lOyBcCisrCSQoQ0MpIC1vICRAICQoQ0ZMQUdT KSAkKFBST0dSQU0pLm8gJCRGSVBTX1NIQV9BU00KKysKKysjIERPIE5PVCBERUxFVEUgVEhJUyBM SU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisrCisrZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytm aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzLmMg Zmlwc19sb2NsLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAor K2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19hZXNfc2VsZnRlc3QuYworK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlw c19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2Rlc19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Rlc19zZWxmdGVzdC5jCisrZmlwc19kcmJn X2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19k cmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2N0ci5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBz X2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJi Z19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmgKKytmaXBzX2RyYmdfY3RyLm86IGZpcHNfZHJiZ19jdHIuYyBmaXBzX3Jh bmRfbGNsLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBz X2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFu ZC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2hh c2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2hhc2gu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaGFzaC5jCisrZmlwc19kcmJn X2hhc2gubzogZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdf aG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19o bWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfaG1hYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19obWFjLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19k cmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2ht YWMuYworK2ZpcHNfZHJiZ19obWFjLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisr Zmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19k cmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJi Z19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYW5kLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX2RyYmdfbGliLm86IGZpcHNfZHJi Z19saWIuYyBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAor K2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2RyYmdfcmFu ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfcmFuZC5jCisrZmlwc19kcmJnX3JhbmQubzog Zmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfc2VsZnRlc3QuYworK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiBmaXBzX2RyYmdfc2VsZnRlc3QuaCBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisr Zmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2Zp cHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2Zp cHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlw c19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHNhX3Nl bGZ0ZXN0LmMKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiBmaXBzX2xvY2wuaAorK2ZpcHNfaG1hY19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o CisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytm aXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19o bWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Zp cHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2ht YWNfc2VsZnRlc3QuYworK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19wb3N0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK KytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisr Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCBmaXBzX2xvY2wuaCBmaXBzX3Bvc3QuYworK2ZpcHNfcmFuZC5vOiAuLi8uLi9l X29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oCisrZmlwc19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19yYW5kLm86IGZpcHNfbG9jbC5o IGZpcHNfcmFuZC5jCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o CisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Zp cHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBz X3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yYW5k X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvcmFuZC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19yYW5kX2xpYi5vOiBmaXBz X3JhbmRfbGliLmMKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX3JhbmRfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytm aXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfbG9jbC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IGZpcHNfcmFuZF9z ZWxmdGVzdC5jCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfcnNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfcnNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcnNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNhX3NlbGZ0ZXN0LmMKKytmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwc19yc2FfeDkzMWcubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yc2FfeDkzMWcubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV94OTMxZy5jCisrZmlwc19zaGFfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNf c2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19zaGFf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfc2hhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfc2hhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19zaGFfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCBmaXBzX3NoYV9zZWxmdGVzdC5jCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vaG1hYy9obWFjLmMKKy0t LSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0 OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9obWFjL2htYWMu YwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MjkyMzM2MyArMDIwMAorQEAgLTgxLDExICs4MSw2IEBA IGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KKyAJCQlFVlBlcnIoRVZQ X0ZfSE1BQ19JTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisgCQkJcmV0dXJuIDA7 CisgCQkJfQorLQkJLyogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBG SVBTX2NtYWNfaW5pdCwKKy0JCSAqIHZpYSBGSVBTX2htYWNfaW5pdF9leCgpLgorLQkJICovCist CQlpZiAoIWltcGwgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJCXJldHVybiBGSVBTX2htYWNf aW5pdF9leChjdHgsIGtleSwgbGVuLCBtZCwgTlVMTCk7CisgCQl9CisgI2VuZGlmCisgCitAQCAt OTksNiArOTQsMTMgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bwor IAorIAlpZiAoa2V5ICE9IE5VTEwpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYg KEZJUFNfbW9kZSgpICYmICEobWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKKysJCSYmICgh KGN0eC0+bWRfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJ IHx8ICEoY3R4LT5pX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykK KysJCSB8fCAhKGN0eC0+b19jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKSkKKysJCQlnb3RvIGVycjsKKysjZW5kaWYKKyAJCXJlc2V0PTE7CisgCQlqPUVWUF9NRF9i bG9ja19zaXplKG1kKTsKKyAJCU9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5r ZXkpKTsKK0BAIC0xNTUsMTAgKzE1Nyw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwg Y29uc3Qgdm9pZAorIAorIGludCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNf aG1hY191cGRhdGUoY3R4LCBkYXRhLCBsZW4pOworLSNlbmRpZgorIAlyZXR1cm4gRVZQX0RpZ2Vz dFVwZGF0ZSgmY3R4LT5tZF9jdHgsZGF0YSxsZW4pOworIAl9CisgCitAQCAtMTY2LDEwICsxNjQs NiBAQCBpbnQgSE1BQ19GaW5hbChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjCisgCXsKKyAJdW5z aWduZWQgaW50IGk7CisgCXVuc2lnbmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07CistI2lm ZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5l KQorLQkJcmV0dXJuIEZJUFNfaG1hY19maW5hbChjdHgsIG1kLCBsZW4pOworLSNlbmRpZgorIAor IAlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LT5tZF9jdHgsYnVmLCZpKSkKKyAJCWdvdG8g ZXJyOworQEAgLTIwOSwxMyArMjAzLDYgQEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRj dHgsIEhNQUNfQworIAorIHZvaWQgSE1BQ19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQorIAl7 CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHgu ZW5naW5lKQorLQkJeworLQkJRklQU19obWFjX2N0eF9jbGVhbnVwKGN0eCk7CistCQlyZXR1cm47 CistCQl9CistI2VuZGlmCisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7CisgCUVW UF9NRF9DVFhfY2xlYW51cCgmY3R4LT5vX2N0eCk7CisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4 LT5tZF9jdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL21kYzIvbWRjMmRnc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5j CTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUyOTIzMzYzICswMjAwCitAQCAtNzYsNyArNzYsNyBAQAor IAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQorIAorIHN0YXRp YyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNp emVfdCBsZW4pOworLWZpcHNfbWRfaW5pdChNREMyKQorK25vbmZpcHNfbWRfaW5pdChNREMyKQor IAl7CisgCWMtPm51bT0wOworIAljLT5wYWRfdHlwZT0xOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL21kMi9t ZDJfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJ MjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9j cnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTI5MjMzNjMgKzAyMDAK K0BAIC02Miw2ICs2MiwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgorICNpbmNsdWRl IDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAKKyBjb25zdCBjaGFyIE1EMl92ZXJzaW9uW109 Ik1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTExNiw3ICsxMjEsNyBAQCBjb25z dCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQorIAkJcmV0dXJuKCJtZDIoaW50KSIpOworIAl9Cisg CistZmlwc19tZF9pbml0KE1EMikKKytub25maXBzX21kX2luaXQoTUQyKQorIAl7CisgCWMtPm51 bT0wOworIAltZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL21kNC9tZDRfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL21kNC9tZDRfZGdz dC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTI5MjMz NjMgKzAyMDAKK0BAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0 IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRj ZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAor LWZpcHNfbWRfaW5pdChNRDQpCisrbm9uZmlwc19tZF9pbml0KE1ENCkKKyAJeworIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1JTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5m aXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTUzOTIzMzg2ICsw MjAwCitAQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BF TlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAor ICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBz X21kX2luaXQoTUQ1KQorK25vbmZpcHNfbWRfaW5pdChNRDUpCisgCXsKKyAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vb19maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vb19maXBzLmMKKy0t LSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vb19maXBzLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIw LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9vX2ZpcHMuYwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjU1MzkyMzM4NiArMDIwMAorQEAgLTc5LDYgKzc5LDggQEAgaW50IEZJ UFNfbW9kZV9zZXQoaW50IHIpCisgI2lmbmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNTCisgI2RlZmlu ZSBGSVBTX0FVVEhfVVNFUl9QQVNTCSJEZWZhdWx0IEZJUFMgQ3J5cHRvIFVzZXIgUGFzc3dvcmQi CisgI2VuZGlmCisrCWlmIChyICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgLyogY2FuIGJlIGltcGxp Y2l0bHkgaW5pdGlhbGl6ZWQgYnkgT1BFTlNTTF9pbml0KCkgKi8KKysJCXJldHVybiAxOworIAlp ZiAoIUZJUFNfbW9kdWxlX21vZGVfc2V0KHIsIEZJUFNfQVVUSF9VU0VSX1BBU1MpKQorIAkJcmV0 dXJuIDA7CisgCWlmIChyKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL29faW5pdC5j LmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL29faW5pdC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vb19pbml0LmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41 NTM5MjMzODYgKzAyMDAKK0BAIC01NSwyOCArNTUsNjggQEAKKyAjaW5jbHVkZSA8ZV9vcy5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRs Lmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKworKyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMv Y3J5cHRvL2ZpcHNfZW5hYmxlZCIKKysKKytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lk KQorKwl7CisrCWNoYXIgYnVmWzJdID0gIjAiOworKwlpbnQgZmQ7CisrCQorKwlpZiAoZ2V0ZW52 KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCisrCQl7CisrCQlidWZbMF0gPSAn MSc7CisrCQl9CisrCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBP X1JET05MWSkpID49IDApCisrCQl7CisrCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVm KSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKysJCWNsb3NlKGZkKTsKKysJCX0KKysJLyogRmFp bHVyZSByZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKKysJ ICogc3dpdGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGlu Z3MKKysJICogb3RoZXJ3aXNlLiAKKysJICovCisrCQorKwlpZiAoYnVmWzBdID09ICcxJykKKysJ CXsKKysJCUZJUFNfbW9kZV9zZXQoMSk7CisrCQl9CisrCX0KKyAjZW5kaWYKKyAKKyAvKiBQZXJm b3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgorICAq IEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKKyAgKi8KKyAKKy12b2lkIE9QRU5T U0xfaW5pdCh2b2lkKQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKyAJeworIAlz dGF0aWMgaW50IGRvbmUgPSAwOworIAlpZiAoZG9uZSkKKyAJCXJldHVybjsKKyAJZG9uZSA9IDE7 CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQ VE9fbG9jaywgQ1JZUFRPX2FkZF9sb2NrKTsKKy0JRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVS Ul9wdXRfZXJyb3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpOworLQlGSVBTX3NldF9tYWxsb2NfY2Fs bGJhY2tzKENSWVBUT19tYWxsb2MsIENSWVBUT19mcmVlKTsKKyAJUkFORF9pbml0X2ZpcHMoKTsK KysJaW5pdF9maXBzX21vZGUoKTsKKysJaWYgKCFGSVBTX21vZGUoKSkKKysJCXsKKysJCS8qIENs ZWFuIHVwIHByZW1hdHVyZWx5IHNldCBkZWZhdWx0IHJhbmQgbWV0aG9kICovCisrCQlSQU5EX3Nl dF9yYW5kX21ldGhvZChOVUxMKTsKKysJCX0KKyAjZW5kaWYKKyAjaWYgMAorIAlmcHJpbnRmKHN0 ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIpOworICNlbmRpZgorIAl9CisgCisrdm9pZCBP UEVOU1NMX2luaXQodm9pZCkKKysJeworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwl9Citk aWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5z c2wtMS4wLjFnL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMTQtMDUt MDYgMTY6Mjk6NTAuNTUzOTIzMzg2ICswMjAwCitAQCAtMSw1ICsxLDIwIEBACisgLyogY3J5cHRv L29wZW5zc2xjb25mLmguaW4gKi8KKyAKKysjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5E CisrCisrLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNp dGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCisrICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0 byBtYWtlZGVwZW5kLgorKyAqCisrICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFs bHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCisrICogaW5zdGVh ZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGgg ZGlzYWJsZWQgYWxnb3JpdGhtcy5dCisrICovCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysj ZGVmaW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgorKworKyNlbmRpZgorKworIC8qIEdlbmVyYXRl IDgwMzg2IGNvZGU/ICovCisgI3VuZGVmIEkzODZfT05MWQorIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWcvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZp cHMJMjAxNC0wNC0wNyAxODo1NDoyMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTM5MjMzODYgKzAy MDAKK0BAIC0zOTUsNyArMzk1LDEwIEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5z aWduZWQgY2gKKyAJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsKKyAJY3J5cHRv X2xvY2tfcmFuZCA9IDE7CisgCistCWlmICghaW5pdGlhbGl6ZWQpCisrCS8qIGFsd2F5cyBwb2xs IGZvciBleHRlcm5hbCBlbnRyb3B5IGluIEZJUFMgbW9kZSwgZHJiZyBwcm92aWRlcyB0aGUgCisr CSAqIGV4cGFuc2lvbgorKwkgKi8KKysJaWYgKCFpbml0aWFsaXplZCB8fCBGSVBTX21vZHVsZV9t b2RlKCkpIAorIAkJeworIAkJUkFORF9wb2xsKCk7CisgCQlpbml0aWFsaXplZCA9IDE7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vcmFuZC9yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcmFuZC9yYW5k LmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjMwMzkxNzYwNiArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9yYW5kL3JhbmQuaAkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1MzkyMzM4NiAr MDIwMAorQEAgLTEzMywxNiArMTMzLDM0IEBAIHZvaWQgRVJSX2xvYWRfUkFORF9zdHJpbmdzKHZv aWQpOworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMuICovCisgCisgLyog RnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVU SE9ECQkJIDEwOAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAzCisrI2RlZmluZSBS QU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRf U0VUX0RUCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RUCQkJCSAxMDYK KysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJCQkgMTA0CisrI2RlZmluZSBSQU5EX0ZfRklQ U19TRVRfUFJOR19TRUVECQkJIDEwNworKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9E RQkJCSAxMDUKKyAjZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKKy0j ZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfUkFO RF9JTklUX0ZJUFMJCQkJIDEwOQorICNkZWZpbmUgUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTCQkJ IDEwMAorIAorIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKy0jZGVmaW5lIFJBTkRfUl9EVUFMX0VDX0RS QkdfRElTQUJMRUQJCQkgMTA0CistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RS QkcJCQkgMTAyCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEw MworLSNkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMDEKKysjZGVm aW5lIFJBTkRfUl9EVUFMX0VDX0RSQkdfRElTQUJMRUQJCQkgMTE0CisrI2RlZmluZSBSQU5EX1Jf RVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTEyCisrI2RlZmluZSBSQU5EX1JfRVJST1JfSU5T VEFOVElBVElOR19EUkJHCQkJIDExMworKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhPRAkJ CQkgMTA1CisrI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2CisrI2RlZmlu ZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDExMQorKyNkZWZpbmUgUkFORF9S X05PX0tFWV9TRVQJCQkJIDEwNworKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09f TVVDSAkJCSAxMDEKKysjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKKysjZGVmaW5l IFJBTkRfUl9QUk5HX0tFWUVECQkJCSAxMDkKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtF WUVECQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKKyAj ZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAorKyNkZWZpbmUgUkFORF9SX1BS TkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkJCSAxMTAKKysjZGVmaW5lIFJBTkRfUl9QUk5HX1NU VUNLCQkJCSAxMDQKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL3JpcGVtZC9ybWRfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JpcGVtZC9y bWRfZGdzdC5jLmZpcHMJMjAxNC0wMy0xNyAxNzoxNDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxNC0wNS0wNiAxNjoyOTo1 MC41NTM5MjMzODYgKzAyMDAKK0BAIC03MCw3ICs3MCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3Zl cnNpb25bXT0iUklQRS1NRDE2MCIKKyAgICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2 MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7CisgIyAgZW5kaWYKKyAKKy1m aXBzX21kX2luaXQoUklQRU1EMTYwKQorK25vbmZpcHNfbWRfaW5pdChSSVBFTUQxNjApCisgCXsK KyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9UklQRU1EMTYwX0E7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcyBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3Jz YV9jcnB0LmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2NycHQuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1 NDkyMzQwOSArMDIwMAorQEAgLTkwLDEwICs5MCw5IEBAIGludCBSU0FfcHJpdmF0ZV9lbmNyeXB0 KGludCBmbGVuLCBjb25zdAorIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJeworICNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFn cyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFH X05PTl9GSVBTX0FMTE9XKSkKKysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJeworLQkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRF X0VOQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKwkJUlNBZXJyKFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01P REUpOworIAkJcmV0dXJuIC0xOworIAkJfQorICNlbmRpZgorQEAgLTExOCwxMCArMTE3LDkgQEAg aW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdQorIAkgICAgIFJTQSAqcnNh LCBpbnQgcGFkZGluZykKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9k ZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJCSYm ICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJaWYoRklQU19tb2Rl KCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJeworLQkJ UlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RCk7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v cnNhL3JzYV9lYXkuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxNC0wNS0wNiAxNjoyOTo1 MC41NTQ5MjM0MDkgKzAyMDAKK0BAIC0xMTQsNiArMTE0LDEwIEBACisgI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyAjaWZuZGVmIFJTQV9OVUxM CisgCitAQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlf bWV0aD17CisgCUJOX21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNob3VsZCBub3Qg dXNlIE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLworIAlSU0FfZWF5X2luaXQsCisgCVJTQV9lYXlf ZmluaXNoLAorLQkwLCAvKiBmbGFncyAqLworKwlSU0FfRkxBR19GSVBTX01FVEhPRCwgLyogZmxh Z3MgKi8KKyAJTlVMTCwKKyAJMCwgLyogcnNhX3NpZ24gKi8KKyAJMCwgLyogcnNhX3ZlcmlmeSAq LworQEAgLTE1OCw2ICsxNjIsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0 KGludCBmbAorIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9F QVlfUFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3Rv IGVycjsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf RU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xf UlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTM2MSw2ICszODMsMjQg QEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgorIAlCSUdOVU0gKnVu YmxpbmQgPSBOVUxMOworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlyZXR1cm4gLTE7Cisr CQkJfQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQor KwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBU LCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9 CisrI2VuZGlmCisrCisgCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7 CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7CitAQCAtNTA0 LDYgKzU0NCwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCisg CUJJR05VTSAqdW5ibGluZCA9IE5VTEw7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7 CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0Ff RUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCXJl dHVybiAtMTsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklW QVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOwor KwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVM TCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0 eCk7CitAQCAtNjM5LDYgKzY5NywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5 cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1OVUxM OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJ aWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNB X0VBWV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdv dG8gZXJyOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJ Q19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJ CQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNT TF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BV QkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtODk3LDYgKzk3Myw5 IEBAIGVycjoKKyAKKyBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKKyAJeworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAly c2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsK KyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3Jz YV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2Vyci5jCistLS0gb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIw LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2Vyci5j CTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU0OTIzNDA5ICswMjAwCitAQCAtMTIxLDYgKzEyMSw4IEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9wdWJsaWNfZW5jcnlwdCJ9LAorIHtFUlJfRlVO QyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhS U0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCisre0VSUl9G VU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhv ZCJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9 LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAorIHtFUlJfRlVOQyhS U0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NU UklORyJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0x LjAuMWcvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNh L3JzYV9nZW4uYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41 NTQ5MjM0MDkgKzAyMDAKK0BAIC02OSw2ICs2OSw3OCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrCisr c3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfY29y cnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7 CisrCX0KKysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisrCXsKKysJY29uc3QgdW5z aWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCXVuc2lnbmVk IGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50IGxlbiwgcmV0ID0gMDsK KysJRVZQX1BLRVkgKnBrOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQor KwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOworKworKwkvKiBQ ZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCisrCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGEx KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9N RF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCS8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNl IGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrCWN0YnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX3NpemUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQlnb3RvIGVycjsKKysKKysJ bGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNh LCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gPD0gMCkKKysJCWdvdG8gZXJyOworKwkv KiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrCWlmICgobGVu ID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCisrCQln b3RvIGVycjsKKysJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysKKysJ aWYgKCFwdGJ1ZikKKysJCWdvdG8gZXJyOworKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxl biwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiAhPSAo c2l6ZW9mKHRicykgLSAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVtY21wKHB0YnVmLCB0YnMs IGxlbikpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJaWYgKCFwdGJ1ZikKKysJ CWdvdG8gZXJyOworKwkKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3Nl dF9zZWxmdGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxGSVBT X1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAoY3RidWYpCisrCQlPUEVO U1NMX2ZyZWUoY3RidWYpOworKwlpZiAocHRidWYpCisrCQlPUEVOU1NMX2ZyZWUocHRidWYpOwor KwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQor ICNlbmRpZgorIAorIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQg Yml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOworQEAgLTgxLDcgKzE1Myw3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIGludCBSU0FfZ2VuZXJh dGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAq Y2IpCisgCXsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhKHJz YS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysJaWYgKEZJUFNfbW9kdWxl X21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKyAJ CQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CisgCQlS U0FlcnIoUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RCk7CitAQCAtOTAsMTAgKzE2Miw2IEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNh LCBpbnQgYmkKKyAjZW5kaWYKKyAJaWYocnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKQorIAkJcmV0dXJu IHJzYS0+bWV0aC0+cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBTX3JzYV9nZW5l cmF0ZV9rZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2VuZGlmCisgCXJldHVybiBy c2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CisgCX0KKyAKK0BAIC0x MDUsNiArMTczLDIzIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAor IAlpbnQgYml0c3AsYml0c3Esb2s9IC0xLG49MDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgCXsKKysJCSAgICBGSVBTZXJyKEZJUFNf Rl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAg IAlyZXR1cm4gMDsKKysJICAgIAl9CisrCisrCQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykKKysJCSAgICB7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JV SUxUSU5fS0VZR0VOLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJCSAgICByZXR1cm4gMDsKKysJ CSAgICB9CisrCQl9CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHgg PT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworQEAgLTIxNiw2ICszMDEs MTcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgCQlwID0gcnNh LT5wOworIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3Rv IGVycjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkp CisrCQl7CisrCQlpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKKysJCQlCTl9hZGRfd29yZChy c2EtPm4sIDEpOworKworKwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCQkgICAgZ290byBl cnI7CisrCQl9CisrI2VuZGlmCisrCisgCW9rPTE7CisgZXJyOgorIAlpZiAob2sgPT0gLTEpCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAu MWcvY3J5cHRvL3JzYS9yc2EuaAorLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhLmgu ZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjQzNjkyMDY4MSArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9yc2EvcnNhLmgJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTQ5MjM0MDkgKzAyMDAK K0BAIC0xNjQsNiArMTY0LDggQEAgc3RydWN0IHJzYV9zdAorICMgZGVmaW5lIE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMJMTYzODQKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFM TF9NT0RVTFVTX0JJVFMKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJ MzA3MgorICNlbmRpZgorQEAgLTI5MCw2ICsyOTIsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tl eShpbnQgYml0cywgdW5zaWduZQorIAorIC8qIE5ldyB2ZXJzaW9uICovCisgaW50CVJTQV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7 CisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpw MiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEsIGNv bnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fR0VOQ0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBp bnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworIAorIGludAlSU0FfY2hl Y2tfa2V5KGNvbnN0IFJTQSAqKTsKKyAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwor QEAgLTQ4Nyw3ICs0OTQsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNk ZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX05PTkUJCQkgMTA3CisgI2RlZmluZSBSU0FfRl9S U0FfUEFERElOR19BRERfUEtDUzFfT0FFUAkJIDEyMQorICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJ TkdfQUREX1BLQ1MxX1BTUwkJCSAxMjUKKy0jZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9Q S0NTMV9QU1NfTUdGMQkJIDE0OAorKyNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1Mx X1BTU19NR0YxCQkgMTU4CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQ RV8xCQkgMTA4CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8yCQkg MTA5CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NMVjIzCQkJIDExMAorQEAgLTUw MCwyMCArNTA3LDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmlu ZSBSU0FfRl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAorICNkZWZpbmUgUlNBX0ZfUlNB X1BSSU5UCQkJCQkgMTE1CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJIDExNgorLSNk ZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAKKy0jZGVmaW5lIFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQJCQkgMTUxCisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNS WVBUCQkJIDE1NworKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNDgKKyAj ZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3CisgI2RlZmluZSBSU0FfRl9SU0Ff UFJJVl9FTkNPREUJCQkJIDEzOAorLSNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJ IDE1MgorKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQorICNkZWZpbmUg UlNBX0ZfUlNBX1BVQkxJQ19FTkNSWVBUCQkJIDE1MworICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9E RUNPREUJCQkJIDEzOQorICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgor KyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKKysjZGVmaW5lIFJT QV9GX1JTQV9TRVRfTUVUSE9ECQkJCSAxNTEKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkg MTE3CisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAorICNk ZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5CisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZ X0FTTjFfT0NURVRfU1RSSU5HCQkgMTIwCisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1Mx X1BTUwkJCSAxMjYKKy0jZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkg MTQ5CisrI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE1MgorIAor IC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyAjZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSAkJ CSAxMDAKK0BAIC01NDIsMjEgKzU1MSwyMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZv aWQpOworICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJCSAxNTYKKyAjZGVmaW5lIFJT QV9SX0lOVkFMSURfUEFERElORwkJCQkgMTM4CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJ TkdfTU9ERQkJCSAxNDEKKy0jZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkg MTQ5CisrI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE1NworICNkZWZp bmUgUlNBX1JfSU5WQUxJRF9QU1NfU0FMVExFTgkJCSAxNDYKKy0jZGVmaW5lIFJTQV9SX0lOVkFM SURfU0FMVF9MRU5HVEgJCQkgMTUwCisrI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RI CQkJIDE1OAorICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVSCQkJCSAxMzkKKyAjZGVmaW5l IFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCisgI2RlZmluZSBSU0FfUl9JUU1QX05P VF9JTlZFUlNFX09GX1EJCQkgMTI2CisgI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJ CQkgMTIwCisgI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0CisgI2RlZmlu ZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1CistI2RlZmluZSBSU0FfUl9OT05fRklQ U19SU0FfTUVUSE9ECQkJIDE1NworKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJ CSAxNDkKKysjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTQ5CisgI2RlZmluZSBS U0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCisgI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9S RV9CTE9DS19NSVNTSU5HCQkJIDExMworICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9Q X1EJCQkgMTI3CisgI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQorLSNk ZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTU4CisrI2Rl ZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKKyAjZGVm aW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAor ICNkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0CisgI2RlZmluZSBSU0Ff Ul9QX05PVF9QUklNRQkJCQkgMTI4CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNh L3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2xpYi5jCistLS0g b3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0 OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2xp Yi5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU0OTIzNDA5ICswMjAwCitAQCAtODQsNiArODQsMTMg QEAgUlNBICpSU0FfbmV3KHZvaWQpCisgCisgdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNv bnN0IFJTQV9NRVRIT0QgKm1ldGgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChG SVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJ eworKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBT X01FVEhPRCk7CisrCQlyZXR1cm47CisrCQl9CisrI2VuZGlmCisgCWRlZmF1bHRfUlNBX21ldGgg PSBtZXRoOworIAl9CisgCitAQCAtOTEsMTggKzk4LDExIEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJT QV9nZXRfZGVmYXVsdF9tZXRob2QKKyAJeworIAlpZiAoZGVmYXVsdF9SU0FfbWV0aCA9PSBOVUxM KQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQly ZXR1cm4gRklQU19yc2FfcGtjczFfc3NsZWF5KCk7CistCQllbHNlCistCQkJcmV0dXJuIFJTQV9Q S0NTMV9TU0xlYXkoKTsKKy0jZWxzZQorICNpZmRlZiBSU0FfTlVMTAorIAkJZGVmYXVsdF9SU0Ff bWV0aD1SU0FfbnVsbF9tZXRob2QoKTsKKyAjZWxzZQorIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0Ff UEtDUzFfU1NMZWF5KCk7CisgI2VuZGlmCistI2VuZGlmCisgCQl9CisgCisgCXJldHVybiBkZWZh dWx0X1JTQV9tZXRoOworQEAgLTExOCw2ICsxMTgsMTMgQEAgaW50IFJTQV9zZXRfbWV0aG9kKFJT QSAqcnNhLCBjb25zdCBSU0FfTQorIAkvKiBOQjogVGhlIGNhbGxlciBpcyBzcGVjaWZpY2FsbHkg c2V0dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8gdXMKKyAJICogdG8gZGVhbCB3aXRo IHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLworIAljb25zdCBSU0FfTUVUSE9EICptdG1w OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+Zmxh Z3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NF VF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysj ZW5kaWYKKyAJbXRtcCA9IHJzYS0+bWV0aDsKKyAJaWYgKG10bXAtPmZpbmlzaCkgbXRtcC0+Zmlu aXNoKHJzYSk7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorQEAgLTE3MCw2ICsxNzcsMTgg QEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAJCQl9CisgCQl9CisgI2Vu ZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1l dGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9G X1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKyNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKKysJCWlmIChyZXQtPmVuZ2luZSkKKysJCQlFTkdJTkVfZmluaXNoKHJldC0+ ZW5naW5lKTsKKysjZW5kaWYKKysJCU9QRU5TU0xfZnJlZShyZXQpOworKwkJcmV0dXJuIE5VTEw7 CisrCQl9CisrI2VuZGlmCisgCisgCXJldC0+cGFkPTA7CisgCXJldC0+dmVyc2lvbj0wOworQEAg LTE4OCw3ICsyMDcsNyBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAly ZXQtPmJsaW5kaW5nPU5VTEw7CisgCXJldC0+bXRfYmxpbmRpbmc9TlVMTDsKKyAJcmV0LT5iaWdu dW1fZGF0YT1OVUxMOworLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1c7CisrCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFnczsKKyAJaWYgKCFD UllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0LCAmcmV0LT5leF9kYXRh KSkKKyAJCXsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3Jz YS9yc2FfcG1ldGguYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMu ZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMJMjAxNC0wNS0wNiAxNjoyOTo1MC41NTU5MjM0MzIg KzAyMDAKK0BAIC0yMDYsMjIgKzIwNiw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2Ffc2lnbihFVlBf UEtFWV9DVFggKmMKKyAJCQkJCVJTQV9SX0lOVkFMSURfRElHRVNUX0xFTkdUSCk7CisgCQkJcmV0 dXJuIC0xOworIAkJCX0KKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAocmV0ID4gMCkKKy0J CQl7CistCQkJdW5zaWduZWQgaW50IHNsZW47CistCQkJcmV0ID0gRklQU19yc2Ffc2lnbl9kaWdl c3QocnNhLCB0YnMsIHRic2xlbiwgcmN0eC0+bWQsCistCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAor LQkJCQkJCQlyY3R4LT5zYWx0bGVuLAorLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCistCQkJCQkJCXNp ZywgJnNsZW4pOworLQkJCWlmIChyZXQgPiAwKQorLQkJCQkqc2lnbGVuID0gc2xlbjsKKy0JCQll bHNlCistCQkJCSpzaWdsZW4gPSAwOworLQkJCXJldHVybiByZXQ7CistCQkJfQorLSNlbmRpZgor IAorIAkJaWYgKEVWUF9NRF90eXBlKHJjdHgtPm1kKSA9PSBOSURfbWRjMikKKyAJCQl7CitAQCAt MzU0LDE5ICszMzgsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFgK KyAjZW5kaWYKKyAJaWYgKHJjdHgtPm1kKQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0J CWlmIChydiA+IDApCistCQkJeworLQkJCXJldHVybiBGSVBTX3JzYV92ZXJpZnlfZGlnZXN0KHJz YSwKKy0JCQkJCQkJdGJzLCB0YnNsZW4sCistCQkJCQkJCXJjdHgtPm1kLAorLQkJCQkJCQlyY3R4 LT5wYWRfbW9kZSwKKy0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKKy0JCQkJCQkJcmN0eC0+bWdmMW1k LAorLQkJCQkJCQlzaWcsIHNpZ2xlbik7CistCQkJCQkJCQorLQkJCX0KKy0jZW5kaWYKKyAJCWlm IChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKKyAJCQlyZXR1cm4gUlNBX3Zl cmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAorIAkJCQkJc2lnLCBzaWds ZW4sIHJzYSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9zaWduLmMu ZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9zaWduLmMKKy0tLSBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDE0 LTA1LTA2IDE2OjI5OjUwLjU1NTkyMzQzMiArMDIwMAorQEAgLTEzOCw3ICsxMzgsOCBAQCBpbnQg UlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCisgCQlpMmRfWDUwOV9TSUcoJnNp ZywmcCk7CisgCQlzPXRtcHM7CisgCX0KKy0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdy ZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRo b2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLworKwlpID0gcnNhLT5tZXRoLT5y c2FfcHJpdl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0Ff UEtDUzFfUEFERElORykgOiAwOworIAlpZiAoaSA8PSAwKQorIAkJcmV0PTA7CisgCWVsc2UKK0BA IC0xNzgsOCArMTc5LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5z aQorIAorIAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBybSkKKyAJCXsKKy0JCWkgPSBS U0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCistCQkJCQlzaWdidWYscm0scnNhLFJTQV9Q S0NTMV9QQURESU5HKTsKKysJCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRo LT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbiwKKysJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1Mx X1BBRERJTkcpIDogMDsKKyAJCWlmIChpIDw9IDApCisgCQkJcmV0dXJuIDA7CisgCQkqcHJtX2xl biA9IGk7CitAQCAtMTk2LDcgKzE5Nyw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUs IGNvbnN0IHVuc2kKKyAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJ RF9NRVNTQUdFX0xFTkdUSCk7CisgCQkJZ290byBlcnI7CisgCX0KKy0JaT1SU0FfcHVibGljX2Rl Y3J5cHQoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyog TkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2lu ZyAqLworKwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9k ZWMoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCisg CWlmIChpIDw9IDApIGdvdG8gZXJyOworIAkvKiBPZGRiYWxsIE1EQzIgY2FzZTogc2lnbmF0dXJl IGNhbiBiZSBPQ1RFVCBTVFJJTkcuCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hh L3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3NoYS9zaGEuaAorLS0tIG9wZW5zc2wt MS4wLjFnL2NyeXB0by9zaGEvc2hhLmguZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjIyNDkxNTc4 MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9zaGEvc2hhLmgJMjAxNC0wNS0wNiAx NjoyOTo1MC41NTU5MjM0MzIgKzAyMDAKK0BAIC0xMTYsOSArMTE2LDYgQEAgdW5zaWduZWQgY2hh ciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNoYXIgKgorIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RY ICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5T U0xfTk9fU0hBMQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEExX0luaXQo U0hBX0NUWCAqYyk7CistI2VuZGlmCisgaW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKKyBpbnQg U0hBMV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Cisg aW50IFNIQTFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOworQEAgLTE0MSwx MCArMTM4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBMjU2c3RhdGVfc3QKKyAJfSBTSEEyNTZfQ1RY OworIAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCist aW50IHByaXZhdGVfU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7CistaW50IHByaXZhdGVfU0hB MjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7CistI2VuZGlmCisgaW50IFNIQTIyNF9Jbml0KFNIQTI1 Nl9DVFggKmMpOworIGludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQg KmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEEyMjRfRmluYWwodW5zaWduZWQgY2hhciAqbWQs IFNIQTI1Nl9DVFggKmMpOworQEAgLTE5MiwxMCArMTg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hB NTEyc3RhdGVfc3QKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCistI2lm ZGVmIE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMp OworLWludCBwcml2YXRlX1NIQTUxMl9Jbml0KFNIQTUxMl9DVFggKmMpOworLSNlbmRpZgorIGlu dCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKKyBpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJf Q1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBMzg0X0ZpbmFs KHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9zaGEv c2hhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBz CTIwMTQtMDUtMDYgMTY6Mjk6NTAuMjI2OTE1ODI2ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU1OTIzNDMyICswMjAw CitAQCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9D VFggKmMsCisgI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCisgCisgI2lmZGVmIFNI QV8wCistZmlwc19tZF9pbml0KFNIQSkKKytub25maXBzX21kX2luaXQoU0hBKQorICNlbHNlCisg Zmlwc19tZF9pbml0X2N0eChTSEExLCBTSEEpCisgI2VuZGlmCisgCXsKKysjaWYgZGVmaW5lZChT SEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmgwPUlOSVRfREFUQV9o MDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L3NoYS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9zaGEvc2hhMjU2LmMKKy0t LSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMJMjAxNC0wMy0xNyAxNzox NDoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3NoYTI1 Ni5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU1OTIzNDMyICswMjAwCitAQCAtMTIsMTIgKzEyLDE5 IEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv c2hhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorIAorIGNvbnN0IGNo YXIgU0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAor IGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6 ZW9mKCpjKSk7CisgCWMtPmhbMF09MHhjMTA1OWVkOFVMOwljLT5oWzFdPTB4MzY3Y2Q1MDdVTDsK KyAJYy0+aFsyXT0weDMwNzBkZDE3VUw7CWMtPmhbM109MHhmNzBlNTkzOVVMOworQEAgLTI5LDYg KzM2LDkgQEAgZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKKyAKKyBmaXBzX21kX2lu aXQoU0hBMjU2KQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5oWzBdPTB4 NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1VUw7CisgCWMtPmhbMl09MHgzYzZlZjM3MlVM OwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9z aGEvc2hhNTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vc2hhL3NoYTUxMi5jCistLS0g b3BlbnNzbC0xLjAuMWcvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6 MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3NoYS9zaGE1MTIu YwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1NTkyMzQzMiArMDIwMAorQEAgLTUsNiArNSwxMCBAQAor ICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisgICovCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorKworICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9O T19TSEE1MTIpCisgLyoKKyAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KK0BAIC02MSw2ICs2NSw5 IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKKyAKKyBmaXBzX21k X2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWMtPmhbMF09VTY0KDB4Y2JiYjlkNWRj MTA1OWVkOCk7CisgCWMtPmhbMV09VTY0KDB4NjI5YTI5MmEzNjdjZDUwNyk7CisgCWMtPmhbMl09 VTY0KDB4OTE1OTAxNWEzMDcwZGQxNyk7CitAQCAtNzcsNiArODQsOSBAQCBmaXBzX21kX2luaXRf Y3R4KFNIQTM4NCwgU0hBNTEyKQorIAorIGZpcHNfbWRfaW5pdChTSEE1MTIpCisgCXsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJYy0+ aFswXT1VNjQoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKKyAJYy0+aFsxXT1VNjQoMHhiYjY3YWU4NTg0 Y2FhNzNiKTsKKyAJYy0+aFsyXT1VNjQoMHgzYzZlZjM3MmZlOTRmODJiKTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFnL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4x Zy9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3do cmxwb29sL3dwX2Rnc3QuYy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDE0LTA1LTA2 IDE2OjI5OjUwLjU1NTkyMzQzMiArMDIwMAorQEAgLTU1LDcgKzU1LDcgQEAKKyAjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistZmlwc19tZF9pbml0 KFdISVJMUE9PTCkKKytub25maXBzX21kX2luaXQoV0hJUkxQT09MKQorIAl7CisgCW1lbXNldCAo YywwLHNpemVvZigqYykpOworIAlyZXR1cm4oMSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9N YWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4xZy9NYWtlZmlsZS5vcmcKKy0tLSBvcGVuc3Ns LTEuMC4xZy9NYWtlZmlsZS5vcmcuZmlwcwkyMDE0LTA1LTA2IDE2OjI5OjUwLjUxOTkyMjYwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL01ha2VmaWxlLm9yZwkyMDE0LTA1LTA2IDE2OjI5OjUw LjU1NjkyMzQ1NiArMDIwMAorQEAgLTEzNiw2ICsxMzYsOSBAQCBGSVBTQ0FOTElCPQorIAorIEJB U0VBRERSPQorIAorKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAorK0ZJUFM9CisrCisgRElS Uz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCisgRU5HRElSUz0gY2Nnb3N0 CisgU0hMSUJESVJTPSBjcnlwdG8gc3NsCitAQCAtMTQ4LDcgKzE1MSw3IEBAIFNESVJTPSAgXAor IAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCisgCWJ1ZmZlciBiaW8g c3RhY2sgbGhhc2ggcmFuZCBlcnIgXAorIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0 eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKKy0JY21zIHBxdWV1ZSB0cyBq cGFrZSBzcnAgc3RvcmUgY21hYworKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFj IGZpcHMKKyAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5 IC4vQ29uZmlndXJlCisgIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgorIAorQEAg LTIzNyw2ICsyNDAsNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNT CisgCQlGSVBTTElCRElSPScke0ZJUFNMSUJESVJ9JwkJCVwKKyAJCUZJUFNESVI9JyR7RklQU0RJ Un0nCQkJCVwKKyAJCUZJUFNDQU5MSUI9IiQke0ZJUFNDQU5MSUI6LSQoRklQU0NBTkxJQil9Iglc CisrCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAorIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFL RUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KKyAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2 ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKKyAjIHdo aWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQg d2l0aCAtZS4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL3NzbC9kMV9zcnZyLmMuZmlwcyBvcGVu c3NsLTEuMC4xZy9zc2wvZDFfc3J2ci5jCistLS0gb3BlbnNzbC0xLjAuMWcvc3NsL2QxX3NydnIu Yy5maXBzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMWcvc3NsL2QxX3NydnIuYwkyMDE0LTA1LTA2IDE2OjI5OjUwLjU1NjkyMzQ1NiArMDIwMAor QEAgLTEzODMsNiArMTM4Myw4IEBAIGludCBkdGxzMV9zZW5kX3NlcnZlcl9rZXlfZXhjaGFuZ2Uo U1NMICoKKyAJCQkJaj0wOworIAkJCQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKKyAJCQkJ CXsKKysJCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCisrCQkJCQkJCQlFVlBfTURf Q1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAkJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0 eCwobnVtID09IDIpCisgCQkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7Cisg CQkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSks U1NMM19SQU5ET01fU0laRSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9zc2wvc3NsX2FsZ3Mu Yy5maXBzIG9wZW5zc2wtMS4wLjFnL3NzbC9zc2xfYWxncy5jCistLS0gb3BlbnNzbC0xLjAuMWcv c3NsL3NzbF9hbGdzLmMuZmlwcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjFnL3NzbC9zc2xfYWxncy5jCTIwMTQtMDUtMDYgMTY6Mjk6NTAuNTU2 OTIzNDU2ICswMjAwCitAQCAtNjQsNiArNjQsMTIgQEAKKyBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2 b2lkKQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFy eSgpOworKwlpZiAoIUZJUFNfbW9kZSgpKQorKwkJeworKyNlbmRpZgorKworICNpZm5kZWYgT1BF TlNTTF9OT19ERVMKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jYmMoKSk7CisgCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7CitAQCAtMTM3LDYgKzE0Myw1MCBAQCBpbnQgU1NM X2xpYnJhcnlfaW5pdCh2b2lkKQorIAlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOworIAlFVlBf YWRkX2RpZ2VzdChFVlBfZHNzKCkpOworICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ CX0KKysJZWxzZQorKwkJeworKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKysJRVZQX2FkZF9jaXBo ZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVT CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18yNTZfZ2NtKCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKysJ LyogbmVlZGVkIGV2ZW4gaW4gdGhlIEZJUFMgbW9kZSBmb3IgVExTIE1BQyAqLworKwlFVlBfYWRk X2RpZ2VzdChFVlBfbWQ1KCkpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDIt bWQ1Iik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwic3NsMy1tZDUiKTsKKysjZW5k aWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkp OyAvKiBSU0Egd2l0aCBzaGExICovCisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsInNz bDMtc2hhMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRp b24sU05fc2hhMVdpdGhSU0EpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYK KysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3No YTI1NigpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCisrCUVWUF9hZGRf ZGlnZXN0KEVWUF9zaGEzODQoKSk7CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Cisr I2VuZGlmCisrI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NM X05PX0RTQSkKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7IC8qIERTQSB3aXRoIHNoYTEg Ki8KKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsU05fZHNhV2l0aFNIQTFf Mik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJEU1MxIik7CisrCUVW UF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJkc3MxIik7CisrI2VuZGlmCisrI2lm bmRlZiBPUEVOU1NMX05PX0VDRFNBCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKKysj ZW5kaWYKKysJCX0KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAorIAkvKiBUaGlz IHdpbGwgaW5pdGlhbGlzZSB0aGUgYnVpbHQtaW4gY29tcHJlc3Npb24gYWxnb3JpdGhtcy4KKyAJ ICAgVGhlIHZhbHVlIHJldHVybmVkIGlzIGEgU1RBQ0tfT0YoU1NMX0NPTVApLCBidXQgdGhhdCBj YW4KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xZy1uZXctZmlwcy1yZXFzLnBhdGNoIGIvb3Bl bnNzbC0xLjAuMWctbmV3LWZpcHMtcmVxcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi45ZjJmZTliCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMWctbmV3 LWZpcHMtcmVxcy5wYXRjaApAQCAtMCwwICsxLDE3NjMgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9ibi9ibl9yYW5kLmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9i bi9ibl9yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vYm4vYm5fcmFuZC5jLmZpcHMt cmVxcwkyMDE0LTAzLTE3IDE3OjE0OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9ibi9ibl9yYW5kLmMJMjAxNC0wNS0wNiAxNjoyMjoyMS40MzI1NDAyODMgKzAy MDAKK0BAIC0xMzgsOSArMTM4LDEyIEBAIHN0YXRpYyBpbnQgYm5yYW5kKGludCBwc2V1ZG9yYW5k LCBCSUdOVU0KKyAJCWdvdG8gZXJyOworIAkJfQorIAorLQkvKiBtYWtlIGEgcmFuZG9tIG51bWJl ciBhbmQgc2V0IHRoZSB0b3AgYW5kIGJvdHRvbSBiaXRzICovCistCXRpbWUoJnRpbSk7CistCVJB TkRfYWRkKCZ0aW0sc2l6ZW9mKHRpbSksMC4wKTsKKysJaWYgKCFGSVBTX21vZGUoKSkgLyogaW4g RklQUyBtb2RlIHRoZSBSTkcgaXMgYWx3YXlzIHByb3Blcmx5IHNlZWRlZCBvciB0aGUgbW9kdWxl IGZhaWxzICovCisrCQl7CisrCQkvKiBtYWtlIGEgcmFuZG9tIG51bWJlciBhbmQgc2V0IHRoZSB0 b3AgYW5kIGJvdHRvbSBiaXRzICovCisrCQl0aW1lKCZ0aW0pOworKwkJUkFORF9hZGQoJnRpbSxz aXplb2YodGltKSwwLjApOworKwkJfQorIAorIAlpZiAocHNldWRvcmFuZCkKKyAJCXsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzLXJlcXMgb3BlbnNzbC0x LjAuMWcvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RoL2Ro X2dlbi5jLmZpcHMtcmVxcwkyMDE0LTA1LTA2IDE2OjIyOjIxLjI1MzUzNjE0NSArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kaC9kaF9nZW4uYwkyMDE0LTA1LTA2IDE2OjIyOjIxLjQz MjU0MDI4MyArMDIwMAorQEAgLTEyNSw3ICsxMjUsNyBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5f Z2VucGFyYW1zKERIICpyZXQsCisgCQlyZXR1cm4gMDsKKyAJCX0KKyAKKy0JaWYgKEZJUFNfbW9k ZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisr CWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RV TFVTX0JJVFNfR0VOKSkKKyAJCXsKKyAJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMs IERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKyAJCWdvdG8gZXJyOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL2RoL2RoLmguZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9k aC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RoL2RoLmguZmlwcy1yZXFzCTIwMTQt MDUtMDYgMTY6MjI6MjEuMjUzNTM2MTQ1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2RoL2RoLmgJMjAxNC0wNS0wNiAxNjoyMjoyMS40MzI1NDAyODMgKzAyMDAKK0BAIC03OCw2ICs3 OCw3IEBACisgI2VuZGlmCisgCisgI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNf QklUUyAxMDI0CisrI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUU19HRU4g MjA0OAorIAorICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKKyAjZGVmaW5l IERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1 aWx0LWluIERICitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGgvZGhfY2hlY2suYy5m aXBzLXJlcXMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RoL2RoX2NoZWNrLmMKKy0tLSBvcGVuc3Ns LTEuMC4xZy9jcnlwdG8vZGgvZGhfY2hlY2suYy5maXBzLXJlcXMJMjAxNC0wMy0xNyAxNzoxNDoy MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZGgvZGhfY2hlY2su YwkyMDE0LTA1LTA2IDE2OjIyOjIxLjQzMjU0MDI4MyArMDIwMAorQEAgLTEzNCw3ICsxMzQsMzMg QEAgaW50IERIX2NoZWNrX3B1Yl9rZXkoY29uc3QgREggKmRoLCBjb25zdAorIAlCTl9zdWJfd29y ZChxLDEpOworIAlpZiAoQk5fY21wKHB1Yl9rZXkscSk+PTApCisgCQkqcmV0fD1ESF9DSEVDS19Q VUJLRVlfVE9PX0xBUkdFOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgp ICYmIGRoLT5xICE9IE5VTEwpCisrCQl7CisrCQlCTl9DVFggKmN0eCA9IE5VTEw7CisgCisrCQlj dHggPSBCTl9DVFhfbmV3KCk7CisrCQlpZiAoY3R4ID09IE5VTEwpCisrCQkJZ290byBlcnI7Cisr CisrCQlpZiAoQk5fbW9kX2V4cF9tb250KHEsIHB1Yl9rZXksIGRoLT5xLCBkaC0+cCwgY3R4LCBO VUxMKSA8PSAwKQorKwkJCXsKKysJCQlCTl9DVFhfZnJlZShjdHgpOworKwkJCWdvdG8gZXJyOwor KwkJCX0KKysJCWlmICghQk5faXNfb25lKHEpKQorKwkJCXsKKysJCQkvKiBpdCB3b3VsZCBiZSBt b3JlIGNvcnJlY3QgdG8gYWRkIG5ldyByZXR1cm4gZmxhZyAKKysJCQkgKiBmb3IgdGhpcyB0ZXN0 LCBidXQgd2UgZG8gbm90IHdhbnQgdG8gZG8gaXQKKysJCQkgKiBzbyBqdXN0IGVycm9yIG91dAor KwkJCSAqLworKwkJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJ CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKyNlbmRpZgorIAlvayA9IDE7CisgZXJyOgor IAlpZiAocSAhPSBOVUxMKSBCTl9mcmVlKHEpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNh X2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcy1yZXFz CTIwMTQtMDUtMDYgMTY6MjI6MjEuMjU0NTM2MTY4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxNC0wNS0wNiAxNjoyMjoyMS40MzI1NDAyODMgKzAyMDAK K0BAIC0xNTksNyArMTU5LDYgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBz aXplXworIAkgICAgfQorIAorIAlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmCistCSAgICAoYml0 cyAhPSAxMDI0IHx8IHFiaXRzICE9IDE2MCkgJiYKKyAJICAgIChiaXRzICE9IDIwNDggfHwgcWJp dHMgIT0gMjI0KSAmJgorIAkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYpICYmCisg CSAgICAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9IDI1NikpCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xZy9jcnlwdG8vZHNhL2RzYS5oLmZpcHMtcmVxcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZHNh L2RzYS5oCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2EuaC5maXBzLXJlcXMJMjAx NC0wNS0wNiAxNjoyMjoyMS4yNTQ1MzYxNjggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlw dG8vZHNhL2RzYS5oCTIwMTQtMDUtMDYgMTY6MjI6MjEuNDMyNTQwMjgzICswMjAwCitAQCAtODks NiArODksNyBAQAorICNlbmRpZgorIAorICNkZWZpbmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9E VUxVU19CSVRTIDEwMjQKKysjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklU U19HRU4gMjA0OAorIAorICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKKyAjZGVm aW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjku N2g7IHRoZSBidWlsdC1pbiBEU0EKK0BAIC0yNTQsOSArMjU1LDkgQEAgaW50CURTQXBhcmFtc19w cmludF9mcChGSUxFICpmcCwgY29uc3QgRAorIGludAlEU0FfcHJpbnRfZnAoRklMRSAqYnAsIGNv bnN0IERTQSAqeCwgaW50IG9mZik7CisgI2VuZGlmCisgCistI2RlZmluZSBEU1NfcHJpbWVfY2hl Y2tzIDUwCistLyogUHJpbWFsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIEZJUFMgUFVCIDE4NlstMV0s IEFwcGVuZGl4IDIuMToKKy0gKiA1MCByb3VuZHMgb2YgUmFiaW4tTWlsbGVyICovCisrI2RlZmlu ZSBEU1NfcHJpbWVfY2hlY2tzIDY0CisrLyogUHJpbWFsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIEZJ UFMgUFVCIDE4NlstNF0sIEFwcGVuZGl4IDIuMToKKysgKiA2NCByb3VuZHMgb2YgUmFiaW4tTWls bGVyICovCisgI2RlZmluZSBEU0FfaXNfcHJpbWUobiwgY2FsbGJhY2ssIGNiX2FyZykgXAorIAlC Tl9pc19wcmltZShuLCBEU1NfcHJpbWVfY2hlY2tzLCBjYWxsYmFjaywgTlVMTCwgY2JfYXJnKQor IAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcy1yZXFz IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9kc2EvZHNhX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcy1yZXFzCTIwMTQtMDUtMDYgMTY6MjI6MjEuNDI3NTQw MTY5ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAxNC0w NS0wNiAxNjoyMjoyMS40MzM1NDAzMDcgKzAyMDAKK0BAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGlj IGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCisgI2lmZGVmIE9QRU5TU0xfRklQ UworIAlpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCistCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykpCisrCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNB X0ZJUFNfTUlOX01PRFVMVVNfQklUU19HRU4pKQorIAkJeworIAkJRFNBZXJyKERTQV9GX0RTQV9C VUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKyAJCWdvdG8gZXJyOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19kaF9zZWxmdGVzdC5jLmZp cHMtcmVxcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RoX3NlbGZ0ZXN0LmMKKy0t LSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX2RoX3NlbGZ0ZXN0LmMuZmlwcy1yZXFz CTIwMTQtMDUtMDYgMTY6MjI6MjEuNDMzNTQwMzA3ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL2ZpcHMvZmlwc19kaF9zZWxmdGVzdC5jCTIwMTQtMDUtMDYgMTY6MjI6MjEuNDMzNTQw MzA3ICswMjAwCitAQCAtMCwwICsxLDE2MiBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqIENvcHlyaWdodCAoYykgMjAxMyBSZWQgSGF0LCBJbmMuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ro Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Cisr I2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcFtdID0geworKwkweEFFLDB4RUMs MHhFRSwweDIyLDB4RkEsMHgzQSwweEE1LDB4MjIsMHhDMCwweERFLDB4MEYsMHgwOSwKKysJMHg3 RSwweDE3LDB4QzAsMHgwNSwweEY5LDB4RjEsMHhFNywweEM2LDB4ODcsMHgxNCwweDZELDB4MTEs CisrCTB4RTcsMHhBRSwweEVELDB4MkYsMHg3MiwweDU5LDB4QzUsMHhBOSwweDlCLDB4QjgsMHgw MiwweEE1LAorKwkweEYzLDB4NjksMHg3MCwweEQ2LDB4REQsMHg5MCwweEY5LDB4MTksMHg3OSww eEJFLDB4NjAsMHg4RiwKKysJMHgyNSwweDkyLDB4MzAsMHgxQywweDUxLDB4NTEsMHgzOCwweDI2 LDB4ODIsMHgyNSwweEU2LDB4RkMsCisrCTB4RUQsMHg2NSwweDk2LDB4OEYsMHg1NywweEU1LDB4 NTMsMHg4QiwweDM4LDB4NjMsMHhDNywweENFLAorKwkweEJDLDB4MUIsMHg0RCwweDE4LDB4MkEs MHg1QiwweDA0LDB4M0YsMHg2QSwweDNDLDB4OTQsMHgzOSwKKysJMHhBRSwweDM2LDB4RDYsMHg1 RSwweDBGLDB4QTIsMHhDQywweEQwLDB4RDQsMHhENSwweEM2LDB4MUUsCisrCTB4RjYsMHhBMCww eEY1LDB4ODksMHg0RSwweEI0LDB4MEIsMHhBNCwweEIzLDB4MkIsMHgzRCwweEUyLAorKwkweDRF LDB4RTEsMHg0OSwweDI1LDB4OTksMHg1RiwweDMyLDB4MTYsMHgzMywweDMyLDB4MUIsMHg3QSwK KysJMHhBNSwweDVDLDB4NkIsMHgzNCwweDBELDB4MzksMHg5OSwweERDLDB4RjAsMHg3NiwweEU1 LDB4NUEsCisrCTB4RDQsMHg3MSwweDAwLDB4RUQsMHg1QSwweDczLDB4RkIsMHhDOCwweDAxLDB4 QUQsMHg5OSwweENGLAorKwkweDk5LDB4NTIsMHg3QywweDlDLDB4NjQsMHhDNiwweDc2LDB4NDAs MHg1NywweEFGLDB4NTksMHhENywKKysJMHgzOCwweDBCLDB4NDAsMHhERSwweDMzLDB4MEQsMHhC OCwweDc2LDB4RUMsMHhBOSwweEQ4LDB4NzMsCisrCTB4RjgsMHhFRiwweDI2LDB4NjYsMHgwNiww eDI3LDB4REQsMHg3QywweEE0LDB4MTAsMHg5QywweEE2LAorKwkweEFBLDB4RjksMHg1MywweDYy LDB4NzMsMHgxRCwweEJBLDB4MUMsMHhGMSwweDY3LDB4RjQsMHgzNSwKKysJMHhFRCwweDZGLDB4 MzcsMHg5MiwweEU4LDB4NEYsMHg2QywweEJBLDB4NTIsMHg2RSwweEExLDB4RUQsCisrCTB4REEs MHg5RiwweDg1LDB4MTEsMHg4MiwweDUyLDB4NjIsMHgwOCwweDQ0LDB4RjEsMHgzMCwweDAzLAor KwkweEMzLDB4MzgsMHgyQywweDc5LDB4QkQsMHhENCwweDQzLDB4NDUsMHhFRSwweDhFLDB4NTAs MHhGQywKKysJMHgyOSwweDQ2LDB4OUEsMHhGRSwweDU0LDB4MUEsMHgxOSwweDhGLDB4NEIsMHg4 NCwweDA4LDB4REUsCisrCTB4MjAsMHg2MiwweDczLDB4Q0MsMHhERCwweDdFLDB4RjAsMHhFRiww eEEyLDB4RkQsMHg4NiwweDU4LAorKwkweDRCLDB4RDgsMHgzNywweEVCCisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfZ1tdID0geworKwkweDAyCisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcHViX2tleVtdID0g eworKwkweEEwLDB4MzksMHgxMSwweDc3LDB4OUEsMHhDMSwweDMwLDB4MUYsMHhCRSwweDQ4LDB4 QTcsMHhBQSwKKysJMHhBMCwweDg0LDB4NTQsMHg2NCwweEFELDB4MUIsMHg3MCwweEZBLDB4MTMs MHg1NSwweDYzLDB4RDIsCisrCTB4MUYsMHg2MiwweDMyLDB4OTMsMHg4RSwweEM5LDB4M0UsMHgw OSwweEE3LDB4NjQsMHhFNCwweDEyLAorKwkweDZFLDB4MUIsMHhGMiwweDkyLDB4M0IsMHhCOSww eENCLDB4NTYsMHhFQSwweDA3LDB4ODgsMHhCNSwKKysJMHhBNiwweEJDLDB4MTYsMHgxRiwweDI3 LDB4RkUsMHhEOCwweEFBLDB4NDAsMHhCMiwweEIwLDB4MkQsCisrCTB4MzcsMHg3NiwweEE2LDB4 QTQsMHg4MiwweDJDLDB4MEUsMHgyMiwweDY0LDB4OUQsMHhDQiwweEQxLAorKwkweDAwLDB4Qjcs MHg4OSwweDE0LDB4NzIsMHg0RSwweEJFLDB4NDgsMHg0MSwweEY4LDB4QjIsMHg1MSwKKysJMHgx MSwweDA5LDB4NEIsMHgyMiwweDAxLDB4MjMsMHgzOSwweDk2LDB4RTAsMHgxNSwweEQ3LDB4OUYs CisrCTB4NjAsMHhEMSwweEI3LDB4QUUsMHhGRSwweDVGLDB4REIsMHhFNywweDAzLDB4MTcsMHg5 NywweEE2LAorKwkweDE2LDB4NzQsMHhCRCwweDUzLDB4ODEsMHgxOSwweEM1LDB4NDcsMHg1RSww eENFLDB4OEQsMHhFRCwKKysJMHg0NSwweDVELDB4M0MsMHgwMCwweEEwLDB4MEEsMHg2OCwweDZB LDB4RTAsMHg4RSwweDA2LDB4NDYsCisrCTB4NkYsMHhENywweEY5LDB4REYsMHgzMSwweDdFLDB4 NzcsMHg0NCwweDBELDB4OTgsMHhFMCwweENBLAorKwkweDk4LDB4MDksMHg1MiwweDA0LDB4OTAs MHhFQSwweDZELDB4RjQsMHgzMCwweDY5LDB4OEYsMHhCMSwKKysJMHg5QiwweEMxLDB4NDMsMHhE QiwweEQ1LDB4OEQsMHhDOCwweDhFLDB4QjYsMHgwQiwweDA1LDB4QkUsCisrCTB4MEUsMHhDNSww eDk5LDB4QzgsMHg2RSwweDRFLDB4RjMsMHhDQiwweEMzLDB4NUUsMHg5QiwweDUzLAorKwkweEY3 LDB4MDYsMHgxQywweDRGLDB4QzcsMHhCOCwweDZFLDB4MzAsMHgxOCwweENBLDB4OUIsMHhCOSwK KysJMHhCQywweDVGLDB4MTcsMHg3MiwweDI5LDB4NUEsMHhFNSwweEQ5LDB4OTYsMHhCNywweDBC LDB4RjMsCisrCTB4MkQsMHg4QywweEYxLDB4RTEsMHgwRSwweDBELDB4NzQsMHhENSwweDlELDB4 RjAsMHgwNiwweEE5LAorKwkweEI0LDB4OTUsMHg2MywweDc2LDB4NDYsMHg1NSwweDQ4LDB4ODIs MHgzOSwweDkwLDB4RUYsMHg1NiwKKysJMHg3NSwweDM0LDB4QjgsMHgzNCwweEMzLDB4MTgsMHg2 RSwweDFFLDB4QUQsMHhFMywweDQ4LDB4N0UsCisrCTB4OTMsMHgyQywweDIzLDB4RTcsMHhGOCww eDkwLDB4NzMsMHhCMSwweDc3LDB4ODAsMHg2NywweEE5LAorKwkweDM2LDB4OUUsMHhEQSwweEQy CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaF90ZXN0XzIwNDhfcHJpdl9r ZXlbXSA9IHsKKysJMHgwQywweDRCLDB4MzAsMHg4OSwweEQxLDB4QjgsMHg2MiwweENCLDB4M0Ms MHg0MywweDY0LDB4OTEsCisrCTB4RjAsMHg5MSwweDU0LDB4NzAsMHhDNSwweDI3LDB4OTYsMHhF MywweEFDLDB4QkUsMHhFOCwweDAwLAorKwkweEVDLDB4NTUsMHhGNiwweENDCisrfTsKKysKKytp bnQgRklQU19zZWxmdGVzdF9kaCgpCisrCXsKKysJREggKmRoID0gTlVMTDsKKysJaW50IHJldCA9 IDA7CisrCXZvaWQgKnB1Yl9rZXkgPSBOVUxMOworKwlpbnQgbGVuOworKworKwlkaCA9IERIX25l dygpOworKworKwlpZihkaCA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCWZpcHNfbG9hZF9r ZXlfY29tcG9uZW50KGRoLCBwLCBkaF90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBv bmVudChkaCwgZywgZGhfdGVzdF8yMDQ4KTsKKysJLyogbm90ZSB0aGF0IHRoZSBwcml2YXRlIGtl eSBpcyBtdWNoIHNob3J0ZXIgdGhhbiBub3JtYWxseSB1c2VkCisrCSAqIGJ1dCBzdGlsbCBnICoq IHByaXZfa2V5ID4gcAorKwkgKi8KKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZGgsIHByaXZf a2V5LCBkaF90ZXN0XzIwNDgpOworKworKwlpZiAoREhfZ2VuZXJhdGVfa2V5KGRoKSA8PSAwKQor KwkJZ290byBlcnI7CisrCisrCWxlbiA9IEJOX251bV9ieXRlcyhkaC0+cHViX2tleSk7CisrCWlm ICgocHViX2tleSA9IE9QRU5TU0xfbWFsbG9jKGxlbikpID09IE5VTEwpCisrCQlnb3RvIGVycjsK KysJQk5fYm4yYmluKGRoLT5wdWJfa2V5LCBwdWJfa2V5KTsKKysKKysJaWYgKGxlbiAhPSBzaXpl b2YoZGhfdGVzdF8yMDQ4X3B1Yl9rZXkpIHx8CisrCQltZW1jbXAocHViX2tleSwgZGhfdGVzdF8y MDQ4X3B1Yl9rZXksIGxlbikgIT0gMCkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKwor KwllcnI6CisrCWlmIChkaCkKKysJCURIX2ZyZWUoZGgpOworKworKwlPUEVOU1NMX2ZyZWUocHVi X2tleSk7CisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMtcmVxcwkyMDE0LTA1LTA2IDE2OjIyOjIxLjI2MzUz NjM3NiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5k LmMJMjAxNC0wNS0wNiAxNjoyMjoyMS40MzM1NDAzMDcgKzAyMDAKK0BAIC03Nyw3ICs3Nyw4IEBA IHN0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVuc2lnbmVkIGNoYXIKKyAJaW50IHJ2ID0gMDsK KyAJdW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7CisgCXNpemVfdCBhZGlubGVuID0gMDsKKy0J Q1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJaW50IGxvY2tlZDsKKysJbG9ja2Vk ID0gcHJpdmF0ZV9SQU5EX2xvY2soMSk7CisgCWRvIAorIAkJeworIAkJc2l6ZV90IHJjbnQ7CitA QCAtMTA5LDcgKzExMCw4IEBAIHN0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVuc2lnbmVkIGNo YXIKKyAJd2hpbGUgKGNvdW50KTsKKyAJcnYgPSAxOworIAllcnI6CistCUNSWVBUT193X3VubG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJaWYgKGxvY2tlZCkKKysJCXByaXZhdGVfUkFORF9sb2Nr KDApOworIAlyZXR1cm4gcnY7CisgCX0KKyAKK0BAIC0xMjQsMzUgKzEyNiw1MSBAQCBzdGF0aWMg aW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKKyAJeworIAlEUkJHX0NUWCAqZGN0eCA9ICZvc3Ns X2RjdHg7CisgCWludCBydjsKKy0JQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJ aW50IGxvY2tlZDsKKysJbG9ja2VkID0gcHJpdmF0ZV9SQU5EX2xvY2soMSk7CisgCXJ2ID0gZGN0 eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZID8gMSA6IDA7CistCUNSWVBUT19yX3VubG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJaWYgKGxvY2tlZCkKKysJCXByaXZhdGVfUkFORF9sb2Nr KDApOworIAlyZXR1cm4gcnY7CisgCX0KKyAKKyBzdGF0aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51 cCh2b2lkKQorIAl7CisgCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKy0JQ1JZUFRPX3df bG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJaW50IGxvY2tlZDsKKysJbG9ja2VkID0gcHJpdmF0 ZV9SQU5EX2xvY2soMSk7CisgCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOworLQlDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWlmIChsb2NrZWQpCisrCQlwcml2YXRl X1JBTkRfbG9jaygwKTsKKyAJfQorIAorIHN0YXRpYyBpbnQgZmlwc19kcmJnX3NlZWQoY29uc3Qg dm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisgCXsKKyAJRFJCR19DVFggKmRjdHggPSAmb3NzbF9k Y3R4OworKwlpbnQgbG9ja2VkOworKwlpbnQgcmV0ID0gMTsKKysKKysJbG9ja2VkID0gcHJpdmF0 ZV9SQU5EX2xvY2soMSk7CisgCWlmIChkY3R4LT5yYW5kX3NlZWRfY2IpCistCQlyZXR1cm4gZGN0 eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4pOworLQlyZXR1cm4gMTsKKysJCXJl dCA9IGRjdHgtPnJhbmRfc2VlZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuKTsKKysJaWYgKGxvY2tl ZCkKKysJCXByaXZhdGVfUkFORF9sb2NrKDApOworKwlyZXR1cm4gcmV0OworIAl9CisgCisgc3Rh dGljIGludCBmaXBzX2RyYmdfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAorIAkJ CQkJZG91YmxlIGFkZF9lbnRyb3B5KQorIAl7CisgCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0 eDsKKysJaW50IGxvY2tlZDsKKysJaW50IHJldCA9IDE7CisrCisrCWxvY2tlZCA9IHByaXZhdGVf UkFORF9sb2NrKDEpOworIAlpZiAoZGN0eC0+cmFuZF9hZGRfY2IpCistCQlyZXR1cm4gZGN0eC0+ cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbiwgYWRkX2VudHJvcHkpOworLQlyZXR1cm4g MTsKKysJCXJldCA9IGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9l bnRyb3B5KTsKKysJaWYgKGxvY2tlZCkKKysJCXByaXZhdGVfUkFORF9sb2NrKDApOworKwlyZXR1 cm4gcmV0OworIAl9CisgCisgc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRo ID0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzLXJlcXMg b3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwcy5oCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5 cHRvL2ZpcHMvZmlwcy5oLmZpcHMtcmVxcwkyMDE0LTA1LTA2IDE2OjIyOjIxLjQyMTU0MDAzMSAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHMuaAkyMDE0LTA1LTA2IDE2 OjIyOjIxLjQzMzU0MDMwNyArMDIwMAorQEAgLTk2LDYgKzk2LDcgQEAgdm9pZCBGSVBTX2NvcnJ1 cHRfZHNhX2tleWdlbih2b2lkKTsKKyBpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7CisgaW50 IEZJUFNfc2VsZnRlc3RfZWNkc2Eodm9pZCk7CisgaW50IEZJUFNfc2VsZnRlc3RfZWNkaCh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9kaCh2b2lkKTsKKyB2b2lkIEZJUFNfY29ycnVwdF9ybmco dm9pZCk7Cisgdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKTsKKyB2b2lkIEZJUFNfeDkzMV9zdGlj ayhpbnQgb25vZmYpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19w b3N0LmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCist LS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcy1yZXFzCTIwMTQt MDUtMDYgMTY6MjI6MjEuNDIwNTQwMDA4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRv L2ZpcHMvZmlwc19wb3N0LmMJMjAxNC0wNS0wNiAxNjoyMjoyMS40MzM1NDAzMDcgKzAyMDAKK0BA IC05OSw2ICs5OSw4IEBAIGludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpCisgCQlydiA9IDA7CisgCWlm ICghRklQU19zZWxmdGVzdF9kc2EoKSkKKyAJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0 X2RoKCkpCisrCQlydiA9IDA7CisgCWlmICghRklQU19zZWxmdGVzdF9lY2RoKCkpCisgCQlydiA9 IDA7CisgCXJldHVybiBydjsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2Zp cHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2Zp cHNfcnNhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vZmlwcy9maXBzX3Jz YV9zZWxmdGVzdC5jLmZpcHMtcmVxcwkyMDE0LTA1LTA2IDE2OjIyOjIxLjI2NzUzNjQ2OSArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAx NC0wNS0wNiAxNjoyMjoyMS40MzQ1NDAzMzAgKzAyMDAKK0BAIC02MCw2OSArNjAsMTEzIEBACisg I2lmZGVmIE9QRU5TU0xfRklQUworIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG5bXSA9 CistIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJc eDlEXHhBOFx4NzEiCistIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBc eEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCistIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNc eDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCistIlx4NDhceDc2XHhFRFx4NTJc eDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCistIlx4N0Zc eEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4 MjUiCistIlx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4 NDVceDQ1XHg5OFx4MzkiCistIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4 NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4NjgiCistIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4 MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCistIlx4Q0IiOworKyJceDAw XHhjOVx4ZDVceDZkXHg5ZFx4OTBceGRiXHg0M1x4ZDZceDAyXHhlZFx4OTZceDg4XHgxM1x4OGEi CisrIlx4YjJceGJmXHg2ZVx4YTFceDA2XHgxMFx4YjJceDc4XHgzN1x4YTdceDE0XHhhOFx4ZmZc eGRkXHgwMCIKKysiXHhkZFx4YjRceDkzXHhhMFx4NDVceGNjXHg5Nlx4OTBceGVkXHhhZFx4YTlc eGRkXHhjNFx4ZDZceGNhIgorKyJceDBjXHhmMFx4ZWRceDRmXHg3Mlx4NWVceDIxXHg0OVx4OWFc eDE4XHgxMlx4MTVceDhmXHg5MFx4NWEiCisrIlx4ZGJceGI2XHgzM1x4OTlceGEzXHhlNlx4YjRc eGYwXHhjNFx4OTdceDIxXHgyNlx4YmJceGUzXHhiYSIKKysiXHhmMlx4ZmZceGEwXHg3Mlx4ZGFc eDg5XHg2M1x4OGVceDhiXHgzZVx4MDhceDlkXHg5Mlx4MmFceGJlIgorKyJceDE2XHhlMVx4NDNc eDE1XHhmY1x4NTdceGM3XHgxZlx4MDlceDExXHg2N1x4MWNceGE5XHg5Nlx4ZDEiCisrIlx4OGJc eDNlXHg4MFx4OTNceGMxXHg1OVx4ZDBceDZkXHgzOVx4ZjJceGFjXHg5NVx4Y2NceDEwXHg3NSIK KysiXHhlOVx4MzFceDI0XHhkMVx4NDNceGFmXHg2OFx4NTJceDRiXHhlN1x4MTZceGQ3XHg0OVx4 NjVceDZmIgorKyJceDI2XHhjMFx4ODZceGFkXHhjMFx4MDdceDBhXHhjMVx4ZTFceDJmXHg4N1x4 ODVceDg2XHgzYlx4ZGMiCisrIlx4NWFceDk5XHhiZVx4ZTlceGY5XHhiOVx4ZTlceDgyXHgyN1x4 NTFceDA0XHgxNVx4YWJceDA2XHgwZSIKKysiXHg3Nlx4NWFceDI4XHg4ZFx4OTJceGJkXHhjNVx4 YjVceDdiXHhhOFx4ZGZceDRlXHg0N1x4YTJceGMxIgorKyJceGU3XHg1Mlx4YmZceDQ3XHhmN1x4 NjJceGUwXHgzYVx4NmZceDRkXHg2YVx4NGRceDRlXHhkNFx4YjkiCisrIlx4NTlceDY5XHhmYVx4 YjJceDE0XHhjMVx4ZWVceGU2XHgyZlx4OTVceGNkXHg5NFx4NzJceGFlXHhlNCIKKysiXHhkYlx4 MThceDlhXHhjNFx4Y2RceDcwXHhiZFx4ZWVceDMxXHgxNlx4YjdceDQ5XHg2NVx4YWNceDQwIgor KyJceDE5XHgwZVx4YjVceDZkXHg4M1x4ZjFceDM2XHhiYlx4MDhceDJmXHgyZVx4NGVceDkyXHg2 Mlx4YTQiCisrIlx4ZmZceDUwXHhkYlx4MjBceDQ1XHhhMlx4ZWJceDE2XHg3YVx4ZjJceGQ1XHgy OFx4YzFceGZkXHg0ZSIKKysiXHgwM1x4NzEiOworKworIAorIHN0YXRpYyBpbnQgY29ycnVwdF9y c2E7CisgCisgc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCisgICAgIHsKKy0gICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOworKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBlW10gPSAiXHgwMVx4MDBceDAxIjsKKyAKKyAgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZFtdID0KKy0iXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJc eDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKKy0iXHhGOFx4M0ZceDMxXHgyNVx4MUVc eDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKKy0iXHhCMlx4OTRc eDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIK Ky0iXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4 QzlceDNFXHhEQSIKKy0iXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4 MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKKy0iXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4 MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKKy0iXHg5M1x4OTlceDI2XHhFRFx4 NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKKy0iXHhBRlx4 OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhC MyIKKy0iXHhDMSI7CisrIlx4MzZceDI3XHgzZFx4YjFceGY5XHgxYlx4ZGJceGE3XHhhMFx4NDFc eDdmXHgxMlx4MjNceGFjXHgyMyIKKysiXHgyOVx4OTlceGQ1XHgzYVx4N2JceDYwXHg2N1x4NDFc eDA3XHg2M1x4NTNceGI0XHhkMlx4ZTdceDU4IgorKyJceDk1XHgwYVx4YzdceDA1XHhmM1x4NGVc eGIyXHhiNFx4MTJceGQ0XHg3MFx4ZGNceDRmXHg4NVx4MDYiCisrIlx4ZDNceGRkXHhkOFx4NjNc eDI3XHgzZVx4NjdceDMxXHgyMVx4MjRceDM5XHgwNFx4YmNceDA2XHhhNCIKKysiXHhjY1x4Y2Vc eDJiXHg3YVx4ZmVceDdiXHhhZFx4ZGVceDExXHg2ZVx4YTNceGE1XHhlNlx4MDRceDUzIgorKyJc eDBlXHhhM1x4NGVceDJkXHhiNFx4OGZceDMxXHhiZlx4Y2FceDc1XHgyNVx4NTJceDAyXHg4NVx4 ZGUiCisrIlx4M2RceGIyXHg3Mlx4NDNceGIyXHg4OVx4OGFceDlhXHgzNFx4NDFceDI2XHgzZlx4 OWFceDY3XHhiZSIKKysiXHhhNFx4OTZceDdiXHgwZVx4NzVceGJhXHhhNlx4OTNceGQ1XHhiOFx4 ZDhceGI4XHg1N1x4ZjJceDRiIgorKyJceDBmXHgxNFx4ODFceGQxXHg1N1x4NGVceGY2XHg0NVx4 NGNceGE2XHgzYlx4ZDBceDcwXHhjYVx4ZDMiCisrIlx4OWRceDU1XHhkZVx4MjJceDA1XHhlN1x4 OGVceDI4XHg0ZFx4ZWVceDExXHhjZlx4YjZceDY3XHg3NiIKKysiXHgwOVx4ZDNceGUzXHgzY1x4 MTNceGY5XHg5OVx4MzRceDEwXHg3Ylx4ZWNceDgxXHgzOFx4ZjBceGI2IgorKyJceDM0XHg5Y1x4 OWJceDUwXHg2Zlx4MGJceDkxXHg4MVx4NGRceDg5XHg5NFx4MDRceDdiXHhmMFx4M2MiCisrIlx4 ZjRceGIxXHhiMlx4MDBceDQ4XHg4ZFx4NWFceDhmXHg4OFx4OWVceGM1XHhhYlx4M2FceDllXHg0 NCIKKysiXHgzZlx4NTRceGU3XHhkOVx4NmVceDQ3XHhhYVx4YTFceGJkXHg0MFx4NDZceDMxXHhm OVx4ZjBceDM0IgorKyJceGI2XHgwNFx4ZTFceDJiXHg1Ylx4NzNceDg2XHhkZFx4M2FceDkyXHgx Ylx4NzFceGM3XHgzZlx4MzIiCisrIlx4ZTVceGMzXHhjMlx4YWJceGExXHg3ZVx4YmZceGE0XHg1 Mlx4YTBceGIwXHg2OFx4OTBceGQxXHgyMCIKKysiXHgxMlx4NzlceGU5XHhkN1x4YzlceDQwXHhi YVx4ZjJceDE5XHhjN1x4YTVceDAwXHg5Mlx4ODZceDBkIgorKyJceDAxIjsKKyAKKyAgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0KKy0iXHgwMFx4RUVceENGXHhBRVx4ODFceEIx XHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4QTFceEI1XHg2MCIKKy0iXHgwMVx4OTlceEVC XHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4QjhceDFBXHg5RVx4M0RceDg0XHhGNiIKKy0i XHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4QUFc eDA0XHgwQSIKKy0iXHgyRFx4NUJceDI1XHgyMVx4NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFc eEJBXHgyQVx4NThceEZCXHg2NSIKKy0iXHg5OSI7CisrIlx4MDBceGZjXHg1Y1x4NmVceDE2XHhj ZVx4MWZceDAzXHg3Ylx4Y2RceGY3XHhiM1x4NzJceGIyXHg4ZiIKKysiXHgxNlx4NzJceGI4XHg1 Nlx4YWVceGY3XHhjZFx4NjdceGQ4XHg0ZVx4N2RceDA3XHhhZlx4ZDVceDQzIgorKyJceDI2XHhj M1x4MzVceGJlXHg0M1x4OGZceDRlXHgyZlx4MWNceDQzXHg0ZVx4NmJceGQyXHhiMlx4ZWMiCisr Ilx4NTJceDZkXHg5N1x4NTJceDJiXHhjY1x4NWNceDNhXHg2Ylx4ZjRceDE0XHhjNlx4NzRceGRh XHg2NiIKKysiXHgzOFx4MWNceDdhXHgzZlx4ODRceDJmXHhlM1x4ZjlceDVhXHhiOFx4NjVceDY5 XHg0Nlx4MDZceGEzIgorKyJceDM3XHg3OVx4YjJceGExXHg1Ylx4NThceGVkXHg1ZVx4YTdceDVm XHg4Y1x4NjVceDY2XHhiYlx4ZDEiCisrIlx4MjRceDM2XHhlNlx4MzdceGE3XHgzZFx4NDlceDc3 XHg4YVx4OGNceDM0XHhkOFx4NjlceDI5XHhmMyIKKysiXHg0ZFx4NThceDIyXHhiMFx4NTFceDI0 XHhiNlx4NDBceGE4XHg4Nlx4NTlceDBhXHhiN1x4YmFceDVjIgorKyJceDk3XHhkYVx4NTdceGU4 XHgzNlx4ZGFceDdhXHg5Y1x4YWQiOworIAorICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBxW10gPQorLSJceDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4 MzNceEVBXHhBQVx4RDFceEQ5IgorLSJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4 RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlEIgorLSJceDg2XHg5OFx4NDBceEI0XHgxNlx4 NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgorLSJceENGXHhDRVx4 MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1Igor LSJceDAzIjsKKysiXHgwMFx4Y2NceGJlXHg3Ylx4MDlceDY5XHgwNlx4ZWVceDQ1XHhiZlx4ODhc eDQ3XHgzOFx4YThceGY4IgorKyJceDE3XHhlNVx4YjZceGJhXHg2N1x4NTVceGUzXHhlOFx4MDVc eDhiXHhiOFx4ZTJceDUzXHhkNlx4OGUiCisrIlx4ZWZceDJjXHhlN1x4NGZceDRhXHhmN1x4NGVc eDI2XHg4ZFx4ODVceDBiXHgzZlx4ZWNceGMzXHgxYyIKKysiXHhkNFx4ZWJceGVjXHg2YVx4Yzhc eDcyXHgyYVx4MjVceDdkXHhmZFx4YTZceDc3XHg5Nlx4ZjBceDFlIgorKyJceGNkXHgyOFx4NTdc eGY4XHgzN1x4MzBceDc1XHg2Ylx4YmRceGQ0XHg3Ylx4MGNceDg3XHhjNVx4NmMiCisrIlx4ODdc eDQwXHhhNVx4YmJceDI3XHgyY1x4NzhceGM5XHg3NFx4NWFceDU0XHg1Ylx4MGJceDMwXHg2ZiIK KysiXHg0NFx4NGFceGZhXHg3MVx4ZTRceDIxXHg2MVx4NjZceGY5XHhlZVx4NjVceGRlXHg3Y1x4 MDRceGQ3IgorKyJceGZkXHhhOVx4MTVceDViXHg3Zlx4ZTJceDdhXHhiYVx4NjlceDg2XHg3Mlx4 YTZceDA2XHg4ZFx4OWIiCisrIlx4OTBceDU1XHg2MFx4OWVceDRjXHg1ZFx4YTlceGI2XHg1NSI7 CisrCisgCisgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9CistIlx4NTRc eDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4 NUEiCistIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4 NTFceEYyXHhCMVx4M0UiCistIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4 NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCistIlx4MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4 NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKyJceDdhXHhkNlx4MTJc eGQwXHgwZVx4ZWNceDkxXHhhOVx4ODVceDhiXHhmOFx4NTBceGYwXHgxMVx4MmUiCisrIlx4MDBc eDExXHgzMlx4NDBceDYwXHg2Nlx4MWZceDExXHhlZVx4YzJceDc1XHgyN1x4NjVceDRiXHgxNiIK KysiXHg2N1x4MTZceDk1XHhkMlx4MTRceGMzXHgxZFx4YjNceDQ4XHgxZlx4YjdceGU0XHgwYlx4 MmJceDc0IgorKyJceGMzXHhkYlx4NTBceDI3XHhmOVx4ODVceDNhXHhmYVx4YTlceDA4XHgyM1x4 YzFceDY1XHgzZFx4MzQiCisrIlx4M2FceGM4XHg1Nlx4N2FceDY1XHg0NVx4MzZceDZlXHhhZVx4 MmFceGNlXHg5Zlx4NDNceDQzXHhkNyIKKysiXHgxMFx4ZTlceDllXHgxOFx4ZjRceGE0XHgzNVx4 ZGFceDhhXHg2Ylx4YjBceDNmXHhkZFx4NTNceGUzIgorKyJceGE4XHhjNVx4NGVceDc5XHg5ZFx4 MWZceDUxXHg4Y1x4YTJceGNhXHg2Nlx4M2NceDZhXHgyYVx4ZmYiCisrIlx4OGVceGQyXHhmM1x4 YjdceGNiXHg4Mlx4ZGFceGRlXHgyY1x4ZTZceGQyXHg4Y1x4YjNceGFkXHhiNiIKKysiXHg0Y1x4 OTVceDU1XHg3Nlx4YmRceGM5XHhjOFx4ZDEiOworKworIAorICAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkbXExW10gPQorLSJceDQ3XHgxRVx4MDJceDkwXHhGRlx4MEFceEYwXHg3NVx4 MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgorLSJceDYxXHhBRFx4QkRceDNBXHg4QVx4 N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3IgorLSJceEY5XHg4MFx4 M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgor LSJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgz Nlx4REFceDNEIjsKKy0gICAgCisrIlx4MDBceDgzXHgyM1x4MWRceGJiXHgxMVx4NDJceDE3XHgy Ylx4MjVceDVhXHgyY1x4MDNceGU2XHg3NSIKKysiXHhjMVx4MThceGE4XHhjOVx4MGJceDk2XHhi Zlx4YmFceGM0XHg5Mlx4OTFceDgwXHhhNVx4MjJceDJmIgorKyJceGJhXHg5MVx4OTBceDM2XHgw MVx4NTZceDE1XHgwMFx4MmNceDc0XHhhMlx4OTdceGY3XHgxNVx4YTEiCisrIlx4NDlceGRmXHgz Mlx4MzVceGQyXHhkZFx4MGNceDkxXHhhNlx4ZjhceGU3XHhiZVx4ODFceDM2XHg5YiIKKysiXHgw M1x4ZGNceDZiXHgzYlx4ZDhceDVkXHg3OVx4NTdceGUwXHhlNlx4NGZceDQ5XHhkZlx4NGNceDVj IgorKyJceDBlXHhlNVx4MjFceDQxXHg5NVx4ZmRceGFkXHhmZlx4OWFceDNlXHhhMFx4ZjlceDBm XHg1OVx4OWUiCisrIlx4NmFceGE3XHg3Ylx4NzFceGE3XHgyNFx4OWFceDM2XHg1Mlx4YWVceDk3 XHgyMFx4YzFceDVlXHg3OCIKKysiXHhkOVx4NDdceDhiXHgxZVx4NjdceGYyXHhhZlx4OThceGU2 XHgyZFx4ZWZceDEwXHhkN1x4ZjFceGFiIgorKyJceDQ5XHhlZVx4ZTVceDRiXHg3ZVx4YWVceDFm XHgxZFx4NjEiOworKworKworICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10g PQorLSJceDAwXHhCMFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERC XHhBRVx4OTRceDIzIgorLSJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkz XHgwN1x4N0ZceENEXHgzOVx4RTJceDExIgorLSJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4 XHg4M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgorLSJceDlFXHgyRVx4MEZceDk2 XHg1Nlx4RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5IgorLSJceEY3 IjsKKysiXHgyM1x4OTZceGMxXHg5MVx4MTdceDVlXHgwYVx4ODNceGQyXHhkY1x4N2JceDY5XHhi Mlx4NTlceDFkIgorKyJceDMzXHg1OFx4NTJceDNmXHgxOFx4YzdceDA5XHg1MFx4MWNceGI5XHhh MVx4YmJceDRjXHhhMlx4MzgiCisrIlx4NDBceDRjXHg5YVx4OGVceGZlXHg5Y1x4OTBceDkyXHhk MFx4NzFceDlmXHg4OVx4OTlceDUwXHg5MSIKKysiXHgxZlx4MzRceDhiXHg3NFx4NTNceDExXHgx MVx4NGFceDcwXHhlMlx4ZjdceDMwXHhkOFx4OGNceDgwIgorKyJceGUxXHhjY1x4OWZceGYxXHg2 M1x4MTdceDFhXHg3ZFx4NjdceDI5XHg0Y1x4Y2JceDRlXHg3NFx4N2IiCisrIlx4ZTBceDNlXHg5 ZVx4MmZceGY0XHg2N1x4OGZceGVjXHhiOVx4NWNceDAwXHgxZVx4N2VceGEyXHg3YiIKKysiXHg5 Mlx4YzlceDZmXHg0Y1x4ZTRceDBlXHhmOVx4NDhceDYzXHhjZFx4NTBceDIyXHg1ZFx4YmZceGI2 IgorKyJceDlkXHgwMVx4MzNceDZhXHhmNFx4NTBceGJlXHg4Nlx4OThceDRmXHhjYVx4M2ZceDNh XHhmYVx4Y2YiCisrIlx4MDdceDQwXHhjNFx4YWFceGFkXHhhZVx4YmVceGJmIjsKKyAKKyAgICAg a2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXktPm4pOworICAgICBpZiAoY29y cnVwdF9yc2EpCistCUJOX3NldF9iaXQoa2V5LT5uLCAxMDI0KTsKKysJQk5fc2V0X2JpdChrZXkt Pm4sIDIwNDgpOworICAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ ZSk7CisgICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKKyAg ICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBrZXktPnApOworQEAgLTE0NSwy MDEgKzE4OSwzOTEgQEAgdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKKyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNB IEtBVCI7CisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMVtd ID0geworLSAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwg MHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKKy0gIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIs IDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCistICAweEY0LCAweEJG LCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4LCAw eEQzLAorLSAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhCNSwg MHhDNywgMHg4MywgMHhENSwgMHg0QywKKy0gIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4Mjks IDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCistICAweDBELCAweEE5 LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlCLCAw eEY1LAorLSAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4MSwg MHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKKy0gIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4RDcs IDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCistICAweEQ2LCAweDU1 LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAweEJBLCAw eEU4LAorLSAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwgMHgyNiwg MHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKKy0gIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4OUIs IDB4M0QsIDB4N0UsIDB4QTkKKysgMHhDMiwgMHg4MCwgMHg4MiwgMHg1NiwgMHhEOCwgMHhBNywg MHhCMiwgMHg5QywgMHhGNSwgMHhENiwgMHgzQywgMHhFMywKKysgMHhCRiwgMHhFOSwgMHgzQSwg MHg1MywgMHg0MCwgMHhBRSwgMHhGMiwgMHhBOSwgMHg2QSwgMHgzOSwgMHg0OSwgMHg1QiwKKysg MHgwNSwgMHg3RiwgMHg2NywgMHgzOCwgMHgyRSwgMHgxRCwgMHhFMSwgMHg5MywgMHgyMiwgMHg2 NSwgMHg3OSwgMHg4NCwKKysgMHg2OCwgMHhGQSwgMHhEOCwgMHhBRiwgMHhBMSwgMHg5OCwgMHg2 MSwgMHg2RiwgMHg0NCwgMHgyNywgMHhBNiwgMHg4QiwKKysgMHhDRiwgMHgwRSwgMHgxMywgMHhB OSwgMHhDRSwgMHhENywgMHg2QywgMHhEMiwgMHgzOCwgMHhCNSwgMHgxNiwgMHhCOSwKKysgMHg2 NiwgMHg5NCwgMHg0OCwgMHhERSwgMHg5RSwgMHgxOSwgMHgzRCwgMHg2RiwgMHhCMywgMHhBMSwg MHg5QSwgMHgxOSwKKysgMHhERiwgMHhGQiwgMHhBQiwgMHhBNSwgMHg5RiwgMHgzOCwgMHhEQSwg MHhDOSwgMHgyMSwgMHg4RiwgMHhDRSwgMHg5OCwKKysgMHgwMSwgMHgzQSwgMHhDOCwgMHhFMCwg MHhERiwgMHhEQSwgMHhGQywgMHhGMCwgMHhBNiwgMHg4NiwgMHgyOSwgMHhCNSwKKysgMHg3Riwg MHg2MSwgMHhGQiwgMHhCQSwgMHhDNSwgMHg0OSwgMHhCMiwgMHg3QywgMHg2QSwgMHgyNiwgMHg4 MiwgMHhDNCwKKysgMHg4RiwgMHhBQSwgMHg1QiwgMHgxMCwgMHhENSwgMHhFRSwgMHhBMCwgMHg1 NSwgMHg0MiwgMHhFRiwgMHgzMiwgMHg1QSwKKysgMHgzRiwgMHg1NSwgMHhCMywgMHgyQywgMHgy MiwgMHhFOSwgMHg2NSwgMHhEQSwgMHg4RCwgMHgwQSwgMHhCOSwgMHg3MCwKKysgMHg0MywgMHhD QywgMHgzRiwgMHg2NCwgMHg5QywgMHhCNSwgMHg2NSwgMHg0OSwgMHhCRCwgMHg3RiwgMHgzNSwg MHhDMSwKKysgMHgyMCwgMHg4NSwgMHgyNCwgMHhGRSwgMHhBQSwgMHg2QiwgMHgzNywgMHgwNCwg MHhBMSwgMHgwRSwgMHg5RCwgMHg1QywKKysgMHhCQSwgMHg3RiwgMHgxNCwgMHg2OSwgMHhDNSwg MHg5MywgMHhCMiwgMHgzMywgMHhDMiwgMHhDMCwgMHhDNywgMHhERiwKKysgMHg3RSwgMHg5RSwg MHhBNCwgMHhCMCwgMHhBMCwgMHg2NCwgMHhEMiwgMHhBQywgMHhGQywgMHhGRCwgMHhGRCwgMHg5 OSwKKysgMHg4RiwgMHg2QSwgMHg0MCwgMHgyNiwgMHhDMSwgMHgyRSwgMHg0RSwgMHg4QiwgMHgz MywgMHhCRSwgMHhGMSwgMHg0NSwKKysgMHg1OSwgMHg4RiwgMHgzMywgMHg0MCwgMHgxRCwgMHgy QSwgMHhEMiwgMHhGNywgMHg1MCwgMHg4MywgMHg4OSwgMHhDRiwKKysgMHg5NCwgMHhDNiwgMHhG OCwgMHgzNiwgMHhGMCwgMHg4NCwgMHgwQiwgMHg4NSwgMHhBNSwgMHgwMiwgMHhBOSwgMHgwRiwK KysgMHg0MSwgMHg3QSwgMHg3NywgMHhBMywgMHgyRiwgMHg0NywgMHgxRSwgMHgxRCwgMHhFQywg MHhFNiwgMHhEMywgMHgwMSwKKysgMHgxRSwgMHg2RiwgMHg3QSwgMHg5NiwgMHg1MCwgMHgzNywg MHgzNywgMHg0QiwgMHgyNywgMHg1MiwgMHgwQiwgMHhEQywKKysgMHhEQiwgMHhDNywgMHhBOSwg MHgzMSwgMHhCMiwgMHg0MCwgMHhFRSwgMHg2MCwgMHg0MSwgMHgyNiwgMHg2QSwgMHgwNSwKKysg MHhDRSwgMHgwOCwgMHgxRCwgMHg4OQorIH07CisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7CistICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAw eEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAweEM1LCAweDU4LCAweEE3LAorLSAgMHhGRSwg MHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5 NSwgMHhGQSwKKy0gIDB4QjEsIDB4OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4 NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCistICAweDMwLCAweDlELCAweDBELCAweDRBLCAw eDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorLSAgMHg4Mywg MHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgw NSwgMHhFRSwKKy0gIDB4QjEsIDB4RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4 MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCistICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAw eEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorLSAgMHgzNywg MHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgy NCwgMHg0OSwKKy0gIDB4NTgsIDB4RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4 OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCistICAweEM4LCAweDUyLCAweEZBLCAweENGLCAw eDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorLSAgMHg1NCwg MHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAorKyAweEI0LCAweDAxLCAw eDkzLCAweDE2LCAweDA1LCAweEY2LCAweEVCLCAweEUyLCAweEE0LCAweEVCLCAweDQ4LCAweEFB LAorKyAweDAwLCAweEY0LCAweEExLCAweDk5LCAweDBBLCAweEI0LCAweEI2LCAweDYzLCAweEU5 LCAweDY4LCAweENBLCAweEIzLAorKyAweDEzLCAweEQ3LCAweDY2LCAweDZBLCAweENELCAweENC LCAweDMzLCAweDlGLCAweEU1LCAweDg0LCAweEUyLCAweEMzLAorKyAweDBCLCAweDUzLCAweEU1 LCAweDhCLCAweDk2LCAweDRCLCAweERCLCAweDJELCAweDgwLCAweEE0LCAweDFELCAweEUzLAor KyAweDgxLCAweERDLCAweDUyLCAweDk5LCAweEJBLCAweDlCLCAweDZBLCAweDlELCAweDQ4LCAw eDFGLCAweDczLCAweEY3LAorKyAweEFDLCAweDA5LCAweDEzLCAweEExLCAweDE2LCAweDJDLCAw eDYwLCAweEZCLCAweEJDLCAweDI1LCAweEY3LCAweDUzLAorKyAweEQxLCAweDA0LCAweDVBLCAw eDNGLCAweDk1LCAweDA5LCAweDVFLCAweEU1LCAweEEyLCAweDdELCAweEZDLCAweDJBLAorKyAw eDUxLCAweDFELCAweDIxLCAweENFLCAweDJCLCAweDRFLCAweDFCLCAweEI4LCAweENCLCAweERE LCAweDI0LCAweEVFLAorKyAweDk5LCAweDFELCAweDM3LCAweERDLCAweEVELCAweDVGLCAweDJG LCAweDQ4LCAweDVFLCAweDMzLCAweDk0LCAweDA2LAorKyAweDE5LCAweENELCAweDVBLCAweDI2 LCAweDg1LCAweDc3LCAweDlELCAweEFGLCAweDg2LCAweDk3LCAweEM5LCAweDA4LAorKyAweEQ1 LCAweDgxLCAweDBFLCAweEI4LCAweDlGLCAweEI2LCAweEFGLCAweDIwLCAweDcyLCAweERDLCAw eDEzLCAweDRELAorKyAweDdBLCAweEU0LCAweDVDLCAweDgxLCAweERFLCAweEMwLCAweDNELCAw eDE5LCAweDlDLCAweDMzLCAweDExLCAweDA3LAorKyAweEQ1LCAweEE5LCAweDUxLCAweDY3LCAw eENELCAweEZELCAweDM3LCAweDYxLCAweDE0LCAweDlGLCAweEU3LCAweDcwLAorKyAweDE4LCAw eDMyLCAweEMzLCAweDM0LCAweDU0LCAweDBELCAweDRGLCAweEI0LCAweEFFLCAweDlGLCAweEVD LCAweDY0LAorKyAweEQ4LCAweEIyLCAweDE2LCAweEE0LCAweEIyLCAweDk5LCAweDkyLCAweENC LCAweDdGLCAweDFGLCAweDA2LCAweDE3LAorKyAweDVGLCAweEExLCAweDA3LCAweDY4LCAweEFF LCAweEE3LCAweDJELCAweDAzLCAweDkxLCAweDJBLCAweDlELCAweDY5LAorKyAweEMyLCAweDlE LCAweDkwLCAweEY3LCAweEY5LCAweDY2LCAweDVELCAweDEzLCAweEI3LCAweDdGLCAweEQzLCAw eDk3LAorKyAweDQ1LCAweDk3LCAweDQzLCAweEQ4LCAweENFLCAweDNDLCAweEYyLCAweDk4LCAw eDk4LCAweERELCAweEUyLCAweDJELAorKyAweENGLCAweEExLCAweEM0LCAweDI1LCAweDQ2LCAw eDJFLCAweEQyLCAweEU1LCAweDVGLCAweEM2LCAweDAxLCAweEM1LAorKyAweDRGLCAweDQyLCAw eDJCLCAweERFLCAweDBGLCAweEVBLCAweDRBLCAweDRGLCAweEMzLCAweDVCLCAweERGLCAweDlC LAorKyAweDVELCAweDMwLCAweDE4LCAweDkzLCAweEQwLCAweERFLCAweEM1LCAweDA5LCAweEFB LCAweDU3LCAweDU3LCAweEJELAorKyAweDJELCAweDg0LCAweDAzLCAweEI3CisgfTsKKyAKKyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKKy0gIDB4 NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEs IDB4RTMsIDB4ODksCistICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1 LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAorLSAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0 QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKKy0gIDB4 QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYs IDB4NzMsIDB4NEUsCistICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhF LCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAorLSAgMHhBQiwgMHhGNSwgMHgwMSwgMHhE NiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKKy0gIDB4 MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMs IDB4REEsIDB4QjYsCistICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4 LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAorLSAgMHgyMSwgMHhCNywgMHg3RSwgMHhB RCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKKy0gIDB4 NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDks IDB4QjksIDB4RjYsCistICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJE LCAweDFDCisrIDB4MzgsIDB4REEsIDB4OTksIDB4NTEsIDB4MjYsIDB4MzgsIDB4QzYsIDB4N0Ys IDB4QzQsIDB4ODEsIDB4NTcsIDB4MTksCisrIDB4MzUsIDB4QzYsIDB4RjYsIDB4MUUsIDB4OTAs IDB4NDcsIDB4MjAsIDB4NTUsIDB4NDcsIDB4NTYsIDB4MjYsIDB4RTksCisrIDB4RjIsIDB4QTgs IDB4MzksIDB4NkMsIDB4RDUsIDB4Q0QsIDB4Q0IsIDB4NTUsIDB4RkMsIDB4MEMsIDB4QzUsIDB4 Q0IsCisrIDB4RjcsIDB4NDAsIDB4MTcsIDB4M0IsIDB4Q0YsIDB4RTQsIDB4MDUsIDB4MDMsIDB4 M0IsIDB4QTAsIDB4QjIsIDB4QzksCisrIDB4MEQsIDB4NUUsIDB4NDgsIDB4M0EsIDB4RTksIDB4 QUQsIDB4MjgsIDB4NzEsIDB4N0QsIDB4OEYsIDB4ODksIDB4MTYsCisrIDB4NTksIDB4OTMsIDB4 MzUsIDB4REMsIDB4NEQsIDB4N0IsIDB4REYsIDB4ODQsIDB4RTQsIDB4NjgsIDB4QUEsIDB4MzMs CisrIDB4QUEsIDB4REMsIDB4NjYsIDB4NTAsIDB4QzgsIDB4QTksIDB4MzIsIDB4MTIsIDB4REMs IDB4QzYsIDB4OTAsIDB4NDksCisrIDB4MEIsIDB4NzUsIDB4RkYsIDB4OUIsIDB4OTUsIDB4MDAs IDB4OUEsIDB4OTAsIDB4RTAsIDB4RDQsIDB4MEUsIDB4NjcsCisrIDB4QUIsIDB4M0MsIDB4NDcs IDB4MzYsIDB4QzUsIDB4MkUsIDB4MUMsIDB4NDYsIDB4RjAsIDB4MkQsIDB4RDMsIDB4OEIsCisr IDB4NDIsIDB4MDgsIDB4REUsIDB4MEQsIDB4QjYsIDB4MkMsIDB4ODYsIDB4QjAsIDB4MzUsIDB4 NzEsIDB4MTgsIDB4NkIsCisrIDB4ODksIDB4NjcsIDB4QzAsIDB4MDUsIDB4QUQsIDB4RjQsIDB4 MUQsIDB4NjIsIDB4NEUsIDB4NzUsIDB4RUMsIDB4RDYsCisrIDB4QzIsIDB4REIsIDB4MDcsIDB4 QjAsIDB4QjYsIDB4OEQsIDB4MTUsIDB4QUQsIDB4Q0QsIDB4QkYsIDB4RjUsIDB4NjAsCisrIDB4 NzYsIDB4QUUsIDB4NDgsIDB4QjgsIDB4NzcsIDB4N0YsIDB4QzUsIDB4MDEsIDB4RDksIDB4Mjks IDB4QkIsIDB4RDYsCisrIDB4MTcsIDB4QTIsIDB4MjAsIDB4NUEsIDB4QzAsIDB4NEEsIDB4M0Is IDB4MzQsIDB4QzgsIDB4QjksIDB4MzksIDB4Q0YsCisrIDB4MDYsIDB4ODksIDB4OTUsIDB4NkYs IDB4QzcsIDB4Q0EsIDB4QzQsIDB4RTQsIDB4NDMsIDB4REYsIDB4NUEsIDB4MjMsCisrIDB4RTIs IDB4ODksIDB4QTMsIDB4MzgsIDB4NzgsIDB4MzEsIDB4MzgsIDB4QzYsIDB4QTQsIDB4NkYsIDB4 NUYsIDB4NzMsCisrIDB4NUEsIDB4RTUsIDB4OUUsIDB4MDksIDB4RTcsIDB4NkYsIDB4RDQsIDB4 RjgsIDB4M0UsIDB4QjcsIDB4QjAsIDB4NTYsCisrIDB4OUEsIDB4RjMsIDB4NjUsIDB4RjAsIDB4 QzIsIDB4QTYsIDB4OEEsIDB4MDgsIDB4QkEsIDB4NDQsIDB4QUMsIDB4OTcsCisrIDB4REUsIDB4 QjQsIDB4MTYsIDB4ODMsIDB4REYsIDB4RTMsIDB4RUUsIDB4NzEsIDB4RkEsIDB4RjksIDB4NTEs IDB4NTAsCisrIDB4MTQsIDB4REMsIDB4RkQsIDB4NkEsIDB4ODIsIDB4MjAsIDB4NjgsIDB4NjQs IDB4N0QsIDB4NEUsIDB4ODIsIDB4NjgsCisrIDB4RDcsIDB4NDUsIDB4RkEsIDB4NkEsIDB4RTQs IDB4RTUsIDB4MjksIDB4M0EsIDB4NzAsIDB4RkIsIDB4RTQsIDB4NjIsCisrIDB4MkIsIDB4MzEs IDB4QjksIDB4N0QKKyB9OworIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff UFNTX1NIQTM4NFtdID0geworLSAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwg MHg0MCwgMHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKKy0gIDB4RUMsIDB4MUMsIDB4QzQs IDB4QzgsIDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCist ICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAw eDQ0LCAweDlBLCAweENELAorLSAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwg MHg3NSwgMHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKKy0gIDB4NkYsIDB4MDIsIDB4RUYs IDB4QzEsIDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCist ICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAw eEFDLCAweDRGLCAweEZCLAorLSAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2Qiwg MHg5RCwgMHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKKy0gIDB4M0EsIDB4QkUsIDB4ODks IDB4MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCist ICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAw eDFGLCAweENBLCAweDZGLAorLSAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwg MHhBRSwgMHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKKy0gIDB4NDgsIDB4NDQsIDB4RUUs IDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKKysgMHg5OSwgMHgwMiwgMHhDOSwgMHgxRSwg MHgzMSwgMHg4MiwgMHhCNCwgMHhFNiwgMHgxQiwgMHgzMiwgMHhDRSwgMHg1RCwKKysgMHg0MSwg MHgxRCwgMHgwMCwgMHgyRiwgMHgwNCwgMHg4QiwgMHhCRCwgMHgzNywgMHg3OSwgMHhDRiwgMHg3 NywgMHgwMywKKysgMHgwNSwgMHg2QSwgMHgyMSwgMHhDNywgMHg4RCwgMHgyNCwgMHg2MCwgMHg0 OSwgMHgzOSwgMHg1OCwgMHhDNSwgMHgyNywKKysgMHg4RiwgMHhDNSwgMHg5NywgMHg0QSwgMHhC MiwgMHhFMSwgMHhENCwgMHgzNiwgMHg1NywgMHhCRCwgMHg0MywgMHhDQywKKysgMHg3QiwgMHhD RSwgMHhGMiwgMHhBNSwgMHgzMCwgMHhGOCwgMHg3MiwgMHgxNCwgMHhCQiwgMHhEMCwgMHg5Riwg MHhDMSwKKysgMHg0OSwgMHhDOCwgMHgxQywgMHhBRiwgMHhDRCwgMHg5NSwgMHg3OCwgMHg3Miwg MHgyNSwgMHhGOSwgMHg0NSwgMHhDNiwKKysgMHg1QiwgMHg2MiwgMHg1RSwgMHgwMSwgMHhENywg MHg0MCwgMHg1RSwgMHhDOCwgMHhDQSwgMHgwQSwgMHhGMywgMHhCQSwKKysgMHgwOCwgMHgwNywg MHg4OCwgMHhDQSwgMHg0OSwgMHgzNiwgMHg4NCwgMHg3RCwgMHhGNiwgMHhGQywgMHg1QSwgMHhE QiwKKysgMHhGQywgMHg1MCwgMHhEMywgMHhFQiwgMHgzRCwgMHg4MywgMHhCMCwgMHhGNSwgMHg5 NCwgMHg1RSwgMHg4OCwgMHhDMywKKysgMHg4MiwgMHhDRCwgMHg1MywgMHg0MCwgMHg5NiwgMHgx OCwgMHg2QiwgMHg0QSwgMHg2QywgMHg5QywgMHhGRSwgMHhFNSwKKysgMHgzQiwgMHg3NSwgMHhG OSwgMHhFQiwgMHhBNSwgMHg3NywgMHgxMSwgMHhFRiwgMHg4OCwgMHgxQywgMHgyNSwgMHg3MCwK KysgMHg3RCwgMHg4OCwgMHg1RCwgMHhDMywgMHhDQSwgMHhFMSwgMHg0OSwgMHgxNCwgMHg5MCwg MHhBRCwgMHhGMiwgMHg1RSwKKysgMHg0OSwgMHhENywgMHg5OSwgMHhBNSwgMHg3QiwgMHg3Nywg MHgzQiwgMHg4RSwgMHhCOCwgMHhEQiwgMHhGMSwgMHg0QywKKysgMHhENiwgMHg5QSwgMHhEQywg MHhFNSwgMHg3QSwgMHgxQywgMHhFMSwgMHhDRSwgMHg5RCwgMHhGMSwgMHhGMywgMHhBMCwKKysg MHgwQSwgMHgzNSwgMHg1MiwgMHg5RCwgMHhCOSwgMHg0NiwgMHg5NCwgMHg4MiwgMHgwRiwgMHhG NywgMHhCMiwgMHg2MiwKKysgMHg1MSwgMHg3MCwgMHg3NSwgMHhEMiwgMHgzNywgMHg5NiwgMHg2 NywgMHgyRiwgMHhEMCwgMHgyMiwgMHhEOCwgMHgwNywKKysgMHg4RCwgMHg2OSwgMHg5RSwgMHg2 RCwgMHgwQiwgMHg0MCwgMHg0RiwgMHg3MCwgMHhFQywgMHgwQiwgMHhDQSwgMHg4OCwKKysgMHg4 MCwgMHg4RCwgMHg5QSwgMHhGNCwgMHhGOSwgMHgxOCwgMHg1MCwgMHgyNywgMHgwOCwgMHhGQSwg MHhDQywgMHhDNywKKysgMHgzRiwgMHhFNCwgMHg4NCwgMHg4MywgMHhBMSwgMHhCNiwgMHgxRCwg MHgyMywgMHgzNCwgMHhGRSwgMHg0OCwgMHhFNSwKKysgMHhFMywgMHhBRSwgMHg0RCwgMHg5OCwg MHhCQywgMHhBNiwgMHg4QSwgMHg5RiwgMHhGRCwgMHg0RCwgMHhEQiwgMHg5RCwKKysgMHhGNywg MHhFQiwgMHg0RSwgMHhCNiwgMHg2RiwgMHgyNSwgMHhFQSwgMHg3QSwgMHhFOSwgMHg4NSwgMHhC MiwgMHhFRiwKKysgMHg5MCwgMHhEMiwgMHhBNiwgMHgyQgorIH07CisgCisgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7CistICAweDA3LCAweDFFLCAw eEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhD LAorLSAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwgMHg4 RiwgMHgxMiwgMHg1MywgMHg5QSwKKy0gIDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMsIDB4QzEsIDB4 MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCistICAweDRCLCAweEYzLCAw eDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5 LAorLSAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2 NywgMHg1RiwgMHhGRSwgMHhENywKKy0gIDB4N0MsIDB4RTMsIDB4N0YsIDB4RUQsIDB4REIsIDB4 ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCistICAweDU3LCAweEUzLCAw eDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEz LAorLSAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5 QSwgMHg2QSwgMHgzOSwgMHg2MywKKy0gIDB4MkQsIDB4NjAsIDB4RjUsIDB4NEMsIDB4REYsIDB4 OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4RkUsCistICAweDc2LCAweEYyLCAw eDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4 LAorLSAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgorKyAw eDNGLCAweDgzLCAweDQzLCAweDc4LCAweDI1LCAweEJFLCAweDgxLCAweEIyLCAweDZFLCAweDc4 LCAweDExLCAweDMyLAorKyAweEQwLCAweDg4LCAweDA1LCAweDUzLCAweDk1LCAweEVELCAweDgx LCAweDEyLCAweENFLCAweDUwLCAweEQ5LCAweDA2LAorKyAweDQyLCAweDg5LCAweEEwLCAweDU1 LCAweDdBLCAweDA1LCAweDEzLCAweDk0LCAweDM1LCAweDlCLCAweENBLCAweDVELAorKyAweENC LCAweEIyLCAweDMyLCAweEUxLCAweDA0LCAweDk5LCAweEVDLCAweEU3LCAweEE2LCAweDY5LCAw eDRELCAweDJCLAorKyAweEMxLCAweDU3LCAweDEzLCAweDQ4LCAweDBELCAweDZCLCAweDRELCAw eDgzLCAweDI4LCAweDA2LCAweDc5LCAweDlELAorKyAweEI0LCAweDcwLCAweENFLCAweEMwLCAw eEZDLCAweDNCLCAweDY5LCAweEIzLCAweDkxLCAweDU0LCAweEE5LCAweDQ0LAorKyAweDJFLCAw eERBLCAweDRBLCAweEM1LCAweEMyLCAweDk5LCAweEYwLCAweERFLCAweENBLCAweDc3LCAweDk5 LCAweDZCLAorKyAweDBDLCAweDc5LCAweEU1LCAweDI5LCAweDc0LCAweDgzLCAweDY5LCAweEVB LCAweEI4LCAweDcyLCAweDMwLCAweDNELAorKyAweDdBLCAweDMwLCAweEUxLCAweDAzLCAweDdC LCAweDA5LCAweEU2LCAweDExLCAweEMwLCAweERDLCAweEZGLCAweEZELAorKyAweEJELCAweEVD LCAweDlDLCAweENDLCAweDQ2LCAweDdCLCAweDRDLCAweDRDLCAweDU5LCAweEJFLCAweDgyLCAw eDdDLAorKyAweEY1LCAweDYwLCAweDVBLCAweEMzLCAweEU4LCAweEE4LCAweDhBLCAweDM4LCAw eDlFLCAweDAxLCAweDU3LCAweEYxLAorKyAweDc5LCAweDNBLCAweDdDLCAweEEzLCAweDlGLCAw eDEyLCAweDFBLCAweDRGLCAweDJFLCAweEEyLCAweEU1LCAweDBBLAorKyAweEFCLCAweEMwLCAw eEY0LCAweEE1LCAweEUzLCAweDVGLCAweDg5LCAweDFDLCAweDhGLCAweEE0LCAweDVFLCAweENF LAorKyAweDBELCAweDkxLCAweDA1LCAweDFCLCAweDE3LCAweDYyLCAweDQ4LCAweEZFLCAweEE1 LCAweDRDLCAweEVGLCAweDJELAorKyAweDI4LCAweEYxLCAweDVFLCAweEU2LCAweEQxLCAweDMw LCAweDg5LCAweDBBLCAweEFELCAweDE4LCAweEFGLCAweDZGLAorKyAweDA0LCAweDA5LCAweDM2 LCAweDlBLCAweEZGLCAweENBLCAweEExLCAweEE3LCAweDA1LCAweDdGLCAweEQ0LCAweEJGLAor KyAweDNBLCAweEI1LCAweDQyLCAweDZELCAweEU5LCAweDA3LCAweDI5LCAweDY1LCAweDhCLCAw eEFELCAweDRELCAweDBGLAorKyAweDIyLCAweEUxLCAweDU5LCAweDQzLCAweDY4LCAweDg3LCAw eEE4LCAweDhCLCAweEJDLCAweDY5LCAweEExLCAweDk0LAorKyAweDIyLCAweDNFLCAweDhBLCAw eDQ5LCAweEU4LCAweEEzLCAweDZGLCAweEMyLCAweDkzLCAweDU4LCAweEU3LCAweEFFLAorKyAw eEM5LCAweDFGLCAweENGLCAweDYxLCAweDkzLCAweEZDLCAweEMxLCAweEY2LCAweEYzLCAweDI3 LCAweDdGLCAweDBBLAorKyAweDkwLCAweEUwLCAweDY1LCAweDMyLCAweDU3LCAweDQ3LCAweEUy LCAweEVELCAweDA4LCAweDU5LCAweEE2LCAweEYwLAorKyAweDE3LCAweDJDLCAweDEzLCAweEUw CisgfTsKKyAKKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsK Ky0gIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4Nzks IDB4NUMsIDB4RjIsIDB4NEMsCistICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0 LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAorLSAgMHhFNywgMHhGRCwgMHg2 MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwK Ky0gIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMs IDB4M0QsIDB4MUUsIDB4RjgsCistICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBB LCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAorLSAgMHgyMCwgMHgyMiwgMHhC RSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwK Ky0gIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUs IDB4Q0EsIDB4MkUsIDB4NEUsCistICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3 LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAorLSAgMHgzNSwgMHgwNywgMHgx MSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwK Ky0gIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYs IDB4NEIsIDB4MkYsIDB4OTUsCistICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5 LCAweDQ2LCAweEI0CisrIDB4M0IsIDB4NjAsIDB4NEIsIDB4RkMsIDB4NTQsIDB4MjgsIDB4MjMs IDB4RTYsIDB4MkYsIDB4MDUsIDB4MDQsIDB4QkEsCisrIDB4OUQsIDB4RTQsIDB4M0MsIDB4Qjgs IDB4NUIsIDB4NjAsIDB4NUMsIDB4Q0QsIDB4OUQsIDB4RUEsIDB4QzMsIDB4NEMsCisrIDB4QzIs IDB4MzMsIDB4RTYsIDB4QzYsIDB4MjEsIDB4NDgsIDB4NzYsIDB4RUMsIDB4QjIsIDB4RjUsIDB4 MTEsIDB4REUsCisrIDB4NDQsIDB4QjQsIDB4QUYsIDB4MTYsIDB4MTEsIDB4QzMsIDB4MTgsIDB4 MTYsIDB4QjMsIDB4NjksIDB4QkIsIDB4OTQsCisrIDB4RUQsIDB4RTgsIDB4QjMsIDB4OUUsIDB4 QjEsIDB4NDMsIDB4OEUsIDB4Q0UsIDB4QjQsIDB4MzQsIDB4OUIsIDB4MDgsCisrIDB4MjIsIDB4 QUYsIDB4MzEsIDB4NzMsIDB4QjUsIDB4RkEsIDB4MTEsIDB4N0UsIDB4OEYsIDB4MTMsIDB4NTIs IDB4RUMsCisrIDB4QzksIDB4MDMsIDB4RUUsIDB4MEQsIDB4MkIsIDB4OTEsIDB4MzIsIDB4RjIs IDB4OEUsIDB4REYsIDB4MDIsIDB4RTAsCisrIDB4MEEsIDB4NDcsIDB4RDIsIDB4MEEsIDB4NTEs IDB4MDAsIDB4MUEsIDB4MzAsIDB4NkYsIDB4MEMsIDB4QjMsIDB4NTQsCisrIDB4NjQsIDB4MjAs IDB4OTAsIDB4MEMsIDB4MDEsIDB4QkUsIDB4QzAsIDB4NDIsIDB4OEMsIDB4NUQsIDB4MTgsIDB4 NkYsCisrIDB4MzIsIDB4NzUsIDB4NDUsIDB4N0IsIDB4MUMsIDB4MDQsIDB4QTIsIDB4OUYsIDB4 ODQsIDB4RDcsIDB4RjUsIDB4M0EsCisrIDB4OTUsIDB4RDQsIDB4RTgsIDB4OEQsIDB4RUMsIDB4 OTksIDB4RUYsIDB4MTgsIDB4NUUsIDB4NjQsIDB4RDMsIDB4QUYsCisrIDB4RjgsIDB4RDQsIDB4 RkYsIDB4M0MsIDB4ODcsIDB4QTAsIDB4M0YsIDB4QzcsIDB4MjIsIDB4MDUsIDB4RkQsIDB4RkQs CisrIDB4MjksIDB4OEEsIDB4MjgsIDB4REEsIDB4QTksIDB4OEEsIDB4OEIsIDB4MjMsIDB4NjIs IDB4OUQsIDB4NDIsIDB4QjgsCisrIDB4NEEsIDB4NzYsIDB4MEQsIDB4OUYsIDB4OUEsIDB4RTAs IDB4RTYsIDB4REQsIDB4QUQsIDB4NUUsIDB4NUYsIDB4RDUsCisrIDB4MzIsIDB4RTksIDB4NEIs IDB4OTcsIDB4N0QsIDB4NjIsIDB4MEEsIDB4QjMsIDB4QkUsIDB4RjIsIDB4OEMsIDB4MUYsCisr IDB4MkIsIDB4MjIsIDB4MDYsIDB4MTUsIDB4MzMsIDB4NzEsIDB4RUQsIDB4OUIsIDB4QTAsIDB4 ODIsIDB4Q0UsIDB4QkYsCisrIDB4M0IsIDB4MDgsIDB4NUYsIDB4QTcsIDB4MjAsIDB4OTQsIDB4 MDksIDB4RUIsIDB4ODIsIDB4QTUsIDB4NDEsIDB4NjAsCisrIDB4RjEsIDB4MDgsIDB4RUIsIDB4 OEQsIDB4Q0MsIDB4OEQsIDB4QzksIDB4NTIsIDB4MEEsIDB4QUYsIDB4RjQsIDB4RjksCisrIDB4 OUYsIDB4ODIsIDB4RDgsIDB4MEIsIDB4NzUsIDB4NUUsIDB4RTQsIDB4QUYsIDB4NjUsIDB4OTYs IDB4QUYsIDB4RkMsCisrIDB4MzMsIDB4QkYsIDB4OUYsIDB4M0UsIDB4QTQsIDB4N0IsIDB4ODYs IDB4QzcsIDB4RjcsIDB4NDcsIDB4QUIsIDB4MzcsCisrIDB4MDUsIDB4RDYsIDB4MEQsIDB4MzEs IDB4NzIsIDB4OEMsIDB4ODAsIDB4MUUsIDB4QTksIDB4NTQsIDB4RkMsIDB4REYsCisrIDB4Mjcs IDB4OTAsIDB4RTIsIDB4MDEKKyB9OworIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfU0hBMjI0W10gPSB7CistICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBF LCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAweDE1LCAweEY5LAorLSAgMHgyNSwgMHhCQiwgMHhG QSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwK Ky0gIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUs IDB4MUEsIDB4QzUsIDB4ODksCistICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUw LCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAweDlFLCAweENELAorLSAgMHhBNCwgMHgwMiwgMHhB RCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwK Ky0gIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUs IDB4MEIsIDB4QTksIDB4Q0MsCistICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1 LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAweEM2LCAweDNCLAorLSAgMHgwQiwgMHg0NCwgMHg0 QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwK Ky0gIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAs IDB4NjYsIDB4RTYsIDB4MzUsCistICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAy LCAweDczLCAweDA0LCAweDc3LCAweDgyLCAweEU2LCAweERDLAorLSAgMHg0MCwgMHgyMSwgMHg4 OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4RAorKyAweEEyLCAweEQ4LCAweDQyLCAweDUz LCAweERELCAweEJGLCAweDFGLCAweDZCLCAweDA3LCAweEUwLCAweDYwLCAweDg2LAorKyAweDVB LCAweDYwLCAweDA2LCAweDhGLCAweDQ0LCAweEQ5LCAweEIwLCAweDRBLCAweEFBLCAweDkwLCAw eDcxLCAweEI4LAorKyAweEIyLCAweEJDLCAweDMwLCAweDQxLCAweDUwLCAweEJCLCAweEZELCAw eDQ2LCAweDk4LCAweDRELCAweEMwLCAweDg5LAorKyAweDU3LCAweDg1LCAweDhBLCAweDk3LCAw eDQ5LCAweDI1LCAweEE4LCAweDBDLCAweDY5LCAweDcwLCAweDE5LCAweDM5LAorKyAweDY2LCAw eDI0LCAweEI0LCAweDY5LCAweDQ3LCAweEQyLCAweDdDLCAweERFLCAweDJELCAweDM3LCAweDU5 LCAweEIzLAorKyAweEUzLCAweEM3LCAweDZCLCAweERELCAweEJFLCAweEUxLCAweEU2LCAweDI4 LCAweDlBLCAweDhELCAweDQyLCAweDNFLAorKyAweDI4LCAweDAxLCAweEQ3LCAweDAzLCAweEM5 LCAweDczLCAweEMzLCAweDZCLCAweDAzLCAweEVDLCAweDFFLCAweEY4LAorKyAweDUzLCAweDhC LCAweDUyLCAweDQyLCAweDg5LCAweDU1LCAweEI3LCAweDg3LCAweEE5LCAweDk0LCAweEMyLCAw eEI0LAorKyAweDRCLCAweDc2LCAweEY1LCAweDYxLCAweDQ3LCAweEUxLCAweDQ0LCAweDdCLCAw eEVDLCAweEI0LCAweDI1LCAweDY2LAorKyAweEMwLCAweEZGLCAweEVCLCAweDg2LCAweDI0LCAw eEFBLCAweEE4LCAweDcyLCAweEM3LCAweEZCLCAweEZCLCAweEY2LAorKyAweDg0LCAweEE3LCAw eDVCLCAweEQ0LCAweDg3LCAweEU1LCAweDg0LCAweDU2LCAweDFFLCAweDRDLCAweEU1LCAweEJD LAorKyAweDg3LCAweDk0LCAweEFDLCAweDlDLCAweDFCLCAweDNELCAweEY3LCAweEQ0LCAweDM2 LCAweDg1LCAweDlGLCAweEM5LAorKyAweEY2LCAweDQzLCAweDNGLCAweEI2LCAweDI1LCAweDMz LCAweDQ4LCAweDBGLCAweEU1LCAweDdDLCAweENELCAweDUzLAorKyAweDQ4LCAweEVCLCAweDAy LCAweDExLCAweEI5LCAweDlFLCAweEMzLCAweEI0LCAweEUxLCAweDU0LCAweEQ2LCAweEFBLAor KyAweDFBLCAweDlFLCAweDEwLCAweEUxLCAweDI3LCAweDI1LCAweEYyLCAweEUxLCAweEFCLCAw eEFCLCAweDZDLCAweDQ1LAorKyAweDYxLCAweEQ1LCAweEEzLCAweDZDLCAweEI2LCAweDMzLCAw eDUyLCAweEFFLCAweDNELCAweEZELCAweDIyLCAweEZDLAorKyAweDNBLCAweEFCLCAweDYzLCAw eDk0LCAweEI1LCAweDNBLCAweDY5LCAweDExLCAweEFDLCAweDk5LCAweDRGLCAweDMzLAorKyAw eDY3LCAweDBBLCAweDFBLCAweDcwLCAweDFFLCAweEI5LCAweEUyLCAweDI2LCAweDI3LCAweDY4 LCAweEVBLCAweEY1LAorKyAweDk3LCAweDU1LCAweEFDLCAweDgzLCAweDZBLCAweDQwLCAweDNC LCAweDU2LCAweEFFLCAweDEzLCAweDg4LCAweEU4LAorKyAweDk4LCAweDcyLCAweDUyLCAweDkx LCAweDdGLCAweDc4LCAweDBBLCAweDE4LCAweEQ0LCAweDQ0LCAweDc4LCAweDgzLAorKyAweDBE LCAweDQ0LCAweDc3LCAweEE2LCAweEYzLCAweDA0LCAweEYxLCAweDhDLCAweEJDLCAweDJGLCAw eEY5LCAweDVCLAorKyAweERCLCAweDcwLCAweDAwLCAweEY2CisgfTsKKyAKKyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0geworLSAgMHgwRCwgMHg1NSwgMHhF MiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywK Ky0gIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAs IDB4N0IsIDB4QUEsIDB4MjMsCistICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1 LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAorLSAgMHg5OCwgMHgyRCwgMHg2 OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwK Ky0gIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEs IDB4OTAsIDB4MkQsIDB4MTgsCistICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5 LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAorLSAgMHhCRSwgMHgyMiwgMHhD NywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwK Ky0gIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUs IDB4ODEsIDB4QTYsIDB4MzgsCistICAweEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlE LCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAorLSAgMHgyNywgMHg0OCwgMHgy QiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwK Ky0gIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKKysgMHhD MiwgMHhCMSwgMHg5NywgMHgwMCwgMHg5QSwgMHhFNSwgMHg4MCwgMHg2QSwgMHhFMiwgMHg1MSwg MHg2OCwgMHhCOSwKKysgMHg3QSwgMHgwQywgMHhGMiwgMHhCNCwgMHg3NywgMHhFRCwgMHgxNSwg MHgwQywgMHg0RSwgMHhFMSwgMHhEQywgMHhGRiwKKysgMHg4RSwgMHhCQywgMHhERSwgMHhDNywg MHg5QSwgMHg5NiwgMHhGMSwgMHg0NywgMHg0NSwgMHgyNCwgMHg5RCwgMHg2RiwKKysgMHhBNiwg MHhGMywgMHgxRCwgMHgwRCwgMHgzNSwgMHg0QywgMHgxQSwgMHhGMywgMHg1OCwgMHgyQywgMHg2 QywgMHgwNiwKKysgMHhENiwgMHgyMiwgMHgzNywgMHg3NywgMHg4QywgMHgzMywgMHhFNSwgMHgw NywgMHg1MywgMHg5MywgMHgyOCwgMHhDRiwKKysgMHg2NywgMHhGQSwgMHhDNCwgMHgxRiwgMHgx QiwgMHgyNCwgMHhEQiwgMHg0QywgMHhDNSwgMHgyQSwgMHg1MSwgMHhBMiwKKysgMHg2MCwgMHgx NSwgMHg4QywgMHg1NCwgMHhCNCwgMHgzMCwgMHhFMiwgMHgyNCwgMHg0NywgMHg4NiwgMHhGMiwg MHhGOCwKKysgMHg2QywgMHhENiwgMHgxMiwgMHg1OSwgMHgyQywgMHg3NCwgMHg5QSwgMHgzNywg MHhGMywgMHhDNCwgMHhBMiwgMHhENSwKKysgMHg0RSwgMHgxRiwgMHg3NywgMHhGMCwgMHgyNywg MHhDRSwgMHg3NywgMHhGOCwgMHg0QSwgMHg3OSwgMHgwMywgMHhCRSwKKysgMHhDOCwgMHgwNiwg MHgyRCwgMHhBNywgMHhBNiwgMHg0NiwgMHhGNSwgMHg1NSwgMHg3OSwgMHhENywgMHg1QywgMHhD NiwKKysgMHg1QiwgMHhCMSwgMHgwMCwgMHg0RSwgMHg3QywgMHhEOSwgMHgxMSwgMHg4NSwgMHhF MCwgMHhCMSwgMHg0RCwgMHgyRCwKKysgMHgxMywgMHhENywgMHhBQywgMHhFQSwgMHg2NCwgMHhE MSwgMHhBQywgMHg4RiwgMHg4RCwgMHg4RiwgMHhFQSwgMHg0MiwKKysgMHg3RiwgMHhGOSwgMHhC NywgMHg3RCwgMHgyQywgMHg2OCwgMHg0OSwgMHgwNywgMHg3QSwgMHg3NCwgMHhFRiwgMHhCNCwK KysgMHhDOSwgMHg5NywgMHgxNiwgMHg1QywgMHg2QywgMHg2RSwgMHg1QywgMHgwOSwgMHgyRSwg MHg4RSwgMHgxMywgMHgyRSwKKysgMHgxQSwgMHg4RCwgMHhBNiwgMHgwQywgMHg2RSwgMHgwQywg MHgxQywgMHgwRiwgMHhDQywgMHhCMiwgMHg3OCwgMHg4QSwKKysgMHgwNywgMHhGQywgMHg1Qywg MHhDMiwgMHhGNSwgMHg2NSwgMHhFQywgMHhBQiwgMHg4QiwgMHgzQywgMHhDQSwgMHg5MSwKKysg MHg2RiwgMHg4NCwgMHg3QywgMHgyMSwgMHgwRSwgMHhCOCwgMHhEQSwgMHg3QiwgMHg2QywgMHhG NywgMHhERiwgMHhBQiwKKysgMHg3RSwgMHgxNSwgMHhGRCwgMHg4NSwgMHgwQiwgMHgzMywgMHg5 QiwgMHg2QSwgMHgzQSwgMHhDMywgMHhFRiwgMHg2NSwKKysgMHgwNCwgMHg2RSwgMHhCMiwgMHhB QywgMHg5OCwgMHhGRCwgMHhFQiwgMHgwMiwgMHhGNSwgMHhDMCwgMHgwQiwgMHg1RSwKKysgMHhD QiwgMHhENCwgMHg4MywgMHg4MiwgMHgxOCwgMHgxQiwgMHhEQSwgMHhCNCwgMHhDRCwgMHhFOCwg MHg3MSwgMHg2QiwKKysgMHgxRCwgMHhCNSwgMHg0RiwgMHhFOSwgMHhENiwgMHg0MywgMHhBMCwg MHgwQSwgMHgxNCwgMHhBMCwgMHhFNywgMHg1RCwKKysgMHg0NywgMHg5RCwgMHgxOCwgMHhENwor IH07CisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsK Ky0gIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4Mjcs IDB4RUYsIDB4RTYsIDB4MUYsCistICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFF LCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAorLSAgMHg2RiwgMHgyMiwgMHgx NiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywK Ky0gIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQs IDB4QTksIDB4QTYsIDB4NTUsCistICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4 LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2LCAweENGLAorLSAgMHg4MiwgMHhERCwgMHg3 RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwK Ky0gIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIs IDB4N0QsIDB4RUIsIDB4OEMsCistICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNE LCAweDRELCAweEJGLCAweDhGLCAweDhCLCAweDlDLCAweENELAorLSAgMHhFQSwgMHg4NSwgMHhF RSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwK Ky0gIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUs IDB4MzcsIDB4REMsIDB4MDQsCistICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1 LCAweDU2LCAweEJGCisrIDB4MTEsIDB4NUUsIDB4NjMsIDB4RkUsIDB4NDcsIDB4QUEsIDB4NkEs IDB4ODQsIDB4RUIsIDB4NDQsIDB4OUEsIDB4MDAsCisrIDB4OTYsIDB4NEEsIDB4RUQsIDB4RDIs IDB4QTcsIDB4NjcsIDB4M0EsIDB4NjQsIDB4ODIsIDB4MzAsIDB4NjEsIDB4MkQsCisrIDB4RTMs IDB4RjUsIDB4NDksIDB4NjgsIDB4NUUsIDB4NjAsIDB4RDIsIDB4NEQsIDB4RUYsIDB4RjIsIDB4 QTQsIDB4QjIsCisrIDB4OUEsIDB4ODEsIDB4MUQsIDB4NDEsIDB4QTUsIDB4NzMsIDB4NTksIDB4 RUIsIDB4QkIsIDB4QzQsIDB4OUUsIDB4MkIsCisrIDB4RUIsIDB4QzMsIDB4REUsIDB4M0EsIDB4 RUEsIDB4RjUsIDB4QUQsIDB4REEsIDB4ODcsIDB4MDgsIDB4NjgsIDB4Q0YsCisrIDB4MTIsIDB4 OUIsIDB4QzEsIDB4RTQsIDB4QTcsIDB4NzEsIDB4RjgsIDB4QkQsIDB4NkIsIDB4NkYsIDB4NTAs IDB4RjEsCisrIDB4RDEsIDB4RkYsIDB4Q0UsIDB4NkMsIDB4RDksIDB4QkUsIDB4REEsIDB4NzYs IDB4RjMsIDB4RUIsIDB4QUIsIDB4OUMsCisrIDB4NDEsIDB4NkUsIDB4NEYsIDB4MzUsIDB4N0Es IDB4NjEsIDB4MjcsIDB4QkMsIDB4MDMsIDB4M0UsIDB4QUUsIDB4M0UsCisrIDB4MUIsIDB4REQs IDB4QUMsIDB4RDksIDB4MUEsIDB4RkYsIDB4RDMsIDB4RjUsIDB4NjYsIDB4NDMsIDB4MDcsIDB4 NzYsCisrIDB4OEEsIDB4NjksIDB4MkQsIDB4MTQsIDB4QjEsIDB4QkUsIDB4NTUsIDB4NDksIDB4 OTAsIDB4ODksIDB4NEIsIDB4QzQsCisrIDB4MTEsIDB4NjcsIDB4RDUsIDB4OUQsIDB4QjAsIDB4 QjIsIDB4RUUsIDB4OEQsIDB4MEEsIDB4NDcsIDB4NEEsIDB4RDksCisrIDB4MEUsIDB4RDEsIDB4 MjQsIDB4RjAsIDB4MzAsIDB4MkIsIDB4RjIsIDB4NzksIDB4NDcsIDB4REIsIDB4NzAsIDB4QjQs CisrIDB4NDYsIDB4RjIsIDB4RjgsIDB4QjcsIDB4QjQsIDB4RjYsIDB4MzQsIDB4NzksIDB4QTgs IDB4MkQsIDB4M0QsIDB4NTYsCisrIDB4RDUsIDB4OUEsIDB4NjAsIDB4N0EsIDB4MDQsIDB4Qzcs IDB4NjYsIDB4MUQsIDB4Q0QsIDB4M0MsIDB4RDUsIDB4MzksCisrIDB4MzcsIDB4MTIsIDB4NTEs IDB4NUUsIDB4OUYsIDB4RjgsIDB4MUEsIDB4QUYsIDB4MTMsIDB4QzEsIDB4MTMsIDB4MDAsCisr IDB4MzUsIDB4RDUsIDB4OEQsIDB4MTcsIDB4RTMsIDB4MDIsIDB4MjgsIDB4RDksIDB4RUMsIDB4 REUsIDB4RDEsIDB4MkYsCisrIDB4OTMsIDB4NDksIDB4MDMsIDB4MTEsIDB4M0UsIDB4NTYsIDB4 OUQsIDB4QzIsIDB4MzEsIDB4RjgsIDB4QUYsIDB4MkQsCisrIDB4RDksIDB4OTksIDB4QjcsIDB4 OEEsIDB4QUMsIDB4NUEsIDB4ODYsIDB4MjAsIDB4M0EsIDB4ODMsIDB4MjksIDB4MjYsCisrIDB4 OUQsIDB4MDMsIDB4NTIsIDB4MkIsIDB4MzQsIDB4NTYsIDB4NDAsIDB4MTYsIDB4NTMsIDB4NTAs IDB4ODIsIDB4QzksCisrIDB4QzcsIDB4RDUsIDB4NTEsIDB4NEMsIDB4RUQsIDB4QjMsIDB4RTIs IDB4RTEsIDB4Q0YsIDB4QTgsIDB4Q0UsIDB4QkQsCisrIDB4QjEsIDB4NDgsIDB4QTYsIDB4OEEs IDB4NzksIDB4MTcsIDB4NTUsIDB4MTEsIDB4RUYsIDB4RTgsIDB4MTQsIDB4RjQsCisrIDB4N0Us IDB4MzcsIDB4MUQsIDB4OTYKKyB9OworIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfU0hBNTEyW10gPSB7CistICAweDY5LCAweDUyLCAweDFCLCAweDUxLCAweDVFLCAweDA2 LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAorLSAgMHg0OSwgMHgyNSwgMHg0 QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwK Ky0gIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIs IDB4NkIsIDB4MzIsIDB4RjEsCistICAweDA0LCAweEMxLCAweDVBLCAweDFBLCAweEVELCAweDFF LCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAorLSAgMHg4RCwgMHhDQywgMHhB QywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1MywgMHg2MiwgMHhCNSwK Ky0gIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQs IDB4NzUsIDB4OTIsIDB4NkIsCistICAweEFGLCAweDYyLCAweDdDLCAweDUyLCAweEYwLCAweEVF LCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAorLSAgMHg1OSwgMHg1NiwgMHhB NSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2MywgMHg4NCwgMHgwNSwK Ky0gIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4NjQs IDB4NzEsIDB4RTAsIDB4MkQsCistICAweDNFLCAweDYyLCAweENFLCAweEI1LCAweDNGLCAweDg4 LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAorLSAgMHhERiwgMHg3MCwgMHgx NCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAorKyAweDM1LCAweDZELCAweEYxLCAweDlF LCAweENGLCAweEIxLCAweEY2LCAweDBDLCAweDA0LCAweDIxLCAweDE3LCAweEIzLAorKyAweEM0 LCAweDlELCAweEZFLCAweDYyLCAweDFDLCAweDFBLCAweDQ1LCAweDAwLCAweDJFLCAweDZCLCAw eEI2LCAweDlGLAorKyAweDVDLCAweEIxLCAweENCLCAweENGLCAweEY5LCAweDY3LCAweEVBLCAw eDYyLCAweDhBLCAweEVCLCAweDc3LCAweDAyLAorKyAweDQyLCAweDMwLCAweDg4LCAweEIxLCAw eDQ4LCAweERGLCAweDEyLCAweDYwLCAweDZFLCAweDkyLCAweEJCLCAweDRCLAorKyAweDA5LCAw eDY4LCAweEQxLCAweDcwLCAweDJCLCAweDU5LCAweEVFLCAweDU3LCAweDk2LCAweEY5LCAweEVB LCAweEEzLAorKyAweDRDLCAweEU5LCAweEM5LCAweEJELCAweDI1LCAweDM0LCAweDY2LCAweDE1 LCAweDZDLCAweEM5LCAweDgxLCAweEQxLAorKyAweDQ4LCAweDBGLCAweDMzLCAweDVGLCAweDA1 LCAweDRGLCAweEMyLCAweEM0LCAweERELCAweDA5LCAweDU0LCAweDc5LAorKyAweEExLCAweDU3 LCAweDA3LCAweDcwLCAweEEwLCAweDMzLCAweDAyLCAweDRELCAweDVELCAweEU5LCAweDI0LCAw eEQxLAorKyAweEVGLCAweEYwLCAweDYxLCAweEQwLCAweDFELCAweDQxLCAweEUyLCAweDlCLCAw eDJCLCAweDdDLCAweEQwLCAweDRFLAorKyAweDU1LCAweEQ5LCAweDZELCAweEExLCAweDE2LCAw eDlGLCAweERBLCAweEMzLCAweDNCLCAweEYxLCAweDc0LCAweEQxLAorKyAweDk5LCAweEYxLCAw eDYzLCAweDU3LCAweEFELCAweEM3LCAweDU1LCAweEY0LCAweDk3LCAweDQzLCAweDFDLCAweEVE LAorKyAweDFCLCAweDdBLCAweDMyLCAweENCLCAweDI0LCAweEE2LCAweDNELCAweDkzLCAweDM3 LCAweDkwLCAweDc0LCAweEVFLAorKyAweEQyLCAweDhELCAweDRCLCAweEJDLCAweDcyLCAweERB LCAweDI1LCAweDJCLCAweDY0LCAweEU5LCAweENBLCAweDY5LAorKyAweDM2LCAweEI2LCAweEVD LCAweDZFLCAweDhGLCAweDMzLCAweDBFLCAweDc0LCAweDQwLCAweDQ4LCAweDUxLCAweEUyLAor KyAweDU0LCAweDZGLCAweEFGLCAweDZFLCAweDM2LCAweDU0LCAweDNBLCAweEVDLCAweDc4LCAw eDM3LCAweEU2LCAweDFGLAorKyAweDc2LCAweEE1LCAweDRELCAweEE2LCAweEQ5LCAweEIzLCAw eDZCLCAweDE3LCAweDZELCAweDYxLCAweEZDLCAweEEzLAorKyAweDg1LCAweDRBLCAweENDLCAw eERBLCAweDUyLCAweEFDLCAweDVCLCAweERBLCAweDUxLCAweEU1LCAweDdGLCAweDVCLAorKyAw eDUyLCAweDhCLCAweDc0LCAweDc1LCAweDk5LCAweDVDLCAweDAxLCAweEZELCAweDI1LCAweDNF LCAweENELCAweDg2LAorKyAweDZGLCAweDdBLCAweEMwLCAweEQ4LCAweDE3LCAweDZGLCAweEQx LCAweEQyLCAweDZCLCAweEFCLCAweDE0LCAweDFGLAorKyAweDNCLCAweEI4LCAweDE1LCAweDA1 LCAweDg2LCAweDQwLCAweDM2LCAweENGLCAweERBLCAweDU5LCAweDJCLCAweDlBLAorKyAweEU5 LCAweDFFLCAweDZFLCAweEQzLCAweDZCLCAweEExLCAweDE5LCAweEM1LCAweEU2LCAweDNGLCAw eEU5LCAweDJFLAorKyAweDQzLCAweEE4LCAweDM0LCAweDBBCisgfTsKKyAKKyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0geworLSAgMHg4NiwgMHhCNCwg MHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhE RiwKKy0gIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4 Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCistICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAw eDgzLCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFDLAorLSAgMHgzNSwgMHhFMiwg MHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5 NywKKy0gIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4 NEIsIDB4MzgsIDB4QkUsIDB4RDYsCistICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3LCAw eEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5LAorLSAgMHhFRSwgMHg1MSwg MHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhE NywKKy0gIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEsIDB4 N0QsIDB4MjQsIDB4MUMsIDB4OTksCistICAweDQ4LCAweEFGLCAweDgyLCAweEZFLCAweDMyLCAw eDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2LAorLSAgMHg4RSwgMHg2RSwg MHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2 NywKKy0gIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKKysg MHhCMSwgMHgwRSwgMHg0RiwgMHhDNiwgMHhFMCwgMHg5NSwgMHg4NSwgMHg3QiwgMHhCRSwgMHhE RSwgMHhDNCwgMHhFNiwKKysgMHgxRiwgMHgxMiwgMHgyRSwgMHg5QiwgMHgzRSwgMHgxMSwgMHhB MywgMHhGMCwgMHhGMCwgMHhBOCwgMHgyMywgMHgxQSwKKysgMHg5NiwgMHg2RSwgMHg5OSwgMHhC NSwgMHg1RiwgMHg4MiwgMHhDNSwgMHg4NywgMHg3NSwgMHhFOSwgMHhENCwgMHhCRiwKKysgMHg5 RiwgMHhFMCwgMHhBNCwgMHhFRCwgMHhDNywgMHgwMSwgMHgyQSwgMHgzRiwgMHg2RiwgMHg0Mywg MHgxRCwgMHg0RiwKKysgMHhFOCwgMHgwNSwgMHgzNCwgMHgzMiwgMHgyMCwgMHgzNiwgMHg5NCwg MHhBMCwgMHg2RCwgMHhDQywgMHhGNiwgMHg0MSwKKysgMHg0OSwgMHg1NiwgMHg5NiwgMHhFQywg MHg5QywgMHg3QywgMHhEMSwgMHgwRSwgMHg5RSwgMHhEOCwgMHgxQiwgMHg0OCwKKysgMHhEOSwg MHhERiwgMHg5OSwgMHg5RiwgMHg5MiwgMHgxNywgMHg5NiwgMHhBNCwgMHhGMSwgMHg4NywgMHg2 NCwgMHg2MSwKKysgMHgzQywgMHhBRiwgMHgwMCwgMHgyNCwgMHhCMywgMHg2NCwgMHg4OCwgMHg4 RSwgMHg0MSwgMHhCRiwgMHgyOSwgMHgxRiwKKysgMHhBMywgMHgyOCwgMHhBRCwgMHgyMSwgMHgx RSwgMHhBMywgMHg5NiwgMHg0MCwgMHgwQSwgMHgwQiwgMHg4MiwgMHhDRCwKKysgMHg5NywgMHg1 OCwgMHgzMywgMHhCNiwgMHg1MiwgMHhBQywgMHhDNSwgMHgzQiwgMHgxNCwgMHhFNywgMHgxRSwg MHg1RCwKKysgMHgwOSwgMHhDOSwgMHg3NiwgMHhCNSwgMHg4OSwgMHhDNiwgMHg5QiwgMHg0Qywg MHhDMiwgMHhDMiwgMHgzMSwgMHgwRSwKKysgMHhCQSwgMHgxRSwgMHhCNSwgMHgxMSwgMHhEMCwg MHhGRCwgMHhDMSwgMHhEQSwgMHg2NCwgMHgxNywgMHhBOCwgMHhDQiwKKysgMHhGMCwgMHg5NCwg MHhGNCwgMHhERCwgMHg4NCwgMHhCNywgMHhFRiwgMHg5QywgMHgxMywgMHg0RiwgMHhERCwgMHgw NiwKKysgMHgwQywgMHhFNCwgMHhDNywgMHhGRCwgMHg2OSwgMHgxMCwgMHgyMCwgMHhEMywgMHg5 MywgMHg1RSwgMHhGOCwgMHhCQSwKKysgMHgyMSwgMHhGQiwgMHg2MiwgMHhDNCwgMHg2MywgMHg3 NiwgMHg0MywgMHhBQSwgMHg3RSwgMHgzQywgMHg1NiwgMHg1RSwKKysgMHhCNCwgMHg0NywgMHgz QSwgMHgwNSwgMHgwRCwgMHhCQiwgMHgxMywgMHhDNCwgMHg5MywgMHhGQiwgMHgyOSwgMHhBOCwK KysgMHgzRSwgMHg3NiwgMHg0MSwgMHg1NCwgMHg5RSwgMHg3QiwgMHhFMiwgMHhFMCwgMHgwNywg MHgxRCwgMHhBNywgMHg5QywKKysgMHg4NSwgMHgxMSwgMHhCNSwgMHhBNSwgMHg4OCwgMHg1OCwg MHgwMiwgMHhEOCwgMHhDMCwgMHg0QiwgMHg4MSwgMHhCRiwKKysgMHgyQiwgMHgzOCwgMHhFMiwg MHgyRiwgMHg0MiwgMHhDQSwgMHg2MywgMHg4QSwgMHgwQSwgMHg3OCwgMHhCQSwgMHg1MCwKKysg MHhFNSwgMHg4NCwgMHgzNSwgMHhEMywgMHg2QSwgMHgxRSwgMHg5NiwgMHgwQiwgMHg5MSwgMHhC MSwgMHgwRSwgMHg4NSwKKysgMHhBOCwgMHg1QywgMHg2RSwgMHg0NiwgMHg1QywgMHg2MSwgMHg4 QywgMHg0RiwgMHg1QiwgMHg2MSwgMHhCNiwgMHgzQywKKysgMHhCNywgMHgyQywgMHhBNSwgMHgx QQorIH07CisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1 NltdID0geworLSAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhD NywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKKy0gIDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4 NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQsCistICAweEVBLCAw eEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDcz LCAweENGLAorLSAgMHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhC OCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKKy0gIDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4 MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4NEIsCistICAweDAwLCAw eDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBF LCAweDk4LAorLSAgMHhBRCwgMHg0RSwgMHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgx OSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKKy0gIDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4 MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4OEMsCistICAweDMzLCAw eDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQy LCAweEJELAorLSAgMHgyMSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhG RiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKKy0gIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4 MEEsIDB4MjksIDB4OTQsIDB4ODAKKysgMHhDNiwgMHg2QywgMHgwMSwgMHg3RiwgMHhCNiwgMHg4 QywgMHhENCwgMHg2MSwgMHg4MywgMHhDNSwgMHhCQywgMHg3NSwKKysgMHgzOSwgMHgyMiwgMHhE RCwgMHgxNywgMHg1QiwgMHg5NSwgMHg0QiwgMHg0QywgMHg0NiwgMHgzOSwgMHgzNywgMHhBNywK KysgMHg1NCwgMHg2QywgMHg0OSwgMHg1QSwgMHg2NywgMHg5MCwgMHg0NywgMHhGNiwgMHg1OSwg MHhBRSwgMHhGQywgMHhERCwKKysgMHhERiwgMHhEQiwgMHhDNywgMHg5MSwgMHhCOSwgMHhCNiwg MHhDRSwgMHhEOCwgMHhGQSwgMHgzMCwgMHgwMSwgMHg5RiwKKysgMHhDQSwgMHhFNSwgMHg0QSwg MHg1MSwgMHhCNywgMHhCRSwgMHhCRCwgMHg0RSwgMHg1NiwgMHgyNSwgMHgwQiwgMHg0OSwKKysg MHhFMCwgMHg0NiwgMHhCQiwgMHg4MSwgMHgwRSwgMHgxNCwgMHg0NywgMHhGRiwgMHhDQiwgMHhC QiwgMHhBMSwgMHg2RCwKKysgMHg0NCwgMHg5QiwgMHhGNywgMHhFRSwgMHg4MSwgMHhFQiwgMHhG NiwgMHg2MiwgMHhFQSwgMHgwRCwgMHg3NiwgMHg3NiwKKysgMHg0RSwgMHgyNSwgMHhENywgMHg5 QSwgMHgyQiwgMHhCMSwgMHg5MiwgMHhFRCwgMHg1QywgMHg3RiwgMHg5RCwgMHg5OSwKKysgMHgw NywgMHg5RSwgMHhCRiwgMHg2MiwgMHg4MywgMHgxMiwgMHg2MSwgMHg5OSwgMHgzRSwgMHhGNSwg MHg2QSwgMHg0QywKKysgMHg1OCwgMHhCMCwgMHgyQSwgMHgxNSwgMHgxQywgMHhBMCwgMHhEMiwg MHg5MSwgMHg4NywgMHg5QywgMHg3RCwgMHg0RiwKKysgMHhFRiwgMHgzQiwgMHgwRiwgMHg2MCwg MHhENywgMHgxRSwgMHhFRiwgMHg3QywgMHhCRSwgMHg2OCwgMHg5NSwgMHhFNiwKKysgMHhCQSwg MHhGQSwgMHhGNiwgMHhEMSwgMHg2NywgMHgzRCwgMHg5RCwgMHgzOSwgMHhBRSwgMHhDMiwgMHg4 NSwgMHhEMiwKKysgMHhERSwgMHhBNSwgMHg4NSwgMHgxRSwgMHg0RCwgMHgyQiwgMHgyQywgMHgw NiwgMHg0NCwgMHg5OCwgMHgxNywgMHg0NiwKKysgMHg4OSwgMHg0MSwgMHgxMywgMHhGQywgMHg5 OSwgMHhENiwgMHg2QywgMHhDRiwgMHgyNiwgMHhBMiwgMHg3NywgMHg4QSwKKysgMHgzRiwgMHgx MCwgMHhGOCwgMHhDNSwgMHhDOSwgMHg0QSwgMHhCNiwgMHg5MywgMHhGNSwgMHgzOCwgMHg4OSwg MHhCRCwKKysgMHhGRiwgMHhBRSwgMHg0MiwgMHgwNiwgMHgyRCwgMHhDRCwgMHgxQiwgMHgzRCwg MHg1QSwgMHhDRCwgMHhGMiwgMHg4QSwKKysgMHg2NSwgMHhBNCwgMHhCNywgMHhCNiwgMHhGNiwg MHg1QiwgMHhFOCwgMHhBNCwgMHg2OCwgMHhCNCwgMHgyNywgMHhEQSwKKysgMHhGMSwgMHg1OSwg MHgzNywgMHgyNCwgMHgxOCwgMHhCNSwgMHg1QiwgMHgxNSwgMHg2MiwgMHg2NCwgMHg2RiwgMHg3 OCwKKysgMHhCQiwgMHgxNywgMHg5NCwgMHg0MiwgMHhBRCwgMHhCMywgMHgwRCwgMHgxOCwgMHhC MCwgMHgxQiwgMHgyOCwgMHgyOSwKKysgMHgzQiwgMHgxNSwgMHhCRiwgMHhEMSwgMHhDOCwgMHgy OCwgMHg0RiwgMHhERiwgMHg3RiwgMHgzNCwgMHg0OSwgMHgyQSwKKysgMHg0NCwgMHhENSwgMHg0 QywgMHg1OSwgMHg5MCwgMHg4MywgMHg4RCwgMHhGQywgMHg1OCwgMHg3RSwgMHhFQywgMHg0QiwK KysgMHg1NCwgMHhGMCwgMHhCNSwgMHhCRAorIH07CisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0geworLSAgMHg1QywgMHg3RCwgMHg5NiwgMHgz NSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKKy0gIDB4 RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4Mzks IDB4MzcsIDB4Q0IsCistICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJF LCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAorLSAgMHhFRiwgMHg3OCwgMHg4MywgMHgx OCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKKy0gIDB4 NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYs IDB4RUUsIDB4MzEsCistICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdC LCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAorLSAgMHgzRSwgMHg5QywgMHgzNSwgMHg5 NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKKy0gIDB4 MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUs IDB4N0MsIDB4RkYsCistICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5 LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAorLSAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1 RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKKy0gIDB4 RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKKysgMHg4OCwgMHg4 NSwgMHhFMSwgMHhDMSwgMHhFMiwgMHhFNSwgMHgwQiwgMHg2QywgMHgwMywgMHgyNywgMHhBQywg MHhDOCwKKysgMHgzQSwgMHg3MiwgMHhCNCwgMHg5QSwgMHhGMywgMHhBRSwgMHg5QywgMHg4OCwg MHg4QywgMHhCRSwgMHgyOCwgMHgwRCwKKysgMHg4OSwgMHg1RiwgMHgwNiwgMHgwRiwgMHg1Riwg MHgwOCwgMHhFMywgMHg5QywgMHhGOSwgMHgyOCwgMHg0RiwgMHhCQiwKKysgMHgyNCwgMHhERCwg MHgyMSwgMHg0QywgMHg0NCwgMHg5NiwgMHg1MCwgMHhCNSwgMHhENCwgMHg4RSwgMHgxMywgMHg2 MCwKKysgMHg3QywgMHhDQiwgMHhEOSwgMHg1RSwgMHg3QywgMHhCNiwgMHhBRCwgMHhBNSwgMHg2 QSwgMHg0MSwgMHgwNCwgMHhBNywKKysgMHg4RSwgMHhGMCwgMHgzOSwgMHgwOCwgMHg3RSwgMHgx OCwgMHg5MSwgMHhGOSwgMHg0NiwgMHg5NywgMHhFRiwgMHhGMiwKKysgMHgxNCwgMHhCMiwgMHgw MSwgMHhGRCwgMHhCMiwgMHgyQiwgMHgzQSwgMHhGOCwgMHg0QSwgMHg1OSwgMHhEMSwgMHgzNiwK KysgMHgxQSwgMHg3RCwgMHgyRCwgMHhCOSwgMHhDNiwgMHg3RiwgMHhERSwgMHg2MiwgMHhCNiwg MHg1NiwgMHhCQSwgMHhGQSwKKysgMHg1QSwgMHhBMSwgMHg1QiwgMHg4QywgMHg1RiwgMHg5OCwg MHhFQywgMHhGOCwgMHg5MywgMHgxMywgMHgxMSwgMHg0MiwKKysgMHhFRSwgMHhDNCwgMHg2Qywg MHg0QSwgMHg4NywgMHg0RSwgMHg5OCwgMHgyMiwgMHhCNiwgMHhCQiwgMHhCMCwgMHgzQSwKKysg MHg3MCwgMHhBOSwgMHhDQywgMHhCQywgMHgzMSwgMHgyNywgMHhFNywgMHhCQywgMHhDQSwgMHhF QywgMHg1MiwgMHg4MSwKKysgMHg3NiwgMHg5QSwgMHgzRiwgMHgxOCwgMHhDMSwgMHgxQywgMHg0 QSwgMHhDNywgMHg1NiwgMHhFMywgMHhGMCwgMHg2RiwKKysgMHgzNiwgMHhCQiwgMHg5QiwgMHhG OSwgMHg0MywgMHg5MCwgMHhCRSwgMHg3OSwgMHg1OSwgMHg2MywgMHgxQywgMHhGRSwKKysgMHhC NiwgMHg0NiwgMHg4QiwgMHhCQSwgMHhCRCwgMHhBQSwgMHgyOCwgMHg3MSwgMHg5QiwgMHhENiwg MHhERCwgMHgwNSwKKysgMHgwMCwgMHgzQiwgMHhCQywgMHgyRCwgMHg0OCwgMHhFNywgMHg2RSwg MHg2RSwgMHg0MiwgMHg5NSwgMHgyNywgMHhBRSwKKysgMHg5MywgMHg5MiwgMHg2RCwgMHg1OSwg MHg0NywgMHgxMCwgMHg1OSwgMHhBQywgMHhERCwgMHg5NSwgMHgyOSwgMHhDMywKKysgMHgxQiwg MHg4NiwgMHg2NywgMHgxMiwgMHg5OCwgMHg0OCwgMHgxMCwgMHhBNiwgMHg5MCwgMHhBMywgMHg1 OSwgMHg5RCwKKysgMHgxMCwgMHg0RSwgMHhFQSwgMHhEOCwgMHhDQiwgMHhFMywgMHg4MSwgMHhC QSwgMHhBMSwgMHg1MiwgMHg1NSwgMHg3OCwKKysgMHhGRiwgMHg5NSwgMHg0MCwgMHhFMCwgMHhB RSwgMHg5MywgMHgzOCwgMHg1RCwgMHgyMSwgMHgxMywgMHg4QSwgMHhGQywKKysgMHg3MiwgMHhD NywgMHhGQiwgMHg3MCwgMHgxQywgMHhFRSwgMHg1RCwgMHhCMCwgMHhFNSwgMHhGQSwgMHg0NCwg MHg4NiwKKysgMHg2NywgMHg5NywgMHg2NiwgMHg2NCwgMHhBNCwgMHgxRSwgMHhGOCwgMHgzQSwg MHgxNiwgMHhGOCwgMHhDOSwgMHhFMCwKKysgMHgwOSwgMHhGMywgMHg2MSwgMHg0RgorIH07Cisg Cisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0gewor LSAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwg MHgzQSwgMHhDMSwgMHg2MywKKy0gIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4Nzks IDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCistICAweEU3LCAweDQ3LCAweDA5 LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAor LSAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwg MHhGOSwgMHgxNCwgMHgyOCwKKy0gIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUs IDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCistICAweDZFLCAweDJCLCAweDc5 LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFGLAor LSAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwg MHhFMCwgMHhGNiwgMHhEMCwKKy0gIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODks IDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCistICAweDlGLCAweDA5LCAweENB LCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdDLAor LSAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwg MHgzMCwgMHg3MSwgMHgxQiwKKy0gIDB4NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUs IDB4NTksIDB4QzMKKysgMHhDOSwgMHgyQiwgMHg2RCwgMHg1MCwgMHhCQiwgMHhEOCwgMHgwQiwg MHgzNSwgMHhFOCwgMHg3OCwgMHhGNSwgMHhGQywKKysgMHhCQiwgMHg2QSwgMHhCNCwgMHgzMiwg MHg2MywgMHg5QywgMHg3NSwgMHgxOSwgMHgxRCwgMHhGQiwgMHg2OCwgMHhDMCwKKysgMHhGQywg MHgzNCwgMHhDRSwgMHgwOSwgMHhGRCwgMHhGNCwgMHgzMywgMHg0MiwgMHg3MCwgMHgyNCwgMHg1 NywgMHhCQywKKysgMHhCMywgMHhCRCwgMHgyNCwgMHgzMywgMHg5RSwgMHg0QiwgMHgwMCwgMHhD RSwgMHgxNSwgMHhCMywgMHgyNywgMHhDNiwKKysgMHgzOSwgMHg3QywgMHhDMSwgMHgyOCwgMHg3 NSwgMHhGRSwgMHg3QiwgMHg3NiwgMHg0RiwgMHhGQiwgMHg2MCwgMHhBMCwKKysgMHgzMCwgMHhC RiwgMHg3NCwgMHgyQywgMHg5RCwgMHhFNCwgMHhDOCwgMHgwMywgMHhBOCwgMHhERSwgMHhCOSwg MHgyQSwKKysgMHhEOSwgMHgyMywgMHgyNCwgMHhEQywgMHhFRSwgMHhGMCwgMHhDMSwgMHg4Qiwg MHg0RCwgMHgxMiwgMHg0QSwgMHg0MSwKKysgMHgzMywgMHgzQiwgMHgyMywgMHhGRSwgMHhERCwg MHhFOSwgMHhFOCwgMHg1NSwgMHgyQiwgMHgzRSwgMHhBNCwgMHgxQiwKKysgMHg5NSwgMHgyMSwg MHgyQSwgMHhFRiwgMHg4NCwgMHgyRSwgMHgxMywgMHgzRCwgMHg5NywgMHg3QywgMHgwOCwgMHg4 NiwKKysgMHhCMSwgMHg2MCwgMHhBNCwgMHhCOSwgMHhDNCwgMHg1QSwgMHg1QiwgMHgyRCwgMHgz RiwgMHhENywgMHgwRCwgMHhCMiwKKysgMHg0MSwgMHg3MiwgMHg3QSwgMHg3RiwgMHhBMywgMHgx MiwgMHhCMCwgMHhBRCwgMHg4MCwgMHgyRSwgMHhENiwgMHhEMywKKysgMHg4QSwgMHg3MSwgMHg3 MiwgMHg2NywgMHg5NCwgMHg2RiwgMHg1MSwgMHgwNSwgMHgzOSwgMHhGRCwgMHhCRSwgMHg5MSwK KysgMHhERSwgMHgxRCwgMHg2NSwgMHhFNCwgMHhBNywgMHhBNiwgMHgwRiwgMHhBNSwgMHgwOCwg MHgxRiwgMHhGQywgMHg1MywKKysgMHg0OCwgMHg3QiwgMHhCOCwgMHhDRSwgMHg3OSwgMHhEQSwg MHhEQywgMHgxOCwgMHhEMSwgMHhEMywgMHg4QSwgMHg3MywKKysgMHhDRSwgMHg1QSwgMHg2Miwg MHgxRSwgMHgzMywgMHhEMCwgMHgyMSwgMHg5QywgMHhGOSwgMHhERSwgMHg5RSwgMHg3RSwKKysg MHg0RCwgMHgwRSwgMHgyNCwgMHgzMCwgMHg5NCwgMHhCOCwgMHhEQywgMHg4QiwgMHg1NywgMHg3 RSwgMHgzQiwgMHhDNiwKKysgMHhENywgMHgwRiwgMHhGQywgMHhBNiwgMHgxRiwgMHhFQiwgMHhB RiwgMHgxOSwgMHhEMCwgMHhGRiwgMHgzRCwgMHg2MywKKysgMHgwMywgMHgxRCwgMHhBQiwgMHgx MSwgMHgwQywgMHhBRCwgMHg0NSwgMHg0NiwgMHg2NywgMHg3NiwgMHhDOCwgMHgyNiwKKysgMHhE NCwgMHhENCwgMHg3MCwgMHgxRiwgMHhERiwgMHhFQiwgMHhFNSwgMHg3RCwgMHg3NSwgMHhEOCwg MHgzQiwgMHg1MiwKKysgMHg2QywgMHhFNywgMHgyMywgMHhDQiwgMHhCOSwgMHgxQiwgMHhBNCwg MHgyRSwgMHg1QiwgMHhFQywgMHhCNCwgMHhCNiwKKysgMHhCNiwgMHgyRCwgMHgwQiwgMHg2MCwg MHhFMywgMHg3QiwgMHgwNSwgMHhFOCwgMHgxRSwgMHhBRCwgMHhDNywgMHhFNywKKysgMHhCRSwg MHhGNCwgMHg3MSwgMHhBRQorIH07CisgCisrc3RhdGljIGludCBmaXBzX3JzYV9lbmNyeXB0X3Rl c3QoUlNBICpyc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwgaW50IHB0bGVuKQor Kwl7CisrCXVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50 IHJldCA9IDA7CisrCWludCBsZW47CisrCisrCWN0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3Np emUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQlnb3RvIGVycjsKKysKKysJbGVuID0gUlNBX3B1 YmxpY19lbmNyeXB0KHB0bGVuLCBwbGFpbnRleHQsIGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURE SU5HKTsKKysJaWYgKGxlbiA8PSAwKQorKwkJZ290byBlcnI7CisrCS8qIENoZWNrIGNpcGhlcnRl eHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQgKi8KKysJaWYgKGxlbiA+PSBwdGxlbiAmJiAhbWVt Y21wKHBsYWludGV4dCwgY3RidWYsIHB0bGVuKSkKKysJCWdvdG8gZXJyOworKworKwlwdGJ1ZiA9 IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKwlpZiAoIXB0YnVmKQorKwkJZ290byBl cnI7CisrCisrCWxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJz YSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKwlpZiAobGVuICE9IHB0bGVuKQorKwkJZ290byBlcnI7 CisrCWlmIChtZW1jbXAocHRidWYsIHBsYWludGV4dCwgbGVuKSkKKysJCWdvdG8gZXJyOworKwor KwlyZXQgPSAxOworKworKwllcnI6CisrCWlmIChjdGJ1ZikKKysJCU9QRU5TU0xfZnJlZShjdGJ1 Zik7CisrCWlmIChwdGJ1ZikKKysJCU9QRU5TU0xfZnJlZShwdGJ1Zik7CisrCXJldHVybiByZXQ7 CisrCX0KKyAKKyBpbnQgRklQU19zZWxmdGVzdF9yc2EoKQorIAl7CitAQCAtMzUzLDcgKzU4Nyw3 IEBAIGludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisgCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09 IE5VTEwpCisgCQlnb3RvIGVycjsKKyAKKy0JRVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsK KysJRVZQX1BLRVlfc2V0MV9SU0EocGssIGtleSk7CisgCisgCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorIAkJCQlrYXRfUlNB X1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAorQEAgLTQzMCwxMyArNjY0LDE1IEBAIGludCBG SVBTX3NlbGZ0ZXN0X3JzYSgpCisgCQkJIlJTQSBTSEE1MTIgWDkzMSIpKQorIAkJZ290byBlcnI7 CisgCisrCWlmICghZmlwc19yc2FfZW5jcnlwdF90ZXN0KGtleSwga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSkpCisrCQlnb3RvIGVycjsKKyAKKyAJcmV0ID0gMTsKKyAKKyAJZXJyOgorIAlp ZiAocGspCisgCQlFVlBfUEtFWV9mcmVlKHBrKTsKKy0JZWxzZSBpZiAoa2V5KQorKwlpZiAoa2V5 KQorIAkJUlNBX2ZyZWUoa2V5KTsKKyAJcmV0dXJuIHJldDsKKyAJfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFnL2Ny eXB0by9maXBzL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvTWFrZWZp bGUuZmlwcy1yZXFzCTIwMTQtMDUtMDYgMTY6MjI6MjEuNDIwNTQwMDA4ICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWcvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxNC0wNS0wNiAxNjoyMjoyMS40MzQ1 NDAzMzAgKzAyMDAKK0BAIC0yNCwxMyArMjQsMTUgQEAgTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0 LmMgZmlwc19kZXNfc2VsZgorICAgICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhX3NlbGZ0 ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZpcHNfcmFuZC5jIFwKKyAgICAgZmlw c19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBmaXBzX2RyYmdfY3RyLmMgZmlwc19kcmJnX2hhc2gu YyBmaXBzX2RyYmdfaG1hYy5jIFwKKyAgICAgZmlwc19kcmJnX2xpYi5jIGZpcHNfZHJiZ19yYW5k LmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX2xpYi5jIFwKKy0gICAgZmlwc19jbWFj X3NlbGZ0ZXN0LmMgZmlwc19lY2RoX3NlbGZ0ZXN0LmMgZmlwc19lY2RzYV9zZWxmdGVzdC5jIGZp cHNfZW5jLmMgZmlwc19tZC5jCisrICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZWNkaF9z ZWxmdGVzdC5jIGZpcHNfZWNkc2Ffc2VsZnRlc3QuYyBmaXBzX2VuYy5jIGZpcHNfbWQuYyBcCisr ICAgIGZpcHNfZGhfc2VsZnRlc3QuYworIAorIExJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZp cHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0 Lm8gXAorICAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5v IGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKKyAgICAgZmlwc19yc2FfeDkzMWcu byBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3RyLm8gZmlwc19kcmJnX2hhc2gubyBmaXBzX2RyYmdf aG1hYy5vIFwKKyAgICAgZmlwc19kcmJnX2xpYi5vIGZpcHNfZHJiZ19yYW5kLm8gZmlwc19kcmJn X3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5vIFwKKy0gICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8g Zmlwc19lY2RoX3NlbGZ0ZXN0Lm8gZmlwc19lY2RzYV9zZWxmdGVzdC5vIGZpcHNfZW5jLm8gZmlw c19tZC5vCisrICAgIGZpcHNfY21hY19zZWxmdGVzdC5vIGZpcHNfZWNkaF9zZWxmdGVzdC5vIGZp cHNfZWNkc2Ffc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubyBcCisrICAgIGZpcHNfZGhf c2VsZnRlc3QubworIAorIExJQkNSWVBUTz0tTC4uIC1sY3J5cHRvCisgCitkaWZmIC11cCBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vbW9kZXMvZ2NtMTI4LmMuZmlwcy1yZXFzIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9tb2Rlcy9nY20xMjguYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tb2Rlcy9n Y20xMjguYy5maXBzLXJlcXMJMjAxNC0wNC0wNiAxNzo1NTowMS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vbW9kZXMvZ2NtMTI4LmMJMjAxNC0wNS0wNiAxNjoyMjoy MS40MzQ1NDAzMzAgKzAyMDAKK0BAIC05MDYsNiArOTA2LDEwIEBAIGludCBDUllQVE9fZ2NtMTI4 X2VuY3J5cHQoR0NNMTI4X0NPTlRFWFQKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrCWN0eC0+dG90 bGVuICs9IGxlbjsKKysJaWYgKGN0eC0+dG90bGVuPihVNjQoMSk8PDM2KSB8fCAoc2l6ZW9mKGxl bik9PTggJiYgY3R4LT50b3RsZW48bGVuKSkKKysJCXJldHVybiAtMTsKKysKKyAjaWYgMAorIAlu ID0gKHVuc2lnbmVkIGludCltbGVuJTE2OyAvKiBhbHRlcm5hdGl2ZSB0byBjdHgtPm1yZXMgKi8K KyAjZW5kaWYKK0BAIC0xMjY5LDYgKzEyNzMsMTAgQEAgaW50IENSWVBUT19nY20xMjhfZW5jcnlw dF9jdHIzMihHQ00xMjhfQworICMgZW5kaWYKKyAjZW5kaWYKKyAKKysJY3R4LT50b3RsZW4gKz0g bGVuOworKwlpZiAoY3R4LT50b3RsZW4+KFU2NCgxKTw8MzYpIHx8IChzaXplb2YobGVuKT09OCAm JiBjdHgtPnRvdGxlbjxsZW4pKQorKwkJcmV0dXJuIC0xOworKworIAltbGVuICs9IGxlbjsKKyAJ aWYgKG1sZW4+KChVNjQoMSk8PDM2KS0zMikgfHwgKHNpemVvZihsZW4pPT04ICYmIG1sZW48bGVu KSkKKyAJCXJldHVybiAtMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9tb2Rlcy9t b2Rlc19sY2wuaC5maXBzLXJlcXMgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL21vZGVzL21vZGVzX2xj bC5oCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL21vZGVzL21vZGVzX2xjbC5oLmZpcHMtcmVx cwkyMDE0LTA1LTA2IDE2OjIyOjIwLjkwMzUyODA1NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFn L2NyeXB0by9tb2Rlcy9tb2Rlc19sY2wuaAkyMDE0LTA1LTA2IDE2OjIyOjIxLjQzNTU0MDM1MyAr MDIwMAorQEAgLTExMiw2ICsxMTIsNyBAQCBzdHJ1Y3QgZ2NtMTI4X2NvbnRleHQgeworIAl1bnNp Z25lZCBpbnQgbXJlcywgYXJlczsKKyAJYmxvY2sxMjhfZiBibG9jazsKKyAJdm9pZCAqa2V5Owor Kwl1NjQgdG90bGVuOworIH07CisgCisgc3RydWN0IHh0czEyOF9jb250ZXh0IHsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzLXJlcXMgb3BlbnNzbC0x LjAuMWcvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jLmZpcHMtcmVxcwkyMDE0LTA1LTA2IDE2OjIyOjIxLjI2OTUzNjUxNSArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDE0LTA1LTA2IDE2 OjI2OjUzLjc3NjgzNjUzNSArMDIwMAorQEAgLTE0MywxMiArMTQzLDYgQEAgc3RhdGljIGxvbmcg bWRfY291bnRbMl09ezAsMH07Cisgc3RhdGljIGRvdWJsZSBlbnRyb3B5PTA7Cisgc3RhdGljIGlu dCBpbml0aWFsaXplZD0wOworIAorLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3J5cHRvX2xvY2tfcmFu ZCA9IDA7IC8qIG1heSBiZSBzZXQgb25seSB3aGVuIGEgdGhyZWFkCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaG9sZHMgQ1JZUFRPX0xPQ0tfUkFORAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICh0byBwcmV2ZW50IGRv dWJsZSBsb2NraW5nKSAqLworLS8qIGFjY2VzcyB0byBsb2NraW5fdGhyZWFkIGlzIHN5bmNocm9u aXplZCBieSBDUllQVE9fTE9DS19SQU5EMiAqLworLXN0YXRpYyBDUllQVE9fVEhSRUFESUQgbG9j a2luZ190aHJlYWRpZDsgLyogdmFsaWQgaWZmIGNyeXB0b19sb2NrX3JhbmQgaXMgc2V0ICovCist CisgCisgI2lmZGVmIFBSRURJQ1QKKyBpbnQgcmFuZF9wcmVkaWN0YWJsZT0wOworQEAgLTE5Niw3 ICsxOTAsNyBAQCBzdGF0aWMgdm9pZCBzc2xlYXlfcmFuZF9hZGQoY29uc3Qgdm9pZCAqCisgCWxv bmcgbWRfY1syXTsKKyAJdW5zaWduZWQgY2hhciBsb2NhbF9tZFtNRF9ESUdFU1RfTEVOR1RIXTsK KyAJRVZQX01EX0NUWCBtOworLQlpbnQgZG9fbm90X2xvY2s7CisrCWludCBsb2NrZWQ7CisgCisg CWlmICghbnVtKQorIAkJcmV0dXJuOworQEAgLTIxNiwxOSArMjEwLDggQEAgc3RhdGljIHZvaWQg c3NsZWF5X3JhbmRfYWRkKGNvbnN0IHZvaWQgKgorICAgICAgICAgICogaGFzaCBmdW5jdGlvbi4K KyAJICovCisgCistCS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbG9jayAqLworLQlp ZiAoY3J5cHRvX2xvY2tfcmFuZCkKKy0JCXsKKy0JCUNSWVBUT19USFJFQURJRCBjdXI7CistCQlD UllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKKy0JCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xP Q0tfUkFORDIpOworLQkJZG9fbm90X2xvY2sgPSAhQ1JZUFRPX1RIUkVBRElEX2NtcCgmbG9ja2lu Z190aHJlYWRpZCwgJmN1cik7CistCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIp OworLQkJfQorLQllbHNlCistCQlkb19ub3RfbG9jayA9IDA7CisrCWxvY2tlZCA9IHByaXZhdGVf UkFORF9sb2NrKDEpOworIAorLQlpZiAoIWRvX25vdF9sb2NrKSBDUllQVE9fd19sb2NrKENSWVBU T19MT0NLX1JBTkQpOworIAlzdF9pZHg9c3RhdGVfaW5kZXg7CisgCisgCS8qIHVzZSBvdXIgb3du IGNvcGllcyBvZiB0aGUgY291bnRlcnMgc28gdGhhdCBldmVuCitAQCAtMjYwLDcgKzI0Myw4IEBA IHN0YXRpYyB2b2lkIHNzbGVheV9yYW5kX2FkZChjb25zdCB2b2lkICoKKyAKKyAJbWRfY291bnRb MV0gKz0gKG51bSAvIE1EX0RJR0VTVF9MRU5HVEgpICsgKG51bSAlIE1EX0RJR0VTVF9MRU5HVEgg PiAwKTsKKyAKKy0JaWYgKCFkb19ub3RfbG9jaykgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X1JBTkQpOworKwlpZiAobG9ja2VkKQorKwkJcHJpdmF0ZV9SQU5EX2xvY2soMCk7CisgCisgCUVW UF9NRF9DVFhfaW5pdCgmbSk7CisgCWZvciAoaT0wOyBpPG51bTsgaSs9TURfRElHRVNUX0xFTkdU SCkKK0BAIC0zMTEsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgc3NsZWF5X3JhbmRfYWRkKGNvbnN0 IHZvaWQgKgorIAkJfQorIAlFVlBfTURfQ1RYX2NsZWFudXAoJm0pOworIAorLQlpZiAoIWRvX25v dF9sb2NrKSBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlsb2NrZWQgPSBwcml2 YXRlX1JBTkRfbG9jaygxKTsKKyAJLyogRG9uJ3QganVzdCBjb3B5IGJhY2sgbG9jYWxfbWQgaW50 byBtZCAtLSB0aGlzIGNvdWxkIG1lYW4gdGhhdAorIAkgKiBvdGhlciB0aHJlYWQncyBzZWVkaW5n IHJlbWFpbnMgd2l0aG91dCBlZmZlY3QgKGV4Y2VwdCBmb3IKKyAJICogdGhlIGluY3JlbWVudGVk IGNvdW50ZXIpLiAgQnkgWE9SaW5nIGl0IHdlIGtlZXAgYXQgbGVhc3QgYXMKK0BAIC0zMjIsNyAr MzA2LDggQEAgc3RhdGljIHZvaWQgc3NsZWF5X3JhbmRfYWRkKGNvbnN0IHZvaWQgKgorIAkJfQor IAlpZiAoZW50cm9weSA8IEVOVFJPUFlfTkVFREVEKSAvKiBzdG9wIGNvdW50aW5nIHdoZW4gd2Ug aGF2ZSBlbm91Z2ggKi8KKyAJICAgIGVudHJvcHkgKz0gYWRkOworLQlpZiAoIWRvX25vdF9sb2Nr KSBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWlmIChsb2NrZWQpCisrCQlw cml2YXRlX1JBTkRfbG9jaygwKTsKKyAJCisgI2lmICFkZWZpbmVkKE9QRU5TU0xfVEhSRUFEUykg JiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpCisgCWFzc2VydChtZF9jWzFdID09IG1kX2Nv dW50WzFdKTsKK0BAIC0zNDcsNiArMzMyLDcgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRl cyh1bnNpZ25lZCBjaAorIAlwaWRfdCBjdXJyX3BpZCA9IGdldHBpZCgpOworICNlbmRpZgorIAlp bnQgZG9fc3Rpcl9wb29sID0gMDsKKysJaW50IGxvY2tlZDsKKyAKKyAjaWZkZWYgUFJFRElDVAor IAlpZiAocmFuZF9wcmVkaWN0YWJsZSkKK0BAIC0zODMsMTcgKzM2OSw4IEBAIHN0YXRpYyBpbnQg c3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKKyAJICogYXJlIGZlZCBpbnRvIHRoZSBoYXNo IGZ1bmN0aW9uIGFuZCB0aGUgcmVzdWx0cyBhcmUga2VwdCBpbiB0aGUKKyAJICogZ2xvYmFsICdt ZCcuCisgCSAqLworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JLyogTkI6IGluIEZJUFMgbW9kZSB3 ZSBhcmUgYWxyZWFkeSB1bmRlciBhIGxvY2sgKi8KKy0JaWYgKCFGSVBTX21vZGUoKSkKKy0jZW5k aWYKKy0JCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisgCistCS8qIHByZXZlbnQg c3NsZWF5X3JhbmRfYnl0ZXMoKSBmcm9tIHRyeWluZyB0byBvYnRhaW4gdGhlIGxvY2sgYWdhaW4g Ki8KKy0JQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EMik7CistCUNSWVBUT19USFJFQURJ RF9jdXJyZW50KCZsb2NraW5nX3RocmVhZGlkKTsKKy0JQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19M T0NLX1JBTkQyKTsKKy0JY3J5cHRvX2xvY2tfcmFuZCA9IDE7CisrCWxvY2tlZCA9IHByaXZhdGVf UkFORF9sb2NrKDEpOworIAorIAkvKiBhbHdheXMgcG9sbCBmb3IgZXh0ZXJuYWwgZW50cm9weSBp biBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAorIAkgKiBleHBhbnNpb24KK0BAIC00Njcs MTIgKzQ0NCw4IEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKKyAK KyAJbWRfY291bnRbMF0gKz0gMTsKKyAKKy0JLyogYmVmb3JlIHVubG9ja2luZywgd2UgbXVzdCBj bGVhciAnY3J5cHRvX2xvY2tfcmFuZCcgKi8KKy0JY3J5cHRvX2xvY2tfcmFuZCA9IDA7CistI2lm ZGVmIE9QRU5TU0xfRklQUworLQlpZiAoIUZJUFNfbW9kZSgpKQorLSNlbmRpZgorLQkJQ1JZUFRP X3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlpZiAobG9ja2VkKQorKwkJcHJpdmF0ZV9S QU5EX2xvY2soMCk7CisgCisgCXdoaWxlIChudW0gPiAwKQorIAkJeworQEAgLTUyNCwxNiArNDk3 LDExIEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKKyAJTURfSW5p dCgmbSk7CisgCU1EX1VwZGF0ZSgmbSwodW5zaWduZWQgY2hhciAqKSYobWRfY1swXSksc2l6ZW9m KG1kX2MpKTsKKyAJTURfVXBkYXRlKCZtLGxvY2FsX21kLE1EX0RJR0VTVF9MRU5HVEgpOworLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKCFGSVBTX21vZGUoKSkKKy0jZW5kaWYKKy0JCUNSWVBU T193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWxvY2tlZCA9IHByaXZhdGVfUkFORF9sb2Nr KDEpOworIAlNRF9VcGRhdGUoJm0sbWQsTURfRElHRVNUX0xFTkdUSCk7CisgCU1EX0ZpbmFsKCZt LG1kKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmICghRklQU19tb2RlKCkpCistI2VuZGlm CistCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWlmIChsb2NrZWQpCisr CQlwcml2YXRlX1JBTkRfbG9jaygwKTsKKyAKKyAJRVZQX01EX0NUWF9jbGVhbnVwKCZtKTsKKyAJ aWYgKG9rKQorQEAgLTU2MywzMiArNTMxLDEwIEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfcHNl dWRvX2J5dGVzKHVuc2kKKyAKKyBzdGF0aWMgaW50IHNzbGVheV9yYW5kX3N0YXR1cyh2b2lkKQor IAl7CistCUNSWVBUT19USFJFQURJRCBjdXI7CisgCWludCByZXQ7CistCWludCBkb19ub3RfbG9j azsKKysJaW50IGxvY2tlZDsKKyAKKy0JQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7Cist CS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgbG9jaworLQkgKiAoY291bGQgaGFwcGVu IGlmIGEgUkFORF9wb2xsKCkgaW1wbGVtZW50YXRpb24gY2FsbHMgUkFORF9zdGF0dXMoKSkgKi8K Ky0JaWYgKGNyeXB0b19sb2NrX3JhbmQpCistCQl7CistCQlDUllQVE9fcl9sb2NrKENSWVBUT19M T0NLX1JBTkQyKTsKKy0JCWRvX25vdF9sb2NrID0gIUNSWVBUT19USFJFQURJRF9jbXAoJmxvY2tp bmdfdGhyZWFkaWQsICZjdXIpOworLQkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQy KTsKKy0JCX0KKy0JZWxzZQorLQkJZG9fbm90X2xvY2sgPSAwOworLQkKKy0JaWYgKCFkb19ub3Rf bG9jaykKKy0JCXsKKy0JCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CistCQkKKy0J CS8qIHByZXZlbnQgc3NsZWF5X3JhbmRfYnl0ZXMoKSBmcm9tIHRyeWluZyB0byBvYnRhaW4gdGhl IGxvY2sgYWdhaW4gKi8KKy0JCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOworLQkJ Q1JZUFRPX1RIUkVBRElEX2NweSgmbG9ja2luZ190aHJlYWRpZCwgJmN1cik7CistCQlDUllQVE9f d191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOworLQkJY3J5cHRvX2xvY2tfcmFuZCA9IDE7Cist CQl9CisrCWxvY2tlZCA9IHByaXZhdGVfUkFORF9sb2NrKDEpOworIAkKKyAJaWYgKCFpbml0aWFs aXplZCkKKyAJCXsKK0BAIC01OTgsMTMgKzU0NCw4IEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRf c3RhdHVzKHZvaWQpCisgCisgCXJldCA9IGVudHJvcHkgPj0gRU5UUk9QWV9ORUVERUQ7CisgCist CWlmICghZG9fbm90X2xvY2spCistCQl7CistCQkvKiBiZWZvcmUgdW5sb2NraW5nLCB3ZSBtdXN0 IGNsZWFyICdjcnlwdG9fbG9ja19yYW5kJyAqLworLQkJY3J5cHRvX2xvY2tfcmFuZCA9IDA7Cist CQkKKy0JCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKy0JCX0KKysJaWYgKGxv Y2tlZCkKKysJCXByaXZhdGVfUkFORF9sb2NrKDApOworIAkKKyAJcmV0dXJuIHJldDsKKyAJfQor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMtcmVxcyBvcGVu c3NsLTEuMC4xZy9jcnlwdG8vcmFuZC9yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4xZy9jcnlwdG8v cmFuZC9yYW5kLmguZmlwcy1yZXFzCTIwMTQtMDUtMDYgMTY6MjI6MjEuMjY5NTM2NTE1ICswMjAw CisrKysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JhbmQvcmFuZC5oCTIwMTQtMDUtMDYgMTY6MjI6 MjEuNDM1NTQwMzUzICswMjAwCitAQCAtMTI0LDYgKzEyNCw4IEBAIHZvaWQgUkFORF9zZXRfZmlw c19kcmJnX3R5cGUoaW50IHR5cGUsIGkKKyBpbnQgUkFORF9pbml0X2ZpcHModm9pZCk7CisgI2Vu ZGlmCisgCisraW50IHByaXZhdGVfUkFORF9sb2NrKGludCBsb2NrKTsKKysKKyAvKiBCRUdJTiBF UlJPUiBDT0RFUyAqLworIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVk IGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCisgICogbWFkZSBhZnRlciB0aGlz IHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oLmZpcHMtcmVxcyBv cGVuc3NsLTEuMC4xZy9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oCistLS0gb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL3JhbmQvcmFuZF9sY2wuaC5maXBzLXJlcXMJMjAxNC0wNS0wNiAxNjoyMjoyMS4wMjE1 MzA3ODIgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcmFuZC9yYW5kX2xjbC5oCTIw MTQtMDUtMDYgMTY6MjI6MjEuNDM1NTQwMzUzICswMjAwCitAQCAtMTEyLDcgKzExMiw3IEBACisg I2lmbmRlZiBIRUFERVJfUkFORF9MQ0xfSAorICNkZWZpbmUgSEVBREVSX1JBTkRfTENMX0gKKyAK Ky0jZGVmaW5lIEVOVFJPUFlfTkVFREVEIDMyICAvKiByZXF1aXJlIDI1NiBiaXRzID0gMzIgYnl0 ZXMgb2YgcmFuZG9tbmVzcyAqLworKyNkZWZpbmUgRU5UUk9QWV9ORUVERUQgNDggIC8qIHJlcXVp cmUgMzg0IGJpdHMgPSA0OCBieXRlcyBvZiByYW5kb21uZXNzICovCisgCisgCisgI2lmICFkZWZp bmVkKFVTRV9NRDVfUkFORCkgJiYgIWRlZmluZWQoVVNFX1NIQTFfUkFORCkgJiYgIWRlZmluZWQo VVNFX01EQzJfUkFORCkgJiYgIWRlZmluZWQoVVNFX01EMl9SQU5EKQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWcvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzLXJlcXMgb3BlbnNzbC0xLjAuMWcv Y3J5cHRvL3JhbmQvcmFuZF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yYW5kL3Jh bmRfbGliLmMuZmlwcy1yZXFzCTIwMTQtMDMtMTcgMTc6MTQ6MjAuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWcvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwkyMDE0LTA1LTA2IDE2OjIy OjIxLjQzNTU0MDM1MyArMDIwMAorQEAgLTE4MSw2ICsxODEsNDEgQEAgaW50IFJBTkRfc3RhdHVz KHZvaWQpCisgCXJldHVybiAwOworIAl9CisgCisraW50IHByaXZhdGVfUkFORF9sb2NrKGludCBs b2NrKQorKwl7CisrCXN0YXRpYyBpbnQgY3J5cHRvX2xvY2tfcmFuZDsKKysJc3RhdGljIENSWVBU T19USFJFQURJRCBsb2NraW5nX3RocmVhZGlkOworKwlpbnQgZG9fbG9jazsKKysKKysJaWYgKCFs b2NrKQorKwkJeworKwkJY3J5cHRvX2xvY2tfcmFuZCA9IDA7CisrCQlDUllQVE9fd191bmxvY2so Q1JZUFRPX0xPQ0tfUkFORCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJLyogY2hlY2sgaWYg d2UgYWxyZWFkeSBoYXZlIHRoZSBsb2NrICovCisrCWlmIChjcnlwdG9fbG9ja19yYW5kKQorKwkJ eworKwkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKKysJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZj dXIpOworKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EMik7CisrCQlkb19sb2NrID0g ISFDUllQVE9fVEhSRUFESURfY21wKCZsb2NraW5nX3RocmVhZGlkLCAmY3VyKTsKKysJCUNSWVBU T19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CisrCQl9CisrICAgICAgICBlbHNlCisrCQlk b19sb2NrID0gMTsKKysJaWYgKGRvX2xvY2spCisrCQl7CisrCQlDUllQVE9fd19sb2NrKENSWVBU T19MT0NLX1JBTkQpOworKwkJY3J5cHRvX2xvY2tfcmFuZCA9IDE7CisrCQlDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX1JBTkQyKTsKKysJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZsb2NraW5n X3RocmVhZGlkKTsKKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CisrCQl9 CisrCXJldHVybiBkb19sb2NrOworKwl9CisrCisgI2lmZGVmIE9QRU5TU0xfRklQUworIAorIC8q IEZJUFMgRFJCRyBpbml0aWFsaXNhdGlvbiBjb2RlLiBUaGlzIHNldHMgdXAgdGhlIERSQkcgZm9y IHVzZSBieSB0aGUKK0BAIC0yMzksMTIgKzI3NCwxNiBAQCBzdGF0aWMgaW50IGRyYmdfcmFuZF9h ZGQoRFJCR19DVFggKmN0eCwKKyAJCQkJZG91YmxlIGVudHJvcHkpCisgCXsKKyAJUkFORF9TU0xl YXkoKS0+YWRkKGluLCBpbmxlbiwgZW50cm9weSk7CisrCWlmIChGSVBTX3JhbmRfc3RhdHVzKCkp CisrCQlGSVBTX2RyYmdfcmVzZWVkKGN0eCwgTlVMTCwgMCk7CisgCXJldHVybiAxOworIAl9Cisg Cisgc3RhdGljIGludCBkcmJnX3JhbmRfc2VlZChEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpp biwgaW50IGlubGVuKQorIAl7CisgCVJBTkRfU1NMZWF5KCktPnNlZWQoaW4sIGlubGVuKTsKKysJ aWYgKEZJUFNfcmFuZF9zdGF0dXMoKSkKKysJCUZJUFNfZHJiZ19yZXNlZWQoY3R4LCBOVUxMLCAw KTsKKyAJcmV0dXJuIDE7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9y c2EvcnNhX2dlbi5jLmZpcHMtcmVxcyBvcGVuc3NsLTEuMC4xZy9jcnlwdG8vcnNhL3JzYV9nZW4u YworLS0tIG9wZW5zc2wtMS4wLjFnL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMtcmVxcwkyMDE0 LTA1LTA2IDE2OjIyOjIxLjI3MDUzNjUzOCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFnL2NyeXB0 by9yc2EvcnNhX2dlbi5jCTIwMTQtMDUtMDYgMTY6MjI6MjEuNDM2NTQwMzc2ICswMjAwCitAQCAt MSw1ICsxLDYgQEAKKyAvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLworIC8qIENvcHlyaWdodCAo QykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIENvcHlyaWdo dCAoQykgMjAxMyBSZWQgSGF0LCBJbmMuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKgor ICAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorQEAgLTE2 NSw2ICsxNjYsMjIyIEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYmkK KyAJcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKyAJ fQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgaW50IEZJUFNfcnNhX2J1aWx0aW5f a2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2Ip CisrCXsKKysJQklHTlVNICpyMCA9IE5VTEwsICpyMSA9IE5VTEwsICpyMiA9IE5VTEwsICpyMyA9 IE5VTEwsICp0bXA7CisrCUJJR05VTSBsb2NhbF9yMCwgbG9jYWxfZCwgbG9jYWxfcDsKKysJQklH TlVNICpwcjAsICpkLCAqcDsKKysJQk5fQ1RYICpjdHggPSBOVUxMOworKwlpbnQgb2sgPSAtMTsK KysJaW50IGk7CisrICAgICAgICBpbnQgbiA9IDA7CisrCWludCB0ZXN0ID0gMDsKKysgICAgICAg IGludCBwYml0cyA9IGJpdHMvMjsKKysKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiwgRklQU19SX0ZJUFNfU0VM RlRFU1RfRkFJTEVEKTsKKysJICAgIAlyZXR1cm4gMDsKKysJICAgIAl9CisrCisrCWlmIChiaXRz ICE9IDIwNDggJiYgYml0cyAhPSAzMDcyKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfUlNBX0JV SUxUSU5fS0VZR0VOLCBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKysJCXJldHVybiAwOwor KwkJfQorKworKwljdHggPSBCTl9DVFhfbmV3KCk7CisrCWlmIChjdHggPT0gTlVMTCkgZ290byBl cnI7CisrCUJOX0NUWF9zdGFydChjdHgpOworKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjEg PSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIyID0gQk5fQ1RYX2dldChjdHgpOworKwlyMyA9IEJOX0NU WF9nZXQoY3R4KTsKKysKKysJaWYgKHIzID09IE5VTEwpIGdvdG8gZXJyOworKworKwkvKiBXZSBu ZWVkIHRoZSBSU0EgY29tcG9uZW50cyBub24tTlVMTCAqLworKwlpZiAoIXJzYS0+biAmJiAoKHJz YS0+bj1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZCAmJiAoKHJz YS0+ZD1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSAmJiAoKHJz YS0+ZT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwlpZiAoIXJzYS0+cCAmJiAoKHJz YS0+cD1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwlpZiAoIXJzYS0+cSAmJiAoKHJz YS0+cT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZG1wMSAmJiAo KHJzYS0+ZG1wMT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZG1x MSAmJiAoKHJzYS0+ZG1xMT1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwlpZiAoIXJz YS0+aXFtcCAmJiAoKHJzYS0+aXFtcD1CTl9uZXcoKSkgPT0gTlVMTCkpIGdvdG8gZXJyOworKwor KwlpZiAoIUJOX3NldF93b3JkKHIwLCBSU0FfRjQpKSBnb3RvIGVycjsKKysJaWYgKEJOX2NtcChl X3ZhbHVlLCByMCkgPCAwIHx8IEJOX251bV9iaXRzKGVfdmFsdWUpID4gMjU2KQorKwkJeworKwkJ b2sgPSAwOyAvKiB3ZSBzZXQgb3VyIG93biBlcnIgKi8KKysJCVJTQWVycihSU0FfRl9SU0FfQlVJ TFRJTl9LRVlHRU4sUlNBX1JfQkFEX0VfVkFMVUUpOworKwkJZ290byBlcnI7CisrCQl9CisrCisr CS8qIHByZXBhcmUgYXBwcm94aW1hdGUgbWluaW11bSBwIGFuZCBxICovCisrCWlmICghQk5fc2V0 X3dvcmQocjAsIDB4QjUwNEYzMzQpKSBnb3RvIGVycjsKKysJaWYgKCFCTl9sc2hpZnQocjAsIHIw LCBwYml0cyAtIDMyKSkgZ290byBlcnI7CisrCisrCS8qIHByZXBhcmUgbWluaW11bSBwIGFuZCBx IGRpZmZlcmVuY2UgKi8KKysJaWYgKCFCTl9vbmUocjMpKSBnb3RvIGVycjsKKysJaWYgKCFCTl9s c2hpZnQocjMsIHIzLCBwYml0cyAtIDEwMCkpIGdvdG8gZXJyOworKworKwlCTl9jb3B5KHJzYS0+ ZSwgZV92YWx1ZSk7CisrCisrCWlmICghQk5faXNfemVybyhyc2EtPnApICYmICFCTl9pc196ZXJv KHJzYS0+cSkpCisrCQl0ZXN0ID0gMTsKKysKKysJLyogZ2VuZXJhdGUgcCBhbmQgcSAqLworKwlm b3IgKGkgPSAwOyBpIDwgNSAqIHBiaXRzOyBpKyspCisrCQl7CisrICAgICAgICBwbG9vcDoKKysg ICAgICAgICAgICAgICAgaWYgKCF0ZXN0KQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh Qk5fcmFuZChyc2EtPnAsIHBiaXRzLCAwLCAxKSkgZ290byBlcnI7CisrICAgICAgICAgICAgICAg IGlmIChCTl9jbXAocnNhLT5wLCByMCkgPCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsK KysgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdCkgZ290byBlcnI7CisrICAgICAgICAg ICAgICAgICAgICAgICAgZ290byBwbG9vcDsKKysgICAgICAgICAgICAgICAgICAgICAgICB9Cisr CisrCQlpZiAoIUJOX3N1YihyMiwgcnNhLT5wLCBCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOwor KwkJaWYgKCFCTl9nY2QocjEsIHIyLCByc2EtPmUsIGN0eCkpIGdvdG8gZXJyOworKwkJaWYgKEJO X2lzX29uZShyMSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg ICAgICAgICAgIGludCByOworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBCTl9pc19wcmlt ZV9mYXN0dGVzdF9leChyc2EtPnAsIHBiaXRzPjEwMjQ/NDo1LCBjdHgsIDAsIGNiKTsKKysgICAg ICAgIAkJaWYgKHIgPT0gLTEgfHwgKHRlc3QgJiYgciA8PSAwKSkgZ290byBlcnI7CisrICAgICAg ICAJCWlmIChyID4gMCkgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICAgICAgfSAKKysKKysJ CWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCBuKyspKQorKwkJCWdvdG8gZXJyOworKwkJfQorKwor KwlpZighQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpCisrCQlnb3RvIGVycjsKKysKKysgICAgICAg IGlmKGkgPj0gNSpwYml0cykKKysgICAgICAgICAgICAgICAgLyogcHJpbWUgbm90IGZvdW5kICov CisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKworKwlmb3IgKGkgPSAwOyBpIDwgNSAqIHBi aXRzOyBpKyspCisrCQl7CisrICAgICAgICBxbG9vcDoKKysgICAgICAgICAgICAgICAgaWYgKCF0 ZXN0KQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQk5fcmFuZChyc2EtPnEsIHBiaXRz LCAwLCAxKSkgZ290byBlcnI7CisrICAgICAgICAgICAgICAgIGlmIChCTl9jbXAocnNhLT5xLCBy MCkgPCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg ICAgICBpZiAodGVzdCkgZ290byBlcnI7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ290byBx bG9vcDsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgIAkJaWYgKCFCTl9zdWIo cjIsIHJzYS0+cSwgcnNhLT5wKSkgZ290byBlcnI7CisrICAgICAgICAgICAgICAgIGlmIChCTl91 Y21wKHIyLCByMykgPD0gMCkKKysgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHRlc3QpIGdvdG8gZXJyOworKyAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gcWxvb3A7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKworKwkJaWYgKCFC Tl9zdWIocjIsIHJzYS0+cSwgQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKKysJCWlmICghQk5f Z2NkKHIxLCByMiwgcnNhLT5lLCBjdHgpKSBnb3RvIGVycjsKKysJCWlmIChCTl9pc19vbmUocjEp KQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBp bnQgcjsKKysgICAgICAgICAgICAgICAgICAgICAgICByID0gQk5faXNfcHJpbWVfZmFzdHRlc3Rf ZXgocnNhLT5xLCBwYml0cz4xMDI0PzQ6NSwgY3R4LCAwLCBjYik7CisrICAgICAgICAJCWlmIChy ID09IC0xIHx8ICh0ZXN0ICYmIHIgPD0gMCkpIGdvdG8gZXJyOworKyAgICAgICAgCQlpZiAociA+ IDApIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0gCisrCisrCQlpZighQk5fR0VO Q0JfY2FsbChjYiwgMiwgbisrKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYoIUJOX0dF TkNCX2NhbGwoY2IsIDMsIDEpKQorKwkJZ290byBlcnI7CisrCisrICAgICAgICBpZihpID49IDUq cGJpdHMpCisrICAgICAgICAgICAgICAgIC8qIHByaW1lIG5vdCBmb3VuZCAqLworKyAgICAgICAg ICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAgIGlmICh0ZXN0KQorKyAgICAgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgIC8qIGRvIG5vdCB0cnkgdG8gY2FsY3VsYXRlIHRoZSByZW1h aW5pbmcga2V5IHZhbHVlcyAqLworKyAgICAgICAgICAgICAgICBCTl9jbGVhcihyc2EtPm4pOwor KyAgICAgICAgICAgICAgICBvayA9IDE7CisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAg ICAgICAgICAgICAgICB9CisrCisrCWlmIChCTl9jbXAocnNhLT5wLHJzYS0+cSkgPCAwKQorKwkJ eworKwkJdG1wPXJzYS0+cDsKKysJCXJzYS0+cD1yc2EtPnE7CisrCQlyc2EtPnE9dG1wOworKwkJ fQorKworKwkvKiBjYWxjdWxhdGUgbiAqLworKwlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJz YS0+cSxjdHgpKSBnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJaWYgKCFCTl9z dWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7CS8qIHAtMSAqLworKwlpZiAo IUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsJLyogcS0xICovCisr CWlmICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpIGdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCisr CWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQorKwkJeworKwkJICBw cjAgPSAmbG9jYWxfcjA7CisrCQkgIEJOX3dpdGhfZmxhZ3MocHIwLCByMCwgQk5fRkxHX0NPTlNU VElNRSk7CisrCQl9CisrCWVsc2UKKysJICBwcjAgPSByMDsKKysJaWYgKCFCTl9tb2RfaW52ZXJz ZShyc2EtPmQscnNhLT5lLHByMCxjdHgpKSBnb3RvIGVycjsJLyogZCAqLworKworKwkvKiBzZXQg dXAgZCBmb3IgY29ycmVjdCBCTl9GTEdfQ09OU1RUSU1FIGZsYWcgKi8KKysJaWYgKCEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCisrCQl7CisrCQlkID0gJmxvY2FsX2Q7Cisr CQlCTl93aXRoX2ZsYWdzKGQsIHJzYS0+ZCwgQk5fRkxHX0NPTlNUVElNRSk7CisrCQl9CisrCWVs c2UKKysJCWQgPSByc2EtPmQ7CisrCisrCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLworKwlp ZiAoIUJOX21vZChyc2EtPmRtcDEsZCxyMSxjdHgpKSBnb3RvIGVycjsKKysKKysJLyogY2FsY3Vs YXRlIGQgbW9kIChxLTEpICovCisrCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxkLHIyLGN0eCkpIGdv dG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCisrCWlmICgh KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQorKwkJeworKwkJcCA9ICZsb2Nh bF9wOworKwkJQk5fd2l0aF9mbGFncyhwLCByc2EtPnAsIEJOX0ZMR19DT05TVFRJTUUpOworKwkJ fQorKwllbHNlCisrCQlwID0gcnNhLT5wOworKwlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFt cCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsKKysKKysJaWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2Zh aWwpCisrCQlCTl9hZGRfd29yZChyc2EtPm4sIDEpOworKworKwlpZighZmlwc19jaGVja19yc2Eo cnNhKSkKKysJICAgIGdvdG8gZXJyOworKworKwlvaz0xOworK2VycjoKKysJaWYgKG9rID09IC0x KQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9CVUlMVElOX0tFWUdFTixFUlJfTElCX0JOKTsK KysJCW9rID0gMDsKKysJCX0KKysJaWYgKGN0eCAhPSBOVUxMKQorKwkJeworKwkJQk5fQ1RYX2Vu ZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysKKysJcmV0dXJuIG9rOworKwl9 CisrI2VuZGlmCisrCisgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGlu dCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYikKKyAJeworIAlCSUdOVU0gKnIw PU5VTEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEwsKnRtcDsKK0BAIC0xNzYsMTcgKzM5Myw3 IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorICNpZmRlZiBPUEVO U1NMX0ZJUFMKKyAJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKyAJCXsKKy0JCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCistCSAgICAJeworLQkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlM VElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworLQkgICAgCXJldHVybiAw OworLQkgICAgCX0KKy0KKy0JCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKQorLQkJICAgIHsKKy0JCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlH RU4sRklQU19SX0tFWV9UT09fU0hPUlQpOworLQkJICAgIHJldHVybiAwOworLQkJICAgIH0KKysJ CXJldHVybiBGSVBTX3JzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsK KyAJCX0KKyAjZW5kaWYKKyAKK0BAIC0zMDEsMTcgKzUwOCw2IEBAIHN0YXRpYyBpbnQgcnNhX2J1 aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIAkJcCA9IHJzYS0+cDsKKyAJaWYgKCFCTl9tb2RfaW52 ZXJzZShyc2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBlcnI7CisgCistI2lmZGVmIE9QRU5T U0xfRklQUworLQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQorLQkJeworLQkJaWYgKGZpcHNfcnNh X3BhaXJ3aXNlX2ZhaWwpCistCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsKKy0KKy0JCWlmKCFm aXBzX2NoZWNrX3JzYShyc2EpKQorLQkJICAgIGdvdG8gZXJyOworLQkJfQorLSNlbmRpZgorLQor IAlvaz0xOworIGVycjoKKyAJaWYgKG9rID09IC0xKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcv c3NsL3QxX2VuYy5jLmZpcHMtcmVxcyBvcGVuc3NsLTEuMC4xZy9zc2wvdDFfZW5jLmMKKy0tLSBv cGVuc3NsLTEuMC4xZy9zc2wvdDFfZW5jLmMuZmlwcy1yZXFzCTIwMTQtMDMtMTcgMTc6MTQ6MjAu MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWcvc3NsL3QxX2VuYy5jCTIwMTQtMDUt MDYgMTY6MjI6MjEuNDM2NTQwMzc2ICswMjAwCitAQCAtMjkxLDYgKzI5MSwyNyBAQCBzdGF0aWMg aW50IHRsczFfUFJGKGxvbmcgZGlnZXN0X21hc2ssCisgZXJyOgorIAlyZXR1cm4gcmV0OworIH0K KysKKytpbnQgcHJpdmF0ZV90bHMxX1BSRihsb25nIGRpZ2VzdF9tYXNrLAorKwkJICAgICBjb25z dCB2b2lkICpzZWVkMSwgaW50IHNlZWQxX2xlbiwKKysJCSAgICAgY29uc3Qgdm9pZCAqc2VlZDIs IGludCBzZWVkMl9sZW4sCisrCQkgICAgIGNvbnN0IHZvaWQgKnNlZWQzLCBpbnQgc2VlZDNfbGVu LAorKwkJICAgICBjb25zdCB2b2lkICpzZWVkNCwgaW50IHNlZWQ0X2xlbiwKKysJCSAgICAgY29u c3Qgdm9pZCAqc2VlZDUsIGludCBzZWVkNV9sZW4sCisrCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnNlYywgaW50IHNsZW4sCisrCQkgICAgIHVuc2lnbmVkIGNoYXIgKm91dDEsCisrCQkgICAg IHVuc2lnbmVkIGNoYXIgKm91dDIsIGludCBvbGVuKQorKwl7CisrCXJldHVybiB0bHMxX1BSRihk aWdlc3RfbWFzaywKKysJCXNlZWQxLCBzZWVkMV9sZW4sCisrCQlzZWVkMiwgc2VlZDJfbGVuLAor KwkJc2VlZDMsIHNlZWQzX2xlbiwKKysJCXNlZWQ0LCBzZWVkNF9sZW4sCisrCQlzZWVkNSwgc2Vl ZDVfbGVuLAorKwkJc2VjLCBzbGVuLAorKwkJb3V0MSwgb3V0Miwgb2xlbik7CisrCX0KKysKKyBz dGF0aWMgaW50IHRsczFfZ2VuZXJhdGVfa2V5X2Jsb2NrKFNTTCAqcywgdW5zaWduZWQgY2hhciAq a20sCisgCSAgICAgdW5zaWduZWQgY2hhciAqdG1wLCBpbnQgbnVtKQorIAl7CgpkaWZmIC0tZ2l0 IGEvb3BlbnNzbC0xLjAuMWctc3NsLW9wLWFsbC5wYXRjaCBiL29wZW5zc2wtMS4wLjFnLXNzbC1v cC1hbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0NzNkNgot LS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjFnLXNzbC1vcC1hbGwucGF0Y2gKQEAgLTAs MCArMSwyMSBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWcvc3NsL3NzbC5oLm9wLWFsbCBvcGVu c3NsLTEuMC4xZy9zc2wvc3NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xZy9zc2wvc3NsLmgub3AtYWxs CTIwMTQtMDUtMDYgMTY6MDM6MzcuNDAwNTU0MTI1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWcv c3NsL3NzbC5oCTIwMTQtMDUtMDYgMTY6MDY6MjEuNjg4MzUyMjQ1ICswMjAwCitAQCAtNTQ5LDcg KzU0OSw3IEBAIHN0cnVjdCBzc2xfc2Vzc2lvbl9zdAorICNkZWZpbmUgU1NMX09QX05FVFNDQVBF X0NIQUxMRU5HRV9CVUcJCQkweDAwMDAwMDAyTAorIC8qIEFsbG93IGluaXRpYWwgY29ubmVjdGlv biB0byBzZXJ2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBSSSAqLworICNkZWZpbmUgU1NMX09QX0xF R0FDWV9TRVJWRVJfQ09OTkVDVAkJCTB4MDAwMDAwMDRMCistI2RlZmluZSBTU0xfT1BfTkVUU0NB UEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUcJCTB4MDAwMDAwMDhMCisrI2RlZmluZSBTU0xfT1Bf TkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUcJCTB4MDAwMDAwMDhMIC8qIG5vIGVmZmVj dCBzaW5jZSAxLjAuMGMgZHVlIHRvIENWRS0yMDEwLTQxODAgKi8KKyAjZGVmaW5lIFNTTF9PUF9T U0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUcJCTB4MDAwMDAwMTBMCisgI2RlZmluZSBTU0xfT1Bf TUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIJCTB4MDAwMDAwMjBMCisgI2RlZmluZSBTU0xfT1Bf U0FGQVJJX0VDREhFX0VDRFNBX0JVRwkJCTB4MDAwMDAwNDBMCitAQCAtNTY5LDcgKzU2OSw3IEBA IHN0cnVjdCBzc2xfc2Vzc2lvbl9zdAorIAorIC8qIFNTTF9PUF9BTEw6IHZhcmlvdXMgYnVnIHdv cmthcm91bmRzIHRoYXQgc2hvdWxkIGJlIHJhdGhlciBoYXJtbGVzcy4KKyAgKiAgICAgICAgICAg ICBUaGlzIHVzZWQgdG8gYmUgMHgwMDBGRkZGRkwgYmVmb3JlIDAuOS43LiAqLworLSNkZWZpbmUg U1NMX09QX0FMTAkJCQkJMHg4MDAwMEJGRkwKKysjZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAw MDBCRjdMIC8qIHdlIHN0aWxsIGhhdmUgdG8gaW5jbHVkZSBTU0xfT1BfRE9OVF9JTlNFUlRfRU1Q VFlfRlJBR01FTlRTICovCisgCisgLyogRFRMUyBvcHRpb25zICovCisgI2RlZmluZSBTU0xfT1Bf Tk9fUVVFUllfTVRVICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAoKZGlmZiAtLWdpdCBhL29w ZW5zc2wuZ2l0LTk2ZGI5MDIucGF0Y2ggYi9vcGVuc3NsLmdpdC05NmRiOTAyLnBhdGNoCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmVkMzJhLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wu Z2l0LTk2ZGI5MDIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotRnJvbTog RHIuIFN0ZXBoZW4gSGVuc29uIDxzdGV2ZUBvcGVuc3NsLm9yZz4KLURhdGU6IFNhdCwgNSBBcHIg MjAxNCAyMzo1MTowNiArMDAwMCAoKzAxMDApCi1TdWJqZWN0OiBBZGQgaGVhcnRiZWF0IGV4dGVu c2lvbiBib3VuZHMgY2hlY2suCi1YLUdpdC1UYWc6IE9wZW5TU0xfMV8wXzFnfjMKLVgtR2l0LVVy bDogaHR0cDovL2dpdC5vcGVuc3NsLm9yZy9naXR3ZWIvP3A9b3BlbnNzbC5naXQ7YT1jb21taXRk aWZmX3BsYWluO2g9OTZkYjkwMgotCi1BZGQgaGVhcnRiZWF0IGV4dGVuc2lvbiBib3VuZHMgY2hl Y2suCi0KLUEgbWlzc2luZyBib3VuZHMgY2hlY2sgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSBUTFMg aGVhcnRiZWF0IGV4dGVuc2lvbgotY2FuIGJlIHVzZWQgdG8gcmV2ZWFsIHVwIHRvIDY0ayBvZiBt ZW1vcnkgdG8gYSBjb25uZWN0ZWQgY2xpZW50IG9yCi1zZXJ2ZXIuCi0KLVRoYW5rcyBmb3IgTmVl bCBNZWh0YSBvZiBHb29nbGUgU2VjdXJpdHkgZm9yIGRpc2NvdmVyaW5nIHRoaXMgYnVnIGFuZCB0 bwotQWRhbSBMYW5nbGV5IDxhZ2xAY2hyb21pdW0ub3JnPiBhbmQgQm9kbyBNb2VsbGVyIDxibW9l bGxlckBhY20ub3JnPiBmb3IKLXByZXBhcmluZyB0aGUgZml4IChDVkUtMjAxNC0wMTYwKQotLS0t Ci0KLWRpZmYgLS1naXQgYS9zc2wvZDFfYm90aC5jIGIvc3NsL2QxX2JvdGguYwotaW5kZXggN2E1 NTk2YS4uMmU4Y2Y2OCAxMDA2NDQKLS0tLSBhL3NzbC9kMV9ib3RoLmMKLSsrKyBiL3NzbC9kMV9i b3RoLmMKLUBAIC0xNDU5LDI2ICsxNDU5LDM2IEBAIGR0bHMxX3Byb2Nlc3NfaGVhcnRiZWF0KFNT TCAqcykKLSAJdW5zaWduZWQgaW50IHBheWxvYWQ7Ci0gCXVuc2lnbmVkIGludCBwYWRkaW5nID0g MTY7IC8qIFVzZSBtaW5pbXVtIHBhZGRpbmcgKi8KLSAKLS0JLyogUmVhZCB0eXBlIGFuZCBwYXls b2FkIGxlbmd0aCBmaXJzdCAqLwotLQloYnR5cGUgPSAqcCsrOwotLQluMnMocCwgcGF5bG9hZCk7 Ci0tCXBsID0gcDsKLS0KLSAJaWYgKHMtPm1zZ19jYWxsYmFjaykKLSAJCXMtPm1zZ19jYWxsYmFj aygwLCBzLT52ZXJzaW9uLCBUTFMxX1JUX0hFQVJUQkVBVCwKLSAJCQkmcy0+czMtPnJyZWMuZGF0 YVswXSwgcy0+czMtPnJyZWMubGVuZ3RoLAotIAkJCXMsIHMtPm1zZ19jYWxsYmFja19hcmcpOwot IAotKwkvKiBSZWFkIHR5cGUgYW5kIHBheWxvYWQgbGVuZ3RoIGZpcnN0ICovCi0rCWlmICgxICsg MiArIDE2ID4gcy0+czMtPnJyZWMubGVuZ3RoKQotKwkJcmV0dXJuIDA7IC8qIHNpbGVudGx5IGRp c2NhcmQgKi8KLSsJaGJ0eXBlID0gKnArKzsKLSsJbjJzKHAsIHBheWxvYWQpOwotKwlpZiAoMSAr IDIgKyBwYXlsb2FkICsgMTYgPiBzLT5zMy0+cnJlYy5sZW5ndGgpCi0rCQlyZXR1cm4gMDsgLyog c2lsZW50bHkgZGlzY2FyZCBwZXIgUkZDIDY1MjAgc2VjLiA0ICovCi0rCXBsID0gcDsKLSsKLSAJ aWYgKGhidHlwZSA9PSBUTFMxX0hCX1JFUVVFU1QpCi0gCQl7Ci0gCQl1bnNpZ25lZCBjaGFyICpi dWZmZXIsICpicDsKLSsJCXVuc2lnbmVkIGludCB3cml0ZV9sZW5ndGggPSAxIC8qIGhlYXJ0YmVh dCB0eXBlICovICsKLSsJCQkJCSAgICAyIC8qIGhlYXJ0YmVhdCBsZW5ndGggKi8gKwotKwkJCQkJ ICAgIHBheWxvYWQgKyBwYWRkaW5nOwotIAkJaW50IHI7Ci0gCi0rCQlpZiAod3JpdGVfbGVuZ3Ro ID4gU1NMM19SVF9NQVhfUExBSU5fTEVOR1RIKQotKwkJCXJldHVybiAwOwotKwotIAkJLyogQWxs b2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzcG9uc2UsIHNpemUgaXMgMSBieXRlCi0gCQkgKiBtZXNz YWdlIHR5cGUsIHBsdXMgMiBieXRlcyBwYXlsb2FkIGxlbmd0aCwgcGx1cwotIAkJICogcGF5bG9h ZCwgcGx1cyBwYWRkaW5nCi0gCQkgKi8KLS0JCWJ1ZmZlciA9IE9QRU5TU0xfbWFsbG9jKDEgKyAy ICsgcGF5bG9hZCArIHBhZGRpbmcpOwotKwkJYnVmZmVyID0gT1BFTlNTTF9tYWxsb2Mod3JpdGVf bGVuZ3RoKTsKLSAJCWJwID0gYnVmZmVyOwotIAotIAkJLyogRW50ZXIgcmVzcG9uc2UgdHlwZSwg bGVuZ3RoIGFuZCBjb3B5IHBheWxvYWQgKi8KLUBAIC0xNDg5LDExICsxNDk5LDExIEBAIGR0bHMx X3Byb2Nlc3NfaGVhcnRiZWF0KFNTTCAqcykKLSAJCS8qIFJhbmRvbSBwYWRkaW5nICovCi0gCQlS QU5EX3BzZXVkb19ieXRlcyhicCwgcGFkZGluZyk7Ci0gCi0tCQlyID0gZHRsczFfd3JpdGVfYnl0 ZXMocywgVExTMV9SVF9IRUFSVEJFQVQsIGJ1ZmZlciwgMyArIHBheWxvYWQgKyBwYWRkaW5nKTsK LSsJCXIgPSBkdGxzMV93cml0ZV9ieXRlcyhzLCBUTFMxX1JUX0hFQVJUQkVBVCwgYnVmZmVyLCB3 cml0ZV9sZW5ndGgpOwotIAotIAkJaWYgKHIgPj0gMCAmJiBzLT5tc2dfY2FsbGJhY2spCi0gCQkJ cy0+bXNnX2NhbGxiYWNrKDEsIHMtPnZlcnNpb24sIFRMUzFfUlRfSEVBUlRCRUFULAotLQkJCQli dWZmZXIsIDMgKyBwYXlsb2FkICsgcGFkZGluZywKLSsJCQkJYnVmZmVyLCB3cml0ZV9sZW5ndGgs Ci0gCQkJCXMsIHMtPm1zZ19jYWxsYmFja19hcmcpOwotIAotIAkJT1BFTlNTTF9mcmVlKGJ1ZmZl cik7Ci1kaWZmIC0tZ2l0IGEvc3NsL3QxX2xpYi5jIGIvc3NsL3QxX2xpYi5jCi1pbmRleCBiODJm YWRhLi5iZGRmZmQ5IDEwMDY0NAotLS0tIGEvc3NsL3QxX2xpYi5jCi0rKysgYi9zc2wvdDFfbGli LmMKLUBAIC0yNTg4LDE2ICsyNTg4LDIwIEBAIHRsczFfcHJvY2Vzc19oZWFydGJlYXQoU1NMICpz KQotIAl1bnNpZ25lZCBpbnQgcGF5bG9hZDsKLSAJdW5zaWduZWQgaW50IHBhZGRpbmcgPSAxNjsg LyogVXNlIG1pbmltdW0gcGFkZGluZyAqLwotIAotLQkvKiBSZWFkIHR5cGUgYW5kIHBheWxvYWQg bGVuZ3RoIGZpcnN0ICovCi0tCWhidHlwZSA9ICpwKys7Ci0tCW4ycyhwLCBwYXlsb2FkKTsKLS0J cGwgPSBwOwotLQotIAlpZiAocy0+bXNnX2NhbGxiYWNrKQotIAkJcy0+bXNnX2NhbGxiYWNrKDAs IHMtPnZlcnNpb24sIFRMUzFfUlRfSEVBUlRCRUFULAotIAkJCSZzLT5zMy0+cnJlYy5kYXRhWzBd LCBzLT5zMy0+cnJlYy5sZW5ndGgsCi0gCQkJcywgcy0+bXNnX2NhbGxiYWNrX2FyZyk7Ci0gCi0r CS8qIFJlYWQgdHlwZSBhbmQgcGF5bG9hZCBsZW5ndGggZmlyc3QgKi8KLSsJaWYgKDEgKyAyICsg MTYgPiBzLT5zMy0+cnJlYy5sZW5ndGgpCi0rCQlyZXR1cm4gMDsgLyogc2lsZW50bHkgZGlzY2Fy ZCAqLwotKwloYnR5cGUgPSAqcCsrOwotKwluMnMocCwgcGF5bG9hZCk7Ci0rCWlmICgxICsgMiAr IHBheWxvYWQgKyAxNiA+IHMtPnMzLT5ycmVjLmxlbmd0aCkKLSsJCXJldHVybiAwOyAvKiBzaWxl bnRseSBkaXNjYXJkIHBlciBSRkMgNjUyMCBzZWMuIDQgKi8KLSsJcGwgPSBwOwotKwotIAlpZiAo aGJ0eXBlID09IFRMUzFfSEJfUkVRVUVTVCkKLSAJCXsKLSAJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZl ciwgKmJwOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wuc3BlYyBiL29wZW5zc2wuc3BlYwppbmRleCBl ODA3ZTUwLi4yOGRhOWUyIDEwMDY0NAotLS0gYS9vcGVuc3NsLnNwZWMKKysrIGIvb3BlbnNzbC5z cGVjCkBAIC0yMiw4ICsyMiw4IEBACiAKIFN1bW1hcnk6IFV0aWxpdGllcyBmcm9tIHRoZSBnZW5l cmFsIHB1cnBvc2UgY3J5cHRvZ3JhcGh5IGxpYnJhcnkgd2l0aCBUTFMgaW1wbGVtZW50YXRpb24K IE5hbWU6IG9wZW5zc2wKLVZlcnNpb246IDEuMC4xZQotUmVsZWFzZTogNDQlez9kaXN0fQorVmVy c2lvbjogMS4wLjFnCitSZWxlYXNlOiAxJXs/ZGlzdH0KIEVwb2NoOiAxCiAjIFdlIGhhdmUgdG8g cmVtb3ZlIGNlcnRhaW4gcGF0ZW50ZWQgYWxnb3JpdGhtcyBmcm9tIHRoZSBvcGVuc3NsIHNvdXJj ZQogIyB0YXJiYWxsIHdpdGggdGhlIGhvYmJsZS1vcGVuc3NsIHNjcmlwdCB3aGljaCBpcyBpbmNs dWRlZCBiZWxvdy4KQEAgLTU3LDkgKzU3LDkgQEAgUGF0Y2gzMzogb3BlbnNzbC0xLjAuMC1iZXRh NC1jYS1kaXIucGF0Y2gKIFBhdGNoMzQ6IG9wZW5zc2wtMC45LjYteDUwOS5wYXRjaAogUGF0Y2gz NTogb3BlbnNzbC0wLjkuOGotdmVyc2lvbi1hZGQtZW5naW5lcy5wYXRjaAogUGF0Y2gzNjogb3Bl bnNzbC0xLjAuMGUtZG9jLW5vZW9mLnBhdGNoCi1QYXRjaDM4OiBvcGVuc3NsLTEuMC4xLWJldGEy LXNzbC1vcC1hbGwucGF0Y2gKK1BhdGNoMzg6IG9wZW5zc2wtMS4wLjFnLXNzbC1vcC1hbGwucGF0 Y2gKIFBhdGNoMzk6IG9wZW5zc2wtMS4wLjFjLWlwdjYtYXBwcy5wYXRjaAotUGF0Y2g0MDogb3Bl bnNzbC0xLjAuMWUtZmlwcy5wYXRjaAorUGF0Y2g0MDogb3BlbnNzbC0xLjAuMWctZmlwcy5wYXRj aAogUGF0Y2g0NTogb3BlbnNzbC0xLjAuMWUtZW52LXpsaWIucGF0Y2gKIFBhdGNoNDc6IG9wZW5z c2wtMS4wLjAtYmV0YTUtcmVhZG1lLXdhcm5pbmcucGF0Y2gKIFBhdGNoNDk6IG9wZW5zc2wtMS4w LjFhLWFsZ28tZG9jLnBhdGNoCkBAIC03OSwyMyArNzksMTYgQEAgUGF0Y2g3Mjogb3BlbnNzbC0x LjAuMWUtZmlwcy1jdG9yLnBhdGNoCiBQYXRjaDczOiBvcGVuc3NsLTEuMC4xZS1lY2Mtc3VpdGVi LnBhdGNoCiBQYXRjaDc0OiBvcGVuc3NsLTEuMC4xZS1uby1tZDUtdmVyaWZ5LnBhdGNoCiBQYXRj aDc1OiBvcGVuc3NsLTEuMC4xZS1jb21wYXQtc3ltYm9scy5wYXRjaAotUGF0Y2g3Njogb3BlbnNz bC0xLjAuMWUtbmV3LWZpcHMtcmVxcy5wYXRjaAorUGF0Y2g3Njogb3BlbnNzbC0xLjAuMWctbmV3 LWZpcHMtcmVxcy5wYXRjaAogUGF0Y2g3Nzogb3BlbnNzbC0xLjAuMWUtd2Vhay1jaXBoZXJzLnBh dGNoCi1QYXRjaDc4OiBvcGVuc3NsLTEuMC4xZS0zZGVzLXN0cmVuZ3RoLnBhdGNoCi1QYXRjaDc5 OiBvcGVuc3NsLTEuMC4xZS1yZXEta2V5bGVuLnBhdGNoCitQYXRjaDc4OiBvcGVuc3NsLTEuMC4x Zy0zZGVzLXN0cmVuZ3RoLnBhdGNoCiBQYXRjaDkwOiBvcGVuc3NsLTEuMC4xZS1lbmMtZmFpbC5w YXRjaAorUGF0Y2g5MTogb3BlbnNzbC0xLjAuMWUtc3NsMi1uby1lYy5wYXRjaAogIyBCYWNrcG9y dGVkIGZpeGVzIGluY2x1ZGluZyBzZWN1cml0eSBmaXhlcwogUGF0Y2g4MTogb3BlbnNzbC0xLjAu MS1iZXRhMi1wYWRsb2NrNjQucGF0Y2gKLVBhdGNoODI6IG9wZW5zc2wtMS4wLjFlLWJhY2twb3J0 cy5wYXRjaAotUGF0Y2g4Mzogb3BlbnNzbC0xLjAuMWUtYmFkLW1hYy5wYXRjaAogUGF0Y2g4NDog b3BlbnNzbC0xLjAuMWUtdHJ1c3RlZC1maXJzdC5wYXRjaAogUGF0Y2g4NTogb3BlbnNzbC0xLjAu MWUtYXJtLXVzZS1lbGYtYXV4di1jYXBzLnBhdGNoCi1QYXRjaDg2OiBvcGVuc3NsLTEuMC4xZS1j dmUtMjAxMy02NDQ5LnBhdGNoCi1QYXRjaDg3OiBvcGVuc3NsLTEuMC4xZS1jdmUtMjAxMy02NDUw LnBhdGNoCi1QYXRjaDg4OiBvcGVuc3NsLTEuMC4xZS1jdmUtMjAxMy00MzUzLnBhdGNoCiBQYXRj aDg5OiBvcGVuc3NsLTEuMC4xZS1lcGhlbWVyYWwta2V5LXNpemUucGF0Y2gKLSMgdXBzdHJlYW0g cGF0Y2ggZm9yIENWRS0yMDE0LTAxNjAKLVBhdGNoMTAwOiBvcGVuc3NsLmdpdC05NmRiOTAyLnBh dGNoCiAKIExpY2Vuc2U6IE9wZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFy aWVzCkBAIC0yMDMsNiArMTk2LDcgQEAgY3AgJXtTT1VSQ0UxMn0gJXtTT1VSQ0UxM30gY3J5cHRv L2VjLwogJXBhdGNoNjggLXAxIC1iIC5zZWN1cmUtZ2V0ZW52CiAlcGF0Y2g2OSAtcDEgLWIgLmRo MTAyNAogJXBhdGNoNzAgLXAxIC1iIC5maXBzLWVjCislcGF0Y2g3MSAtcDEgLWIgLm1hbmZpeAog JXBhdGNoNzIgLXAxIC1iIC5maXBzLWN0b3IKICVwYXRjaDczIC1wMSAtYiAuc3VpdGViCiAlcGF0 Y2g3NCAtcDEgLWIgLm5vLW1kNS12ZXJpZnkKQEAgLTIxMCwyMCArMjA0LDEzIEBAIGNwICV7U09V UkNFMTJ9ICV7U09VUkNFMTN9IGNyeXB0by9lYy8KICVwYXRjaDc2IC1wMSAtYiAuZmlwcy1yZXFz CiAlcGF0Y2g3NyAtcDEgLWIgLndlYWstY2lwaGVycwogJXBhdGNoNzggLXAxIC1iIC4zZGVzLXN0 cmVuZ3RoCi0lcGF0Y2g3OSAtcDEgLWIgLmtleWxlbgogJXBhdGNoOTAgLXAxIC1iIC5lbmMtZmFp bAorJXBhdGNoOTEgLXAxIC1iIC5zc2wybm9lYwogCiAlcGF0Y2g4MSAtcDEgLWIgLnBhZGxvY2s2 NAotJXBhdGNoODIgLXAxIC1iIC5iYWNrcG9ydHMKLSVwYXRjaDcxIC1wMSAtYiAubWFuZml4Ci0l cGF0Y2g4MyAtcDEgLWIgLmJhZC1tYWMKICVwYXRjaDg0IC1wMSAtYiAudHJ1c3RlZC1maXJzdAog JXBhdGNoODUgLXAxIC1iIC5hcm1jYXAKLSVwYXRjaDg2IC1wMSAtYiAuaGFzaC1jcmFzaAotJXBh dGNoODcgLXAxIC1iIC5kdGxzMS1taXRtCi0lcGF0Y2g4OCAtcDEgLWIgLmhhbmRzaGFrZS1jcmFz aAogJXBhdGNoODkgLXAxIC1iIC5lcGhlbWVyYWwKLSVwYXRjaDEwMCAtcDEgLWIgLkNWRS0yMDE0 LTAxNjAKIAogc2VkIC1pICdzL1NITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIvU0hMSUJfVkVS U0lPTl9OVU1CRVIgIiV7dmVyc2lvbn0iLycgY3J5cHRvL29wZW5zc2x2LmgKIApAQCAtNDkwLDYg KzQ3NywxMSBAQCBybSAtcmYgJFJQTV9CVUlMRF9ST09ULyV7X2xpYmRpcn0vZmlwc2NhbmlzdGVy LioKICVwb3N0dW4gbGlicyAtcCAvc2Jpbi9sZGNvbmZpZwogCiAlY2hhbmdlbG9nCisqIFdlZCBN YXkgIDcgMjAxNCBUb23DocWhIE1yw6F6IDx0bXJhekByZWRoYXQuY29tPiAxLjAuMWctMQorLSBu ZXcgdXBzdHJlYW0gcmVsZWFzZSAxLjAuMWcKKy0gZG8gbm90IGluY2x1ZGUgRUNDIGNpcGhlcnN1 aXRlcyBpbiBTU0x2MiBjbGllbnQgaGVsbG8gKCMxMDkwOTUyKQorLSBmYWlsIG9uIGhtYWMgaW50 ZWdyaXR5IGNoZWNrIGlmIHRoZSAuaG1hYyBmaWxlIGlzIGVtcHR5CisKICogTW9uIEFwciAwNyAy MDE0IERlbm5pcyBHaWxtb3JlIDxkZW5uaXNAYXVzaWwudXM+IC0gMS4wLjFlLTQ0CiAtIHB1bGwg aW4gdXBzdHJlYW0gcGF0Y2ggZm9yIENWRS0yMDE0LTAxNjAKIC0gcmVtb3ZlZCBDSEFOR0VTIGZp bGUgcG9ydGlvbiBmcm9tIHBhdGNoIGZvciBleHBlZGllbmN5CgpkaWZmIC0tZ2l0IGEvc291cmNl cyBiL3NvdXJjZXMKaW5kZXggNTU2ZGNiNC4uMzA2OTBlMCAxMDA2NDQKLS0tIGEvc291cmNlcwor KysgYi9zb3VyY2VzCkBAIC0xICsxIEBACi02MTE1YWUwYmI2MWI0ODFhOTE5NWJhZWY3MjUxNGMy ZSAgb3BlbnNzbC0xLjAuMWUtaG9iYmxlZC50YXIueHoKKzNkZTRmOTE3MDJkZmE1NDVkNTc3OTEy YTA2NWZiMjUwICBvcGVuc3NsLTEuMC4xZy1ob2JibGVkLnRhci54ego=