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 version Date: Tue, 09 Jun 2026 12:42:49 GMT Message-ID: <178100896911.1.5659512810105330270.rpms-openssl-dc696fdac49e@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: dc696fdac49e9b77630fbbe141382b0941a1db60 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGRjNjk2ZmRhYzQ5ZTliNzc2MzBmYmJlMTQxMzgy YjA5NDFhMWRiNjAKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTMtMDItMTlUMTM6NTc6MzkrMDE6MDAKU3RhdHMgIDogKzIwODQwLy0yMTg3 MSBpbiAxNiBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3Jw bXMvb3BlbnNzbC9jL2RjNjk2ZmRhYzQ5ZTliNzc2MzBmYmJlMTQxMzgyYjA5NDFhMWRiNjA/YnJh bmNoPXJlYmFzZV80MGJldGEKCkxvZzoKbmV3IHVwc3RyZWFtIHZlcnNpb24KCi0tLQpkaWZmIC0t Z2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggYzk1ZDNiMC4uOTJhNDEwMiAxMDA2 NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xMSwzICsxMSw0IEBAIG9w ZW5zc2wtMS4wLjBhLXVzYS50YXIuYnoyCiAvb3BlbnNzbC0xLjAuMWEtdXNhLnRhci54egogL29w ZW5zc2wtMS4wLjFiLXVzYS50YXIueHoKIC9vcGVuc3NsLTEuMC4xYy11c2EudGFyLnh6Cisvb3Bl bnNzbC0xLjAuMWUtdXNhLnRhci54egoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtZmlwcy1w a2NzOC5wYXRjaCBiL29wZW5zc2wtMS4wLjAtZmlwcy1wa2NzOC5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZGQ3ZTM2YS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWZp cHMtcGtjczgucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vcGVtL3BlbV9hbGwuYy5wa2NzOCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9wZW0vcGVtX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcGVtL3BlbV9hbGwu Yy5wa2NzOAkyMDA2LTExLTA2IDIwOjUzOjM3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3BlbS9wZW1fYWxsLmMJMjAxMi0wNC0yNiAxNzoxNzozNS43NjUzMTc2NTIg KzAyMDAKLUBAIC0xNDcsNyArMTQ3LDM3IEBAIElNUExFTUVOVF9QRU1fcncoUEtDUzcsIFBLQ1M3 LCBQRU1fU1RSSU4KLSAKLSBJTVBMRU1FTlRfUEVNX3J3KE5FVFNDQVBFX0NFUlRfU0VRVUVOQ0Us IE5FVFNDQVBFX0NFUlRfU0VRVUVOQ0UsCi0gCQkJCQlQRU1fU1RSSU5HX1g1MDksIE5FVFNDQVBF X0NFUlRfU0VRVUVOQ0UpCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotIAotK3N0YXRpYyBpbnQgZmlw c19QRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoQklPICpicCwgRVZQX1BLRVkgKngsIGNvbnN0IEVW UF9DSVBIRVIgKmVuYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAq dSkKLSsJewotKwkJaWYgKEZJUFNfbW9kZSgpKQotKwkJCXJldHVybiBQRU1fd3JpdGVfYmlvX1BL Q1M4UHJpdmF0ZUtleShicCwgeCwgZW5jLAotKwkJCQkJCShjaGFyICopa3N0ciwga2xlbiwgY2Is IHUpOwotKwkJZWxzZQotKyAgICAgICAgICAgICAgICAJcmV0dXJuIFBFTV9BU04xX3dyaXRlX2Jp bygoaTJkX29mX3ZvaWQgKilpMmRfUHJpdmF0ZUtleSwKLSsgICAgICAgICAgICAgICAgKCh4LT50 eXBlID09IEVWUF9QS0VZX0RTQSk/UEVNX1NUUklOR19EU0E6KHgtPnR5cGUgPT0gRVZQX1BLRVlf UlNBKT9QRU1fU1RSSU5HX1JTQTpQRU1fU1RSSU5HX0VDUFJJVkFURUtFWSksCi0rICAgICAgICAg ICAgICAgICAgICAgICAgYnAseCxlbmMsa3N0cixrbGVuLGNiLHUpOwotKwl9Ci0rCi0rI2lmbmRl ZiBPUEVOU1NMX05PX0ZQX0FQSQotK3N0YXRpYyBpbnQgZmlwc19QRU1fd3JpdGVfUHJpdmF0ZUtl eShGSUxFICpmcCwgRVZQX1BLRVkgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtz dHIsIGludCBrbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKLSsJewotKwkJaWYgKEZJUFNfbW9k ZSgpKQotKwkJCXJldHVybiBQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5KGZwLCB4LCBlbmMsCi0r CQkJCQkJKGNoYXIgKilrc3RyLCBrbGVuLCBjYiwgdSk7Ci0rCQllbHNlCi0rICAgICAgICAgICAg ICAgIAlyZXR1cm4gUEVNX0FTTjFfd3JpdGUoKGkyZF9vZl92b2lkICopaTJkX1ByaXZhdGVLZXks Ci0rICAgICAgICAgICAgICAgICgoeC0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpP1BFTV9TVFJJTkdf RFNBOih4LT50eXBlID09IEVWUF9QS0VZX1JTQSk/UEVNX1NUUklOR19SU0E6UEVNX1NUUklOR19F Q1BSSVZBVEVLRVkpLAotKyAgICAgICAgICAgICAgICAgICAgICAgIGZwLHgsZW5jLGtzdHIsa2xl bixjYix1KTsKLSsJfQotKyNlbmRpZgotKwotKyNlbmRpZgotIAotICNpZm5kZWYgT1BFTlNTTF9O T19SU0EKLSAKLUBAIC0xOTMsNyArMjIzLDQ5IEBAIFJTQSAqUEVNX3JlYWRfUlNBUHJpdmF0ZUtl eShGSUxFICpmcCwgUlMKLSAKLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r aW50IFBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleShCSU8gKmJwLCBSU0EgKngsIGNvbnN0IEVW UF9DSVBIRVIgKmVuYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAq dSkKLSt7Ci0rCUVWUF9QS0VZICprOwotKwlpbnQgcmV0OwotKwlrID0gRVZQX1BLRVlfbmV3KCk7 Ci0rCWlmICghaykKLSsJCXJldHVybiAwOwotKwlFVlBfUEtFWV9zZXQxX1JTQShrLCB4KTsKLSsK LSsJcmV0ID0gZmlwc19QRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoYnAsIGssIGVuYywga3N0ciwg a2xlbiwgY2IsIHUpOwotKwlFVlBfUEtFWV9mcmVlKGspOwotKwlyZXR1cm4gcmV0OwotK30KLSsK LSsjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCi0raW50IFBFTV93cml0ZV9SU0FQcml2YXRlS2V5 KEZJTEUgKmZwLCBSU0EgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGlu dCBrbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKLSt7Ci0rCUVWUF9QS0VZICprOwotKwlpbnQg cmV0OwotKwlrID0gRVZQX1BLRVlfbmV3KCk7Ci0rCWlmICghaykKLSsJCXJldHVybiAwOwotKwot KwlFVlBfUEtFWV9zZXQxX1JTQShrLCB4KTsKLSsKLSsJcmV0ID0gZmlwc19QRU1fd3JpdGVfUHJp dmF0ZUtleShmcCwgaywgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7Ci0rCUVWUF9QS0VZX2ZyZWUo ayk7Ci0rCXJldHVybiByZXQ7Ci0rfQotKyNlbmRpZgotKwotKyNlbHNlCi0rCi0gSU1QTEVNRU5U X1BFTV93cml0ZV9jYl9jb25zdChSU0FQcml2YXRlS2V5LCBSU0EsIFBFTV9TVFJJTkdfUlNBLCBS U0FQcml2YXRlS2V5KQotKwotKyNlbmRpZgotKwotIElNUExFTUVOVF9QRU1fcndfY29uc3QoUlNB UHVibGljS2V5LCBSU0EsIFBFTV9TVFJJTkdfUlNBX1BVQkxJQywgUlNBUHVibGljS2V5KQotIElN UExFTUVOVF9QRU1fcncoUlNBX1BVQktFWSwgUlNBLCBQRU1fU1RSSU5HX1BVQkxJQywgUlNBX1BV QktFWSkKLSAKLUBAIC0yMjMsNyArMjk1LDQ3IEBAIERTQSAqUEVNX3JlYWRfYmlvX0RTQVByaXZh dGVLZXkoQklPICpicCwKLSAJcmV0dXJuIHBrZXlfZ2V0X2RzYShwa3RtcCwgZHNhKTsJLyogd2ls bCBmcmVlIHBrdG1wICovCi0gfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgUEVN X3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5KEJJTyAqYnAsIERTQSAqeCwgY29uc3QgRVZQX0NJUEhF UiAqZW5jLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KQotK3sK LSsJRVZQX1BLRVkgKms7Ci0rCWludCByZXQ7Ci0rCWsgPSBFVlBfUEtFWV9uZXcoKTsKLSsJaWYg KCFrKQotKwkJcmV0dXJuIDA7Ci0rCUVWUF9QS0VZX3NldDFfRFNBKGssIHgpOwotKwotKwlyZXQg PSBmaXBzX1BFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShicCwgaywgZW5jLCBrc3RyLCBrbGVuLCBj YiwgdSk7Ci0rCUVWUF9QS0VZX2ZyZWUoayk7Ci0rCXJldHVybiByZXQ7Ci0rfQotKwotKyNpZm5k ZWYgT1BFTlNTTF9OT19GUF9BUEkKLStpbnQgUEVNX3dyaXRlX0RTQVByaXZhdGVLZXkoRklMRSAq ZnAsIERTQSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFz c3dvcmRfY2IgKmNiLCB2b2lkICp1KQotK3sKLSsJRVZQX1BLRVkgKms7Ci0rCWludCByZXQ7Ci0r CWsgPSBFVlBfUEtFWV9uZXcoKTsKLSsJaWYgKCFrKQotKwkJcmV0dXJuIDA7Ci0rCUVWUF9QS0VZ X3NldDFfRFNBKGssIHgpOwotKwlyZXQgPSBmaXBzX1BFTV93cml0ZV9Qcml2YXRlS2V5KGZwLCBr LCBlbmMsIGtzdHIsIGtsZW4sIGNiLCB1KTsKLSsJRVZQX1BLRVlfZnJlZShrKTsKLSsJcmV0dXJu IHJldDsKLSt9Ci0rI2VuZGlmCi0rCi0rI2Vsc2UKLSsKLSBJTVBMRU1FTlRfUEVNX3dyaXRlX2Ni X2NvbnN0KERTQVByaXZhdGVLZXksIERTQSwgUEVNX1NUUklOR19EU0EsIERTQVByaXZhdGVLZXkp Ci0rCi0rI2VuZGlmCi0rCi0gSU1QTEVNRU5UX1BFTV9ydyhEU0FfUFVCS0VZLCBEU0EsIFBFTV9T VFJJTkdfUFVCTElDLCBEU0FfUFVCS0VZKQotIAotICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkK LUBAIC0yNjksOCArMzgxLDQ5IEBAIEVDX0tFWSAqUEVNX3JlYWRfYmlvX0VDUHJpdmF0ZUtleShC SU8gKmIKLSAKLSBJTVBMRU1FTlRfUEVNX3J3X2NvbnN0KEVDUEtQYXJhbWV0ZXJzLCBFQ19HUk9V UCwgUEVNX1NUUklOR19FQ1BBUkFNRVRFUlMsIEVDUEtQYXJhbWV0ZXJzKQotIAotKwotKwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXkoQklP ICpicCwgRUNfS0VZICp4LCBjb25zdCBFVlBfQ0lQSEVSICplbmMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQg a2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBl bV9wYXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpCi0rewotKwlFVlBfUEtFWSAqazsKLSsJaW50IHJl dDsKLSsJayA9IEVWUF9QS0VZX25ldygpOwotKwlpZiAoIWspCi0rCQlyZXR1cm4gMDsKLSsJRVZQ X1BLRVlfc2V0MV9FQ19LRVkoaywgeCk7Ci0rCi0rCXJldCA9IGZpcHNfUEVNX3dyaXRlX2Jpb19Q cml2YXRlS2V5KGJwLCBrLCBlbmMsIGtzdHIsIGtsZW4sIGNiLCB1KTsKLSsJRVZQX1BLRVlfZnJl ZShrKTsKLSsJcmV0dXJuIHJldDsKLSt9Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQot K2ludCBQRU1fd3JpdGVfRUNQcml2YXRlS2V5KEZJTEUgKmZwLCBFQ19LRVkgKngsIGNvbnN0IEVW UF9DSVBIRVIgKmVuYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAq dSkKLSt7Ci0rCUVWUF9QS0VZICprOwotKwlpbnQgcmV0OwotKwlrID0gRVZQX1BLRVlfbmV3KCk7 Ci0rCWlmICghaykKLSsJCXJldHVybiAwOwotKwlFVlBfUEtFWV9zZXQxX0VDX0tFWShrLCB4KTsK LSsJcmV0ID0gZmlwc19QRU1fd3JpdGVfUHJpdmF0ZUtleShmcCwgaywgZW5jLCBrc3RyLCBrbGVu LCBjYiwgdSk7Ci0rCUVWUF9QS0VZX2ZyZWUoayk7Ci0rCXJldHVybiByZXQ7Ci0rfQotKyNlbmRp ZgotKwotKyNlbHNlCi0rCi0gSU1QTEVNRU5UX1BFTV93cml0ZV9jYihFQ1ByaXZhdGVLZXksIEVD X0tFWSwgUEVNX1NUUklOR19FQ1BSSVZBVEVLRVksIEVDUHJpdmF0ZUtleSkKLSAKLSsjZW5kaWYK LSsKLSBJTVBMRU1FTlRfUEVNX3J3KEVDX1BVQktFWSwgRUNfS0VZLCBQRU1fU1RSSU5HX1BVQkxJ QywgRUNfUFVCS0VZKQotIAotICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKCmRpZmYgLS1naXQg YS9vcGVuc3NsLTEuMC4xYy1iYWNrcG9ydHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4xYy1iYWNrcG9y dHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjM2MzZWMuLjAwMDAwMDAK LS0tIGEvb3BlbnNzbC0xLjAuMWMtYmFja3BvcnRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs MTA2ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9hc24xL3hfcHVia2V5 LmMuYmFja3BvcnRzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9hc24xL3hfcHVia2V5LmMKLS0tLSBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vYXNuMS94X3B1YmtleS5jLmJhY2twb3J0cwkyMDEyLTAyLTI4 IDE1OjQ3OjE2LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9hc24x L3hfcHVia2V5LmMJMjAxMi0wNS0xNSAxNzo0NDoxNC41ODQxMjg1MDEgKzAyMDAKLUBAIC0xNzUs MTIgKzE3NSwxNSBAQCBFVlBfUEtFWSAqWDUwOV9QVUJLRVlfZ2V0KFg1MDlfUFVCS0VZICprCi0g CUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRVZQX1BLRVkpOwotIAlpZiAoa2V5LT5wa2V5KQot IAkJewotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VWUF9QS0VZKTsKLSAJCUVWUF9Q S0VZX2ZyZWUocmV0KTsKLSAJCXJldCA9IGtleS0+cGtleTsKLSAJCX0KLSAJZWxzZQotKwkJewot IAkJa2V5LT5wa2V5ID0gcmV0OwotLQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRVZQX1BL RVkpOwotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0VWUF9QS0VZKTsKLSsJCX0KLSAJ Q1JZUFRPX2FkZCgmcmV0LT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19FVlBfUEtFWSk7Ci0g Ci0gCXJldHVybiByZXQ7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9zc2wvczNfbGliLmMuYmFj a3BvcnRzIG9wZW5zc2wtMS4wLjFjL3NzbC9zM19saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFjL3Nz bC9zM19saWIuYy5iYWNrcG9ydHMJMjAxMi0wNC0xNyAxNzoyMDoxNy4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xYy9zc2wvczNfbGliLmMJMjAxMi0wNS0xNSAxNzo0Mjo0My44ODAx Mzk1NjYgKzAyMDAKLUBAIC0xMTI1LDcgKzExMjUsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQ SEVSIHNzbDNfY2lwaGVyc1tdCi0gCTAsIC8qIG5vdCBpbXBsZW1lbnRlZCAobm9uLWVwaGVtZXJh bCBESCkgKi8KLSAJVExTMV9UWFRfREhfRFNTX1dJVEhfQUVTXzEyOF9TSEEyNTYsCi0gCVRMUzFf Q0tfREhfRFNTX1dJVEhfQUVTXzEyOF9TSEEyNTYsCi0tCVNTTF9rREhyLAotKwlTU0xfa0RIZCwK LSAJU1NMX2FESCwKLSAJU1NMX0FFUzEyOCwKLSAJU1NMX1NIQTI1NiwKLUBAIC0xNDA3LDcgKzE0 MDcsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVSIHNzbDNfY2lwaGVyc1tdCi0gCTAsIC8q IG5vdCBpbXBsZW1lbnRlZCAobm9uLWVwaGVtZXJhbCBESCkgKi8KLSAJVExTMV9UWFRfREhfRFNT X1dJVEhfQUVTXzI1Nl9TSEEyNTYsCi0gCVRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzI1Nl9TSEEy NTYsCi0tCVNTTF9rREhyLAotKwlTU0xfa0RIZCwKLSAJU1NMX2FESCwKLSAJU1NMX0FFUzI1NiwK LSAJU1NMX1NIQTI1NiwKLUBAIC0xOTU4LDcgKzE5NTgsNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xf Q0lQSEVSIHNzbDNfY2lwaGVyc1tdCi0gCTAsCi0gCVRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18x MjhfR0NNX1NIQTI1NiwKLSAJVExTMV9DS19ESF9EU1NfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYs Ci0tCVNTTF9rREhyLAotKwlTU0xfa0RIZCwKLSAJU1NMX2FESCwKLSAJU1NMX0FFUzEyOEdDTSwK LSAJU1NMX0FFQUQsCi1AQCAtMTk3NCw3ICsxOTc0LDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJ UEhFUiBzc2wzX2NpcGhlcnNbXQotIAkwLAotIAlUTFMxX1RYVF9ESF9EU1NfV0lUSF9BRVNfMjU2 X0dDTV9TSEEzODQsCi0gCVRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAot LQlTU0xfa0RIciwKLSsJU1NMX2tESGQsCi0gCVNTTF9hREgsCi0gCVNTTF9BRVMyNTZHQ00sCi0g CVNTTF9BRUFELAotQEAgLTI2NjksNyArMjY2OSw3IEBAIE9QRU5TU0xfR0xPQkFMIFNTTF9DSVBI RVIgc3NsM19jaXBoZXJzW10KLSAJMSwKLSAJVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMTI4 X1NIQTI1NiwKLSAJVExTMV9DS19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAotLQlTU0xf a0VDREhlLAotKwlTU0xfa0VDREhyLAotIAlTU0xfYUVDREgsCi0gCVNTTF9BRVMxMjgsCi0gCVNT TF9TSEEyNTYsCi1AQCAtMjY4NSw3ICsyNjg1LDcgQEAgT1BFTlNTTF9HTE9CQUwgU1NMX0NJUEhF UiBzc2wzX2NpcGhlcnNbXQotIAkxLAotIAlUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX0FFU18yNTZf U0hBMzg0LAotIAlUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9TSEEzODQsCi0tCVNTTF9r RUNESGUsCi0rCVNTTF9rRUNESHIsCi0gCVNTTF9hRUNESCwKLSAJU1NMX0FFUzI1NiwKLSAJU1NM X1NIQTM4NCwKLUBAIC0yNzk5LDcgKzI3OTksNyBAQCBPUEVOU1NMX0dMT0JBTCBTU0xfQ0lQSEVS IHNzbDNfY2lwaGVyc1tdCi0gCTEsCi0gCVRMUzFfVFhUX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9H Q01fU0hBMjU2LAotIAlUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAot LQlTU0xfa0VDREhlLAotKwlTU0xfa0VDREhyLAotIAlTU0xfYUVDREgsCi0gCVNTTF9BRVMxMjhH Q00sCi0gCVNTTF9BRUFELAotQEAgLTI4MTUsNyArMjgxNSw3IEBAIE9QRU5TU0xfR0xPQkFMIFNT TF9DSVBIRVIgc3NsM19jaXBoZXJzW10KLSAJMSwKLSAJVExTMV9UWFRfRUNESF9SU0FfV0lUSF9B RVNfMjU2X0dDTV9TSEEzODQsCi0gCVRMUzFfQ0tfRUNESF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9T SEEzODQsCi0tCVNTTF9rRUNESGUsCi0rCVNTTF9rRUNESHIsCi0gCVNTTF9hRUNESCwKLSAJU1NM X0FFUzI1NkdDTSwKLSAJU1NMX0FFQUQsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9zc2wvczNf cGt0LmMuYmFja3BvcnRzIG9wZW5zc2wtMS4wLjFjL3NzbC9zM19wa3QuYwotLS0tIG9wZW5zc2wt MS4wLjFjL3NzbC9zM19wa3QuYy5iYWNrcG9ydHMJMjAxMi0wNC0xNyAxNToyMDoxOS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9zc2wvczNfcGt0LmMJMjAxMi0wNS0xNSAxNzo0 Mzo0OC40NzA1NTU4ODkgKzAyMDAKLUBAIC03NDQsNiArNzQ0LDcgQEAgc3RhdGljIGludCBkb19z c2wzX3dyaXRlKFNTTCAqcywgaW50IHR5cAotIAkgKiBieXRlcyBhbmQgcmVjb3JkIHZlcnNpb24g bnVtYmVyID4gVExTIDEuMAotIAkgKi8KLSAJaWYgKHMtPnN0YXRlID09IFNTTDNfU1RfQ1dfQ0xO VF9IRUxMT19CCi0rCQkJCSYmICFzLT5yZW5lZ290aWF0ZQotIAkJCQkmJiBUTFMxX2dldF92ZXJz aW9uKHMpID4gVExTMV9WRVJTSU9OKQotIAkJKihwKyspID0gMHgxOwotIAllbHNlCgpkaWZmIC0t Z2l0IGEvb3BlbnNzbC0xLjAuMWMtYmFja3BvcnRzMi5wYXRjaCBiL29wZW5zc2wtMS4wLjFjLWJh Y2twb3J0czIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODQ5YmMuLjAw MDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMWMtYmFja3BvcnRzMi5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDM4NSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9hcHBzL2Ntcy5jLmJh Y2twb3J0czIgb3BlbnNzbC0xLjAuMWMvYXBwcy9jbXMuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2Fw cHMvY21zLmMuYmFja3BvcnRzMgkyMDEyLTAxLTA1IDE0OjQ2OjI3LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjFjL2FwcHMvY21zLmMJMjAxMi0xMS0xNCAyMDoyNzo1MC4yNDAyMTE3 MDcgKzAxMDAKLUBAIC0yMzMsNiArMjMzLDggQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotIAkJZWxzZSBpZiAoIXN0cmNtcCgqYXJncywiLWNhbWVsbGlhMjU2IikpCi0gCQkJCWNp cGhlciA9IEVWUF9jYW1lbGxpYV8yNTZfY2JjKCk7Ci0gI2VuZGlmCi0rCQllbHNlIGlmICghc3Ry Y21wICgqYXJncywgIi1kZWJ1Z19kZWNyeXB0IikpIAotKwkJCQlmbGFncyB8PSBDTVNfREVCVUdf REVDUllQVDsKLSAJCWVsc2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLXRleHQiKSkgCi0gCQkJCWZs YWdzIHw9IENNU19URVhUOwotIAkJZWxzZSBpZiAoIXN0cmNtcCAoKmFyZ3MsICItbm9pbnRlcm4i KSkgCi1AQCAtMTAzOSw2ICsxMDQxLDggQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQotIAlyZXQgPSA0OwotIAlpZiAob3BlcmF0aW9uID09IFNNSU1FX0RFQ1JZUFQpCi0gCQl7Ci0r CQlpZiAoZmxhZ3MgJiBDTVNfREVCVUdfREVDUllQVCkKLSsJCQlDTVNfZGVjcnlwdChjbXMsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIGZsYWdzKTsKLSAKLSAJCWlmIChzZWNyZXRfa2V5KQotIAkJ CXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9hc24xL2Ffc3RyZXguYy5iYWNrcG9y dHMyIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9hc24xL2Ffc3RyZXguYwotLS0tIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9hc24xL2Ffc3RyZXguYy5iYWNrcG9ydHMyCTIwMTEtMDEtMDMgMDI6MzA6NTgu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2FzbjEvYV9zdHJleC5j CTIwMTItMTEtMjAgMjI6MTM6MDUuNzIyNzY2OTgwICswMTAwCi1AQCAtNTY3LDYgKzU2Nyw3IEBA IGludCBBU04xX1NUUklOR190b19VVEY4KHVuc2lnbmVkIGNoYXIgKioKLSAJaWYobWJmbGFnID09 IC0xKSByZXR1cm4gLTE7Ci0gCW1iZmxhZyB8PSBNQlNUUklOR19GTEFHOwotIAlzdG1wLmRhdGEg PSBOVUxMOwotKwlzdG1wLmxlbmd0aCA9IDA7Ci0gCXJldCA9IEFTTjFfbWJzdHJpbmdfY29weSgm c3RyLCBpbi0+ZGF0YSwgaW4tPmxlbmd0aCwgbWJmbGFnLCBCX0FTTjFfVVRGOFNUUklORyk7Ci0g CWlmKHJldCA8IDApIHJldHVybiByZXQ7Ci0gCSpvdXQgPSBzdG1wLmRhdGE7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vYm4vYm5fbGNsLmguYmFja3BvcnRzMiBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vYm4vYm5fbGNsLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vYm4vYm5fbGNs LmguYmFja3BvcnRzMgkyMDEyLTExLTE0IDIwOjI3OjQ5LjY5NjE5OTgxMSArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9ibi9ibl9sY2wuaAkyMDEyLTExLTE0IDIwOjI3OjUwLjI0MDIx MTcwNyArMDEwMAotQEAgLTI4MiwxNiArMjgyLDIzIEBAIGV4dGVybiAiQyIgewotICMgIGVuZGlm Ci0gIyBlbGlmIGRlZmluZWQoX19taXBzKSAmJiAoZGVmaW5lZChTSVhUWV9GT1VSX0JJVCkgfHwg ZGVmaW5lZChTSVhUWV9GT1VSX0JJVF9MT05HKSkKLSAjICBpZiBkZWZpbmVkKF9fR05VQ19fKSAm JiBfX0dOVUNfXz49MgotLSMgICBkZWZpbmUgQk5fVU1VTFRfSElHSChhLGIpCSh7CVwKLSsjICAg aWYgX19HTlVDX18+PTQgJiYgX19HTlVDX01JTk9SX18+PTQgLyogImgiIGNvbnN0cmFpbnQgaXMg bm8gbW9yZSBzaW5jZSA0LjQgKi8KLSsjICAgICBkZWZpbmUgQk5fVU1VTFRfSElHSChhLGIpCQkg KCgoX191aW50MTI4X3QpKGEpKihiKSk+PjY0KQotKyMgICAgIGRlZmluZSBCTl9VTVVMVF9MT0hJ KGxvdyxoaWdoLGEsYikgKHsJXAotKwlfX3VpbnQxMjhfdCByZXQ9KF9fdWludDEyOF90KShhKSoo Yik7CVwKLSsJKGhpZ2gpPXJldD4+NjQ7IChsb3cpPXJldDsJIH0pCi0rIyAgIGVsc2UKLSsjICAg ICBkZWZpbmUgQk5fVU1VTFRfSElHSChhLGIpCSh7CVwKLSAJcmVnaXN0ZXIgQk5fVUxPTkcgcmV0 OwkJXAotIAlhc20gKCJkbXVsdHUJJTEsJTIiCQlcCi0gCSAgICAgOiAiPWgiKHJldCkJCVwKLSAJ ICAgICA6ICJyIihhKSwgInIiKGIpIDogImwiKTsJXAotIAlyZXQ7CQkJfSkKLS0jICAgZGVmaW5l IEJOX1VNVUxUX0xPSEkobG93LGhpZ2gsYSxiKQlcCi0rIyAgICAgZGVmaW5lIEJOX1VNVUxUX0xP SEkobG93LGhpZ2gsYSxiKVwKLSAJYXNtICgiZG11bHR1CSUyLCUzIgkJXAotIAkgICAgIDogIj1s Iihsb3cpLCI9aCIoaGlnaCkJXAotIAkgICAgIDogInIiKGEpLCAiciIoYikpOwotKyMgICAgZW5k aWYKLSAjICBlbmRpZgotICMgZW5kaWYJCS8qIGNwdSAqLwotICNlbmRpZgkJLyogT1BFTlNTTF9O T19BU00gKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZV9hZXMuYy5iYWNr cG9ydHMyIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZV9hZXMuYwotLS0tIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9ldnAvZV9hZXMuYy5iYWNrcG9ydHMyCTIwMTItMTEtMTQgMjA6Mjc6NTAuMjM4 MjExNjY0ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTIt MTEtMjAgMjI6MTA6MDYuMzUwODkxNzAzICswMTAwCi1AQCAtOTY4LDggKzk2OCw2IEBAIHN0YXRp YyBpbnQgYWVzX2djbV9jaXBoZXIoRVZQX0NJUEhFUl9DVFgKLSAKLSAJaWYgKCFnY3R4LT5pdl9z ZXQpCi0gCQlyZXR1cm4gLTE7Ci0tCWlmICghY3R4LT5lbmNyeXB0ICYmIGdjdHgtPnRhZ2xlbiA8 IDApCi0tCQlyZXR1cm4gLTE7Ci0gCWlmIChpbikKLSAJCXsKLSAJCWlmIChvdXQgPT0gTlVMTCkK LUBAIC0xMDExLDYgKzEwMDksOCBAQCBzdGF0aWMgaW50IGFlc19nY21fY2lwaGVyKEVWUF9DSVBI RVJfQ1RYCi0gCQl7Ci0gCQlpZiAoIWN0eC0+ZW5jcnlwdCkKLSAJCQl7Ci0rCQkJaWYgKGdjdHgt PnRhZ2xlbiA8IDApCi0rCQkJCXJldHVybiAtMTsKLSAJCQlpZiAoQ1JZUFRPX2djbTEyOF9maW5p c2goJmdjdHgtPmdjbSwKLSAJCQkJCWN0eC0+YnVmLCBnY3R4LT50YWdsZW4pICE9IDApCi0gCQkJ CXJldHVybiAtMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tb2Rlcy9nY20xMjgu Yy5iYWNrcG9ydHMyIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tb2Rlcy9nY20xMjguYwotLS0tIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9tb2Rlcy9nY20xMjguYy5iYWNrcG9ydHMyCTIwMTItMDEtMjUg MTg6NTY6MjQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21vZGVz L2djbTEyOC5jCTIwMTItMTEtMTQgMjA6Mjc6NTAuMjQxMjExNzI5ICswMTAwCi1AQCAtMTM5OCw3 ICsxMzk4LDcgQEAgaW50IENSWVBUT19nY20xMjhfZmluaXNoKEdDTTEyOF9DT05URVhUCi0gCXZv aWQgKCpnY21fZ211bHRfcCkodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSkJPSBjdHgt PmdtdWx0OwotICNlbmRpZgotIAotLQlpZiAoY3R4LT5tcmVzKQotKwlpZiAoY3R4LT5tcmVzIHx8 IGN0eC0+YXJlcykKLSAJCUdDTV9NVUwoY3R4LFhpKTsKLSAKLSAJaWYgKGlzX2VuZGlhbi5saXR0 bGUpIHsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQt bGFyZ2UucGwuYmFja3BvcnRzMiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL2FzbS9zaGExLWFy bXY0LWxhcmdlLnBsCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12 NC1sYXJnZS5wbC5iYWNrcG9ydHMyCTIwMTItMTEtMTQgMjA6Mjc6NTAuMjkzMjEyODY2ICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5wbAky MDEyLTExLTIwIDIyOjIwOjE1LjAxNTA0MTcxOSArMDEwMAotQEAgLTE3Nyw2ICsxNzcsNyBAQCBm b3IoJGk9MDskaTw1OyRpKyspIHsKLSAkY29kZS49PDxfX187Ci0gCXRlcQkkWGksc3AKLSAJYm5l CS5MXzAwXzE1CQlAIFsoKDExKzQpKjUrMikqM10KLSsJc3ViCXNwLHNwLCMyNSo0Ci0gX19fCi0g CSZCT0RZXzAwXzE1KEBWKTsJdW5zaGlmdChAVixwb3AoQFYpKTsKLSAJJkJPRFlfMTZfMTkoQFYp Owl1bnNoaWZ0KEBWLHBvcChAVikpOwotQEAgLTE4Niw3ICsxODcsNiBAQCBfX18KLSAkY29kZS49 PDxfX187Ci0gCi0gCWxkcgkkSywuTEtfMjBfMzkJCUAgWysxNSsxNio0XQotLQlzdWIJc3Asc3As IzI1KjQKLSAJY21uCXNwLCMwCQkJQCBbKzNdLCBjbGVhciBjYXJyeSB0byBkZW5vdGUgMjBfMzkK LSAuTF8yMF8zOV9vcl82MF83OToKLSBfX18KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL3NzbC9z M19zcnZyLmMuYmFja3BvcnRzMiBvcGVuc3NsLTEuMC4xYy9zc2wvczNfc3J2ci5jCi0tLS0gb3Bl bnNzbC0xLjAuMWMvc3NsL3MzX3NydnIuYy5iYWNrcG9ydHMyCTIwMTItMDQtMTUgMTk6MjM6NDEu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvc3NsL3MzX3NydnIuYwkyMDEyLTEx LTIwIDIyOjIzOjIxLjY4NDc1NTE4MiArMDEwMAotQEAgLTExODEsNyArMTE4MSw3IEBAIGludCBz c2wzX2dldF9jbGllbnRfaGVsbG8oU1NMICpzKQotIAkJCWdvdG8gZl9lcnI7Ci0gCQkJfQotIAkJ fQotLQkJaWYgKHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHQocykgPD0gMCkgewotKwkJaWYg KHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHRfZWFybHkocykgPD0gMCkgewotIAkJCVNTTGVy cihTU0xfRl9TU0wzX0dFVF9DTElFTlRfSEVMTE8sU1NMX1JfQ0xJRU5USEVMTE9fVExTRVhUKTsK LSAJCQlnb3RvIGVycjsKLSAJCX0KLUBAIC0xNDAzLDYgKzE0MDMsMTYgQEAgaW50IHNzbDNfZ2V0 X2NsaWVudF9oZWxsbyhTU0wgKnMpCi0gCSAqIHMtPnRtcC5uZXdfY2lwaGVyCS0gdGhlIG5ldyBj aXBoZXIgdG8gdXNlLgotIAkgKi8KLSAKLSsJLyogSGFuZGxlcyBUTFMgZXh0ZW5zaW9ucyB0aGF0 IHdlIGNvdWxkbid0IGNoZWNrIGVhcmxpZXIgKi8KLSsJaWYgKHMtPnZlcnNpb24gPj0gU1NMM19W RVJTSU9OKQotKwkJewotKwkJaWYgKHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHRfbGF0ZShz KSA8PSAwKQotKwkJCXsKLSsJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0hFTExPLCBT U0xfUl9DTElFTlRIRUxMT19UTFNFWFQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCX0KLSsK LSAJaWYgKHJldCA8IDApIHJldD0xOwotIAlpZiAoMCkKLSAJCXsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFjL3NzbC9zc2xfY2VydC5jLmJhY2twb3J0czIgb3BlbnNzbC0xLjAuMWMvc3NsL3NzbF9j ZXJ0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9zc2wvc3NsX2NlcnQuYy5iYWNrcG9ydHMyCTIwMTEt MDUtMTEgMTU6Mzc6NTIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvc3NsL3Nz bF9jZXJ0LmMJMjAxMi0xMS0xNCAyMDoyNzo1MC4yNDEyMTE3MjkgKzAxMDAKLUBAIC0xNjQsMTQg KzE2NCwxNCBAQCBzdGF0aWMgdm9pZCBzc2xfY2VydF9zZXRfZGVmYXVsdF9tZChDRVJUCi0gCXsK LSAJLyogU2V0IGRpZ2VzdCB2YWx1ZXMgdG8gZGVmYXVsdHMgKi8KLSAjaWZuZGVmIE9QRU5TU0xf Tk9fRFNBCi0tCWNlcnQtPnBrZXlzW1NTTF9QS0VZX0RTQV9TSUdOXS5kaWdlc3QgPSBFVlBfZHNz MSgpOwotKwljZXJ0LT5wa2V5c1tTU0xfUEtFWV9EU0FfU0lHTl0uZGlnZXN0ID0gRVZQX3NoYTEo KTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gCWNlcnQtPnBrZXlzW1NTTF9Q S0VZX1JTQV9TSUdOXS5kaWdlc3QgPSBFVlBfc2hhMSgpOwotIAljZXJ0LT5wa2V5c1tTU0xfUEtF WV9SU0FfRU5DXS5kaWdlc3QgPSBFVlBfc2hhMSgpOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNT TF9OT19FQ0RTQQotLQljZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLmRpZ2VzdCA9IEVWUF9lY2Rz YSgpOwotKwljZXJ0LT5wa2V5c1tTU0xfUEtFWV9FQ0NdLmRpZ2VzdCA9IEVWUF9zaGExKCk7Ci0g I2VuZGlmCi0gCX0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL3NzbC9zc2xfbGliLmMuYmFj a3BvcnRzMiBvcGVuc3NsLTEuMC4xYy9zc2wvc3NsX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWMv c3NsL3NzbF9saWIuYy5iYWNrcG9ydHMyCTIwMTItMDEtMDUgMTE6MjI6MzkuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMWMvc3NsL3NzbF9saWIuYwkyMDEyLTExLTIwIDIyOjI1OjI5 LjI0MzUwOTc1NSArMDEwMAotQEAgLTIyODcsNyArMjI4Nyw3IEBAIGludCBzc2xfY2hlY2tfc3J2 cl9lY2NfY2VydF9hbmRfYWxnKFg1MDkKLSAjZW5kaWYKLSAKLSAvKiBUSElTIE5FRURTIENMRUFO SU5HIFVQICovCi0tWDUwOSAqc3NsX2dldF9zZXJ2ZXJfc2VuZF9jZXJ0KFNTTCAqcykKLStDRVJU X1BLRVkgKnNzbF9nZXRfc2VydmVyX3NlbmRfcGtleShjb25zdCBTU0wgKnMpCi0gCXsKLSAJdW5z aWduZWQgbG9uZyBhbGdfayxhbGdfYTsKLSAJQ0VSVCAqYzsKLUBAIC0yMzQ1LDkgKzIzNDUsMTcg QEAgWDUwOSAqc3NsX2dldF9zZXJ2ZXJfc2VuZF9jZXJ0KFNTTCAqcykKLSAJCVNTTGVycihTU0xf Rl9TU0xfR0VUX1NFUlZFUl9TRU5EX0NFUlQsRVJSX1JfSU5URVJOQUxfRVJST1IpOwotIAkJcmV0 dXJuKE5VTEwpOwotIAkJfQotLQlpZiAoYy0+cGtleXNbaV0ueDUwOSA9PSBOVUxMKSByZXR1cm4o TlVMTCk7Ci0gCi0tCXJldHVybihjLT5wa2V5c1tpXS54NTA5KTsKLSsJcmV0dXJuIGMtPnBrZXlz ICsgaTsKLSsJfQotKwotK1g1MDkgKnNzbF9nZXRfc2VydmVyX3NlbmRfY2VydChjb25zdCBTU0wg KnMpCi0rCXsKLSsJQ0VSVF9QS0VZICpjcGs7Ci0rCWNwayA9IHNzbF9nZXRfc2VydmVyX3NlbmRf cGtleShzKTsKLSsJaWYgKCFjcGspCi0rCQlyZXR1cm4gTlVMTDsKLSsJcmV0dXJuIGNway0+eDUw OTsKLSAJfQotIAotIEVWUF9QS0VZICpzc2xfZ2V0X3NpZ25fcGtleShTU0wgKnMsY29uc3QgU1NM X0NJUEhFUiAqY2lwaGVyLCBjb25zdCBFVlBfTUQgKipwbWQpCi1AQCAtMjc4MCw3ICsyNzg4LDkg QEAgdm9pZCBzc2xfY2xlYXJfY2lwaGVyX2N0eChTU0wgKnMpCi0gLyogRml4IHRoaXMgZnVuY3Rp b24gc28gdGhhdCBpdCB0YWtlcyBhbiBvcHRpb25hbCB0eXBlIHBhcmFtZXRlciAqLwotIFg1MDkg KlNTTF9nZXRfY2VydGlmaWNhdGUoY29uc3QgU1NMICpzKQotIAl7Ci0tCWlmIChzLT5jZXJ0ICE9 IE5VTEwpCi0rCWlmIChzLT5zZXJ2ZXIpCi0rCQlyZXR1cm4oc3NsX2dldF9zZXJ2ZXJfc2VuZF9j ZXJ0KHMpKTsKLSsJZWxzZSBpZiAocy0+Y2VydCAhPSBOVUxMKQotIAkJcmV0dXJuKHMtPmNlcnQt PmtleS0+eDUwOSk7Ci0gCWVsc2UKLSAJCXJldHVybihOVUxMKTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFjL3NzbC9zc2xfbG9jbC5oLmJhY2twb3J0czIgb3BlbnNzbC0xLjAuMWMvc3NsL3NzbF9s b2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9zc2wvc3NsX2xvY2wuaC5iYWNrcG9ydHMyCTIwMTIt MTEtMTQgMjA6Mjc6NTAuMDU2MjA3NjgyICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWMvc3NsL3Nz bF9sb2NsLmgJMjAxMi0xMS0yMCAyMjoyNToyOS4yNDQ1MDk3NzcgKzAxMDAKLUBAIC04MTQsNyAr ODE0LDggQEAgaW50IHNzbF92ZXJpZnlfY2VydF9jaGFpbihTU0wgKnMsU1RBQ0tfTwotIGludCBz c2xfdW5kZWZpbmVkX2Z1bmN0aW9uKFNTTCAqcyk7Ci0gaW50IHNzbF91bmRlZmluZWRfdm9pZF9m dW5jdGlvbih2b2lkKTsKLSBpbnQgc3NsX3VuZGVmaW5lZF9jb25zdF9mdW5jdGlvbihjb25zdCBT U0wgKnMpOwotLVg1MDkgKnNzbF9nZXRfc2VydmVyX3NlbmRfY2VydChTU0wgKik7Ci0rQ0VSVF9Q S0VZICpzc2xfZ2V0X3NlcnZlcl9zZW5kX3BrZXkoY29uc3QgU1NMICpzKTsKLStYNTA5ICpzc2xf Z2V0X3NlcnZlcl9zZW5kX2NlcnQoY29uc3QgU1NMICopOwotIEVWUF9QS0VZICpzc2xfZ2V0X3Np Z25fcGtleShTU0wgKnMsY29uc3QgU1NMX0NJUEhFUiAqYywgY29uc3QgRVZQX01EICoqcG1kKTsK LSBpbnQgc3NsX2NlcnRfdHlwZShYNTA5ICp4LEVWUF9QS0VZICpwa2V5KTsKLSB2b2lkIHNzbF9z ZXRfY2VydF9tYXNrcyhDRVJUICpjLCBjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXIpOwotQEAgLTEw NjUsNyArMTA2Niw4IEBAIGludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdGxzZXh0KFNTTCAqcywK LSBpbnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsIHVuc2lnbmVkIGNoYXIg KipkYXRhLCB1bnNpZ25lZCBjaGFyICpkLCBpbnQgbiwgaW50ICphbCk7Ci0gaW50IHNzbF9wcmVw YXJlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMpOwotIGludCBzc2xfcHJlcGFyZV9zZXJ2ZXJo ZWxsb190bHNleHQoU1NMICpzKTsKLS1pbnQgc3NsX2NoZWNrX2NsaWVudGhlbGxvX3Rsc2V4dChT U0wgKnMpOwotK2ludCBzc2xfY2hlY2tfY2xpZW50aGVsbG9fdGxzZXh0X2Vhcmx5KFNTTCAqcyk7 Ci0raW50IHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHRfbGF0ZShTU0wgKnMpOwotIGludCBz c2xfY2hlY2tfc2VydmVyaGVsbG9fdGxzZXh0KFNTTCAqcyk7Ci0gCi0gI2lmbmRlZiBPUEVOU1NM X05PX0hFQVJUQkVBVFMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL3NzbC90MV9saWIuYy5iYWNr cG9ydHMyIG9wZW5zc2wtMS4wLjFjL3NzbC90MV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFjL3Nz bC90MV9saWIuYy5iYWNrcG9ydHMyCTIwMTItMDMtMjEgMjI6MzI6NTcuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMWMvc3NsL3QxX2xpYi5jCTIwMTItMTEtMjAgMjI6MjU6MjkuMjQ0 NTA5Nzc3ICswMTAwCi1AQCAtMTc2Myw3ICsxNzYzLDcgQEAgaW50IHNzbF9wcmVwYXJlX3NlcnZl cmhlbGxvX3Rsc2V4dChTU0wgKgotIAlyZXR1cm4gMTsKLSAJfQotIAotLWludCBzc2xfY2hlY2tf Y2xpZW50aGVsbG9fdGxzZXh0KFNTTCAqcykKLStpbnQgc3NsX2NoZWNrX2NsaWVudGhlbGxvX3Rs c2V4dF9lYXJseShTU0wgKnMpCi0gCXsKLSAJaW50IHJldD1TU0xfVExTRVhUX0VSUl9OT0FDSzsK LSAJaW50IGFsID0gU1NMX0FEX1VOUkVDT0dOSVpFRF9OQU1FOwotQEAgLTE3ODIsNDIgKzE3ODIs MTIgQEAgaW50IHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHQoU1NMICpzKQotIAllbHNlIGlm IChzLT5pbml0aWFsX2N0eCAhPSBOVUxMICYmIHMtPmluaXRpYWxfY3R4LT50bHNleHRfc2VydmVy bmFtZV9jYWxsYmFjayAhPSAwKSAJCQotIAkJcmV0ID0gcy0+aW5pdGlhbF9jdHgtPnRsc2V4dF9z ZXJ2ZXJuYW1lX2NhbGxiYWNrKHMsICZhbCwgcy0+aW5pdGlhbF9jdHgtPnRsc2V4dF9zZXJ2ZXJu YW1lX2FyZyk7Ci0gCi0tCS8qIElmIHN0YXR1cyByZXF1ZXN0IHRoZW4gYXNrIGNhbGxiYWNrIHdo YXQgdG8gZG8uCi0tIAkgKiBOb3RlOiB0aGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHNlcnZlcm5h bWUgY2FsbGJhY2tzIGluIGNhc2UgCi0tIAkgKiB0aGUgY2VydGlmaWNhdGUgaGFzIGNoYW5nZWQu Ci0tIAkgKi8KLS0JaWYgKChzLT50bHNleHRfc3RhdHVzX3R5cGUgIT0gLTEpICYmIHMtPmN0eCAm JiBzLT5jdHgtPnRsc2V4dF9zdGF0dXNfY2IpCi0tCQl7Ci0tCQlpbnQgcjsKLS0JCXIgPSBzLT5j dHgtPnRsc2V4dF9zdGF0dXNfY2Iocywgcy0+Y3R4LT50bHNleHRfc3RhdHVzX2FyZyk7Ci0tCQlz d2l0Y2ggKHIpCi0tCQkJewotLQkJCS8qIFdlIGRvbid0IHdhbnQgdG8gc2VuZCBhIHN0YXR1cyBy ZXF1ZXN0IHJlc3BvbnNlICovCi0tCQkJY2FzZSBTU0xfVExTRVhUX0VSUl9OT0FDSzoKLS0JCQkJ cy0+dGxzZXh0X3N0YXR1c19leHBlY3RlZCA9IDA7Ci0tCQkJCWJyZWFrOwotLQkJCS8qIHN0YXR1 cyByZXF1ZXN0IHJlc3BvbnNlIHNob3VsZCBiZSBzZW50ICovCi0tCQkJY2FzZSBTU0xfVExTRVhU X0VSUl9PSzoKLS0JCQkJaWYgKHMtPnRsc2V4dF9vY3NwX3Jlc3ApCi0tCQkJCQlzLT50bHNleHRf c3RhdHVzX2V4cGVjdGVkID0gMTsKLS0JCQkJZWxzZQotLQkJCQkJcy0+dGxzZXh0X3N0YXR1c19l eHBlY3RlZCA9IDA7Ci0tCQkJCWJyZWFrOwotLQkJCS8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQg Ki8KLS0JCQljYXNlIFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOgotLQkJCQlyZXQgPSBTU0xf VExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKLS0JCQkJYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7 Ci0tCQkJCWdvdG8gZXJyOwotLQkJCX0KLS0JCX0KLS0JZWxzZQotLQkJcy0+dGxzZXh0X3N0YXR1 c19leHBlY3RlZCA9IDA7Ci0tCi0gI2lmZGVmIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQK LSAgCXsKLSAJCS8qIFRoaXMgc29ydCBvZiBiZWxvbmdzIGludG8gc3NsX3ByZXBhcmVfc2VydmVy aGVsbG9fdGxzZXh0KCksCi0gCQkgKiBidXQgd2UgbWlnaHQgYmUgc2VuZGluZyBhbiBhbGVydCBp biByZXNwb25zZSB0byB0aGUgY2xpZW50IGhlbGxvLAotLQkJICogc28gdGhpcyBoYXMgdG8gaGFw cGVuIGhlcmUgaW4gc3NsX2NoZWNrX2NsaWVudGhlbGxvX3Rsc2V4dCgpLiAqLwotKwkJICogc28g dGhpcyBoYXMgdG8gaGFwcGVuIGhlcmUgaW4KLSsJCSAqIHNzbF9jaGVja19jbGllbnRoZWxsb190 bHNleHRfZWFybHkoKS4gKi8KLSAKLSAJCWludCByID0gMTsKLSAJCi1AQCAtMTg2OSw4ICsxODM5 LDggQEAgaW50IHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHQoU1NMICpzKQotIAkJCX0KLSAJ fQotIAotLSNlbmRpZgotICBlcnI6Ci0rI2VuZGlmCi0gCXN3aXRjaCAocmV0KQotIAkJewotIAkJ Y2FzZSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDoKLUBAIC0xODg4LDYgKzE4NTgsNzEgQEAg aW50IHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHQoU1NMICpzKQotIAkJfQotIAl9Ci0gCi0r aW50IHNzbF9jaGVja19jbGllbnRoZWxsb190bHNleHRfbGF0ZShTU0wgKnMpCi0rCXsKLSsJaW50 IHJldCA9IFNTTF9UTFNFWFRfRVJSX09LOwotKwlpbnQgYWw7Ci0rCi0rCS8qIElmIHN0YXR1cyBy ZXF1ZXN0IHRoZW4gYXNrIGNhbGxiYWNrIHdoYXQgdG8gZG8uCi0rIAkgKiBOb3RlOiB0aGlzIG11 c3QgYmUgY2FsbGVkIGFmdGVyIHNlcnZlcm5hbWUgY2FsbGJhY2tzIGluIGNhc2UgCi0rIAkgKiB0 aGUgY2VydGlmaWNhdGUgaGFzIGNoYW5nZWQsIGFuZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUg Y2lwaGVyCi0rCSAqIGhhcyBiZWVuIGNob3NlbiBiZWNhdXNlIHRoaXMgbWF5IGluZmx1ZW5jZSB3 aGljaCBjZXJ0aWZpY2F0ZSBpcyBzZW50Ci0rIAkgKi8KLSsJaWYgKChzLT50bHNleHRfc3RhdHVz X3R5cGUgIT0gLTEpICYmIHMtPmN0eCAmJiBzLT5jdHgtPnRsc2V4dF9zdGF0dXNfY2IpCi0rCQl7 Ci0rCQlpbnQgcjsKLSsJCUNFUlRfUEtFWSAqY2VydHBrZXk7Ci0rCQljZXJ0cGtleSA9IHNzbF9n ZXRfc2VydmVyX3NlbmRfcGtleShzKTsKLSsJCS8qIElmIG5vIGNlcnRpZmljYXRlIGNhbid0IHJl dHVybiBjZXJ0aWZpY2F0ZSBzdGF0dXMgKi8KLSsJCWlmIChjZXJ0cGtleSA9PSBOVUxMKQotKwkJ CXsKLSsJCQlzLT50bHNleHRfc3RhdHVzX2V4cGVjdGVkID0gMDsKLSsJCQlyZXR1cm4gMTsKLSsJ CQl9Ci0rCQkvKiBTZXQgY3VycmVudCBjZXJ0aWZpY2F0ZSB0byBvbmUgd2Ugd2lsbCB1c2Ugc28K LSsJCSAqIFNTTF9nZXRfY2VydGlmaWNhdGUgZXQgYWwgY2FuIHBpY2sgaXQgdXAuCi0rCQkgKi8K LSsJCXMtPmNlcnQtPmtleSA9IGNlcnRwa2V5OwotKwkJciA9IHMtPmN0eC0+dGxzZXh0X3N0YXR1 c19jYihzLCBzLT5jdHgtPnRsc2V4dF9zdGF0dXNfYXJnKTsKLSsJCXN3aXRjaCAocikKLSsJCQl7 Ci0rCQkJLyogV2UgZG9uJ3Qgd2FudCB0byBzZW5kIGEgc3RhdHVzIHJlcXVlc3QgcmVzcG9uc2Ug Ki8KLSsJCQljYXNlIFNTTF9UTFNFWFRfRVJSX05PQUNLOgotKwkJCQlzLT50bHNleHRfc3RhdHVz X2V4cGVjdGVkID0gMDsKLSsJCQkJYnJlYWs7Ci0rCQkJLyogc3RhdHVzIHJlcXVlc3QgcmVzcG9u c2Ugc2hvdWxkIGJlIHNlbnQgKi8KLSsJCQljYXNlIFNTTF9UTFNFWFRfRVJSX09LOgotKwkJCQlp ZiAocy0+dGxzZXh0X29jc3BfcmVzcCkKLSsJCQkJCXMtPnRsc2V4dF9zdGF0dXNfZXhwZWN0ZWQg PSAxOwotKwkJCQllbHNlCi0rCQkJCQlzLT50bHNleHRfc3RhdHVzX2V4cGVjdGVkID0gMDsKLSsJ CQkJYnJlYWs7Ci0rCQkJLyogc29tZXRoaW5nIGJhZCBoYXBwZW5lZCAqLwotKwkJCWNhc2UgU1NM X1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw6Ci0rCQkJCXJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJU X0ZBVEFMOwotKwkJCQlhbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKLSsJCQkJZ290byBlcnI7 Ci0rCQkJfQotKwkJfQotKwllbHNlCi0rCQlzLT50bHNleHRfc3RhdHVzX2V4cGVjdGVkID0gMDsK LSsKLSsgZXJyOgotKwlzd2l0Y2ggKHJldCkKLSsJCXsKLSsJCWNhc2UgU1NMX1RMU0VYVF9FUlJf QUxFUlRfRkFUQUw6Ci0rCQkJc3NsM19zZW5kX2FsZXJ0KHMsU1NMM19BTF9GQVRBTCxhbCk7IAot KwkJCXJldHVybiAtMTsKLSsKLSsJCWNhc2UgU1NMX1RMU0VYVF9FUlJfQUxFUlRfV0FSTklORzoK LSsJCQlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX1dBUk5JTkcsYWwpOwotKwkJCXJldHVybiAx OyAKLSsKLSsJCWRlZmF1bHQ6Ci0rCQkJcmV0dXJuIDE7Ci0rCQl9Ci0rCX0KLSsKLSBpbnQgc3Ns X2NoZWNrX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMpCi0gCXsKLSAJaW50IHJldD1TU0xfVExT RVhUX0VSUl9OT0FDSzsKLUBAIC0yNDE0LDcgKzI0NDksNyBAQCBpbnQgdGxzMV9wcm9jZXNzX3Np Z2FsZ3MoU1NMICpzLCBjb25zdCB1Ci0gCSAqLwotICNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSAJ aWYgKCFjLT5wa2V5c1tTU0xfUEtFWV9EU0FfU0lHTl0uZGlnZXN0KQotLQkJYy0+cGtleXNbU1NM X1BLRVlfRFNBX1NJR05dLmRpZ2VzdCA9IEVWUF9kc3MxKCk7Ci0rCQljLT5wa2V5c1tTU0xfUEtF WV9EU0FfU0lHTl0uZGlnZXN0ID0gRVZQX3NoYTEoKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCi0gCWlmICghYy0+cGtleXNbU1NMX1BLRVlfUlNBX1NJR05dLmRpZ2VzdCkKLUBA IC0yNDI1LDcgKzI0NjAsNyBAQCBpbnQgdGxzMV9wcm9jZXNzX3NpZ2FsZ3MoU1NMICpzLCBjb25z dCB1Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0gCWlmICghYy0+cGtleXNb U1NMX1BLRVlfRUNDXS5kaWdlc3QpCi0tCQljLT5wa2V5c1tTU0xfUEtFWV9FQ0NdLmRpZ2VzdCA9 IEVWUF9lY2RzYSgpOwotKwkJYy0+cGtleXNbU1NMX1BLRVlfRUNDXS5kaWdlc3QgPSBFVlBfc2hh MSgpOwotICNlbmRpZgotIAlyZXR1cm4gMTsKLSAJfQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4w LjFjLWNjbS1pbml0LXN0ci5wYXRjaCBiL29wZW5zc2wtMS4wLjFjLWNjbS1pbml0LXN0ci5wYXRj aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM4OTcyMy4uMDAwMDAwMAotLS0gYS9v cGVuc3NsLTEuMC4xYy1jY20taW5pdC1zdHIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMSAr MCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfYWVzLmMuaW5pdC1z dHIgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX2Flcy5jCi0tLS0gb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2V2cC9lX2Flcy5jLmluaXQtc3RyCTIwMTItMDktMDYgMTc6MjA6NDUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTItMDktMDYg MTc6MTg6MzAuMDAwMDAwMDAwICswMjAwCi1AQCAtMTIxNiw2ICsxMjE2LDcgQEAgc3RhdGljIGlu dCBhZXNfY2NtX2luaXRfa2V5KEVWUF9DSVBIRVJfQwotIAkJCXZwYWVzX3NldF9lbmNyeXB0X2tl eShrZXksIGN0eC0+a2V5X2xlbio4LCAmY2N0eC0+a3MpOwotIAkJCUNSWVBUT19jY20xMjhfaW5p dCgmY2N0eC0+Y2NtLCBjY3R4LT5NLCBjY3R4LT5MLAotIAkJCQkJJmNjdHgtPmtzLCAoYmxvY2sx MjhfZil2cGFlc19lbmNyeXB0KTsKLSsJCQljY3R4LT5zdHIgPSBOVUxMOwotIAkJCWNjdHgtPmtl eV9zZXQgPSAxOwotIAkJCWJyZWFrOwotIAkJCX0KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4x Yy1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMWMtZmlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggZTFlNjIwMC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xYy1maXBz LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjAzNTcgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWMvYXBwcy9wa2NzMTIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2FwcHMvcGtjczEyLmMK LS0tLSBvcGVuc3NsLTEuMC4xYy9hcHBzL3BrY3MxMi5jLmZpcHMJMjAxMS0wMy0xMyAxOToyMDoy My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9hcHBzL3BrY3MxMi5jCTIwMTIt MDctMTIgMjE6NDk6MjUuMzE2MzUxNzg5ICswMjAwCi1AQCAtNjcsNiArNjcsOSBAQAotICNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgotICNpbmNsdWRl IDxvcGVuc3NsL3BrY3MxMi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gI2RlZmluZSBQUk9HIHBrY3MxMl9tYWluCi0gCi1A QCAtMTMwLDYgKzEzMywxMSBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCi0g ICAgIGFwcHNfc3RhcnR1cCgpOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJ UFNfbW9kZSgpKQotKwljZXJ0X3BiZSA9IGtleV9wYmU7IC8qIGNhbm5vdCB1c2UgUkMyIGluIHRo ZSBGSVBTIG1vZGUgKi8KLSsjZW5kaWYKLSsKLSAgICAgZW5jID0gRVZQX2Rlc19lZGUzX2NiYygp OwotICAgICBpZiAoYmlvX2VyciA9PSBOVUxMICkgYmlvX2VyciA9IEJJT19uZXdfZnAgKHN0ZGVy ciwgQklPX05PQ0xPU0UpOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvYXBwcy9zcGVlZC5j LmZpcHMgb3BlbnNzbC0xLjAuMWMvYXBwcy9zcGVlZC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvYXBw cy9zcGVlZC5jLmZpcHMJMjAxMi0wMS0xMSAyMjo0OToxNi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4xYy9hcHBzL3NwZWVkLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMTczNTE4MTEg KzAyMDAKLUBAIC0xOTUsNyArMTk1LDYgQEAKLSAjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQ RU5ECi0gI3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKLSAjdW5kZWYgQUVTX3NldF9kZWNyeXB0 X2tleQotLSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQKLSAjZW5kaWYKLSAjZGVmaW5lIEJG X3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Ci0gI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0 ZV9DQVNUX3NldF9rZXkKLUBAIC0yMDMsNyArMjAyLDYgQEAKLSAjZGVmaW5lIFNFRURfc2V0X2tl eQlwcml2YXRlX1NFRURfc2V0X2tleQotICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJf c2V0X2tleQotICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQotLSNkZWZp bmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCi0g I2RlZmluZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleQot ICNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkK LSAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5Ci1AQCAt OTQxLDcgKzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gI2lmbmRl ZiBPUEVOU1NMX05PX1JTQQotIAkJCWlmIChzdHJjbXAoKmFyZ3YsInJzYSIpID09IDApCi0gCQkJ ewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQkJaWYgKCFGSVBTX21vZGUoKSkKLSsjZW5kaWYK LSsJCQkJewotIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09MTsKLSsJCQkJfQotIAkJCXJzYV9kb2l0 W1JfUlNBXzEwMjRdPTE7Ci0gCQkJcnNhX2RvaXRbUl9SU0FfMjA0OF09MTsKLSAJCQlyc2FfZG9p dFtSX1JTQV80MDk2XT0xOwotQEAgLTk1MSw3ICs5NTQsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotICNpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSAJCQlpZiAoc3RyY21wKCph cmd2LCJkc2EiKSA9PSAwKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJCWlmICgh RklQU19tb2RlKCkpCi0rI2VuZGlmCi0rCQkJCXsKLSAJCQlkc2FfZG9pdFtSX0RTQV81MTJdPTE7 Ci0rCQkJCX0KLSAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0XT0xOwotIAkJCWRzYV9kb2l0W1JfRFNB XzIwNDhdPTE7Ci0gCQkJfQotQEAgLTEyMjYsMzAgKzEyMzQsNTQgQEAgaW50IE1BSU4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotIAlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleTMyLDI1NiwmYWVzX2tz Myk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCi0rCWlmIChkb2l0W0Rf Q0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NNTF0gfHwgZG9pdFtEX0NCQ18yNTZfQ01M XSkKLSsJICAgIHsKLSAJQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwxMjgsJmNhbWVsbGlhX2tzMSk7 Ci0gCUNhbWVsbGlhX3NldF9rZXkoY2tleTI0LDE5MiwmY2FtZWxsaWFfa3MyKTsKLSAJQ2FtZWxs aWFfc2V0X2tleShja2V5MzIsMjU2LCZjYW1lbGxpYV9rczMpOwotKwkgICAgfQotICNlbmRpZgot ICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCi0rCWlmIChkb2l0W0RfQ0JDX0lERUFdKQotKwkgICAg ewotIAlpZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwmaWRlYV9rcyk7Ci0rCSAgICB9Ci0gI2Vu ZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKLSsJaWYgKGRvaXRbRF9DQkNfU0VFRF0pCi0r CSAgICB7Ci0gCVNFRURfc2V0X2tleShrZXkxNiwmc2VlZF9rcyk7Ci0rCSAgICB9Ci0gI2VuZGlm Ci0gI2lmbmRlZiBPUEVOU1NMX05PX1JDNAotKwlpZiAoZG9pdFtEX1JDNF0pCi0rCSAgICB7Ci0g CVJDNF9zZXRfa2V5KCZyYzRfa3MsMTYsa2V5MTYpOwotKwkgICAgfQotICNlbmRpZgotICNpZm5k ZWYgT1BFTlNTTF9OT19SQzIKLSsJaWYgKGRvaXRbRF9DQkNfUkMyXSkKLSsJICAgIHsKLSAJUkMy X3NldF9rZXkoJnJjMl9rcywxNixrZXkxNiwxMjgpOwotKwkgICAgfQotICNlbmRpZgotICNpZm5k ZWYgT1BFTlNTTF9OT19SQzUKLSsJaWYgKGRvaXRbRF9DQkNfUkM1XSkKLSsJICAgIHsKLSAJUkM1 XzMyX3NldF9rZXkoJnJjNV9rcywxNixrZXkxNiwxMik7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lm bmRlZiBPUEVOU1NMX05PX0JGCi0rCWlmIChkb2l0W0RfQ0JDX0JGXSkKLSsJICAgIHsKLSAJQkZf c2V0X2tleSgmYmZfa3MsMTYsa2V5MTYpOwotKwkgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BF TlNTTF9OT19DQVNUCi0rCWlmIChkb2l0W0RfQ0JDX0NBU1RdKQotKwkgICAgewotIAlDQVNUX3Nl dF9rZXkoJmNhc3Rfa3MsMTYsa2V5MTYpOwotKwkgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BF TlNTTF9OT19SU0EKLSAJbWVtc2V0KHJzYV9jLDAsc2l6ZW9mKHJzYV9jKSk7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYy9Db25maWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4xYy9Db25maWd1cmUKLS0t LSBvcGVuc3NsLTEuMC4xYy9Db25maWd1cmUuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjI3NjM1 MDg4OSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL0NvbmZpZ3VyZQkyMDEyLTA3LTEyIDIxOjQ5 OjI1LjMxOTM1MTg1NSArMDIwMAotQEAgLTk5MywxMSArOTkzLDYgQEAgaWYgKGRlZmluZWQoJGRp c2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZAotIAkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQi OwotIAl9Ci0gCi0taWYgKCRmaXBzICYmICRmaXBzbGliZGlyIGVxICIiKQotLQl7Ci0tCSRmaXBz bGliZGlyID0gJGZpcHNkaXIgLiAiL2xpYi8iOwotLQl9Ci0tCi0gIyBSU0FYIEVOR0lORSBzZXRz IGRlZmF1bHQgbm9uLUZJUFMgUlNBIG1ldGhvZC4KLSBpZiAoJGZpcHMpCi0gCXsKLUBAIC0xNDcy LDcgKzE0NjcsNiBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fR0YybSIgaWYgKCRiCi0g aWYgKCRmaXBzKQotIAl7Ci0gCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5T U0xfRklQU1xuIjsKLS0JJGNmbGFncyAuPSAiIC1JXCQoRklQU0RJUikvaW5jbHVkZSI7Ci0gCX0K LSAKLSAkY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8p OwotQEAgLTE2NTksOSArMTY1MywxMiBAQCB3aGlsZSAoPElOPikKLSAKLSAJcy9eRklQU0RJUj0u Ki9GSVBTRElSPSRmaXBzZGlyLzsKLSAJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBz bGliZGlyLzsKLS0Jcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmNyeXB0by8gaWYgJGZp cHM7Ci0gCXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRiYXNlYWRkci87Ci0gCi0rCWlmICgkZmlw cykKLSsJCXsKLSsJCXMvXkZJUFM9LiovRklQUz15ZXMvOwotKwkJfQotIAlzL15TSExJQl9UQVJH RVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKLSAJcy9eU0hMSUJfTUFSSz0uKi9T SExJQl9NQVJLPSRzaGFyZWRfbWFyay87Ci0gCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJT PVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Fl cy9hZXNfbWlzYy5jLmZpcHMJMjAxMS0wNi0wNSAxOTozNjozMy4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vYWVzL2Flc19taXNjLmMJMjAxMi0wNy0xMiAyMTo0OToy NS4zMTkzNTE4NTUgKzAyMDAKLUBAIC02OSwxNyArNjksMTEgQEAgY29uc3QgY2hhciAqQUVTX29w dGlvbnModm9pZCkgewotIGludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAkJCUFFU19LRVkgKmtleSkKLSAJewotLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKLS0jZW5kaWYKLSAJ cmV0dXJuIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwot IAl9Ci0gCi0gaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNl cktleSwgY29uc3QgaW50IGJpdHMsCi0gCQkJQUVTX0tFWSAqa2V5KQotIAl7Ci0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLQlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOwotLSNlbmRpZgotIAlyZXR1cm4g cHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0gCX0KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9jbWFjL2NtYWMuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jbWFjL2Nt YWMuYy5maXBzCTIwMTItMDQtMTEgMTc6MTE6MTYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL2NtYWMvY21hYy5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzE5MzUxODU1 ICswMjAwCi1AQCAtMTA3LDEzICsxMDcsNiBAQCBDTUFDX0NUWCAqQ01BQ19DVFhfbmV3KHZvaWQp Ci0gCi0gdm9pZCBDTUFDX0NUWF9jbGVhbnVwKENNQUNfQ1RYICpjdHgpCi0gCXsKLS0jaWZkZWYg T1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0J CXsKLS0JCUZJUFNfY21hY19jdHhfY2xlYW51cChjdHgpOwotLQkJcmV0dXJuOwotLQkJfQotLSNl bmRpZgotIAlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgtPmNjdHgpOwotIAlPUEVOU1NMX2Ns ZWFuc2UoY3R4LT50YmwsIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKLSAJT1BFTlNTTF9jbGVhbnNl KGN0eC0+azEsIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKLUBAIC0xNjQsMTEgKzE1Nyw2IEBAIGlu dCBDTUFDX0luaXQoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAotIAkJCUVWUGVycihFVlBfRl9D TUFDX0lOSVQsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSAJCQlyZXR1cm4gMDsKLSAJCQl9 Ci0tCQkvKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21h Y19pbml0LAotLQkJICogdmlhIEZJUFNfY2lwaGVyaW5pdCgpLgotLQkJICovCi0tCQlpZiAoIWlt cGwgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tCQkJcmV0dXJuIEZJUFNfY21hY19pbml0KGN0eCwg a2V5LCBrZXlsZW4sIGNpcGhlciwgTlVMTCk7Ci0gCQl9Ci0gI2VuZGlmCi0gCS8qIEFsbCB6ZXJv cyBtZWFucyByZXN0YXJ0ICovCi1AQCAtMjE2LDEwICsyMDQsNiBAQCBpbnQgQ01BQ19VcGRhdGUo Q01BQ19DVFggKmN0eCwgY29uc3Qgdm9pCi0gCXsKLSAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0 YSA9IGluOwotIAlzaXplX3QgYmw7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19t b2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tCQlyZXR1cm4gRklQU19jbWFjX3VwZGF0ZShj dHgsIGluLCBkbGVuKTsKLS0jZW5kaWYKLSAJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCi0g CQlyZXR1cm4gMDsKLSAJaWYgKGRsZW4gPT0gMCkKLUBAIC0yNjEsMTAgKzI0NSw2IEBAIGludCBD TUFDX1VwZGF0ZShDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2kKLSBpbnQgQ01BQ19GaW5hbChDTUFD X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqcG91dGxlbikKLSAJewotIAlp bnQgaSwgYmwsIGxiOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYm ICFjdHgtPmNjdHguZW5naW5lKQotLQkJcmV0dXJuIEZJUFNfY21hY19maW5hbChjdHgsIG91dCwg cG91dGxlbik7Ci0tI2VuZGlmCi0gCWlmIChjdHgtPm5sYXN0X2Jsb2NrID09IC0xKQotIAkJcmV0 dXJuIDA7Ci0gCWJsID0gRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9jcnlwdG8uaAotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9jcnlwdG8uaC5maXBz CTIwMTItMDctMTIgMjE6NDk6MjUuMDQ4MzQ1NzYwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2NyeXB0by5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzIwMzUxODc4ICswMjAwCi1AQCAt NTUzLDI0ICs1NTMsMjkgQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IHIpOwotIHZvaWQgT1BFTlNT TF9pbml0KHZvaWQpOwotIAotICNkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9pbml0 X2N0eChhbGcsIGFsZykKLSsjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdChhbGcpIG5vbmZpcHNfbWRf aW5pdF9jdHgoYWxnLCBhbGcpCi0rI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwK LSsJaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCi0gCi0gI2lmZGVmIE9QRU5TU0xfRklQUwot LSNkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0rI2RlZmluZSBub25maXBzX21k X2luaXRfY3R4KGFsZywgY3gpIFwKLSAJaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpIFwKLSAJ eyBcCi0gCWlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwK LS0JCSJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gZGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBG SVBTIG1vZGUhIik7IFwKLSsJCSJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9k ZSEiKTsgXAotIAlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKLSAJfSBcCi0gCWlu dCBwcml2YXRlXyMjYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKLSAKLSAjZGVmaW5lIGZpcHNfY2lw aGVyX2Fib3J0KGFsZykgXAotIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18s IF9fTElORV9fLCBcCi0tCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGNpcGhlciAiICNhbGcgIiBm b3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCQkiQ2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBp biBGSVBTIG1vZGUhIikKLSsKLSsvKiBkaWUgaWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KLSt2 b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7Ci0gCi0gI2Vsc2UKLS0jZGVmaW5lIGZpcHNf bWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotLQlpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKLSsj ZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgZmlwc19tZF9pbml0X2N0eChhbGcs IGN4KQotICNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSB3aGlsZSgwKQotICNlbmRpZgot IAotQEAgLTU4MCw2ICs1ODUsOSBAQCB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKLSAgKi8KLSB2 b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOwotIAotKyNkZWZpbmUgT1BFTlNTTF9I QVZFX0lOSVQJMQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0gLyogRXJy b3IgY29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNv ZGVzLiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9kZXMvZGVzLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v ZGVzL2Rlcy5oLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4xMjQzNDc0NjkgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL2Rlcy5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzIwMzUx ODc4ICswMjAwCi1AQCAtMjI0LDkgKzIyNCw2IEBAIGludCBERVNfc2V0X2tleShjb25zdF9ERVNf Y2Jsb2NrICprZXksREUKLSBpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXks REVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwotIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNv bnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0gdm9pZCBE RVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1 bGUgKnNjaGVkdWxlKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tdm9pZCBwcml2YXRlX0RFU19z ZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAq c2NoZWR1bGUpOwotLSNlbmRpZgotIHZvaWQgREVTX3N0cmluZ190b19rZXkoY29uc3QgY2hhciAq c3RyLERFU19jYmxvY2sgKmtleSk7Ci0gdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNo YXIgKnN0cixERVNfY2Jsb2NrICprZXkxLERFU19jYmxvY2sgKmtleTIpOwotIHZvaWQgREVTX2Nm YjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxv bmcgbGVuZ3RoLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Rlcy9zZXRfa2V5LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL3NldF9rZXkuYwotLS0tIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMJMjAxMS0wNi0wMSAxODo1NDowNC4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL3NldF9rZXkuYwkyMDEyLTA3 LTEyIDIxOjQ5OjI1LjMyMTM1MTkwMSArMDIwMAotQEAgLTMzNywxMyArMzM3LDYgQEAgaW50IERF U19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9jawotIAl9Ci0gCi0gdm9pZCBERVNfc2V0 X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpz Y2hlZHVsZSkKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCXsKLS0JZmlwc19jaXBoZXJfYWJvcnQo REVTKTsKLS0JcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hlZHVsZSk7Ci0t CX0KLS12b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sg KmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCi0tI2VuZGlmCi0gCXsKLSAJc3RhdGlj IGNvbnN0IGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07 Ci0gCXJlZ2lzdGVyIERFU19MT05HIGMsZCx0LHMsdDI7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfZ2Vu LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcwkyMDExLTA2LTA5 IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kaC9k aF9nZW4uYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyMTM1MTkwMSArMDIwMAotQEAgLTg0LDExICs4 NCw2IEBAIGludCBESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERIICpyZXQsIGkKLSAjZW5kaWYK LSAJaWYocmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCi0gCQlyZXR1cm4gcmV0LT5tZXRoLT5n ZW5lcmF0ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwotLSNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfZGhfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChyZXQsIHByaW1lX2xlbiwKLS0JCQkJCQkJZ2VuZXJhdG9yLCBjYik7 Ci0tI2VuZGlmCi0gCXJldHVybiBkaF9idWlsdGluX2dlbnBhcmFtcyhyZXQsIHByaW1lX2xlbiwg Z2VuZXJhdG9yLCBjYik7Ci0gCX0KLSAKLUBAIC0xMjMsNiArMTE4LDIwIEBAIHN0YXRpYyBpbnQg ZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwKLSAJaW50IGcsb2s9IC0xOwotIAlCTl9DVFgg KmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJaWYg KEZJUFNfbW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNf QklUUykpCi0rCQl7Ci0rCQlESGVycihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBESF9SX0tF WV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4 PUJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0 YXJ0KGN0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGguaC5maXBzIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9kaC9kaC5oCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Ro L2RoLmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI0Ljk4NjM0NDM2NSArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9kaC9kaC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzIyMzUxOTI0ICsw MjAwCi1AQCAtNzcsNiArNzcsOCBAQAotICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNf QklUUwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RV TFVTX0JJVFMgMTAyNAotKwotICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEK LSAjZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43 aDsgdGhlIGJ1aWx0LWluIERICi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v ZGgvZGhfa2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwky MDExLTExLTE0IDE1OjE2OjA5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9kaC9kaF9rZXkuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyMjM1MTkyNCArMDIwMAotQEAg LTYxLDYgKzYxLDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCBn ZW5lcmF0ZV9rZXkoREggKmRoKTsKLSBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNo YXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOwotQEAgLTEwNCw3ICsxMDcs NyBAQCBjb21wdXRlX2tleSwKLSBkaF9ibl9tb2RfZXhwLAotIGRoX2luaXQsCi0gZGhfZmluaXNo LAotLTAsCi0rREhfRkxBR19GSVBTX01FVEhPRCwKLSBOVUxMLAotIE5VTEwKLSB9OwotQEAgLTEy Myw2ICsxMjYsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQotIAlCTl9NT05U X0NUWCAqbW9udD1OVUxMOwotIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsK LSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2Jp dHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJ REhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKyNlbmRpZgotKwotIAljdHggPSBCTl9DVFhfbmV3KCk7Ci0gCWlmIChj dHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCi1AQCAtMjEzLDYgKzIyNCwxMyBAQCBzdGF0aWMgaW50 IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCi0gCQlESGVycihESF9GX0NPTVBVVEVfS0VZ LERIX1JfTU9EVUxVU19UT09fTEFSR0UpOwotIAkJZ290byBlcnI7Ci0gCQl9Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9Q RU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfQ09N UFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KyNlbmRpZgotIAotIAljdHggPSBCTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290 byBlcnI7Ci1AQCAtMjgwLDYgKzI5OCw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25z dCBESCAqZGgsIEIKLSAKLSBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQotIAl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWRoLT5m bGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIAl9Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZGgvZGhfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGgvZGhfbGliLmMu ZmlwcwkyMDExLTA2LTIwIDIxOjQxOjExLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9kaC9kaF9saWIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMyMzM1MTk0NyArMDIw MAotQEAgLTgxLDE0ICs4MSw3IEBAIGNvbnN0IERIX01FVEhPRCAqREhfZ2V0X2RlZmF1bHRfbWV0 aG9kKHYKLSAJewotIAlpZighZGVmYXVsdF9ESF9tZXRob2QpCi0gCQl7Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX2RoX29wZW5zc2wo KTsKLS0JCWVsc2UKLS0JCQlyZXR1cm4gREhfT3BlblNTTCgpOwotLSNlbHNlCi0gCQlkZWZhdWx0 X0RIX21ldGhvZCA9IERIX09wZW5TU0woKTsKLS0jZW5kaWYKLSAJCX0KLSAJcmV0dXJuIGRlZmF1 bHRfREhfbWV0aG9kOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2Rz YV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX2Vyci5jCi0tLS0gb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcwkyMDExLTEwLTEwIDAxOjEzOjQ5 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX2Vyci5j CTIwMTItMDctMTIgMjE6NDk6MjUuMzIzMzUxOTQ3ICswMjAwCi1AQCAtNzQsNiArNzQsOCBAQCBz dGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKERTQV9G X0RPX0RTQV9QUklOVCksCSJET19EU0FfUFJJTlQifSwKLSB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFS QU1TX1BSSU5UKSwJIkRTQXBhcmFtc19wcmludCJ9LAotIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJB TVNfUFJJTlRfRlApLAkiRFNBcGFyYW1zX3ByaW50X2ZwIn0sCi0re0VSUl9GVU5DKERTQV9GX0RT QV9CVUlMVElOX0tFWUdFTiksCSJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKLSt7RVJSX0ZVTkMoRFNB X0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLAkiZHNhX2J1aWx0aW5fcGFyYW1nZW4ifSwKLSB7RVJS X0ZVTkMoRFNBX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKLSB7RVJSX0ZVTkMoRFNB X0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0sCi0ge0VSUl9GVU5DKERTQV9GX0RT QV9HRU5FUkFURV9LRVkpLAkiRFNBX2dlbmVyYXRlX2tleSJ9LAotQEAgLTEwNiw2ICsxMDgsOCBA QCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04o RFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKSwiZGF0YSB0b28gbGFyZ2UgZm9yIGtl eSBzaXplIn0sCi0ge0VSUl9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRl Y29kZSBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUpICAg LCJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0sCi0re0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5W QUxJRCkgICAgICAsImtleSBzaXplIGludmFsaWQifSwKLSt7RVJSX1JFQVNPTihEU0FfUl9LRVlf U0laRV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCi0ge0VSUl9SRUFTT04o RFNBX1JfTUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAotIHtF UlJfUkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJn ZSJ9LAotIHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUykgLCJuZWVkIG5l dyBzZXR1cCB2YWx1ZXMifSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNh X2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMKLS0tLSBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTc6MjE6NDYu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJ MjAxMi0wNy0xMiAyMTo0OToyNS4zMjQzNTE5NjkgKzAyMDAKLUBAIC04NSw2ICs4NSwxNCBAQAot 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 LjAuMWMvY3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNh LmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAxMi0wNy0xMiAy MTo0OToyNC43OTgzNDAxMzYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2Rz YS5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzI0MzUxOTY5ICswMjAwCi1AQCAtODgsNiArODgsOCBA 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 LTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9k c2EvZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlw cwkyMDExLTA2LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTItMDctMTIgMjE6NDY6NTYuMDAwMDAwMDAwICswMjAw 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 Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2FfbGliLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9saWIuYwkyMDEyLTA3 LTEyIDIxOjQ5OjI1LjMyNTM1MTk5MSArMDIwMAotQEAgLTg3LDE0ICs4Nyw3IEBAIGNvbnN0IERT QV9NRVRIT0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJewotIAlpZighZGVmYXVsdF9EU0Ff bWV0aG9kKQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkK LS0JCQlyZXR1cm4gRklQU19kc2Ffb3BlbnNzbCgpOwotLQkJZWxzZQotLQkJCXJldHVybiBEU0Ff T3BlblNTTCgpOwotLSNlbHNlCi0gCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgp OwotLSNlbmRpZgotIAkJfQotIAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOwotIAl9Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNh L2RzYV9sb2NsLmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI0LjgwMjM0MDIyNiArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjMyNTM1MTk5MSArMDIwMAotQEAgLTU2LDUgKzU2LDQgQEAKLSAKLSBpbnQgZHNhX2J1aWx0aW5f cGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0gCWNvbnN0IEVW UF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xl biwKLS0JdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCi0gCWludCAqY291bnRlcl9yZXQsIHVuc2ln bmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2Ff b3NzbC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAx MS0wMi0wMSAxMzo1Mzo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZHNhL2RzYV9vc3NsLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMjYzNTIwMTMgKzAyMDAKLUBA 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 LTEuMC4xYy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2RzYS9kc2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhX3BtZXRo LmMuZmlwcwkyMDExLTA2LTIwIDIyOjA1OjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMjYzNTIw MTMgKzAyMDAKLUBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIGludCBwa2V5X2RzYV9wYXJhbWdl bihFVlBfUEtFWV9DVAotIAlpZiAoIWRzYSkKLSAJCXJldHVybiAwOwotIAlyZXQgPSBkc2FfYnVp bHRpbl9wYXJhbWdlbihkc2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1kLAot LQkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBw Y2IpOwotKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBw Y2IpOwotIAlpZiAocmV0KQotIAkJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOwotIAll bHNlCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcwkyMDA4LTA4LTA2IDE3OjU0OjExLjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kc2EvZHNhdGVzdC5jCTIwMTItMDctMTIgMjE6 NDk6MjUuMzI3MzUyMDM1ICswMjAwCi1AQCAtOTYsMzYgKzk2LDQxIEBAIHN0YXRpYyBpbnQgTVNf 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 IChoICE9IDIpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZW5naW5lL2VuZ19hbGwu Yy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCi0tLS0gb3BlbnNz bC0xLjAuMWMvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcwkyMDExLTA4LTEwIDIwOjUzOjEz LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9lbmdpbmUvZW5nX2Fs bC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzI3MzUyMDM1ICswMjAwCi1AQCAtNTgsMTEgKzU4LDI1 IEBACi0gCi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgImVuZ19pbnQuaCIKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot IAotIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCi0gCXsKLSAJLyogU29t ZSBFTkdJTkVzIG5lZWQgdGhpcyAqLwotIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoRklQU19tb2Rl KCkpIHsKLSsJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBw YXJ0eQotKwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgotKwkJICAgVXNlciBp cyBkaXNhbGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCi0rCQkgICBieSBzZWN1 cml0eSBwb2xpY3kuICovCi0rCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7Ci0rCQlyZXR1cm47Ci0r CX0KLSsjZW5kaWYKLSAjaWYgMAotIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3Ig YW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCi0gCSAqIGl0IGlzIHRoZSAqb25s eSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZXJyL2Vycl9hbGwuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9lcnIv ZXJyX2FsbC5jLmZpcHMJMjAxMS0wNi0yMSAxODo1ODoxMC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMy NzM1MjAzNSArMDIwMAotQEAgLTk2LDYgKzk2LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vY3Nw Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKLSAjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KLSAj ZW5kaWYKLUBAIC0xNTMsNiArMTU2LDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2 b2lkKQotICNlbmRpZgotIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKLSAJRVJSX2xvYWRfVUlf c3RyaW5ncygpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRVJSX2xvYWRfRklQU19zdHJpbmdz KCk7Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NNUwotIAlFUlJfbG9hZF9DTVNfc3Ry aW5ncygpOwotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9jX2Fs bGMuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMJMjAxMS0xMS0xNCAyMjoxMzozNS4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTIt MDctMTIgMjE6NDk6MjUuMzI4MzUyMDU4ICswMjAwCi1AQCAtNjUsNiArNjUsMTEgQEAKLSB2b2lk IE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCi0gCXsKLSAKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rCWlmKCFGSVBTX21vZGUoKSkgCi0rCQl7 Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotIAlFVlBfYWRkX2NpcGhlcihFVlBf ZGVzX2NmYigpKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIxKCkpOwotQEAgLTIyNyw0 ICsyMzIsNjAgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotIAlFVlBfYWRk X2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCJDQU1FTExJQTI1NiIpOwotIAlFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCJjYW1lbGxpYTI1NiIpOwotICNl bmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNpZm5kZWYg T1BFTlNTTF9OT19ERVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2ZiKCkpOwotKwlF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZV9vZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19vZmIoKSk7 Ci0rCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2Vk ZTNfY2JjLCJERVMzIik7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywi ZGVzMyIpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZSgpKTsKLSsJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19lZGUzKCkpOwotKyNlbmRpZgotKwotKyNpZm5kZWYgT1BFTlNTTF9OT19B RVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYigp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xMjhfY2ZiOCgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfb2Zi KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRz KCkpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiQUVTMTI4Iik7Ci0r CUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJhZXMxMjgiKTsKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5 Ml9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYigpKTsKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x OTJfY2ZiOCgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkpOwotKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTkyX2djbSgpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsIkFFUzE5 MiIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiYWVzMTkyIik7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2VjYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18yNTZfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMjU2X2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X29mYigpKTsK LSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY3RyKCkpOwotKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzI1Nl9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3h0cygpKTsK LSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIpOwotKwlFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiYWVzMjU2Iik7Ci0rI2VuZGlmCi0rCQl9 Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvY19hbGxk LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2NfYWxsZC5jCi0tLS0gb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzCTIwMDktMDctMDggMTA6NTA6NTMuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9jX2FsbGQuYwkyMDEyLTA3 LTEyIDIxOjQ5OjI1LjMyODM1MjA1OCArMDIwMAotQEAgLTY0LDYgKzY0LDExIEBACi0gCi0gdm9p ZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoIUZJUFNfbW9kZSgpKQotKwkJewot KyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19NRDQKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX21k NCgpKTsKLSAjZW5kaWYKLUBAIC0xMTEsNCArMTE2LDMyIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxs X2RpZ2VzdHModm9pZCkKLSAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCi0gCUVWUF9hZGRf ZGlnZXN0KEVWUF93aGlybHBvb2woKSk7Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwkJfQotKwllbHNlCi0rCQl7Ci0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVm aW5lZChPUEVOU1NMX05PX1NIQTEpCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwotKwlF VlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKLSsJRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKLSsjaWZu ZGVmIE9QRU5TU0xfTk9fRFNBCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOwotKwlFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5T U0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOwotKyNlbmRpZgotKyNl bmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3No YTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSsjZW5kaWYKLSsjaWZu ZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0r CUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0g CX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2V2cC9kaWdlc3QuYy5maXBzCTIwMTEtMDUtMjkgMTc6NTU6MTMuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9kaWdlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjMyOTM1MjA4MSArMDIwMAotQEAgLTE0Miw5ICsxNDIsNTAgQEAgaW50IEVWUF9EaWdlc3RJbml0 KEVWUF9NRF9DVFggKmN0eCwgY29ucwotIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0 eXBlLCBOVUxMKTsKLSAJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVy cG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9u IEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMu Ci0rICovCi0rCi0rc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgpCi0rCXsgRklQ U19FUlJPUl9JR05PUkVEKCJEaWdlc3QgaW5pdCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGlu dCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3Vu dCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsgcmV0dXJuIDA7fQot KwotK3N0YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICpt ZCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5hbCIpOyByZXR1cm4gMDt9Ci0r Ci0rc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRfbWQgPQotKwl7Ci0rCTAsCi0rCTAsCi0rCTAsCi0r CTAsCi0rCWJhZF9pbml0LAotKwliYWRfdXBkYXRlLAotKwliYWRfZmluYWwsCi0rCU5VTEwsCi0r CU5VTEwsCi0rCU5VTEwsCi0rCTAsCi0rCXswLDAsMCwwfSwKLSsJfTsKLSsKLSsjZW5kaWYKLSsK LSBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5 cGUsIEVOR0lORSAqaW1wbCkKLSAJewotIAlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBf TURfQ1RYX0ZMQUdfQ0xFQU5FRCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRf RVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCWN0eC0+ZGlnZXN0ID0gJmJhZF9t ZDsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJ TkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9u ICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2 ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKLUBAIC0yMDEsNiArMjQyLDE4IEBA IGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKLSAjZW5kaWYKLSAJaWYg KGN0eC0+ZGlnZXN0ICE9IHR5cGUpCi0gCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYg KEZJUFNfbW9kZSgpKQotKwkJCXsKLSsJCQlpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFH X0ZJUFMpIAotKwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpKQotKwkJCQl7Ci0rCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQ X1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKwkJCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7Ci0rCQkJ CXJldHVybiAwOwotKwkJCQl9Ci0rCQkJfQotKyNlbmRpZgotIAkJaWYgKGN0eC0+ZGlnZXN0ICYm IGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKLSAJCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsK LSAJCWN0eC0+ZGlnZXN0PXR5cGU7Ci1AQCAtMjI5LDI2ICsyODIsMTUgQEAgc2tpcF90b19pbml0 OgotIAkJfQotIAlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19JTklUKQotIAkJ cmV0dXJuIDE7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQl7 Ci0tCQlpZiAoRklQU19kaWdlc3Rpbml0KGN0eCwgdHlwZSkpCi0tCQkJcmV0dXJuIDE7Ci0tCQlP UEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLS0JCWN0eC0+bWRfZGF0YSA9IE5VTEw7Ci0tCQly ZXR1cm4gMDsKLS0JCX0KLS0jZW5kaWYKLSAJcmV0dXJuIGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7 Ci0gCX0KLSAKLSBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZv aWQgKmRhdGEsIHNpemVfdCBjb3VudCkKLSAJewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0 dXJuIEZJUFNfZGlnZXN0dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOwotLSNlbHNlCi0tCXJldHVy biBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK LSAjZW5kaWYKLSsJcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKLSAJfQotIAot IC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRh dGEgZnJvbSB0aGUgY29udGV4dCAqLwotQEAgLTI2MywxMCArMzA1LDExIEBAIGludCBFVlBfRGln ZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKLSAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUg dGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KLSBp bnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQs IHVuc2lnbmVkIGludCAqc2l6ZSkKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJu IEZJUFNfZGlnZXN0ZmluYWwoY3R4LCBtZCwgc2l6ZSk7Ci0tI2Vsc2UKLSAJaW50IHJldDsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSsK LSAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpF KTsKLSAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOwotIAlpZiAoc2l6ZSAhPSBOVUxM KQotQEAgLTI3OCw3ICszMjEsNiBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFgg KmN0eCwKLSAJCX0KLSAJbWVtc2V0KGN0eC0+bWRfZGF0YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6 ZSk7Ci0gCXJldHVybiByZXQ7Ci0tI2VuZGlmCi0gCX0KLSAKLSBpbnQgRVZQX01EX0NUWF9jb3B5 KEVWUF9NRF9DVFggKm91dCwgY29uc3QgRVZQX01EX0NUWCAqaW4pCi1AQCAtMzcyLDcgKzQxNCw2 IEBAIHZvaWQgRVZQX01EX0NUWF9kZXN0cm95KEVWUF9NRF9DVFggKmN0eCkKLSAvKiBUaGlzIGNh bGwgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGV4dCAqLwotIGludCBF VlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQotIAl7Ci0tI2lmbmRlZiBPUEVOU1NM X0ZJUFMKLSAJLyogRG9uJ3QgYXNzdW1lIGN0eC0+bWRfZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBf RGlnZXN0X0ZpbmFsLAotIAkgKiBiZWNhdXNlIHNvbWV0aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUg Y29udGV4dCBhcmUgZXZlciBmaW5hbGlzZWQuCi0gCSAqLwotQEAgLTM4NSw3ICs0MjYsNiBAQCBp bnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKLSAJCU9QRU5TU0xfY2xlYW5z ZShjdHgtPm1kX2RhdGEsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKLSAJCU9QRU5TU0xfZnJlZShj dHgtPm1kX2RhdGEpOwotIAkJfQotLSNlbmRpZgotIAlpZiAoY3R4LT5wY3R4KQotIAkJRVZQX1BL RVlfQ1RYX2ZyZWUoY3R4LT5wY3R4KTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAt Mzk0LDkgKzQzNCw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQot IAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCi0g CQlFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5lKTsKLSAjZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9G SVBTCi0tCUZJUFNfbWRfY3R4X2NsZWFudXAoY3R4KTsKLS0jZW5kaWYKLSAJbWVtc2V0KGN0eCwn XDAnLHNpemVvZiAqY3R4KTsKLSAKLSAJcmV0dXJuIDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfYWVz LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcwkyMDExLTExLTE1 IDEzOjE5OjU2LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAv ZV9hZXMuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzMDM1MjEwNCArMDIwMAotQEAgLTU2LDcgKzU2 LDYgQEAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0g I2luY2x1ZGUgImV2cF9sb2NsLmgiCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSAi bW9kZXNfbGNsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotIAotQEAgLTcxNiw3ICs3 MTUsNyBAQCBzdGF0aWMgaW50IGFlc19nY21fY3RybChFVlBfQ0lQSEVSX0NUWCAqCi0gCQlpZiAo YXJnIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKEZJ UFNfbW9kdWxlX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19B TExPVykKLSsJCWlmIChGSVBTX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19O T05fRklQU19BTExPVykKLSAJCQkJCQkgJiYgYXJnIDwgMTIpCi0gCQkJcmV0dXJuIDA7Ci0gI2Vu ZGlmCi1AQCAtMTEyOCw3ICsxMTI3LDcgQEAgc3RhdGljIGludCBhZXNfeHRzX2NpcGhlcihFVlBf Q0lQSEVSX0NUWAotIAkJcmV0dXJuIDA7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotIAkvKiBSZXF1 aXJlbWVudCBvZiBTUDgwMC0zOEUgKi8KLS0JaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGN0 eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgotKwlpZiAoRklQU19t b2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYK LSAJCQkobGVuID4gKDFVTDw8MjApKjE2KSkKLSAJCXsKLSAJCUVWUGVycihFVlBfRl9BRVNfWFRT X0NJUEhFUiwgRVZQX1JfVE9PX0xBUkdFKTsKLUBAIC0xMzEwLDQgKzEzMDksMyBAQCBCTE9DS19D SVBIRVJfY3VzdG9tKE5JRF9hZXMsMTkyLDEsMTIsY2NtCi0gQkxPQ0tfQ0lQSEVSX2N1c3RvbShO SURfYWVzLDI1NiwxLDEyLGNjbSxDQ00sRVZQX0NJUEhfRkxBR19GSVBTfENVU1RPTV9GTEFHUykK LSAKLSAjZW5kaWYKLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAv ZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzCTIwMTEtMDUtMjkgMDE6MDE6MjYu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX2RlczMuYwky MDEyLTA3LTEyIDIxOjQ5OjI1LjMzMDM1MjEwNCArMDIwMAotQEAgLTY1LDggKzY1LDYgQEAKLSAj aW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gCi0t I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQ X0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAkJCSAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKLSAKLUBAIC0yMDgsOSArMjA2LDkgQEAgc3Rh dGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tf Q0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwg NjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJ CUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJ CUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFV TFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0g CQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVf Y2ZiNjRfY2lwaGVyCi1AQCAtMjE5LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVz X2VkZSwgREVTX0VERV9LRVksCi0gI2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVf ZWNiX2NpcGhlcgotIAotIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwg TklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGUzX2luaXRfa2V5LCBOVUxMLCAKLS0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJCUVW UF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFH X0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkJZGVzX2VkZTNfaW5pdF9rZXks Ci0rCQkJTlVMTCwgTlVMTCwgTlVMTCwKLSAJCQlkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVS X2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKLS0JCSAg ICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVW UF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0r CQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxM LCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVz X2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsOCwKLS0JCSAgICAgRVZQX0NJUEhf UkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0 X2FzbjFfaXYsCi0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9S QU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0r CQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJ ICAgICBkZXMzX2N0cmwpCi0gCi0gc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBI RVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLUBAIC0zMTMsNCArMzExLDMg QEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzKHZvaWQpCi0gCXJldHVybiAmZGVzX2Vk ZTNfZWNiOwotIH0KLSAjZW5kaWYKLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2VfbnVsbC5j Ci0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMTEtMDYtMjAg MjI6MDA6MTAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9l X251bGwuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzMDM1MjEwNCArMDIwMAotQEAgLTYxLDggKzYx LDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmpl Y3RzLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSBzdGF0aWMgaW50IG51bGxfaW5p dF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAlj b25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKLSBzdGF0aWMgaW50IG51bGxfY2lwaGVy KEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLUBAIC03MSw3ICs2OSw3 IEBAIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyPQotIAl7Ci0gCU5JRF91bmRlZiwK LSAJMSwwLDAsCi0tCTAsCi0rCUVWUF9DSVBIX0ZMQUdfRklQUywKLSAJbnVsbF9pbml0X2tleSwK LSAJbnVsbF9jaXBoZXIsCi0gCU5VTEwsCi1AQCAtMTAxLDQgKzk5LDMgQEAgc3RhdGljIGludCBu dWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqYwotIAkJbWVtY3B5KChjaGFyICopb3V0LChjb25z dCBjaGFyICopaW4saW5sKTsKLSAJcmV0dXJuIDE7Ci0gCX0KLS0jZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2V2cC9ldnBfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2V2cF9lbmMu Yy5maXBzCTIwMTItMDQtMjAgMDI6MDc6NDguMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzEzNTIxMjcg KzAyMDAKLUBAIC02OSwxNyArNjksNTggQEAKLSAjZW5kaWYKLSAjaW5jbHVkZSAiZXZwX2xvY2wu aCIKLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91 dCwgaW4sIGlubCkgRklQU19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCi0tI2Vsc2UKLSAjZGVm aW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVy KGN0eCwgb3V0LCBpbiwgaW5sKQotLSNlbmRpZgotIAotIAotIGNvbnN0IGNoYXIgRVZQX3ZlcnNp b25bXT0iRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBh dHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBp Z25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9DSVBI RVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCSAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppdiwgaW50IGVuYykKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBp bml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF9kb19jaXBoZXIoRVZQX0NJUEhF Ul9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFy ICppbiwgdW5zaWduZWQgaW50IGlubCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciB1 cGRhdGUiKTsgcmV0dXJuIDA7fQotKwotKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2UgaXQgaXMg YWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLwotKwotK3N0YXRpYyBpbnQgYmFkX3NldF9hc24x KEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQotKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiQ2lwaGVyIHNldF9hc24xIik7IHJldHVybiAwO30KLStzdGF0aWMgaW50IGJhZF9nZXRf YXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLSsJeyBGSVBTX0VSUk9S X0lHTk9SRUQoIkNpcGhlciBnZXRfYXNuMSIpOyByZXR1cm4gMDt9Ci0rc3RhdGljIGludCBiYWRf Y3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsgcmV0dXJuIDA7fQotKwotK3N0 YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQotKwl7Ci0rCTAsCi0rCTAsCi0rCTAs Ci0rCTAsCi0rCTAsCi0rCWJhZF9pbml0LAotKwliYWRfZG9fY2lwaGVyLAotKwlOVUxMLAotKwkw LAotKwliYWRfc2V0X2FzbjEsCi0rCWJhZF9nZXRfYXNuMSwKLSsJYmFkX2N0cmwsCi0rCU5VTEwK LSsJfTsKLSsKLSsjZW5kaWYKLSsKLSB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhF Ul9DVFggKmN0eCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9j aGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7 Ci0gCS8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCi0gCX0KLUBAIC0xMTEsNiArMTUyLDE0IEBAIGlu dCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAJCQllbmMgPSAxOwotIAkJ Y3R4LT5lbmNyeXB0ID0gZW5jOwotIAkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0VWUF9DSVBIRVJJ TklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQljdHgtPmNpcGhlciA9ICZi YWRfY2lwaGVyOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NM X05PX0VOR0lORQotIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJl IHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxy ZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAgLTE2OSwxMCAr MjE4LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJCWN0 eC0+ZW5naW5lID0gTlVMTDsKLSAjZW5kaWYKLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlp ZiAoRklQU19tb2RlKCkpCi0tCQkJcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwg a2V5LCBpdiwgZW5jKTsKLS0jZW5kaWYKLSAJCWN0eC0+Y2lwaGVyPWNpcGhlcjsKLSAJCWlmIChj dHgtPmNpcGhlci0+Y3R4X3NpemUpCi0gCQkJewotQEAgLTIwNiwxMCArMjUxLDYgQEAgaW50IEVW UF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKLSBza2lwX3RvX2luaXQ6Ci0gI2VuZGlmCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlp ZiAoRklQU19tb2RlKCkpCi0tCQlyZXR1cm4gRklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBr ZXksIGl2LCBlbmMpOwotLSNlbmRpZgotIAkvKiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBv d2VyIG9mIDIgaW4gKmNyeXB0VXBkYXRlICovCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVy LT5ibG9ja19zaXplID09IDEKLSAJICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgK LUBAIC0yNDksNiArMjkwLDIyIEBAIHNraXBfdG9faW5pdDoKLSAJCX0KLSAJfQotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1l dGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KLSsJICogU28gb25seSBjaGVjayBmb3Igbm9u IEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KLSsJICovCi0rCWlmIChrZXkgJiYgRklQU19t b2RlKCkpCi0rCQl7Ci0rCQlpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFH X0ZJUFMpCi0rCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9X KSkKLSsJCQl7Ci0rCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNB QkxFRF9GT1JfRklQUyk7Ci0rCQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCQlyZXR1 cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKGtleSB8fCAoY3R4LT5jaXBoZXIt PmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKLSAJCWlmKCFjdHgtPmNpcGhl ci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOwotIAl9Ci1AQCAtNTY4LDcgKzYyNSw2 IEBAIHZvaWQgRVZQX0NJUEhFUl9DVFhfZnJlZShFVlBfQ0lQSEVSX0NUWAotIAotIGludCBFVlBf Q0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQotIAl7Ci0tI2lmbmRlZiBPUEVO U1NMX0ZJUFMKLSAJaWYgKGMtPmNpcGhlciAhPSBOVUxMKQotIAkJewotIAkJaWYoYy0+Y2lwaGVy LT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAoYykpCi1AQCAtNTc5LDE2ICs2MzUsMTIg QEAgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhFUl9DVAotIAkJfQotIAlpZiAo Yy0+Y2lwaGVyX2RhdGEpCi0gCQlPUEVOU1NMX2ZyZWUoYy0+Y2lwaGVyX2RhdGEpOwotLSNlbmRp ZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJaWYgKGMtPmVuZ2luZSkKLSAJCS8qIFRo ZSBFVlBfQ0lQSEVSIHdlIHVzZWQgYmVsb25ncyB0byBhbiBFTkdJTkUsIHJlbGVhc2UgdGhlCi0g CQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KLSAJ CUVOR0lORV9maW5pc2goYy0+ZW5naW5lKTsKLSAjZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBT Ci0tCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKGMpOwotLSNlbmRpZgotIAltZW1zZXQoYywwLHNp emVvZihFVlBfQ0lQSEVSX0NUWCkpOwotIAlyZXR1cm4gMTsKLSAJfQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAv ZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAxMi0wNy0x MiAyMTo0OToyNS4wODEzNDY1MDIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZw L2V2cC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzMyMzUyMTQ5ICswMjAwCi1AQCAtNzUsNiArNzUs MTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIC8qCi0g I2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgotICNkZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJ MTYKLUBAIC0yNzIsMTAgKzI3Niw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBj bGVhbmVkICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24n dCBmcmVlIHVwIGN0eC0+bWRfZGF0YQotIAkJCQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICov Ci0tLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRp b25zIGFyZSBoZXJlCi0tICogc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1 ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgotLSAqLwotLQotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0g CQkJCQkJICogaW4gRklQUyBtb2RlICovCi0gCi1AQCAtMjg3LDYgKzI4NywxMCBAQCBzdHJ1Y3Qg ZW52X21kX2N0eF9zdAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8q IFBLQ1MjMSB2MS41IG1vZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkw eDEwCS8qIFg5LjMxIG1vZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkw eDIwCS8qIFBTUyBtb2RlICovCi0rI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChj dHgpIFwKLSsJCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0r I2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1l IGFzIGRpZ2VzdCAqLwotKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkv KiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLwotIAotICNkZWZpbmUgRVZQX01EX0NUWF9G TEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBA IC0zMzgsMTUgKzM0MiwxNSBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAotIC8qIGNpcGhlciBoYW5k bGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLwotICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZ CQkweDIwMAotIC8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMg Ki8KLS0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAKLSsjZGVmaW5lIAlFVlBf Q0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCi0gLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQv c2V0IGl2ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCi0g LyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KLSAj ZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAotIC8qIE5vdGUgaWYgc3Vp dGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KLS0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJ UFMJCTB4NDAwMAotKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAKLSAvKiBBbGxv dyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCi0tI2RlZmluZQkJRVZQX0NJUEhfRkxB R19OT05fRklQU19BTExPVwkweDgwMDAKLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBT X0FMTE9XCTB4ODAwCi0gLyogQ2lwaGVyIGhhbmRsZXMgYW55IGFuZCBhbGwgcGFkZGluZyBsb2dp YyBhcyB3ZWxsCi0gICogYXMgZmluYWxpc2F0aW9uLgotICAqLwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZw L2V2cF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJ MjAxMS0wNS0yOSAwNDozMjowNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZXZwL2V2cF9saWIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzMjM1MjE0OSArMDIwMAot QEAgLTE5MCw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBF VlBfCi0gCi0gaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKLSAJewot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgot IAlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7Ci0gCX0KLSAK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9ldnAvZXZwX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0 by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMDcxMzQ2Mjc4ICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIwMTItMDctMTIgMjE6 NDk6MjUuMzMzMzUyMTcxICswMjAwCi1AQCAtMjU4LDEwICsyNTgsOSBAQCBjb25zdCBFVlBfQ0lQ SEVSICpFVlBfIyNjbmFtZSMjX2VjYih2b2lkCi0gCUJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBo ZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkgXAotIAlCTE9DS19D SVBIRVJfZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAotIAkJCSAgICAgTklE XyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKLS0JCQkg ICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX3Nl dF9hc24xX2l2LCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCi0tCQkJICAg ICBOVUxMKQotKwkJCSAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIFwKLSsJCQkgICAg IGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotKwotIAotIHN0cnVj dCBldnBfcGtleV9jdHhfc3QKLSAJewotQEAgLTM2NywxMSArMzY2LDYgQEAgaW50IFBLQ1M1X3Yy X1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXwotICNkZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9N RDJfSW5pdAotICNkZWZpbmUgTURDMl9Jbml0CXByaXZhdGVfTURDMl9Jbml0Ci0gI2RlZmluZSBT SEFfSW5pdAlwcml2YXRlX1NIQV9Jbml0Ci0tI2RlZmluZSBTSEExX0luaXQJcHJpdmF0ZV9TSEEx X0luaXQKLS0jZGVmaW5lIFNIQTIyNF9Jbml0CXByaXZhdGVfU0hBMjI0X0luaXQKLS0jZGVmaW5l IFNIQTI1Nl9Jbml0CXByaXZhdGVfU0hBMjU2X0luaXQKLS0jZGVmaW5lIFNIQTM4NF9Jbml0CXBy aXZhdGVfU0hBMzg0X0luaXQKLS0jZGVmaW5lIFNIQTUxMl9Jbml0CXByaXZhdGVfU0hBNTEyX0lu aXQKLSAKLSAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Ci0gI2RlZmluZSBD QVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKLUBAIC0zNzksNyArMzczLDYgQEAgaW50 IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXwotICNkZWZpbmUgU0VFRF9zZXRf a2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5Ci0gI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JD Ml9zZXRfa2V5Ci0gI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5Ci0tI2Rl ZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQJcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQK LSAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5Ci0gCi0g I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9ldnAvTWFrZWZpbGUuZmlwcwkyMDEyLTA0LTI2IDEyOjQyOjE5LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvTWFrZWZpbGUJMjAxMi0wNy0xMiAyMTo0 OToyNS4zMzMzNTIxNzEgKzAyMDAKLUBAIC0yOCw3ICsyOCw3IEBAIExJQlNSQz0gZW5jb2RlLmMg ZGlnZXN0LmMgZXZwX2VuYy5jIGV2cF8KLSAJYmlvX21kLmMgYmlvX2I2NC5jIGJpb19lbmMuYyBl dnBfZXJyLmMgZV9udWxsLmMgXAotIAljX2FsbC5jIGNfYWxsYy5jIGNfYWxsZC5jIGV2cF9saWIu YyBiaW9fb2suYyBcCi0gCWV2cF9wa2V5LmMgZXZwX3BiZS5jIHA1X2NycHQuYyBwNV9jcnB0Mi5j IFwKLS0JZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIu YyBldnBfZmlwcy5jCVwKLSsJZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2du LmMgbV9zaWd2ZXIuYyBcCi0gCWVfYWVzX2NiY19obWFjX3NoYTEuYyBlX3JjNF9obWFjX21kNS5j Ci0gCi0gTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZwX2tleS5vIGV2cF9h Y25mLm8gXAotQEAgLTQxLDcgKzQxLDcgQEAgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBf ZW5jLm8gZXZwXwotIAliaW9fbWQubyBiaW9fYjY0Lm8gYmlvX2VuYy5vIGV2cF9lcnIubyBlX251 bGwubyBcCi0gCWNfYWxsLm8gY19hbGxjLm8gY19hbGxkLm8gZXZwX2xpYi5vIGJpb19vay5vIFwK LSAJZXZwX3BrZXkubyBldnBfcGJlLm8gcDVfY3JwdC5vIHA1X2NycHQyLm8gXAotLQllX29sZC5v IHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIGV2cF9maXBzLm8g XAotKwllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5v IFwKLSAJZV9hZXNfY2JjX2htYWNfc2hhMS5vIGVfcmM0X2htYWNfbWQ1Lm8KLSAKLSBTUkM9ICQo TElCU1JDKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBz IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvbV9kc3MxLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZXZwL21fZHNzMS5jLmZpcHMJMjAxMS0wNi0wMSAxNzoxMTowMC4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMTItMDctMTIgMjE6 NDk6MjUuMzMzMzUyMTcxICswMjAwCi1AQCAtNjgsOCArNjgsNiBAQAotICNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgotICNlbmRpZgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBTIAotLQotIHN0YXRp YyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1k X2RhdGEpOyB9Ci0gCi1AQCAtODQsNyArODIsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzczFf bWQ9Ci0gCU5JRF9kc2EsCi0gCU5JRF9kc2FXaXRoU0hBMSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgs Ci0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxF VlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTEwMCw0 ICs5OCwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX2RzczEodm9pZCkKLSAJcmV0dXJuKCZkc3MxX21k KTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9tX2Rzcy5jCi0tLS0g b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAxMS0wNi0wMSAxNzoxMTow MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL21fZHNzLmMJ MjAxMi0wNy0xMiAyMTo0OToyNS4zMzMzNTIxNzEgKzAyMDAKLUBAIC02Niw3ICs2Niw2IEBACi0g I2VuZGlmCi0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQQotLSNpZm5kZWYgT1BFTlNTTF9GSVBT Ci0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gU0hBMV9J bml0KGN0eC0+bWRfZGF0YSk7IH0KLUBAIC04Miw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBf TUQgZHNhX21kPQotIAlOSURfZHNhV2l0aFNIQSwKLSAJTklEX2RzYVdpdGhTSEEsCi0gCVNIQV9E SUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKLSsJRVZQX01EX0ZMQUdf UEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAotIAlmaW5h bCwKLUBAIC05OCw0ICs5NywzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX2Rzcyh2b2lkKQotIAlyZXR1 cm4oJmRzYV9tZCk7Ci0gCX0KLSAjZW5kaWYKLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvbV9t ZDIuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMDUtMDct MTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2 cC9tX21kMi5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM0MzUyMTkzICswMjAwCi1AQCAtNjgsNiAr NjgsNyBAQAotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KLSAjZW5kaWYKLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGluaXQo RVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBNRDJfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2V2cC9tX3NoYTEuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAv bV9zaGExLmMuZmlwcwkyMDExLTA1LTI5IDAxOjAxOjI2LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvbV9zaGExLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzQz NTIxOTMgKzAyMDAKLUBAIC01OSw4ICs1OSw2IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2lu Y2x1ZGUgImNyeXB0bGliLmgiCi0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSAjaWZuZGVm IE9QRU5TU0xfTk9fU0hBCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci1AQCAtODUsNyAr ODMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFfbWQ9Ci0gCU5JRF9zaGExLAotIAlOSURf c2hhMVdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWws Ci1AQCAtMTIyLDcgKzEyMSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kPQotIAlO SURfc2hhMjI0LAotIAlOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTIyNF9ESUdF U1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZM QUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5p dDIyNCwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNDEsNyArMTQxLDggQEAgc3Rh dGljIGNvbnN0IEVWUF9NRCBzaGEyNTZfbWQ9Ci0gCU5JRF9zaGEyNTYsCi0gCU5JRF9zaGEyNTZX aXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjU2X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFH X1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0MjU2LAotIAl1cGRhdGUyNTYsCi0gCWZp bmFsMjU2LAotQEAgLTE3Miw3ICsxNzMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9t ZD0KLSAJTklEX3NoYTM4NCwKLSAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEz ODRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVW UF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMs Ci0gCWluaXQzODQsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1AQCAtMTkxLDcgKzE5Myw4 IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kPQotIAlOSURfc2hhNTEyLAotIAlOSURf c2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTUxMl9ESUdFU1RfTEVOR1RILAotLQlFVlBf TURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5U LAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxH SURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDUxMiwKLSAJdXBkYXRlNTEy LAotIAlmaW5hbDUxMiwKLUBAIC0yMDYsNCArMjA5LDMgQEAgY29uc3QgRVZQX01EICpFVlBfc2hh NTEyKHZvaWQpCi0gCXsgcmV0dXJuKCZzaGE1MTJfbWQpOyB9Ci0gI2VuZGlmCS8qIGlmbmRlZiBP UEVOU1NMX05PX1NIQTUxMiAqLwotIAotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9ldnAvcF9zaWdu LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxMS0wNi0w OSAxODowMjozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZXZw L3Bfc2lnbi5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM0MzUyMTkzICswMjAwCi1AQCAtNjEsNiAr NjEsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29i amVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+Ci0gCi0gI2lmZGVmIHVuZGVmCi0gdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAq Y3R4LCBFVlBfTUQgKnR5cGUpCi1AQCAtMTAzLDYgKzEwNCwyMiBAQCBpbnQgRVZQX1NpZ25GaW5h bChFVlBfTURfQ1RYICpjdHgsIHVuc2lnCi0gCQkJZ290byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlf Q1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8g ZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJ aWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcp IDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BTUykKLSsJCQl7Ci0rCQkJaW50IHNhbHRsZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NU WF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKLSsJ CQkJZ290byBlcnI7Ci0rCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0 eCk7Ci0rCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKLSsJCQkJ c2FsdGxlbiA9IC0xOwotKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BT U19NUkVDKQotKwkJCQlzYWx0bGVuID0gLTI7Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNh X3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQl9 Ci0gCQlpZiAoRVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8 PSAwKQotIAkJCWdvdG8gZXJyOwotIAkJKnNpZ2xlbiA9IHNsdG1wOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2V2cC9wX3ZlcmlmeS5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5j LmZpcHMJMjAxMS0wNi0wOSAxODowMjozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzQzNTIxOTMg KzAyMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9D VFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAotIAkgICAgIHVuc2lnbmVkIGlu dCBzaWdsZW4sIEVWUF9QS0VZICpwa2V5KQotQEAgLTg4LDYgKzg5LDIyIEBAIGludCBFVlBfVmVy aWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb24KLSAJCQlnb3RvIGVycjsKLSAJCWlmIChFVlBf UEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCi0gCQkJ Z290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkK LSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFE RElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsKLSsJCQlpZiAoRVZQX1BL RVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAw KQotKwkJCQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NB TFQoY3R4KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQot KwkJCQlzYWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZM QUdfUFNTX01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3Nl dF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rCQkJCWdvdG8gZXJyOwot KwkJCX0KLSAJCWkgPSBFVlBfUEtFWV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBt X2xlbik7Ci0gCQllcnI6Ci0gCQlFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcyBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMKLS0tLSBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjMzNTM1MjIxNSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlw c19hZXNhdnMuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNTM1MjIxNSArMDIwMAotQEAgLTAsMCAr MSw5MzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3Bl 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 U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlk YXRpb24gU3VpdGUKLSsgIFRlc3QgUHJvZ3JhbQotKwotKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5 OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAw Ci0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0rICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4K LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxl cnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl ICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjZGVmaW5lIEFFU19CTE9DS19T SVpFIDE2Ci0rCi0rI2RlZmluZSBWRVJCT1NFIDAKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQgQUVTVGVzdChFVlBfQ0lQSEVS X0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIg KmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCi0rCSAgICBpbnQgZGlyLCAgLyog MCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRl eHQsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCi0rICAgIHsKLSsgICAgY29u c3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKHN0cmNhc2VjbXAoYW1v ZGUsICJDQkMiKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAx Mjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKLSsJCWJyZWFrOwotKwotKwkJY2Fz ZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsJCWJyZWFrOwotKwotKwkJ Y2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsJCWJyZWFrOwotKwkJ fQotKwotKwl9Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQot Kwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBF VlBfYWVzXzEyOF9lY2IoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIg PSBFVlBfYWVzXzE5Ml9lY2IoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBo ZXIgPSBFVlBfYWVzXzI1Nl9lY2IoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2Ug aWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgiKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtl eXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgo KTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9j ZmIxMjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVz XzI1Nl9jZmIxMjgoKTsKLSsJCWJyZWFrOwotKwkJfQotKwotKwl9Ci0rICAgIGVsc2UgaWYgKHN0 cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikK LSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7Ci0rCQli cmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7Ci0r CQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7 Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJD RkIxIikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMTI4X2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0r CQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2 OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0K LSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQotKwl7Ci0rCXN3aXRjaCAo YWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4 KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJf Y2ZiOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNf MjU2X2NmYjgoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UKLSsJewotKwlwcmlu dGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsgICAg aWYgKCFjaXBoZXIpCi0rCXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtl eXN6KTsKLSsJcmV0dXJuIDA7IAotKwl9Ci0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgs IGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQotKwlyZXR1cm4gMDsKLSsgICAg aWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxh Z3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsgICAgaWYgKGRpcikKLSsJCUVW UF9DaXBoZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCWVsc2UKLSsJCUVW UF9DaXBoZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07 Ci0rY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNG QjEyOCJ9OwotK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsK LStlbnVtIFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNSWVBUfTsKLSsKLSsvKj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ki8KLSsvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAgKi8KLSsv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsvKiNkZWZpbmUgZ2IoYSxiKSAo KChhKVsoYikvOF0gPj4gKChiKSU4KSkmMSkqLwotKy8qI2RlZmluZSBzYihhLGIsdikgKChhKVso YikvOF09KChhKVsoYikvOF0mfigxIDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8K LSsKLSsjZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkKLSsjZGVm aW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8 KCEhKHYpIDw8ICg3LShiKSU4KSkpCi0rCi0raW50IGRvX21jdChjaGFyICphbW9kZSwgCi0rCSAg IGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZlYywKLSsJ ICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKLSsJICAgRklMRSAqcmZw KQotKyAgICB7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFd WzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsKLSsgICAg dW5zaWduZWQgY2hhciBwdGV4dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY3RleHRb MTAwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07Ci0rICAgIGlu dCBpLCBqLCBuLCBuMSwgbjI7Ci0rICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84 OwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0 eCk7Ci0rCi0rICAgIGlmIChsZW4gPiAzMikKLSsJewotKwlwcmludGYoIlxuPj4+PiBMZW5ndGgg ZXhjZWVkcyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4iLCAKLSsJICAgICAgIGFtb2RlLCBha2V5c3op OwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytp bW9kZSkKLSsJaWYgKHN0cmNtcChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKLSsJICAgIGJy ZWFrOwotKyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAKLSsJcHJpbnRmKCJVbnJlY29nbml6ZWQg bW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rCi0rICAgIG1lbWNweShr ZXlbMF0sIGFLZXksIG5rZXlzeik7Ci0rICAgIGlmIChpVmVjKQotKwltZW1jcHkoaXZbMF0sIGlW ZWMsIEFFU19CTE9DS19TSVpFKTsKLSsgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJbWVtY3B5 KHB0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBlbHNlCi0rCW1lbWNweShjdGV4dFswXSwgdGV4 dCwgbGVuKTsKLSsgICAgZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKQotKwl7Ci0rCS8qIHByaW50 ZigiSXRlcmF0aW9uICVkXG4iLCBpKTsgKi8KLSsJaWYgKGkgPiAwKQotKwkgICAgewotKwkgICAg ZnByaW50ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7Ci0rCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixr ZXlbaV0sbmtleXN6LHJmcCwwKTsKLSsJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8K LSsJCU91dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOwotKwkgICAg LyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KLSsJICAgIE91dHB1dFZhbHVlKHRf dGFnW2Rpcl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCi0rCQkJaW1vZGUg PT0gQ0ZCMSk7Ci0rCSAgICB9Ci0rCWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCi0rCSAgICB7 Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQotKwkJewotKwkgICAgY2FzZSBFQ0I6Ci0rCQlpZiAoaiA9 PSAwKQotKwkJICAgIHsgLyogc2V0IHVwIGVuY3J5cHRpb24gKi8KLSsJCSAgICByZXQgPSBBRVNU ZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgTlVMTCwgCi0rCQkJCSAgZGlyLCAgLyog MCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBs ZW4pOwotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0s IGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRl eHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGly ID09IFhFTkNSWVBUKQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4 dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJ fQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJ CX0KLSsJCSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2UgQ0JDOgotKwkgICAgY2FzZSBP RkI6ICAKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkg ICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJ CQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtq XSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1j cHkocHRleHRbaisxXSwgaXZbaV0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4 dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAg IGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRb al0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBs ZW4pOwotKwkJCX0KLSsJCSAgICBlbHNlCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRl eHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFd LCBsZW4pOwotKwkJCX0KLSsJCSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2UgQ0ZCODoK LSsJCWlmIChqID09IDApCi0rCQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1v ZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQs IDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAg IH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQlF VlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0r CQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQot KwkJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGogPCAxNikKLSsJ CQltZW1jcHkocHRleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlt ZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xNl0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQot KwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZb aV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtq LTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJ CWlmKGogPT0gMCkKLSsJCSAgICB7Ci0rI2lmIDAKLSsJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3 cm9uZyBlbmRpYW5uZXNzIG9mIGlucHV0IGZpbGUgKi8KLSsJCSAgICBpZihpID09IDApCi0rCQkJ cHRleHRbMF1bMF08PD03OwotKyNlbmRpZgotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9k ZSxha2V5c3osa2V5W2ldLGl2W2ldLGRpciwKLSsJCQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4p OwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQ VCkKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAg ICBlbHNlCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0r Ci0rCQkgICAgfQotKwkJaWYoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBpZihq IDwgMTI4KQotKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQot KwkJCXNiKHB0ZXh0W2orMV0sMCxnYihjdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgaWYoaiA8IDEyOCkKLSsJCQlzYihjdGV4dFtqKzFdLDAsZ2Io aXZbaV0saikpOwotKwkJICAgIGVsc2UKLSsJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0x MjhdLDApKTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJLS1qOyAvKiBy ZXNldCB0byBsYXN0IG9mIHJhbmdlICovCi0rCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50 ZXh0ICovCi0rCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtq XSxsZW4scmZwLAotKwkJICAgIGltb2RlID09IENGQjEpOwotKwlmcHJpbnRmKHJmcCwgIlxuIik7 ICAvKiBhZGQgc2VwYXJhdG9yICovCi0rCi0rCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8KLSsJaWYg KGRpciA9PSBYRU5DUllQVCkKLSsJICAgIHsKLSsJICAgIGlmIChpbW9kZSA9PSBDRkI4KQotKwkJ eyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLwotKwkJZm9y IChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQotKwkJICAg IGNpcGhlcnRleHRbbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKGlt b2RlID09IENGQjEpCi0rCQl7Ci0rCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6 IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkp OwotKwkJfQotKwkgICAgZWxzZQotKwkJc3dpdGNoIChha2V5c3opCi0rCQkgICAgewotKwkJY2Fz ZSAxMjg6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAg YnJlYWs7Ci0rCQljYXNlIDE5MjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0x XSs4LCA4KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYpOwotKwkJ ICAgIGJyZWFrOwotKwkJY2FzZSAyNTY6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0 W2otMV0sIDE2KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAg IGlmIChpbW9kZSA9PSBDRkI4KQotKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8 IC4uLiB8fCBDVFtqXSAqLwotKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtl eXN6OyArK24xLCAtLW4yKQotKwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07 Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCi0rCQl7Ci0rCQlmb3IobjE9MCxu Mj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGNpcGhlcnRl eHQsbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJfQotKwkgICAgZWxzZQotKwkJc3dpdGNoIChh a2V5c3opCi0rCQkgICAgewotKwkJY2FzZSAxMjg6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQs IHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDE5MjoKLSsJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSs4LCA4KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4 dCs4LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAyNTY6Ci0rCQkgICAg bWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0sIDE2KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVy dGV4dCsxNiwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCSAgICB9 Ci0rCS8qIENvbXB1dGUgbmV4dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAqLwotKwlm b3IgKG4gPSAwOyBuIDwgbmtleXN6OyArK24pCi0rCSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtu XSBeIGNpcGhlcnRleHRbbl07Ci0rCQotKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8K LSsJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0r CQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0sIEFFU19C TE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjoK LSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxP Q0tfU0laRSk7Ci0rCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpF KTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJLyogSVZbaSsxXSA9IGN0ICovCi0r CQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKLSsJCSAgICBpdltp KzFdW24xXSA9IGN0ZXh0W2otbjJdWzBdOwotKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVsw XTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkIxOgotKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEg PCAxMjggOyArK24xLC0tbjIpCi0rCQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSww KSk7Ci0rCQlwdGV4dFswXVswXT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKLSsJCWJyZWFrOwotKwkJ fQotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQotKwkJewot KwkgICAgY2FzZSBFQ0I6Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tf U0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0JDOgotKwkgICAgY2FzZSBPRkI6Ci0rCSAg ICBjYXNlIENGQjEyODoKLSsJCW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJ WkUpOwotKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7Ci0r CQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCODoKLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8 IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1bMF07Ci0r CQljdGV4dFswXVswXSA9IHB0ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENG QjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBz YihpdltpKzFdLG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKLSsJCWN0ZXh0WzBdWzBdPXB0ZXh0W2ot MTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsgICAgCi0rICAg IHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSsvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PSovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0r ICAjIENvbmZpZyBpbmZvIGZvciB2LW9uZQotKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBF Q0IKLSsgICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBEZWNyeXB0Ci0rICAjIEtleSBMZW5ndGggOiAy NTYKLSsgICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQTQotKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCi0rCi0raW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUp Ci0rICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07Ci0rICAgIEZJTEUgKmFmcCA9 IE5VTEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFyIGlidWZbMjA0OF07Ci0rICAgIGNoYXIgdGJ1 ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbGdvWzhd ID0gIiI7Ci0rICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsgICAgY2hhciBhdGVzdFs4XSA9ICIi OwotKyAgICBpbnQgYWtleXN6ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtl eVs0MF07Ci0rICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Ci0rICAgIHVuc2ln bmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRb MjA0OF07Ci0rICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVW UF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmls ZSkpCi0rCXsKLSsJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVybiAtMTsKLSsJfQot KyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwg InIiKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xu IiwgCi0rCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVybiAtMTsKLSsJfQot KyAgICBpZiAoIXJzcGZpbGUpCi0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwotKwlycD1zdHJzdHIo cmZuLCJyZXEvIik7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlmICghcnApCi0rCSAg ICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQocnApOwotKwltZW1j cHkocnAsInJzcCIsMyk7Ci0rCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKLSsJbWVtY3B5KHJw LCAiLnJzcCIsIDQpOwotKwlyc3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlmICgocmZwID0gZm9w ZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZp bGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCWZjbG9z ZShhZnApOwotKwlhZnAgPSBOVUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgd2hpbGUgKCFl cnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKLSsJewotKwl0 aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7Ci0rCS8qICAgICAg cHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7ICovCi0rCXN3aXRjaCAoc3RlcCkK LSsJICAgIHsKLSsJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAgaWYgKGlidWZb MF0gPT0gJ1xuJykKLSsJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAoKCphbGdvID09 ICdcMCcpIHx8Ci0rCQkgICAgKCphbW9kZSA9PSAnXDAnKSB8fAotKwkJICAgIChha2V5c3ogPT0g MCkpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3Ig S2V5U2l6ZSAoJXMvJXMvJWQpXG4iLAotKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsKLSsJCSAg ICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCSAgICArKyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAgIGVsc2UgaWYg KGlidWZbMF0gIT0gJyMnKQotKwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06 ICVzXG4iLCBpYnVmKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7IC8qIHBy b2Nlc3MgcHJlYW1ibGUgKi8KLSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0rCQlpbnQgbjsK LSsJCWlmIChha2V5c3opCi0rCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAq LwotKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKLSsJCSAgICBmcHJpbnRmKHJmcCwgIiMg JXMiLCBjdGltZSgmcnRpbSkpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09 IDApCi0rCQkJewotKwkJCXN0cmNweShhbGdvLCAiQUVTIik7Ci0rCQkJLyogZ2V0IHRlc3QgdHlw ZSAqLwotKwkJCXBwICs9IDY7Ci0rCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7Ci0rCQkJbiA9IHhw LXBwOwotKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKLSsJCQlhdGVzdFtuXSA9ICdcMCc7Ci0r CQkJLyogZ2V0IG1vZGUgKi8KLSsJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2Rl IiAqLwotKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKLSsJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBu KTsKLSsJCQlhbW9kZVtuXSA9ICdcMCc7Ci0rCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLwotKwkJ CWlmIChWRVJCT1NFKQotKwkJCQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVz dCwgYW1vZGUpOwotKwkJCX0KLSsJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBM ZW5ndGggOiAiLCAxMykgPT0gMCkKLSsJCQl7Ci0rCQkJYWtleXN6ID0gYXRvaShwcCsxMyk7Ci0r CQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsK LSsJCQl9Ci0rCQkgICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtF TkNSWVBUXSB8IFtERUNSWVBUXSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQotKwkJewot KwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJCWlmIChzdHJuY2FzZWNtcChpYnVm LCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAxOwotKwkJZWxzZSBpZiAoc3Ry bmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMDsKLSsJ CWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBp YnVmKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAg ZWxzZSBpZiAoZGlyID09IC0xKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2lu ZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVs c2UgCi0rCQlzdGVwID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCi0rCSAgICBm cHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKLSsJCWJyZWFrOwotKwkg ICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKLSsJCWJyZWFrOwotKwotKwkg ICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQotKwkJewotKwkJcHJp bnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJ ewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKLSsJCWlmIChsZW4gPCAw KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnIg PTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwg bGVuKTsKLSsJCWlmIChzdHJjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwkJICAgIHsKLSsJCSAg ICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKLSsJCSAgICBzdGVwID0gKGRpcik/IDQ6 IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgKytz dGVwOwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCi0r CSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9 ICIsIDUpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwotKwkJZXJyID0g MTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYr NSwgaVZlYyk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZh bGlkIElWXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJ UHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3RlcCA9IChkaXIpPyA0OiA1OwotKwkJ fQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLwotKwkg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5U RVhUID0gIiwgMTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4i KTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpbnQgbm4gPSBzdHJs ZW4oaWJ1ZisxMik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJp bnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbj1oZXgy YmluKGlidWYrMTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkg ICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKLSsJCSAgICBlcnIg PTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50 ZXh0KSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOwotKwkJ ICAgIH0KLSsJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRl eHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENh cmxvIFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFL ZXksIGlWZWMsIAotKwkJCSAgICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVu LCAKLSsJCQkgICAgICByZnApIDwgMCkKLSsJCQlFWElUKDEpOwotKwkJICAgIH0KLSsJCWVsc2UK LSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJ CQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIkNJ UEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIp KTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNl IDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkg ICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0rCQl7 Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBl bHNlCi0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQy YmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0rCQkg ICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0r CQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAgICBl cnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwotKwkJUHJpbnRWYWx1ZSgiQ0lQSEVS VEVYVCIsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0g MCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgZG9fbWN0KGFtb2Rl LCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnAp OwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4 LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlw dCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0r CQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQs bGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVw ID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1Zlsw XSAhPSAnXG4nKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5h dG9yXG4iKTsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDAp Ci0rCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhp YnVmLCByZnApOwotKwkJfQotKwkgICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0K LSsJfQotKyAgICBpZiAocmZwKQotKwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNs b3NlKGFmcCk7Ci0rICAgIHJldHVybiBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVy IGEgc2luZ2xlIGZpbGUgb3IgCi0rICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFz c2VkIGluIGEgZmlsZS4KLSsgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBh ZXNfdGVzdCAtZiB4eHgucmVxCi0rICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0r ICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQK LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0r aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlz dCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0r ICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAw LCBkX29wdCA9IDE7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2Rl X3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNl bmRpZgotKyAgICBpZiAoYXJnYyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwg Ii1kIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBp ZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQg PSAxOwotKwkgICAgZF9vcHQgPSAwOwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBw cmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4g MDsKLSsJICAgIH0KLSsJaWYgKGFyZ2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNz aW5nIHBhcmFtZXRlclxuIik7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0 KQotKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5 KGZuLCBhcmd2WzJdKTsKLSsJICAgIHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0r ICAgIGlmIChkX29wdCkKLSsJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlm ICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fu bm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0r CXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9r KGZuLCAiXHJcbiIpOwotKwkgICAgc3RyY3B5KHJmbiwgZm4pOwotKwkgICAgaWYgKFZFUkJPU0Up Ci0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOwotKwkgICAgaWYgKHByb2NfZmls ZShyZm4sIHJzcGZpbGUpKQotKwkJewotKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQg Zm9yOiAlcyA8PDxcbiIsIHJmbik7Ci0rCQlFWElUKDEpOwotKwkJfQotKwkgICAgfQotKwlmY2xv c2UoZnApOwotKwl9Ci0rICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KLSsJewotKwlpZiAoVkVS Qk9TRSkKLSsJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKLSsJaWYgKHByb2Nf ZmlsZShmbiwgcnNwZmlsZSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5n IGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOwotKwkgICAgfQotKwl9Ci0rICAgIEVYSVQoMCk7 Ci0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMz NTM1MjIxNSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19j bWFjdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM1MzUyMjE1ICswMjAwCi1AQCAtMCwwICsx LDUxNyBAQAotKy8qIGZpcHNfY21hY3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2pl Y3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRo aXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJp YyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4K LSsgKgotKyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2NtYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBDTUFDIHN1cHBv cnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRpYyBpbnQgY21h Y190ZXN0KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKLSsJ aW50IG1vZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKTsKLStzdGF0 aWMgaW50IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0 LAotKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKk1z ZywgaW50IE1zZ2xlbiwKLSsJCWludCBUbGVuKTsKLStzdGF0aWMgaW50IHByaW50X2NtYWNfdmVy KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAq S2V5LCBpbnQgS2xlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbiwKLSsJCXVu c2lnbmVkIGNoYXIgKk1hYywgaW50IE1hY2xlbiwKLSsJCWludCBUbGVuKTsKLSsKLSsjaWZkZWYg RklQU19BTEdWUwotK2ludCBmaXBzX2NtYWN0ZXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQotKyNlbHNlCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbmRpZgotKwl7 Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCWludCBtb2RlID0gMDsJCS8qIDAg PT4gR2VuZXJhdGUsIDEgPT4gVmVyaWZ5ICovCi0rCWludCBLbGVuX2NvdW50c19rZXlzID0gMDsg LyogMCA9PiBLbGVuIGlzIHNpemUgb2Ygb25lIGtleQotKwkJCQkgICAgIDEgPT4gS2xlbiBpcyBh bW91bnQgb2Yga2V5cwotKwkJCQkgICovCi0rCWludCBrbm93bl9rZXlsZW4gPSAwOwkvKiBPbmx5 IHNldCB3aGVuIEtsZW5fY291bnRzX2tleXMgPSAxICovCi0rCWNvbnN0IEVWUF9DSVBIRVIgKmNp cGhlciA9IDA7Ci0rCWludCByZXQgPSAxOwotKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOwotKwotKwl3 aGlsZSAoYXJnYyA+IDEgJiYgYXJndlsxXVswXSA9PSAnLScpCi0rCQl7Ci0rCQlzd2l0Y2ggKGFy Z3ZbMV1bMV0pCi0rCQkJewotKwkJY2FzZSAnYSc6Ci0rCQkJewotKwkJCWNoYXIgKnAgPSAmYXJn dlsxXVsyXTsKLSsJCQlpZiAoKnAgPT0gJ1wwJykKLSsJCQkJewotKwkJCQlpZiAoYXJnYyA8PSAy KQotKwkJCQkJewotKwkJCQkJZnByaW50ZihzdGRlcnIsICJPcHRpb24gJXMgbmVlZHMgYSB2YWx1 ZVxuIiwgYXJndlsxXSk7Ci0rCQkJCQlnb3RvIGVuZDsKLSsJCQkJCX0KLSsJCQkJYXJndisrOwot KwkJCQlhcmdjLS07Ci0rCQkJCXAgPSAmYXJndlsxXVswXTsKLSsJCQkJfQotKwkJCWlmICghc3Ry Y21wKHAsICJhZXMxMjgiKSkKLSsJCQkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7Ci0rCQkJ ZWxzZSBpZiAoIXN0cmNtcChwLCAiYWVzMTkyIikpCi0rCQkJCWNpcGhlciA9IEVWUF9hZXNfMTky X2NiYygpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgImFlczI1NiIpKQotKwkJCQljaXBoZXIg PSBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHAsICJ0ZGVhMyIpIHx8 ICFzdHJjbXAocCwgInRkZXMzIikpCi0rCQkJCXsKLSsJCQkJY2lwaGVyID0gRVZQX2Rlc19lZGUz X2NiYygpOwotKwkJCQlLbGVuX2NvdW50c19rZXlzID0gMTsKLSsJCQkJa25vd25fa2V5bGVuID0g ODsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25v d24gYWxnb3JpdGhtICVzXG4iLCBwKTsKLSsJCQkJZ290byBlbmQ7Ci0rCQkJCX0KLSsJCQl9Ci0r CQkJYnJlYWs7Ci0rCQljYXNlICdnJzoKLSsJCQltb2RlID0gMDsKLSsJCQlicmVhazsKLSsJCWNh c2UgJ3YnOgotKwkJCW1vZGUgPSAxOwotKwkJCWJyZWFrOwotKwkJZGVmYXVsdDoKLSsJCQlmcHJp bnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSsJCQlnb3RvIGVu ZDsKLSsJCQl9Ci0rCQlhcmd2Kys7Ci0rCQlhcmdjLS07Ci0rCQl9Ci0rCWlmIChhcmdjID09IDEp Ci0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0r Ci0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9w ZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRw dXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlm ICghY21hY190ZXN0KGNpcGhlciwgb3V0LCBpbiwgbW9kZSwKLSsJCQlLbGVuX2NvdW50c19rZXlz LCBrbm93bl9rZXlsZW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBjbWFjIGZp bGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJ cmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZj bG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7 Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIENNQUNfVEVTVF9NQVhMSU5F TEVOCTE1MDAwMAotKwotK2ludCBjbWFjX3Rlc3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBG SUxFICpvdXQsIEZJTEUgKmluLAotKwlpbnQgbW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMsIGlu dCBrbm93bl9rZXlsZW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7 Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJdW5zaWduZWQgY2hhciAqKktleXMgPSBOVUxM LCAqTXNnID0gTlVMTCwgKk1hYyA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEw7 Ci0rCWludCBDb3VudCwgS2xlbiwgTWxlbiwgVGxlbjsKLSsJbG9uZyBLZXlsZW4sIE1zZ2xlbiwg TWFjbGVuOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9 IE9QRU5TU0xfbWFsbG9jKENNQUNfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5T U0xfbWFsbG9jKENNQUNfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFv bGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUNvdW50ID0gLTE7Ci0rCUtsZW4gPSAtMTsK LSsJTWxlbiA9IC0xOwotKwlUbGVuID0gLTE7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1Ziwg Q01BQ19URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShs aW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVh ZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQp KQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIFNraXAgY29tbWVudHMgKi8KLSsJCWlmIChrZXl3 b3JkWzBdID09ICcjJykKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQkvKiBMb29rIGZv ciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5v ID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlm ICghcCkKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290 byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7 Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBS ZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVu KHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJD b3VudCIpKQotKwkJCXsKLSsJCQlpZiAoQ291bnQgIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJQ291bnQgPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoQ291bnQgPCAwKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkts ZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKEtsZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJS2xlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChLbGVuIDwgMCkKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQlpZiAoS2xlbl9jb3VudHNfa2V5cykKLSsJCQkJewotKwkJCQlLZXlz ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKCpLZXlzKSAqIEtsZW4pOwotKwkJCQltZW1zZXQoS2V5 cywgJ1wwJywgc2l6ZW9mKCpLZXlzKSAqIEtsZW4pOwotKwkJCQl9Ci0rCQkJZWxzZQotKwkJCQl7 Ci0rCQkJCUtleXMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoKktleXMpKTsKLSsJCQkJbWVtc2V0 KEtleXMsICdcMCcsIHNpemVvZigqS2V5cykpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiTWxlbiIpKQotKwkJCXsKLSsJCQlpZiAoTWxlbiAhPSAtMSkKLSsJ CQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKE1s ZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlRsZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKFRsZW4gIT0gLTEpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJVGxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChUbGVuIDwg MCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJLZXkiKSAmJiAhS2xlbl9jb3VudHNfa2V5cykKLSsJCQl7Ci0rCQkJaWYgKEtleXNb MF0pCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJS2V5c1swXSA9IGhleDJiaW5fbSh2YWx1 ZSwgJktleWxlbik7Ci0rCQkJaWYgKCFLZXlzWzBdKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJuY21wKGtleXdvcmQsICJLZXkiLCAzKSAmJiBLbGVuX2Nv dW50c19rZXlzKQotKwkJCXsKLSsJCQlpbnQga2V5bnVtID0gYXRvaShrZXl3b3JkICsgMyk7Ci0r CQkJaWYgKCFrZXludW0gfHwga2V5bnVtID4gS2xlbiB8fCBLZXlzW2tleW51bS0xXSkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQlLZXlzW2tleW51bS0xXSA9IGhleDJiaW5fbSh2YWx1ZSwg JktleWxlbik7Ci0rCQkJaWYgKCFLZXlzW2tleW51bS0xXSkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0r CQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNc2cgPSBoZXgyYmluX20o dmFsdWUsICZNc2dsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1hYyIpKQotKwkJCXsKLSsJCQlp ZiAobW9kZSA9PSAwKQotKwkJCQljb250aW51ZTsKLSsJCQlpZiAoTWFjKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCU1hYyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1hY2xlbik7Ci0rCQkJaWYg KCFNYWMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiUmVzdWx0IikpCi0rCQkJewotKwkJCWlmIChtb2RlID09IDEpCi0rCQkJCWNv bnRpbnVlOwotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZQotKwkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChLZXlz ICYmIE1zZyAmJiAoIW1vZGUgfHwgTWFjKSAmJiAoVGxlbiA+IDApICYmIChLbGVuID4gMCkpCi0r CQkJewotKwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQotKwkJCQl7Ci0rCQkJCWludCB4OwotKwkJ CQlLZXkgPSBPUEVOU1NMX21hbGxvYyhLbGVuICoga25vd25fa2V5bGVuKTsKLSsJCQkJZm9yICh4 ID0gMDsgeCA8IEtsZW47IHgrKykKLSsJCQkJCXsKLSsJCQkJCW1lbWNweShLZXkgKyB4ICoga25v d25fa2V5bGVuLAotKwkJCQkJCUtleXNbeF0sIGtub3duX2tleWxlbik7Ci0rCQkJCQlPUEVOU1NM X2ZyZWUoS2V5c1t4XSk7Ci0rCQkJCQl9Ci0rCQkJCUtsZW4gKj0ga25vd25fa2V5bGVuOwotKwkJ CQl9Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCUtleSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4pOwot KwkJCQltZW1jcHkoS2V5LCBLZXlzWzBdLCBLbGVuKTsKLSsJCQkJT1BFTlNTTF9mcmVlKEtleXNb MF0pOwotKwkJCQl9Ci0rCQkJT1BFTlNTTF9mcmVlKEtleXMpOwotKwotKwkJCXN3aXRjaChtb2Rl KQotKwkJCQl7Ci0rCQkJY2FzZSAwOgotKwkJCQlpZiAoIXByaW50X2NtYWNfZ2VuKGNpcGhlciwg b3V0LAotKwkJCQkJCUtleSwgS2xlbiwKLSsJCQkJCQlNc2csIE1sZW4sCi0rCQkJCQkJVGxlbikp Ci0rCQkJCQlnb3RvIGVycm9yOwotKwkJCQlicmVhazsKLSsJCQljYXNlIDE6Ci0rCQkJCWlmICgh cHJpbnRfY21hY192ZXIoY2lwaGVyLCBvdXQsCi0rCQkJCQkJS2V5LCBLbGVuLAotKwkJCQkJCU1z ZywgTWxlbiwKLSsJCQkJCQlNYWMsIE1hY2xlbiwKLSsJCQkJCQlUbGVuKSkKLSsJCQkJCWdvdG8g ZXJyb3I7Ci0rCQkJCWJyZWFrOwotKwkJCQl9Ci0rCi0rCQkJT1BFTlNTTF9mcmVlKEtleSk7Ci0r CQkJS2V5ID0gTlVMTDsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwot KwkJCU9QRU5TU0xfZnJlZShNYWMpOwotKwkJCU1hYyA9IE5VTEw7Ci0rCQkJS2xlbiA9IC0xOwot KwkJCU1sZW4gPSAtMTsKLSsJCQlUbGVuID0gLTE7Ci0rCQkJQ291bnQgPSAtMTsKLSsJCQl9Ci0r CQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYp Ci0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xf ZnJlZShsaW5lYnVmKTsKLSsJaWYgKEtleSkKLSsJCU9QRU5TU0xfZnJlZShLZXkpOwotKwlpZiAo TXNnKQotKwkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCWlmIChNYWMpCi0rCQlPUEVOU1NMX2ZyZWUo TWFjKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsK LSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfY21hY19nZW4o Y29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpL ZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTWxlbiwKLSsJCWludCBU bGVuKQotKwl7Ci0rCWludCByYywgaTsKLSsJc2l6ZV90IHJlc2xlbjsKLSsJdW5zaWduZWQgY2hh ciByZXNbMTI4XTsKLSsJQ01BQ19DVFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7Ci0rCi0r CUNNQUNfSW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDApOwotKwlDTUFDX1VwZGF0 ZShjbWFjX2N0eCwgTXNnLCBNbGVuKTsKLSsJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCByZXMs ICZyZXNsZW4pKQotKwkJewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIsIHN0 ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xlbikK LSsJCXsKLSsJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxuIiwg c3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJZnB1dHMoIk1hYyA9 ICIsIG91dCk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgVGxlbjsgaSsrKQotKwkJCWZwcmludGYob3V0 LCAiJTAyeCIsIHJlc1tpXSk7Ci0rCQlmcHV0cyhSRVNQX0VPTCwgb3V0KTsKLSsJCXJjID0gMTsK LSsJCX0KLSsJQ01BQ19DVFhfZnJlZShjbWFjX2N0eCk7Ci0rCXJldHVybiByYzsKLSsJfQotKwot K3N0YXRpYyBpbnQgcHJpbnRfY21hY192ZXIoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxF ICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hh ciAqTXNnLCBpbnQgTWxlbiwKLSsJCXVuc2lnbmVkIGNoYXIgKk1hYywgaW50IE1hY2xlbiwKLSsJ CWludCBUbGVuKQotKwl7Ci0rCWludCByYyA9IDE7Ci0rCXNpemVfdCByZXNsZW47Ci0rCXVuc2ln bmVkIGNoYXIgcmVzWzEyOF07Ci0rCUNNQUNfQ1RYICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygp OwotKwotKwlDTUFDX0luaXQoY21hY19jdHgsIEtleSwgS2xlbiwgY2lwaGVyLCAwKTsKLSsJQ01B Q19VcGRhdGUoY21hY19jdHgsIE1zZywgTWxlbik7Ci0rCWlmICghQ01BQ19GaW5hbChjbWFjX2N0 eCwgcmVzLCAmcmVzbGVuKSkKLSsJCXsKLSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFD XG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlIGlmIChUbGVuID4gKGludCly ZXNsZW4pCi0rCQl7Ci0rCQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5n dGhcbiIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKFRsZW4gIT0gTWFj bGVuKQotKwkJewotKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiAhPSByZXN1bHRpbmcg TWFjIGxlbmd0aFxuIiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZQotKwkJewot KwkJaWYgKCFtZW1jbXAoTWFjLCByZXMsIE1hY2xlbikpCi0rCQkJZnB1dHMoIlJlc3VsdCA9IFAi IFJFU1BfRU9MLCBvdXQpOwotKwkJZWxzZQotKwkJCWZwdXRzKCJSZXN1bHQgPSBGIiBSRVNQX0VP TCwgb3V0KTsKLSsJCX0KLSsJQ01BQ19DVFhfZnJlZShjbWFjX2N0eCk7Ci0rCXJldHVybiByYzsK LSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Rlc21vdnMuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlw c19kZXNtb3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVz bW92cy5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzUzNTIyMTUgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTItMDctMTIgMjE6 NDk6MjUuMzM1MzUyMjE1ICswMjAwCi1AQCAtMCwwICsxLDcwMiBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz 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 LSsgKgotKyAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0rICBOSVNUIERFUyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBTeXN0ZW0KLSsg IFRlc3QgUHJvZ3JhbQotKwotKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3 aGljaCB3YXM6Ci0rICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlv bgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1EIDIw ODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFz c2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVm IE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewot KyAgICBwcmludGYoIk5vIEZJUFMgREVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0r fQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJm aXBzX3V0bC5oIgotKwotKyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAotKwotKyNkZWZpbmUgVkVS Qk9TRSAwCi0rCi0raW50IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKLSsJICAgIGNoYXIg KmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKLSsJICAgIHVuc2lnbmVk IGNoYXIgKmlWZWMsIAotKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxl bikKLSsgICAgewotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAg ICBpZiAoYWtleXN6ICE9IDE5MikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVk XG4iLCBha2V5c3opOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChzdHJjYXNlY21wKGFt b2RlLCAiQ0JDIikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOwotKyAgICBl bHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rl c19lZGUzX2VjYigpOwotKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9 PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKLSsgICAgZWxzZSBpZiAoc3Ry bmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNf b2ZiKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKLSsJY2lwaGVy ID0gRVZQX2Rlc19lZGUzX2NmYjgoKTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwi Q0ZCMSIpKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOwotKyAgICBlbHNlCi0rCXsK LSsJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCUVYSVQoMSk7Ci0rCX0K LSsKLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBp VmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAwOwotKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwi Q0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdf TEVOR1RIX0JJVFMpOwotKyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVuKTsKLSsKLSsg ICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIERlYnVnVmFsdWUoY2hhciAqdGFnLCB1bnNp Z25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhdOwot KyAgICBpbnQgb2xlbjsKLSsgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOwotKyAg ICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsgICAgfQotKwotK3Zv aWQgc2hpZnRpbih1bnNpZ25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3JjLGludCBuYml0 cykKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgLyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8K LSsgICAgbWVtbW92ZShkc3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOwotKyAgICAvKiBhcHBl bmQgbmV3IGRhdGEgKi8KLSsgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcp LzgpOwotKyAgICAvKiBsZWZ0IHNoaWZ0IHRoZSBiaXRzICovCi0rICAgIGlmKG5iaXRzJTgpCi0r CWZvcihuPTAgOyBuIDwgMyo4IDsgKytuKQotKwkgICAgZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRz JTgpKXwoZHN0W24rMV0gPj4gKDgtbmJpdHMlOCkpOwotKyAgICB9CQotKwotKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2NoYXIgKnRfdGFnWzJd ID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OwotK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JD IiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OwotK2VudW0gTW9kZSB7Q0JDLCBF Q0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCNjR9OwotK2ludCBTaXplc1s2XT17NjQsNjQsNjQsMSw4 LDY0fTsKLSsKLSt2b2lkIGRvX21jdChjaGFyICphbW9kZSwgCi0rCSAgICBpbnQgYWtleXN6LCBp bnQgbnVta2V5cywgdW5zaWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICppdmVjLAotKwkg ICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKLSsJICAgIEZJTEUgKnJm cCkKLSsgICAgewotKyAgICBpbnQgaSxpbW9kZTsKLSsgICAgdW5zaWduZWQgY2hhciBua1s0Kjhd OyAvKiBsb25nZXN0IGtleSs4ICovCi0rICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBbOF07Ci0rCi0r ICAgIGZvciAoaW1vZGU9MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCi0rCWlmKCFzdHJjbXAoYW1v ZGUsdF9tb2RlW2ltb2RlXSkpCi0rCSAgICBicmVhazsKLSsgICAgaWYgKGltb2RlID09IDYpCi0r CXsgCi0rCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCUVYSVQo MSk7Ci0rCX0KLSsKLSsgICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCi0rCXsKLSsJaW50IGo7 Ci0rCWludCBuOwotKwlpbnQga3A9YWtleXN6LzY0OwotKwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4 XTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwot KwotKwlmcHJpbnRmKHJmcCwiXG5DT1VOVCA9ICVkXG4iLGkpOwotKwlpZihrcCA9PSAxKQotKwkg ICAgT3V0cHV0VmFsdWUoIktFWSIsYWtleSw4LHJmcCwwKTsKLSsJZWxzZQotKwkgICAgZm9yKG49 MCA7IG4gPCBrcCA7ICsrbikKLSsJCXsKLSsJCWZwcmludGYocmZwLCJLRVklZCIsbisxKTsKLSsJ CU91dHB1dFZhbHVlKCIiLGFrZXkrbio4LDgscmZwLDApOwotKwkJfQotKwotKwlpZihpbW9kZSAh PSBFQ0IpCi0rCSAgICBPdXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7Ci0rCU91dHB1dFZh bHVlKHRfdGFnW2Rpcl4xXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rI2lmIDAKLSsJ LyogY29tcGVuc2F0ZSBmb3IgZW5kaWFubmVzcyAqLwotKwlpZihpbW9kZSA9PSBDRkIxKQotKwkg ICAgdGV4dFswXTw8PTc7Ci0rI2VuZGlmCi0rCW1lbWNweSh0ZXh0MCx0ZXh0LDgpOwotKwotKwlm b3Ioaj0wIDsgaiA8IDEwMDAwIDsgKytqKQotKwkgICAgewotKwkgICAgdW5zaWduZWQgY2hhciBv bGRfdGV4dFs4XTsKLSsKLSsJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOwotKwkgICAgaWYo aiA9PSAwKQotKwkJewotKwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOwotKwkJREVTVGVzdCgmY3R4 LGFtb2RlLGFrZXlzeixha2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOwotKwkJfQotKwkgICAg ZWxzZQotKwkJewotKwkJbWVtY3B5KG9sZF9pdixjdHguaXYsOCk7Ci0rCQlFVlBfQ2lwaGVyKCZj dHgsdGV4dCx0ZXh0LGxlbik7Ci0rCQl9Ci0rCSAgICBpZihqID09IDk5OTkpCi0rCQl7Ci0rCQlP dXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKLSsJCS8q CQltZW1jcHkoaXZlYyx0ZXh0LDgpOyAqLwotKwkJfQotKwkgICAgLyoJICAgIERlYnVnVmFsdWUo Iml2IixjdHguaXYsOCk7ICovCi0rCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUg bmV4dCBrZXkgKi8KLSsJICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0pOwotKwkgICAg LyoJICAgIERlYnVnVmFsdWUoIm5rIixuaywyNCk7Ki8KLSsJICAgIGlmKChkaXIgJiYgKGltb2Rl ID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAotKwkJCXx8IGltb2Rl ID09IENCQykpIHx8IGltb2RlID09IE9GQikKLSsJCW1lbWNweSh0ZXh0LG9sZF9pdiw4KTsKLSsK LSsJICAgIGlmKCFkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9k ZSA9PSBDRkI2NCkpCi0rCQl7Ci0rCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91 dHB1dCBvZiB0aGUgcmF3IERFUyBvcGVyYXRpb24KLSsJCSAgIHdoaWNoIHdlIGRvbid0IGhhdmUs IHNvIHJlY29uc3RydWN0IGl0Li4uICovCi0rCQlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCQkg ICAgdGV4dFtuXV49b2xkX3RleHRbbl07Ci0rCQl9Ci0rCSAgICB9Ci0rCWZvcihuPTAgOyBuIDwg OCA7ICsrbikKLSsJICAgIGFrZXlbbl1ePW5rWzE2K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyAr K24pCi0rCSAgICBha2V5Wzgrbl1ePW5rWzgrbl07Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikK LSsJICAgIGFrZXlbMTYrbl1ePW5rW25dOwotKwlpZihudW1rZXlzIDwgMykKLSsJICAgIG1lbWNw eSgmYWtleVsyKjhdLGFrZXksOCk7Ci0rCWlmKG51bWtleXMgPCAyKQotKwkgICAgbWVtY3B5KCZh a2V5WzhdLGFrZXksOCk7Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKWFrZXkp OwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7Ci0rCURFU19z ZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzE2KSk7Ci0rCW1lbWNweShpdmVjLGN0 eC5pdiw4KTsKLSsKLSsJLyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFsIHRleHQgZG9l c24ndCBkZXBlbmQgb24gdGhlCi0rCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9kZSwgc28gd2hv IGNhcmVzIHdoYXQgaXQgaXM/IChXaG8KLSsJICAgZGVzaWduZWQgdGhlc2UgdGVzdHM/KSAqLwot KwlpZihpbW9kZSA9PSBPRkIpCi0rCSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCQl0ZXh0 W25dPXRleHQwW25dXm9sZF9pdltuXTsKLSsJfQotKyAgICB9Ci0rICAgIAotK2ludCBwcm9jX2Zp bGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQotKyAgICB7Ci0rICAgIGNoYXIgYWZuWzI1 Nl0sIHJmblsyNTZdOwotKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKLSsgICAg Y2hhciBpYnVmWzIwNDhdLCB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAw OwotKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7Ci0rICAgIGNoYXIgYXRlc3RbMTAwXSA9ICIiOwot KyAgICBpbnQgYWtleXN6PTA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBd OwotKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOwotKyAgICB1bnNpZ25lZCBj aGFyIHBsYWludGV4dFsyMDQ4XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhd OwotKyAgICBjaGFyICpycDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBpbnQgbnVt a2V5cz0xOwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBpZiAoIXJx ZmlsZSB8fCAhKCpycWZpbGUpKQotKwl7Ci0rCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOwotKwly ZXR1cm4gLTE7Ci0rCX0KLSsgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKLSsKLSsgICAgaWYgKChh ZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRmKCJDYW5ub3Qgb3Bl biBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOwotKwly ZXR1cm4gLTE7Ci0rCX0KLSsgICAgaWYgKCFyc3BmaWxlKQotKwl7Ci0rCXN0cmNweShyZm4sYWZu KTsKLSsJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgot KwlpZiAoIXJwKQotKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKLSsjZW5kaWYKLSsJYXNz ZXJ0KHJwKTsKLSsJbWVtY3B5KHJwLCJyc3AiLDMpOwotKwlycCA9IHN0cnN0cihyZm4sICIucmVx Iik7Ci0rCW1lbWNweShycCwgIi5yc3AiLCA0KTsKLSsJcnNwZmlsZSA9IHJmbjsKLSsJfQotKyAg ICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRm KCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgcmZuLCBzdHJlcnJvcihl cnJubykpOwotKwlmY2xvc2UoYWZwKTsKLSsJYWZwID0gTlVMTDsKLSsJcmV0dXJuIC0xOwotKwl9 Ci0rICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9 IE5VTEwpCi0rCXsKLSsJdGlkeV9saW5lKHRidWYsIGlidWYpOwotKwlpbGVuID0gc3RybGVuKGli dWYpOwotKwkvKglwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsqLwotKwlpZihz dGVwID09IDMgJiYgIXN0cmNtcChhbW9kZSwiRUNCIikpCi0rCSAgICB7Ci0rCSAgICBtZW1zZXQo aVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKLSsJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5v IGl2ZWMgZm9yIEVDQiAqLwotKwkgICAgfQotKwlzd2l0Y2ggKHN0ZXApCi0rCSAgICB7Ci0rCWNh c2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KLSsJICAgIGlmIChpYnVmWzBdID09ICdcbicpCi0r CQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLwotKwkJaWYgKCphbW9kZSA9PSAnXDAnKQotKwkJICAg IHsKLSsJCSAgICBwcmludGYoIk1pc3NpbmcgTW9kZVxuIik7Ci0rCQkgICAgZXJyID0gMTsKLSsJ CSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkg ICAgKysgc3RlcDsKLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcj JykKLSsJCXsKLSsJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7 Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxl ICovCi0rCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOwotKwkJaW50IG47Ci0rCQlpZigqYW1vZGUp Ci0rCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLwotKwkJICAgIHRpbWVf dCBydGltID0gdGltZSgwKTsKLSsJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRp bSkpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKLSsJCSAgICBpZighc3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJuY21wKHBwLCJE RVMgIiw0KQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkKLSsJCSAgICAgICB8 fCAhc3RybmNtcChwcCwiUEVSTVVUQVRJT04gIiwxMikKLSsJCSAgICAgICB8fCAhc3RybmNtcChw cCwiU1VCU1RJVFVUSU9OICIsMTMpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlZBUklBQkxF ICIsOSkpCi0rCQkJewotKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KLSsJCQlpZighc3RybmNtcChw cCwiREVTICIsNCkpCi0rCQkJICAgIHBwKz00OwotKwkJCWVsc2UgaWYoIXN0cm5jbXAocHAsIlRE RVMgIiw1KSkKLSsJCQkgICAgcHArPTU7Ci0rCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7Ci0rCQkJ biA9IHhwLXBwOwotKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKLSsJCQlhdGVzdFtuXSA9ICdc MCc7Ci0rCQkJLyogZ2V0IG1vZGUgKi8KLSsJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdl dCBtb2RlIiAqLwotKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKLSsJCQlzdHJuY3B5KGFtb2RlLCB4 cCsxLCBuKTsKLSsJCQlhbW9kZVtuXSA9ICdcMCc7Ci0rCQkJLyogYW1vZGVbM10gPSAnXDAnOyAq LwotKwkJCWlmIChWRVJCT1NFKQotKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRl c3QsYW1vZGUpOwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2Fz ZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZihpYnVmWzBdID09ICdc bicpCi0rCQlicmVhazsKLSsJICAgIGlmIChpYnVmWzBdID09ICdbJykKLSsJCXsKLSsJCWZwdXRz KGlidWYsIHJmcCk7Ci0rCQkrK3N0ZXA7Ci0rCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNS WVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMTsKLSsJCWVsc2UgaWYgKHN0cm5jYXNlY21w KGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDA7Ci0rCQllbHNlCi0r CQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7Ci0r CQkgICAgZXJyID0gMTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgaWYg KGRpciA9PSAtMSkKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgRU5DUllQ VC9ERUNSWVBUIGtleXdvcmRcbiIpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIAotKwkJ c3RlcCA9IDI7Ci0rCi0rCWNhc2UgMjogLyogS0VZID0geHh4eCAqLwotKwkgICAgaWYoKmlidWYg PT0gJ1xuJykKLSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0r ICAgICAgICAgICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIs OCkpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAg ICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKLSsJ CXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAgICAg ICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwxMCkpCi0rCQl7 Ci0rCQludW1rZXlzPWF0b2koaWJ1ZisxMCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAKLSsJICAg IGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2 KSkKLSsJCXsKLSsJCWFrZXlzej02NDsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwg YUtleSk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlk IEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJp bnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKLSsJCSsrc3RlcDsKLSsJCX0KLSsJICAgIGVsc2Ug aWYoIXN0cm5jYXNlY21wKGlidWYsIktFWXMgPSAiLDcpKQotKwkJewotKwkJYWtleXN6PTY0KjM7 Ci0rCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleSk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7 Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAg YnJlYWs7Ci0rCQkgICAgfQotKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOwotKwkJbWVtY3B5KGFL ZXkrMTYsYUtleSw4KTsKLSsJCWlidWZbNF09J1wwJzsKLSsJCVByaW50VmFsdWUoIktFWXMiLGFL ZXksbGVuKTsKLSsJCSsrc3RlcDsKLSsJCX0KLSsJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGli dWYsIktFWSIsMykpCi0rCQl7Ci0rCQlpbnQgbj1pYnVmWzNdLScxJzsKLSsKLSsJCWFrZXlzej02 NCozOwotKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKLSsJCWlmKGxlbiAhPSA4KQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpYnVmWzRdPSdcMCc7Ci0rCQlQcmludFZhbHVl KGlidWYsYUtleSxsZW4pOwotKwkJaWYobiA9PSAyKQotKwkJICAgICsrc3RlcDsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsK LSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDM6IC8qIElWID0geHh4eCAqLwotKwkgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1 KSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKLSsJCWVyciA9IDE7Ci0r CQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlW ZWMpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBJ VlxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50 VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKLSsJCXN0ZXAgPSAoZGlyKT8gNDogNTsKLSsJCX0KLSsJ ICAgIGJyZWFrOwotKwotKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KLSsJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9 ICIsIDEyKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7Ci0r CQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaW50IG5uID0gc3RybGVuKGli dWYrMTIpOwotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJp bihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW49aGV4MmJpbihp YnVmKzEyLCBwbGFpbnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHBy aW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7Ci0rCQkgICAgZXJyID0xOwot KwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkp Ci0rCQkgICAgewotKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKLSsJCSAgICB9 Ci0rCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBs ZW4pOwotKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxv IFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixudW1rZXlzLGFL ZXksaVZlYyxkaXIscGxhaW50ZXh0LGxlbixyZnApOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAg ICB7Ci0rCQkgICAgYXNzZXJ0KGRpciA9PSAxKTsKLSsJCSAgICByZXQgPSBERVNUZXN0KCZjdHgs IGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJ CSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkh c3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkg ICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQg PSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJy ID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEi KSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0 ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7 Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhF UlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQkK LSsJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJaWYgKHN0 cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAg ICB7Ci0rCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFLZXksIGlWZWMsIAot KwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJ CSAgICB7Ci0rCQkgICAgYXNzZXJ0KGRpciA9PSAwKTsKLSsJCSAgICByZXQgPSBERVNUZXN0KCZj dHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNy eXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsK LSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4 dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0 ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlmIChpYnVm WzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1p bmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0g MCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJCWZwdXRz KGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwotKwkgICAg fQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZwKQotKwlm Y2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3NlcyBlaXRo ZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBw YXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6Ci0rICAg IGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoK LSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4 dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hhciAqcnFs aXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0gTlVMTDsK LSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBmX29wdCA9 IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFGSVBTX21v ZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwotKwl9Ci0r I2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFd LCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQotKwllbHNl IGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAgICBmX29w dCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAg IHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAgIHJldHVy biAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIk1p c3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoZF9v cHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzdHJj cHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9Ci0rCX0K LSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KLSsJ aWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJD YW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0K LSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAgICBzdHJ0 b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBwcmludGYoIlBy b2Nlc3Npbmc6ICVzXG4iLCByZm4pOwotKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUp KQotKwkJewotKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIs IHJmbik7Ci0rCQlFWElUKDEpOwotKwkJfQotKwkgICAgfQotKwlmY2xvc2UoZnApOwotKwl9Ci0r ICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KLSsJewotKwlpZiAoVkVSQk9TRSkKLSsJCXByaW50 ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKLSsJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkp Ci0rCSAgICB7Ci0rCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8 PFxuIiwgZm4pOwotKwkgICAgfQotKwl9Ci0rICAgIEVYSVQoMCk7Ci0rICAgIHJldHVybiAwOwot KyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfZGh2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2RodnMuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMu ZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNjM1MjIzOCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzYz NTIyMzggKzAyMDAKLUBAIC0wLDAgKzEsMjkyIEBACi0rLyogZmlwcy9kaC9maXBzX2RodnMuYyAq LwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NM Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICovCi0rCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sK LSsgICAgcHJpbnRmKCJObyBGSVBTIERIIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0r fQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2lu Y2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGNvbnN0IEVWUF9NRCAqcGFyc2VfbWQoY2hh ciAqbGluZSkKLSsJewotKwljaGFyICpwOwotKwlpZiAobGluZVswXSAhPSAnWycgfHwgbGluZVsx XSAhPSAnRicpCi0rCQlyZXR1cm4gTlVMTDsKLSsJcCA9IHN0cmNocihsaW5lLCAnLScpOwotKwlp ZiAoIXApCi0rCQlyZXR1cm4gTlVMTDsKLSsJbGluZSA9IHAgKyAxOwotKwlwID0gc3RyY2hyKGxp bmUsICddJyk7Ci0rCWlmICghcCkKLSsJCXJldHVybiBOVUxMOwotKwkqcCA9IDA7Ci0rCXAgPSBs aW5lOwotKwl3aGlsZShpc3NwYWNlKCpwKSkKLSsJCXArKzsKLSsJaWYgKCFzdHJjbXAocCwgIlNI QTEiKSkKLSsJCXJldHVybiBFVlBfc2hhMSgpOwotKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEy MjQiKSkKLSsJCXJldHVybiBFVlBfc2hhMjI0KCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNI QTI1NiIpKQotKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChwLCAi U0hBMzg0IikpCi0rCQlyZXR1cm4gRVZQX3NoYTM4NCgpOwotKwllbHNlIGlmICghc3RyY21wKHAs ICJTSEE1MTIiKSkKLSsJCXJldHVybiBFVlBfc2hhNTEyKCk7Ci0rCWVsc2UKLSsJCXJldHVybiBO VUxMOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgb3V0cHV0X1poYXNoKEZJTEUgKm91dCwgaW50IGV4 b3V0LAotKwkJCQlESCAqZGgsIEJJR05VTSAqcGVlcmtleSwgY29uc3QgRVZQX01EICptZCwKLSsJ CQkJdW5zaWduZWQgY2hhciAqcmhhc2gsIHNpemVfdCByaGFzaGxlbikKLSsJewotKwl1bnNpZ25l ZCBjaGFyICpaOwotKwl1bnNpZ25lZCBjaGFyIGNoYXNoW0VWUF9NQVhfTURfU0laRV07Ci0rCWlu dCBabGVuOwotKwlpZiAocmhhc2ggPT0gTlVMTCkKLSsJCXsKLSsJCXJoYXNobGVuID0gTV9FVlBf TURfc2l6ZShtZCk7Ci0rCQlpZiAoIURIX2dlbmVyYXRlX2tleShkaCkpCi0rCQkJZXhpdCAoMSk7 Ci0rCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlllcGhlbUlVVCIsIGRoLT5wdWJfa2V5KTsKLSsJ CWlmIChleG91dCkKLSsJCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlhlcGhlbUlVVCIsIGRoLT5w cml2X2tleSk7Ci0rCQl9Ci0rCVogPSBPUEVOU1NMX21hbGxvYyhCTl9udW1fYnl0ZXMoZGgtPnAp KTsKLSsJaWYgKCFaKQotKwkJZXhpdCgxKTsKLSsJWmxlbiA9IERIX2NvbXB1dGVfa2V5X3BhZGRl ZChaLCBwZWVya2V5LCBkaCk7Ci0rCWlmIChleG91dCkKLSsJCU91dHB1dFZhbHVlKCJaIiwgWiwg Wmxlbiwgb3V0LCAwKTsKLSsJRklQU19kaWdlc3QoWiwgWmxlbiwgY2hhc2gsIE5VTEwsIG1kKTsK LSsJT3V0cHV0VmFsdWUocmhhc2ggPyAiSVVUSGFzaFpaIiA6ICJIYXNoWloiLCBjaGFzaCwgcmhh c2hsZW4sIG91dCwgMCk7Ci0rCWlmIChyaGFzaCkKLSsJCXsKLSsJCWZwcmludGYob3V0LCAiUmVz dWx0ID0gJXNcbiIsCi0rCQkJCW1lbWNtcChjaGFzaCwgcmhhc2gsIHJoYXNobGVuKSA/ICJGIiA6 ICJQIik7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCUJOX2NsZWFyX2ZyZWUoZGgtPnByaXZfa2V5 KTsKLSsJCUJOX2NsZWFyX2ZyZWUoZGgtPnB1Yl9rZXkpOwotKwkJZGgtPnByaXZfa2V5ID0gTlVM TDsKLSsJCWRoLT5wdWJfa2V5ID0gTlVMTDsKLSsJCX0KLSsJT1BFTlNTTF9jbGVhbnNlKFosIFps ZW4pOwotKwlPUEVOU1NMX2ZyZWUoWik7Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19BTEdWUwotK2lu dCBmaXBzX2RodnNfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJY2hhciAqKmFyZ3MgPSBh cmd2ICsgMTsKLSsJaW50IGFyZ24gPSBhcmdjIC0gMTsKLSsJRklMRSAqaW4sICpvdXQ7Ci0rCWNo YXIgYnVmWzIwNDhdLCBsYnVmWzIwNDhdOwotKwl1bnNpZ25lZCBjaGFyICpyaGFzaDsKLSsJbG9u ZyByaGFzaGxlbjsKLSsJREggKmRoID0gTlVMTDsKLSsJY29uc3QgRVZQX01EICptZCA9IE5VTEw7 Ci0rCUJJR05VTSAqcGVlcmtleSA9IE5VTEw7Ci0rCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFs dWUgPSBOVUxMOwotKwlpbnQgZG9fdmVyaWZ5ID0gLTEsIGV4b3V0ID0gMDsKLSsKLSsJZmlwc19h bGd0ZXN0X2luaXQoKTsKLSsKLSsJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgImRodmVyIikp Ci0rCQl7Ci0rCQlkb192ZXJpZnkgPSAxOwotKwkJYXJncysrOwotKwkJYXJnbi0tOwotKwkJfQot KwllbHNlIGlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaGdlbiIpKQotKwkJewotKwkJZG9f dmVyaWZ5ID0gMDsKLSsJCWFyZ3MrKzsKLSsJCWFyZ24tLTsKLSsJCX0KLSsKLSsJaWYgKGFyZ24g JiYgIXN0cmNtcCgqYXJncywgIi1leG91dCIpKQotKwkJewotKwkJZXhvdXQgPSAxOwotKwkJYXJn cysrOwotKwkJYXJnbi0tOwotKwkJfQotKwotKwlpZiAoZG9fdmVyaWZ5ID09IC0xKQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0 ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwlpZiAoYXJnbiA9PSAy KQotKwkJewotKwkJaW4gPSBmb3BlbigqYXJncywgInIiKTsKLSsJCWlmICghaW4pCi0rCQkJewot KwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKLSsJCQll eGl0KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7Ci0rCQlpZiAoIW91 dCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxl XG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJnbiA9PSAwKQot KwkJewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJZWxzZQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUg b3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwlkaCA9IEZJUFNf ZGhfbmV3KCk7Ci0rCi0rCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVM TCkKLSsJCXsKLSsJCWZwdXRzKGJ1Ziwgb3V0KTsKLSsJCWlmIChzdHJsZW4oYnVmKSA+IDYgJiYg IXN0cm5jbXAoYnVmLCAiW0YiLCAyKSkKLSsJCQl7Ci0rCQkJbWQgPSBwYXJzZV9tZChidWYpOwot KwkJCWlmIChtZCA9PSBOVUxMKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChkaCkK LSsJCQkJRklQU19kaF9mcmVlKGRoKTsKLSsJCQlkaCA9IEZJUFNfZGhfbmV3KCk7Ci0rCQkJY29u dGludWU7Ci0rCQkJfQotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYs IGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiUCIpKQotKwkJ CXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgtPnAsIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJRIikpCi0rCQkJewot KwkJCWlmICghZG9faGV4MmJuKCZkaC0+cSwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkciKSkKLSsJCQl7Ci0rCQkJ aWYgKCFkb19oZXgyYm4oJmRoLT5nLCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWGVwaGVtSVVUIikpCi0rCQkJewot KwkJCWlmICghZG9faGV4MmJuKCZkaC0+cHJpdl9rZXksIHZhbHVlKSkKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZZXBoZW1JVVQi KSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5wdWJfa2V5LCB2YWx1ZSkpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi WWVwaGVtQ0FWUyIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmcGVlcmtleSwgdmFsdWUp KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChkb192ZXJpZnkgPT0gMCkKLSsJCQkJ b3V0cHV0X1poYXNoKG91dCwgZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKLSsJCQkJCQkJTlVMTCwg MCk7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQot KwkJCXsKLSsJCQlpZiAoIW1kKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCXJoYXNoID0g aGV4MmJpbl9tKHZhbHVlLCAmcmhhc2hsZW4pOwotKwkJCWlmICghcmhhc2ggfHwgcmhhc2hsZW4g IT0gTV9FVlBfTURfc2l6ZShtZCkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJb3V0cHV0 X1poYXNoKG91dCwgZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKLSsJCQkJCQkJcmhhc2gsIHJoYXNo bGVuKTsKLSsJCQl9Ci0rCQl9Ci0rCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKLSsJCWZjbG9zZShp bik7Ci0rCWlmIChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKLSsJCWZjbG9zZShvdXQpOwotKwlyZXR1 cm4gMDsKLSsJcGFyc2VfZXJyb3I6Ci0rCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgUGFyc2luZyBy ZXF1ZXN0IGZpbGVcbiIpOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcyBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjMzNjM1MjIzOCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlw c19kcmJndnMuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNjM1MjIzOCArMDIwMAotQEAgLTAsMCAr MSw0MTYgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJndnMuYyAqLwotKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAot KyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0r Ci0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns Y29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0r Ci0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBG SVBTIERSQkcgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vsc2UKLSsKLSsj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rc3RhdGljIGludCBkcGFyc2VfbWQoY2hhciAqc3RyKQotKwl7Ci0rCXN3aXRj aChhdG9pKHN0ciArIDUpKQotKwkJewotKwkJY2FzZSAxOgotKwkJcmV0dXJuIE5JRF9zaGExOwot KwotKwkJY2FzZSAyMjQ6Ci0rCQlyZXR1cm4gTklEX3NoYTIyNDsKLSsKLSsJCWNhc2UgMjU2Ogot KwkJcmV0dXJuIE5JRF9zaGEyNTY7Ci0rCi0rCQljYXNlIDM4NDoKLSsJCXJldHVybiBOSURfc2hh Mzg0OwotKwotKwkJY2FzZSA1MTI6Ci0rCQlyZXR1cm4gTklEX3NoYTUxMjsKLSsKLSsJCX0KLSsK LSsJcmV0dXJuIE5JRF91bmRlZjsKLSsJfQotKwotK3N0YXRpYyBpbnQgcGFyc2VfZWMoY2hhciAq c3RyKQotKwl7Ci0rCWludCBjdXJ2ZV9uaWQsIG1kX25pZDsKLSsJY2hhciAqbWQ7Ci0rCW1kID0g c3RyY2hyKHN0ciwgJyAnKTsKLSsJaWYgKCFtZCkKLSsJCXJldHVybiBOSURfdW5kZWY7Ci0rCWlm ICghc3RybmNtcChzdHIsICJbUC0yNTYiLCA2KSkKLSsJCWN1cnZlX25pZCA9IE5JRF9YOV82Ml9w cmltZTI1NnYxOwotKwllbHNlIGlmICghc3RybmNtcChzdHIsICJbUC0zODQiLCA2KSkKLSsJCWN1 cnZlX25pZCA9IE5JRF9zZWNwMzg0cjE7Ci0rCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTUy MSIsIDYpKQotKwkJY3VydmVfbmlkID0gTklEX3NlY3A1MjFyMTsKLSsJZWxzZQotKwkJcmV0dXJu IE5JRF91bmRlZjsKLSsJbWRfbmlkID0gZHBhcnNlX21kKG1kKTsKLSsJaWYgKG1kX25pZCA9PSBO SURfdW5kZWYpCi0rCQlyZXR1cm4gTklEX3VuZGVmOwotKwlyZXR1cm4gKGN1cnZlX25pZCA8PCAx NikgfCBtZF9uaWQ7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHBhcnNlX2FlcyhjaGFyICpzdHIsIGlu dCAqcGRmKQotKwl7Ci0rCi0rCWlmICghc3RybmNtcChzdHIgKyA5LCAibm8iLCAyKSkKLSsJCSpw ZGYgPSAwOwotKwllbHNlCi0rCQkqcGRmID0gRFJCR19GTEFHX0NUUl9VU0VfREY7Ci0rCi0rCXN3 aXRjaChhdG9pKHN0ciArIDUpKQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQlyZXR1cm4gTklEX2Fl c18xMjhfY3RyOwotKwotKwkJY2FzZSAxOTI6Ci0rCQlyZXR1cm4gTklEX2Flc18xOTJfY3RyOwot KwotKwkJY2FzZSAyNTY6Ci0rCQlyZXR1cm4gTklEX2Flc18yNTZfY3RyOwotKwotKwkJZGVmYXVs dDoKLSsJCXJldHVybiBOSURfdW5kZWY7Ci0rCi0rCQl9Ci0rCX0KLSsKLSt0eXBlZGVmIHN0cnVj dCAKLSsJewotKwl1bnNpZ25lZCBjaGFyICplbnQ7Ci0rCXNpemVfdCBlbnRsZW47Ci0rCXVuc2ln bmVkIGNoYXIgKm5vbmNlOwotKwlzaXplX3Qgbm9uY2VsZW47Ci0rCX0gVEVTVF9FTlQ7Ci0rCi0r c3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIg Kipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNp emVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwlURVNUX0VOVCAqdCA9IEZJUFNf ZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5l bnQ7Ci0rCXJldHVybiB0LT5lbnRsZW47Ci0rCX0KLSsKLStzdGF0aWMgc2l6ZV90IHRlc3Rfbm9u Y2UoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4 X2xlbikKLSsJewotKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7 Ci0rCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5ub25jZTsKLSsJcmV0dXJuIHQtPm5vbmNl bGVuOwotKwl9Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMKLStpbnQgZmlwc19kcmJndnNfbWFpbihp bnQgYXJnYyxjaGFyICoqYXJndikKLSsjZWxzZQotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiph cmd2KQotKyNlbmRpZgotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCURS QkdfQ1RYICpkY3R4ID0gTlVMTDsKLSsJVEVTVF9FTlQgdDsKLSsJaW50IHIsIG5pZCA9IDA7Ci0r CWludCBwciA9IDA7Ci0rCWNoYXIgYnVmWzIwNDhdLCBsYnVmWzIwNDhdOwotKwl1bnNpZ25lZCBj aGFyIHJhbmRvdXRbMjA0OF07Ci0rCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxM OwotKwotKwl1bnNpZ25lZCBjaGFyICplbnQgPSBOVUxMLCAqbm9uY2UgPSBOVUxMLCAqcGVycyA9 IE5VTEwsICphZGluID0gTlVMTDsKLSsJbG9uZyBlbnRsZW4sIG5vbmNlbGVuLCBwZXJzbGVuLCBh ZGlubGVuOwotKwlpbnQgZGYgPSAwOwotKwotKwllbnVtIGR0eXBlIHsgRFJCR19OT05FLCBEUkJH X0NUUiwgRFJCR19IQVNILCBEUkJHX0hNQUMsIERSQkdfRFVBTF9FQyB9Ci0rCQlkcmJnX3R5cGUg PSBEUkJHX05PTkU7Ci0rCi0rCWludCByYW5kb3V0bGVuID0gMDsKLSsKLSsJaW50IGdlbiA9IDA7 Ci0rCi0rCWZpcHNfYWxndGVzdF9pbml0KCk7Ci0rCi0rCWlmIChhcmdjID09IDMpCi0rCQl7Ci0r CQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCQlpZiAoIWluKQotKwkJCXsKLSsJCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7Ci0rCQkJZXhpdCgxKTsK LSsJCQl9Ci0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwkJaWYgKCFvdXQpCi0rCQkJ ewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7Ci0r CQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UgaWYgKGFyZ2MgPT0gMSkKLSsJCXsKLSsJ CWluID0gc3RkaW47Ci0rCQlvdXQgPSBzdGRvdXQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCIlcyAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOwotKwkJZXhpdCgx KTsKLSsJCX0KLSsKLSsJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGluKSAhPSBOVUxM KQotKwkJewotKwkJZnB1dHMoYnVmLCBvdXQpOwotKwkJaWYgKGRyYmdfdHlwZSA9PSBEUkJHX05P TkUpCi0rCQkJewotKwkJCWlmIChzdHJzdHIoYnVmLCAiQ1RSX0RSQkciKSkKLSsJCQkJZHJiZ190 eXBlID0gRFJCR19DVFI7Ci0rCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhhc2hfRFJCRyIpKQot KwkJCQlkcmJnX3R5cGUgPSBEUkJHX0hBU0g7Ci0rCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhN QUNfRFJCRyIpKQotKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0hNQUM7Ci0rCQkJZWxzZSBpZiAoc3Ry c3RyKGJ1ZiwgIkR1YWxfRUNfRFJCRyIpKQotKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0RVQUxfRUM7 Ci0rCQkJZWxzZQotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoc3RybGVuKGJ1ZikgPiA0 ICYmICFzdHJuY21wKGJ1ZiwgIltTSEEtIiwgNSkpCi0rCQkJewotKwkJCW5pZCA9IGRwYXJzZV9t ZChidWYpOwotKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQotKwkJCQlleGl0KDEpOwotKwkJCWlm IChkcmJnX3R5cGUgPT0gRFJCR19ITUFDKQotKwkJCQl7Ci0rCQkJCXN3aXRjaCAobmlkKQotKwkJ CQkJewotKwkJCQkJY2FzZSBOSURfc2hhMToKLSsJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTE7 Ci0rCQkJCQlicmVhazsKLSsKLSsJCQkJCWNhc2UgTklEX3NoYTIyNDoKLSsJCQkJCW5pZCA9IE5J RF9obWFjV2l0aFNIQTIyNDsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhMjU2 OgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMjU2OwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJ CQljYXNlIE5JRF9zaGEzODQ6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEzODQ7Ci0rCQkJ CQlicmVhazsKLSsKLSsJCQkJCWNhc2UgTklEX3NoYTUxMjoKLSsJCQkJCW5pZCA9IE5JRF9obWFj V2l0aFNIQTUxMjsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJZGVmYXVsdDoKLSsJCQkJCWV4aXQo MSk7Ci0rCQkJCQl9Ci0rCQkJCX0KLSsJCQl9Ci0rCQlpZiAoc3RybGVuKGJ1ZikgPiAxMiAmJiAh c3RybmNtcChidWYsICJbQUVTLSIsIDUpKQotKwkJCXsKLSsJCQluaWQgPSBwYXJzZV9hZXMoYnVm LCAmZGYpOwotKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQotKwkJCQlleGl0KDEpOwotKwkJCX0K LSsJCWlmIChzdHJsZW4oYnVmKSA+IDEyICYmICFzdHJuY21wKGJ1ZiwgIltQLSIsIDMpKQotKwkJ CXsKLSsJCQluaWQgPSBwYXJzZV9lYyhidWYpOwotKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQot KwkJCQlleGl0KDEpOwotKwkJCX0KLSsJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwg IltQcmVkaWN0aW9uUmVzaXN0YW5jZSIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1ZSwg IlRydWVdIikpCi0rCQkJCXByID0gMTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiRmFs c2VdIikpCi0rCQkJCXByID0gMDsKLSsJCQllbHNlCi0rCQkJCWV4aXQoMSk7Ci0rCQkJfQotKwot KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dCIpKQotKwkJCXsKLSsJCQllbnQg PSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOwotKwkJCXQuZW50ID0gZW50OwotKwkJCXQuZW50 bGVuID0gZW50bGVuOwotKwkJCX0KLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJOb25jZSIp KQotKwkJCXsKLSsJCQlub25jZSA9IGhleDJiaW5fbSh2YWx1ZSwgJm5vbmNlbGVuKTsKLSsJCQl0 Lm5vbmNlID0gbm9uY2U7Ci0rCQkJdC5ub25jZWxlbiA9IG5vbmNlbGVuOwotKwkJCX0KLSsKLSsJ CWlmICghc3RyY21wKGtleXdvcmQsICJQZXJzb25hbGl6YXRpb25TdHJpbmciKSkKLSsJCQl7Ci0r CQkJcGVycyA9IGhleDJiaW5fbSh2YWx1ZSwgJnBlcnNsZW4pOwotKwkJCWlmIChuaWQgPT0gMCkK LSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkRSQkcgdHlwZSBub3QgcmVjb2duaXNlZCFc biIpOwotKwkJCQlleGl0ICgxKTsKLSsJCQkJfQotKwkJCWRjdHggPSBGSVBTX2RyYmdfbmV3KG5p ZCwgZGYgfCBEUkJHX0ZMQUdfVEVTVCk7Ci0rCQkJaWYgKCFkY3R4KQotKwkJCQlleGl0ICgxKTsK LSsJCQlGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsCi0r CQkJCQkJCXRlc3Rfbm9uY2UsIDApOwotKwkJCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwg JnQpOwotKwkJCXJhbmRvdXRsZW4gPSAoaW50KUZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoZGN0 eCk7Ci0rCQkJciA9IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCBwZXJzLCBwZXJzbGVuKTsK LSsJCQlpZiAoIXIpCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbnN0YW50 aWF0aW5nIERSQkdcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJT1BFTlNTTF9mcmVl KHBlcnMpOwotKwkJCU9QRU5TU0xfZnJlZShlbnQpOwotKwkJCU9QRU5TU0xfZnJlZShub25jZSk7 Ci0rCQkJZW50ID0gbm9uY2UgPSBwZXJzID0gTlVMTDsKLSsJCQlnZW4gPSAwOwotKwkJCX0KLSsK LSsJCWlmICghc3RyY21wKGtleXdvcmQsICJBZGRpdGlvbmFsSW5wdXQiKSkKLSsJCQl7Ci0rCQkJ YWRpbiA9IGhleDJiaW5fbSh2YWx1ZSwgJmFkaW5sZW4pOwotKwkJCWlmIChwcikKLSsJCQkJY29u dGludWU7Ci0rCQkJciA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCByYW5kb3V0 bGVuLCAwLAotKwkJCQkJCQkJYWRpbiwgYWRpbmxlbik7Ci0rCQkJaWYgKCFyKQotKwkJCQl7Ci0r CQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOwotKwkJ CQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJaWYgKCFyKQotKwkJCQlleGl0KDEpOwotKwkJCU9QRU5T U0xfZnJlZShhZGluKTsKLSsJCQlhZGluID0gTlVMTDsKLSsJCQlnZW4rKzsKLSsJCQl9Ci0rCi0r CQlpZiAocHIpCi0rCQkJewotKwkJCWlmICghc3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXRQ UiIpKQotKwkJCQl7Ci0rCQkJCWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7Ci0rCQkJ CXQuZW50ID0gZW50OwotKwkJCQl0LmVudGxlbiA9IGVudGxlbjsKLSsJCQkJciA9IEZJUFNfZHJi Z19nZW5lcmF0ZShkY3R4LAotKwkJCQkJCQlyYW5kb3V0LCByYW5kb3V0bGVuLAotKwkJCQkJCQkx LCBhZGluLCBhZGlubGVuKTsKLSsJCQkJaWYgKCFyKQotKwkJCQkJewotKwkJCQkJZnByaW50Zihz dGRlcnIsCi0rCQkJCQkJIkVycm9yIGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKLSsJCQkJCWV4 aXQoMSk7Ci0rCQkJCQl9Ci0rCQkJCU9QRU5TU0xfZnJlZShhZGluKTsKLSsJCQkJT1BFTlNTTF9m cmVlKGVudCk7Ci0rCQkJCWFkaW4gPSBlbnQgPSBOVUxMOwotKwkJCQlnZW4rKzsKLSsJCQkJfQot KwkJCX0KLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXRSZXNlZWQiKSkKLSsJ CQl7Ci0rCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKLSsJCQl0LmVudCA9IGVu dDsKLSsJCQl0LmVudGxlbiA9IGVudGxlbjsKLSsJCQl9Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3Jk LCAiQWRkaXRpb25hbElucHV0UmVzZWVkIikpCi0rCQkJewotKwkJCWFkaW4gPSBoZXgyYmluX20o dmFsdWUsICZhZGlubGVuKTsKLSsJCQlGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5s ZW4pOwotKwkJCU9QRU5TU0xfZnJlZShlbnQpOwotKwkJCU9QRU5TU0xfZnJlZShhZGluKTsKLSsJ CQllbnQgPSBhZGluID0gTlVMTDsKLSsJCQl9Ci0rCQlpZiAoZ2VuID09IDIpCi0rCQkJewotKwkJ CU91dHB1dFZhbHVlKCJSZXR1cm5lZEJpdHMiLCByYW5kb3V0LCByYW5kb3V0bGVuLAotKwkJCQkJ CQkJCW91dCwgMCk7Ci0rCQkJRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rCQkJZGN0eCA9IE5VTEw7 Ci0rCQkJZ2VuID0gMDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCWlmIChpbiAmJiBpbiAhPSBzdGRpbikK LSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKLSsJCWZjbG9zZShv dXQpOwotKwlyZXR1cm4gMDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBz L2NhdnMvZmlwc19kc3N2cy5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzYzNTIyMzggKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDEy LTA3LTEyIDIxOjQ5OjI1LjMzNjM1MjIzOCArMDIwMAotQEAgLTAsMCArMSw1MzcgQEAKLSsjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0r I2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQot K3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDAp OwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcu aD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStz dGF0aWMgdm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKLSsJewotKwlpbnQg bGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0rCWxlbiA9IEJOX251bV9ieXRlcyhibik7 Ci0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQotKwkJewotKwkJZnBy aW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1cm47Ci0r CQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJcHJpbnRmKCIlcyA9ICIsIG5hbWUpOwotKwlm b3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlwcmludGYoIiUwMlgiLCB0bXBbaV0pOwotKwlm cHV0cygiXG4iLCBzdGRvdXQpOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuOwotKwl9 Ci0rCi0rdm9pZCBwcmltZXMoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjQwXTsKLSsgICAg Y2hhciBsYnVmWzEwMjQwXTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwotKyAgICB3 aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhi dWYsc3Rkb3V0KTsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1 ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJQcmltZSIpKQotKwkgICAg ewotKwkgICAgQklHTlVNICpwcDsKLSsKLSsJICAgIHBwPUJOX25ldygpOwotKwkgICAgZG9faGV4 MmJuKCZwcCx2YWx1ZSk7Ci0rCSAgICBwcmludGYoInJlc3VsdD0gJWNcbiIsCi0rCQkgICBCTl9p c19wcmltZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1AnIDogJ0YnKTsKLSsJICAgIH0JICAgIAot Kwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZygpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07 Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAg ICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1Ziwg YnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0r CWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsKLSsJICAgIGludCBuPWF0b2ko dmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCi0rCSAg ICB3aGlsZShuLS0pCi0rCQl7Ci0rCQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBdOwotKwkJRFNBICpk c2E7Ci0rCQlpbnQgY291bnRlcjsKLSsJCXVuc2lnbmVkIGxvbmcgaDsKLSsJCWRzYSA9IEZJUFNf ZHNhX25ldygpOwotKwotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5t b2Qsc2VlZCwwLCZjb3VudGVyLCZoLE5VTEwpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMo KTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCXBibigiUCIsZHNhLT5wKTsKLSsJCXBibigiUSIs ZHNhLT5xKTsKLSsJCXBibigiRyIsZHNhLT5nKTsKLSsJCXB2KCJTZWVkIixzZWVkLDIwKTsKLSsJ CXByaW50ZigiYyA9ICVkXG4iLGNvdW50ZXIpOwotKwkJcHJpbnRmKCJIID0gJWx4XG4iLGgpOwot KwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIGZwdXRz KGJ1ZixzdGRvdXQpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZ3ZlcigpCi0rICAgIHsKLSsg ICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVM TDsKLSsgICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOwotKyAgICB1bnNpZ25lZCBsb25nIGgsIGgy OwotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICB1bnNpZ25lZCBj aGFyIHNlZWRbMTAyNF07Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGlu KSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0K LSsJZnB1dHMoYnVmLCBzdGRvdXQpOwotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJ ICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0r CSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0r CSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0r CSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTZWVkIikp Ci0rCSAgICB7Ci0rCSAgICBpbnQgc2xlbiA9IGhleDJiaW4odmFsdWUsIHNlZWQpOwotKwkgICAg aWYgKHNsZW4gIT0gMjApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVu Z3RoIGVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiYyIpKQotKwkgICAgY291bnRlciA9YXRvaShidWYrNCk7Ci0rCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJIIikpCi0rCSAgICB7Ci0rCSAgICBoID0gYXRvaSh2YWx1ZSk7 Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlBh cnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgZHNhID0gRklQU19kc2Ff bmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxz ZWVkLDIwICwmY291bnRlcjIsJmgyLE5VTEwpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMo KTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsgICAgICAgICAgICBpZiAoQk5fY21wKGRzYS0+cCwg cCkgfHwgQk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21wKGRzYS0+ZywgZykKLSsJCXx8IChjb3Vu dGVyICE9IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBG XG4iKTsKLSsJICAgIGVsc2UKLSsJICAgIAlwcmludGYoIlJlc3VsdCA9IFBcbiIpOwotKwkgICAg Qk5fZnJlZShwKTsKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCSAgICBCTl9mcmVlKGcpOwotKwkgICAg cCA9IE5VTEw7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAgIGcgPSBOVUxMOwotKwkgICAgRklQU19k c2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0r Ci0rLyogS2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGluZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBv ZiB0aGUgc3RhbmRhcmQgRklQUzE0MC0yCi0rICogYWxnb3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBh ZGRpdGlvbmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRoZQotKyAqIG91dHB1 dCBvZiB0aGUgS2V5UGFpciB0ZXN0LgotKyAqLwotKwotK3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hl Y2soaW50IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpxLCBCSUdOVU0gKmcsCi0rCQkJCQkJCUJO X0NUWCAqY3R4KQotKyAgICB7Ci0rICAgIEJJR05VTSAqcmVtID0gTlVMTDsKLSsgICAgaWYgKEJO X251bV9iaXRzKHApICE9IG5tb2QpCi0rCXJldHVybiAwOwotKyAgICBpZiAoQk5fbnVtX2JpdHMo cSkgIT0gMTYwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHAsIEJOX3By aW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lz X3ByaW1lX2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4g MDsKLSsgICAgcmVtID0gQk5fbmV3KCk7Ci0rICAgIGlmICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4 KSB8fCAhQk5faXNfb25lKHJlbSkKLSsgICAgCXx8IChCTl9jbXAoZywgQk5fdmFsdWVfb25lKCkp IDw9IDApCi0rCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8fCAhQk5faXNfb25l KHJlbSkpCi0rCXsKLSsJQk5fZnJlZShyZW0pOwotKwlyZXR1cm4gMDsKLSsJfQotKyAgICAvKiBU b2RvOiBjaGVjayBnICovCi0rICAgIEJOX2ZyZWUocmVtKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAg IH0KLSsKLSt2b2lkIGtleXZlcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAg IGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBCSUdO VU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7 Ci0rICAgIEJJR05VTSAqWTI7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgaW50IG5t b2Q9MCwgcGFyYW1jaGVjayA9IDA7Ci0rCi0rICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAg WTIgPSBCTl9uZXcoKTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4p ICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYs IGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQot KwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJICAgIGlmIChwKQotKwkJ Qk5fZnJlZShwKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgaWYgKHEpCi0rCQlCTl9mcmVlKHEp OwotKwkgICAgcSA9IE5VTEw7Ci0rCSAgICBpZiAoZykKLSsJCUJOX2ZyZWUoZyk7Ci0rCSAgICBn ID0gTlVMTDsKLSsJICAgIHBhcmFtY2hlY2sgPSAwOwotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsK LSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAgIHA9aGV4MmJu KHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKLSsJICAgIHE9aGV4MmJu KHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJICAgIGc9aGV4MmJu KHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlgiKSkKLSsJICAgIFg9aGV4MmJu KHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKLSsJICAgIHsKLSsJICAg IFk9aGV4MmJuKHZhbHVlKTsKLSsJICAgIGlmICghcCB8fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7 Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLHApOwotKwkgICAgcGJuKCJRIixxKTsKLSsJICAgIHBibigi RyIsZyk7Ci0rCSAgICBwYm4oIlgiLFgpOwotKwkgICAgcGJuKCJZIixZKTsKLSsJICAgIGlmICgh cGFyYW1jaGVjaykKLSsJCXsKLSsJCWlmIChkc3NfcGFyYW1jaGVjayhubW9kLCBwLCBxLCBnLCBj dHgpKQotKwkJCXBhcmFtY2hlY2sgPSAxOwotKwkJZWxzZQotKwkJCXBhcmFtY2hlY2sgPSAtMTsK LSsJCX0KLSsJICAgIGlmIChwYXJhbWNoZWNrICE9IDEpCi0rCSAgIAlwcmludGYoIlJlc3VsdCA9 IEZcbiIpOwotKwkgICAgZWxzZQotKwkJewotKwkJaWYgKCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBw LCBjdHgpIHx8IEJOX2NtcChZMiwgWSkpCi0rCSAgICAJCXByaW50ZigiUmVzdWx0ID0gRlxuIik7 Ci0rCSAgICAgICAgZWxzZQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IFBcbiIpOwotKwkJfQot KwkgICAgQk5fZnJlZShYKTsKLSsJICAgIEJOX2ZyZWUoWSk7Ci0rCSAgICBYID0gTlVMTDsKLSsJ ICAgIFkgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rCWlmIChwKQotKwkgICAgQk5fZnJlZShwKTsK LSsJaWYgKHEpCi0rCSAgICBCTl9mcmVlKHEpOwotKwlpZiAoZykKLSsJICAgIEJOX2ZyZWUoZyk7 Ci0rCWlmIChZMikKLSsJICAgIEJOX2ZyZWUoWTIpOwotKyAgICB9Ci0rCi0rdm9pZCBrZXlwYWly KCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwot KyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rCi0rICAgIHdo aWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVm LHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9k IikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi TiIpKQotKwkgICAgewotKwkgICAgRFNBICpkc2E7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsK LSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgZHNhID0gRklQ U19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwg bm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJR Iixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91 dCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXko ZHNhKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9 Ci0rCi0rCQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOwotKwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkp OwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwot K3ZvaWQgc2lnZ2VuKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBs YnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7 Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsK LSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9k PWF0b2kodmFsdWUpOwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAg ICBpZiAoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gRklQU19kc2Ff bmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxO VUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQll eGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2Et PnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0r CSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAg IHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOwotKwkgICAgdW5zaWduZWQgY2hhciBzYnVmWzYwXTsK LSsJICAgIHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAgaW50IG47Ci0rCSAgICBFVlBfUEtFWSBw azsKLSsJICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAgIERTQV9TSUcgKnNpZzsKLSsJICAgIEVW UF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKLSsJ ICAgIHB2KCJNc2ciLG1zZyxuKTsKLSsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2Ep KQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAg cGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwkgICAg cGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwotKwkgICAgRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBF VlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4LCBtc2csIG4pOwot KwkgICAgRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7Ci0rCi0rCSAgICBz aWcgPSBEU0FfU0lHX25ldygpOwotKwkgICAgRklQU19kc2Ffc2lnX2RlY29kZShzaWcsIHNidWYs IHNsZW4pOwotKwotKwkgICAgcGJuKCJSIixzaWctPnIpOwotKwkgICAgcGJuKCJTIixzaWctPnMp OwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICBEU0FfU0lHX2ZyZWUoc2lnKTsKLSsJ ICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCSAgICB9Ci0rCX0KLSsJaWYgKGRzYSkK LSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsgICAgfQotKwotK3ZvaWQgc2lndmVyKCkKLSsgICAg ewotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBs YnVmWzEwMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKLSsgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wLCBuPTA7Ci0rICAgIERTQV9TSUcgc2csICpz aWcgPSAmc2c7Ci0rCi0rICAgIHNpZy0+ciA9IE5VTEw7Ci0rICAgIHNpZy0+cyA9IE5VTEw7Ci0r Ci0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0r CWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJ ZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3 b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkgICAgaWYo ZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhPUZJUFNfZHNhX25ldygpOwot KwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgZHNhLT5wPWhl eDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBkc2Et PnE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJICAg IHsKLSsJICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0g JWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAgICBwYm4oIlEiLGRz YS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsK LSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQotKwkgICAgewotKwkg ICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNnIixtc2csbik7Ci0rCSAgICB9 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICBkc2EtPnB1Yl9rZXk9aGV4 MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlIiKSkKLSsJICAgIHNpZy0+ cj1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUyIpKQotKwkgICAg ewotKwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICB1bnNp Z25lZCBjaGFyIHNpZ2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsJICAgIGlu dCByOwotKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsJICAgIHBrLnR5cGUgPSBFVlBf UEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHNpZy0+cz1oZXgyYm4o dmFsdWUpOwotKwkKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJICAgIHBibigiUiIs c2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsKLSsJICAgIHNsZW4gPSBGSVBTX2Rz YV9zaWdfZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKLSsJICAgIEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4 LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywg bik7Ci0rCSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWdidWYsIHNsZW4sICZwayk7 Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwkKLSsJICAgIHByaW50ZigiUmVz dWx0ID0gJWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0 KTsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFy Z3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIl cyBbcHJpbWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOwot KwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3By aW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFzdHJjbXAoYXJndlsxXSwi cHJpbWUiKSkKLSsJcHJpbWVzKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWci KSkKLSsJcHFnKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWd2ZXIiKSkKLSsJ cHFndmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXlwYWlyIikpCi0rCWtl eXBhaXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXZlciIpKQotKwlrZXl2 ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIpKQotKwlzaWdnZW4o KTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQotKwlzaWd2ZXIoKTsK LSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5c biIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0K LSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlw c19nY210ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2Nt dGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3Qu Yy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzM2MzUyMjM4ICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjMzNjM1MjIzOCArMDIwMAotQEAgLTAsMCArMSw1NzEgQEAKLSsvKiBmaXBzL2Flcy9maXBzX2dj bXRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy 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 PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkK LSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIEdDTSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0 dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxz dHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIK LSsKLStzdGF0aWMgdm9pZCBnY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQsIGludCBlbmNyeXB0 KQotKwl7Ci0rCWNoYXIgYnVmWzIwNDhdOwotKwljaGFyIGxidWZbMjA0OF07Ci0rCWNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKLSsJaW50IGtleWxlbiA9IC0xLCBpdmxlbiA9IC0xLCBhYWRsZW4gPSAt MSwgdGFnbGVuID0gLTEsIHB0bGVuID0gLTE7Ci0rCWludCBydjsKLSsJbG9uZyBsOwotKwl1bnNp Z25lZCBjaGFyICprZXkgPSBOVUxMLCAqaXYgPSBOVUxMLCAqYWFkID0gTlVMTCwgKnRhZyA9IE5V TEw7Ci0rCXVuc2lnbmVkIGNoYXIgKmN0ID0gTlVMTCwgKnB0ID0gTlVMTDsKLSsJRVZQX0NJUEhF Ul9DVFggY3R4OwotKwljb25zdCBFVlBfQ0lQSEVSICpnY20gPSBOVUxMOwotKwlGSVBTX2NpcGhl cl9jdHhfaW5pdCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9 IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsb3V0KTsKLSsJCWlmICghcGFyc2VfbGluZSgma2V5 d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwkJaWYoIXN0cmNtcChr ZXl3b3JkLCJbS2V5bGVuIikpCi0rCQkJewotKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOwotKwkJ CWlmIChrZXlsZW4gPT0gMTI4KQotKwkJCQlnY20gPSBFVlBfYWVzXzEyOF9nY20oKTsKLSsJCQll bHNlIGlmIChrZXlsZW4gPT0gMTkyKQotKwkJCQlnY20gPSBFVlBfYWVzXzE5Ml9nY20oKTsKLSsJ CQllbHNlIGlmIChrZXlsZW4gPT0gMjU2KQotKwkJCQlnY20gPSBFVlBfYWVzXzI1Nl9nY20oKTsK LSsJCQllbHNlIAotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQga2V5 bGVuICVkXG4iLAotKwkJCQkJCQlrZXlsZW4pOwotKwkJCQl9Ci0rCQkJa2V5bGVuID4+PSAzOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltJVmxlbiIpKQotKwkJCWl2bGVu ID0gYXRvaSh2YWx1ZSkgPj4gMzsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltBQURs ZW4iKSkKLSsJCQlhYWRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiW1RhZ2xlbiIpKQotKwkJCXRhZ2xlbiA9IGF0b2kodmFsdWUpID4+IDM7Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbUFRsZW4iKSkKLSsJCQlwdGxlbiA9IGF0b2ko dmFsdWUpID4+IDM7Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCQkJewot KwkJCWtleSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IGtleWxlbikKLSsJ CQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsK LSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJJViIpKQotKwkJCXsKLSsJCQlpdiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChs ICE9IGl2bGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IElW IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiUFQiKSkKLSsJCQl7Ci0rCQkJcHQgPSBoZXgyYmluX20odmFsdWUsICZs KTsKLSsJCQlpZiAobCAhPSBwdGxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklu Y29uc2lzdGVudCBQVCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQot KwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkNUIikpCi0rCQkJewotKwkJCWN0ID0gaGV4MmJp bl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gcHRsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50 ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJ CQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJBQUQiKSkKLSsJCQl7Ci0r CQkJYWFkID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gYWFkbGVuKQotKwkJ CQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEFBRCBsZW5ndGhcbiIpOwot KwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlRhZyIpKQotKwkJCXsKLSsJCQl0YWcgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAo bCAhPSB0YWdsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQg VGFnIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQlpZiAoZW5j cnlwdCAmJiBwdCAmJiBhYWQgJiYgKGl2IHx8IGVuY3J5cHQ9PTEpKQotKwkJCXsKLSsJCQl0YWcg PSBPUEVOU1NMX21hbGxvYyh0YWdsZW4pOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20s IE5VTEwsIE5VTEwsIDEpOwotKwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3Rp bmcgKi8KLSsJCQlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFH X05PTl9GSVBTX0FMTE9XKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RS TF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwgMCk7Ci0rCQkJaWYgKGVuY3J5cHQgPT0gMSkKLSsJCQkJ ewotKwkJCQlzdGF0aWMgdW5zaWduZWQgY2hhciBpdl9maXhlZFs0XSA9IHsxLDIsMyw0fTsKLSsJ CQkJaWYgKCFpdikKLSsJCQkJCWl2ID0gT1BFTlNTTF9tYWxsb2MoaXZsZW4pOwotKwkJCQlGSVBT X2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBOVUxMLCAxKTsKLSsJCQkJRklQU19jaXBoZXJf Y3R4X2N0cmwoJmN0eCwKLSsJCQkJCQlFVlBfQ1RSTF9HQ01fU0VUX0lWX0ZJWEVELAotKwkJCQkJ CTQsIGl2X2ZpeGVkKTsKLSsJCQkJaWYgKCFGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LAotKwkJ CQkJRVZQX0NUUkxfR0NNX0lWX0dFTiwgMCwgaXYpKQotKwkJCQkJewotKwkJCQkJZnByaW50Zihz dGRlcnIsICJJViBnZW4gZXJyb3JcbiIpOwotKwkJCQkJZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJ T3V0cHV0VmFsdWUoIklWIiwgaXYsIGl2bGVuLCBvdXQsIDApOwotKwkJCQl9Ci0rCQkJZWxzZQot KwkJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMSk7Ci0rCi0rCi0rCQkJ aWYgKGFhZGxlbikKLSsJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOwot KwkJCWlmIChwdGxlbikKLSsJCQkJewotKwkJCQljdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsK LSsJCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBjdCwgcHQsIHB0bGVuKTsKLSsJCQkJfQotKwkJ CUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9j dHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLAotKwkJCQkJCQkJdGFnbGVuLCB0YWcpOwkK LSsJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBjdCwgcHRsZW4sIG91dCwgMCk7Ci0rCQkJT3V0cHV0VmFs dWUoIlRhZyIsIHRhZywgdGFnbGVuLCBvdXQsIDApOwotKwkJCWlmIChpdikKLSsJCQkJT1BFTlNT TF9mcmVlKGl2KTsKLSsJCQlpZiAoYWFkKQotKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKLSsJCQlp ZiAoY3QpCi0rCQkJCU9QRU5TU0xfZnJlZShjdCk7Ci0rCQkJaWYgKHB0KQotKwkJCQlPUEVOU1NM X2ZyZWUocHQpOwotKwkJCWlmIChrZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShrZXkpOwotKwkJCWlm ICh0YWcpCi0rCQkJCU9QRU5TU0xfZnJlZSh0YWcpOwotKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9 IGtleSA9IHRhZyA9IE5VTEw7Ci0rCQkJfQkKLSsJCWlmICghZW5jcnlwdCAmJiB0YWcpCi0rCQkJ ewotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDApOwotKwkJCS8q IFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KLSsJCQlNX0VWUF9DSVBIRVJf Q1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSsJCQlG SVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwg MCk7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDApOwotKwkJCUZJ UFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCB0YWdsZW4sIHRh Zyk7Ci0rCQkJaWYgKGFhZGxlbikKLSsJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBh YWRsZW4pOwotKwkJCWlmIChwdGxlbikKLSsJCQkJewotKwkJCQlwdCA9IE9QRU5TU0xfbWFsbG9j KHB0bGVuKTsKLSsJCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBwdCwgY3QsIHB0bGVuKTsKLSsJ CQkJfQotKwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7Ci0rCQkJaWYg KHJ2IDwgMCkKLSsJCQkJZnByaW50ZihvdXQsICJGQUlMIiBSRVNQX0VPTCk7Ci0rCQkJZWxzZQot KwkJCQlPdXRwdXRWYWx1ZSgiUFQiLCBwdCwgcHRsZW4sIG91dCwgMCk7Ci0rCQkJaWYgKGl2KQot KwkJCQlPUEVOU1NMX2ZyZWUoaXYpOwotKwkJCWlmIChhYWQpCi0rCQkJCU9QRU5TU0xfZnJlZShh YWQpOwotKwkJCWlmIChjdCkKLSsJCQkJT1BFTlNTTF9mcmVlKGN0KTsKLSsJCQlpZiAocHQpCi0r CQkJCU9QRU5TU0xfZnJlZShwdCk7Ci0rCQkJaWYgKGtleSkKLSsJCQkJT1BFTlNTTF9mcmVlKGtl eSk7Ci0rCQkJaWYgKHRhZykKLSsJCQkJT1BFTlNTTF9mcmVlKHRhZyk7Ci0rCQkJaXYgPSBhYWQg PSBjdCA9IHB0ID0ga2V5ID0gdGFnID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCUZJUFNfY2lwaGVy X2N0eF9jbGVhbnVwKCZjdHgpOwkKLSsJfQotKwotK3N0YXRpYyB2b2lkIHh0c3Rlc3QoRklMRSAq aW4sIEZJTEUgKm91dCkKLSsJewotKwljaGFyIGJ1ZlsyMDQ4MDBdOwotKwljaGFyIGxidWZbMjA0 ODAwXTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlpbnQgaW5sZW4gPSAwOwotKwlpbnQg ZW5jcnlwdCA9IDA7Ci0rCWxvbmcgbDsKLSsJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2 ID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsK LSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwljb25zdCBFVlBfQ0lQSEVSICp4dHMgPSBOVUxMOwot KwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNpemVv ZiBidWYsaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsb3V0KTsKLSsJCWlmIChidWZb MF0gPT0gJ1snICYmIHN0cmxlbihidWYpID49IDkpCi0rCQkJewotKwkJCWlmKCFzdHJuY21wKGJ1 ZiwiW0VOQ1JZUFRdIiwgOSkpCi0rCQkJCWVuY3J5cHQgPSAxOwotKwkJCWVsc2UgaWYoIXN0cm5j bXAoYnVmLCJbREVDUllQVF0iLCA5KSkKLSsJCQkJZW5jcnlwdCA9IDA7Ci0rCQkJfQotKwkJaWYg ICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVl OwotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkJCXsKLSsJCQlrZXkgPSBo ZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCA9PSAzMikKLSsJCQkJeHRzID0gRVZQX2Fl c18xMjhfeHRzKCk7Ci0rCQkJZWxzZSBpZiAobCA9PSA2NCkKLSsJCQkJeHRzID0gRVZQX2Flc18y NTZfeHRzKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25z aXN0ZW50IEtleSBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsImkiKSkKLSsJCQl7Ci0rCQkJaXYgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSAxNikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIkluY29uc2lzdGVudCBpIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJ CQl9Ci0rCQllbHNlIGlmKGVuY3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJQVCIpKQotKwkJCXsK LSsJCQlpbmJ1ZiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlubGVuID0gbDsKLSsJCQl9 Ci0rCQllbHNlIGlmKCFlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKLSsJCQl7Ci0r CQkJaW5idWYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpbmxlbiA9IGw7Ci0rCQkJfQot KwkJaWYgKGluYnVmKQotKwkJCXsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgeHRzLCBrZXks IGl2LCBlbmNyeXB0KTsKLSsJCQlvdXRidWYgPSBPUEVOU1NMX21hbGxvYyhpbmxlbik7Ci0rCQkJ RklQU19jaXBoZXIoJmN0eCwgb3V0YnVmLCBpbmJ1ZiwgaW5sZW4pOwotKwkJCU91dHB1dFZhbHVl KGVuY3J5cHQgPyAiQ1QiOiJQVCIsIG91dGJ1ZiwgaW5sZW4sIG91dCwgMCk7Ci0rCQkJT1BFTlNT TF9mcmVlKGluYnVmKTsKLSsJCQlPUEVOU1NMX2ZyZWUob3V0YnVmKTsKLSsJCQlPUEVOU1NMX2Zy ZWUoa2V5KTsKLSsJCQlPUEVOU1NMX2ZyZWUoaXYpOwotKwkJCWl2ID0ga2V5ID0gaW5idWYgPSBv dXRidWYgPSBOVUxMOwotKwkJCX0JCi0rCQl9Ci0rCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZj dHgpOwkKLSsJfQotKwotK3N0YXRpYyB2b2lkIGNjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkK LSsJewotKwljaGFyIGJ1ZlsyMDAwNDhdOwotKwljaGFyIGxidWZbMjAwMDQ4XTsKLSsJY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKwlsb25nIGw7Ci0rCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEws ICpOb25jZSA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKkFkYXRhID0gTlVMTCwgKlBheWxvYWQg PSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpDVCA9IE5VTEw7Ci0rCWludCBQbGVuID0gLTEsIE5s ZW4gPSAtMSwgVGxlbiA9IC0xLCBBbGVuID0gLTE7Ci0rCWludCBkZWNyID0gMDsKLSsJRVZQX0NJ UEhFUl9DVFggY3R4OwotKwljb25zdCBFVlBfQ0lQSEVSICpjY20gPSBOVUxMOwotKwlGSVBTX2Np cGhlcl9jdHhfaW5pdCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4p ICE9IE5VTEwpCi0rCQl7Ci0rCQljaGFyICpwOwotKwkJZnB1dHMoYnVmLG91dCk7Ci0rCQlyZWRv OgotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJ Y29udGludWU7Ci0rCi0rCQkvKiBJZiBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyB6YXAg dGhlbSAqLwotKwkJaWYgKGtleXdvcmRbMF0gPT0gJ1snKQotKwkJCXsKLSsJCQlrZXl3b3JkKys7 Ci0rCQkJcCA9IHN0cmNocih2YWx1ZSwgJ10nKTsKLSsJCQlpZiAocCkKLSsJCQkJKnAgPSAwOwot KwkJCX0KLSsJCS8qIFNlZSBpZiB3ZSBoYXZlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFy YW1ldGVycwotKwkJICogaWYgc28gY29weSByZXN0IG9mIGxpbmUgYmFjayB0byBidWZmZXIgYW5k IHJlZG8gbGF0ZXIuCi0rCQkgKi8KLSsJCXAgPSBzdHJjaHIodmFsdWUsICcsJyk7Ci0rCQlpZiAo cCkKLSsJCQl7Ci0rCQkJKnAgPSAwOwotKwkJCXN0cmNweShidWYsIHAgKyAxKTsKLSsJCQlzdHJj YXQoYnVmLCAiXG4iKTsKLSsJCQlkZWNyID0gMTsKLSsJCQl9Ci0rCQlpZiAoIXN0cmNtcChrZXl3 b3JkLCJQbGVuIikpCi0rCQkJUGxlbiA9IGF0b2kodmFsdWUpOwotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCJObGVuIikpCi0rCQkJTmxlbiA9IGF0b2kodmFsdWUpOwotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCJUbGVuIikpCi0rCQkJVGxlbiA9IGF0b2kodmFsdWUpOwotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJBbGVuIikpCi0rCQkJQWxlbiA9IGF0b2kodmFsdWUpOwot KwkJaWYgKHApCi0rCQkJZ290byByZWRvOwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiS2V5Iikp Ci0rCQkJewotKwkJCWlmIChLZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShLZXkpOwotKwkJCUtleSA9 IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsID09IDE2KQotKwkJCQljY20gPSBFVlBf YWVzXzEyOF9jY20oKTsKLSsJCQllbHNlIGlmIChsID09IDI0KQotKwkJCQljY20gPSBFVlBfYWVz XzE5Ml9jY20oKTsKLSsJCQllbHNlIGlmIChsID09IDMyKQotKwkJCQljY20gPSBFVlBfYWVzXzI1 Nl9jY20oKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNp c3RlbnQgS2V5IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsIk5vbmNlIikpCi0rCQkJewotKwkJCWlmIChOb25jZSkK LSsJCQkJT1BFTlNTTF9mcmVlKE5vbmNlKTsKLSsJCQlOb25jZSA9IGhleDJiaW5fbSh2YWx1ZSwg JmwpOwotKwkJCWlmIChsICE9IE5sZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJ bmNvbnNpc3RlbnQgbm9uY2UgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiUGF5bG9hZCIpICYmICFkZWNyKQotKwkJ CXsKLSsJCQlQYXlsb2FkID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKFBsZW4gJiYg bCAhPSBQbGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBh eWxvYWQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwiQWRhdGEiKSkKLSsJCQl7Ci0rCQkJaWYgKEFkYXRhKQotKwkJ CQlPUEVOU1NMX2ZyZWUoQWRhdGEpOwotKwkJCUFkYXRhID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7 Ci0rCQkJaWYgKEFsZW4gJiYgbCAhPSBBbGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJy LCAiSW5jb25zaXN0ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJ fQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQ1QiKSAmJiBkZWNyKQotKwkJ CXsKLSsJCQlDVCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IChQbGVuICsg VGxlbikpCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVu Z3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWlmIChQYXlsb2FkKQot KwkJCXsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAxKTsKLSsJ CQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVu LCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RB RywgVGxlbiwgMCk7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwgTm9uY2Us IDEpOwotKwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOwotKwkJCUZJ UFNfY2lwaGVyKCZjdHgsIE5VTEwsIEFkYXRhLCBBbGVuKTsKLSsJCQlDVCA9IE9QRU5TU0xfbWFs bG9jKFBsZW4gKyBUbGVuKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBDVCwgUGF5bG9hZCwgUGxl bik7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcs IFRsZW4sCi0rCQkJCQkJQ1QgKyBQbGVuKTsKLSsJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBDVCwgUGxl biArIFRsZW4sIG91dCwgMCk7Ci0rCQkJT1BFTlNTTF9mcmVlKENUKTsKLSsJCQlPUEVOU1NMX2Zy ZWUoUGF5bG9hZCk7Ci0rCQkJQ1QgPSBQYXlsb2FkID0gTlVMTDsKLSsJCQl9Ci0rCQlpZiAoQ1Qp Ci0rCQkJewotKwkJCWludCBydjsKLSsJCQlpbnQgbGVuID0gUGxlbiA9PSAwID8gMTogUGxlbjsK LSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAwKTsKLSsJCQlGSVBT X2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsK LSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKLSsJ CQkJCQlUbGVuLCBDVCArIFBsZW4pOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBL ZXksIE5vbmNlLCAwKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsK LSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7Ci0rCQkJUGF5bG9hZCA9 IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBQYXlsb2Fk LCBDVCwgUGxlbik7Ci0rCQkJaWYgKHJ2ID49IDApCi0rCQkJCXsKLSsJCQkJaWYgKHJ2ID09IDAp Ci0rCQkJCQlQYXlsb2FkWzBdID0gMDsKLSsJCQkJZnB1dHMoIlJlc3VsdCA9IFBhc3MiIFJFU1Bf RU9MLCBvdXQpOwotKwkJCQlPdXRwdXRWYWx1ZSgiUGF5bG9hZCIsIFBheWxvYWQsIGxlbiwgb3V0 LCAwKTsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJZnB1dHMoIlJlc3VsdCA9IEZhaWwiIFJFU1Bf RU9MLCBvdXQpOwotKwkJCU9QRU5TU0xfZnJlZShDVCk7Ci0rCQkJT1BFTlNTTF9mcmVlKFBheWxv YWQpOwotKwkJCUNUID0gUGF5bG9hZCA9IE5VTEw7Ci0rCQkJfQotKwkJfQotKwlpZiAoS2V5KQot KwkJT1BFTlNTTF9mcmVlKEtleSk7Ci0rCWlmIChOb25jZSkKLSsJCU9QRU5TU0xfZnJlZShOb25j ZSk7Ci0rCWlmIChBZGF0YSkKLSsJCU9QRU5TU0xfZnJlZShBZGF0YSk7Ci0rCUZJUFNfY2lwaGVy X2N0eF9jbGVhbnVwKCZjdHgpOwotKwl9Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMKLStpbnQgZmlw c19nY210ZXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbHNlCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbmRpZgotKwl7Ci0rCWludCBlbmNyeXB0OwotKwlp bnQgeHRzID0gMCwgY2NtID0gMDsKLSsJRklMRSAqaW4sICpvdXQ7Ci0rCWlmIChhcmdjID09IDQp Ci0rCQl7Ci0rCQlpbiA9IGZvcGVuKGFyZ3ZbMl0sICJyIik7Ci0rCQlpZiAoIWluKQotKwkJCXsK LSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7Ci0rCQkJ ZXhpdCgxKTsKLSsJCQl9Ci0rCQlvdXQgPSBmb3Blbihhcmd2WzNdLCAidyIpOwotKwkJaWYgKCFv dXQpCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmls ZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UgaWYgKGFyZ2MgPT0gMikK LSsJCXsKLSsJCWluID0gc3RkaW47Ci0rCQlvdXQgPSBzdGRvdXQ7Ci0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCIlcyBbLWVuY3J5cHR8LWRlY3J5cHRdXG4iLGFyZ3ZbMF0p OwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsJaWYoIXN0cmNt cChhcmd2WzFdLCItZW5jcnlwdCIpKQotKwkJZW5jcnlwdCA9IDE7Ci0rCWVsc2UgaWYoIXN0cmNt cChhcmd2WzFdLCItZW5jcnlwdElWZXh0IikpCi0rCQllbmNyeXB0ID0gMjsKLSsJZWxzZSBpZigh c3RyY21wKGFyZ3ZbMV0sIi1kZWNyeXB0IikpCi0rCQllbmNyeXB0ID0gMDsKLSsJZWxzZSBpZigh c3RyY21wKGFyZ3ZbMV0sIi1jY20iKSkKLSsJCWNjbSA9IDE7Ci0rCWVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCIteHRzIikpCi0rCQl4dHMgPSAxOwotKwllbHNlCi0rCQl7Ci0rCQlmcHJpbnRmKHN0 ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwkJZXhpdCgxKTsKLSsJ CX0KLSsKLSsJaWYgKGNjbSkKLSsJCWNjbXRlc3QoaW4sIG91dCk7Ci0rCWVsc2UgaWYgKHh0cykK LSsJCXh0c3Rlc3QoaW4sIG91dCk7Ci0rCWVsc2UKLSsJCWdjbXRlc3QoaW4sIG91dCwgZW5jcnlw dCk7Ci0rCi0rCWlmIChhcmdjID09IDQpCi0rCQl7Ci0rCQlmY2xvc2UoaW4pOwotKwkJZmNsb3Nl KG91dCk7Ci0rCQl9Ci0rCi0rCXJldHVybiAwOwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzM3 MzUyMjYxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3Ju Z3ZzLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzczNTIyNjEgKzAyMDAKLUBAIC0wLDAgKzEsMjMw IEBACi0rLyoKLSsgKiBDcnVkZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFu ZCBNQ1QgdGVzdHZlY3RvciBmaWxlcwotKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBw cm9kdWN0LgotKyAqCi0rICogTm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2 ZSBhIF92ZXJ5XyBzcGVjaWZpYyBmb3JtYXQKLSsgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1Qg ZG9jdW1lbnQgIlRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgotKyAqIFZhbGlkYXRpb24gU3lz dGVtIChSTkdWUykiLCBNYXkgMjUsIDIwMDQuCi0rICoKLSsgKi8KLSsjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJp bnRmKCJObyBGSVBTIFJORyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKyNlbHNl Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt2b2lkIHZz dCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsgICAgdW5zaWdu ZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKLSsgICAg dW5zaWduZWQgY2hhciByZXRbMTZdOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBs YnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxvbmcgaSwga2V5 bGVuOwotKwotKyAgICBrZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9m IGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0 cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2Ug aWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0r CWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0g MzI7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJ Y29udGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBr ZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBr ZXlsZW4pOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiRFQiKSkKLSsJICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAg ICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5n dGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiViIpKQotKwkgICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAg aWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhc biIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0r CQl9Ci0rCi0rCSAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBT X3g5MzFfc2VlZCh2LDE2KTsKLSsJICAgIEZJUFNfeDkzMV9zZXRfZHQoZHQpOwotKwkgICAgaWYg KEZJUFNfeDkzMV9ieXRlcyhyZXQsMTYpIDw9IDApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7Ci0rCSAgICAgICAgcmV0dXJuOwotKwkgICAg ICAgIH0KLSsKLSsJICAgIHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7 Ci0rCSAgICBrZXkgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0g TlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQot Kwl9Ci0rICAgIH0KLSsKLSt2b2lkIG1jdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciAq a2V5ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAgIHVuc2lnbmVk IGNoYXIgKmR0ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOwotKyAgICBjaGFy IGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAq dmFsdWU7Ci0rICAgIGxvbmcgaSwga2V5bGVuOwotKyAgICBpbnQgajsKLSsKLSsgICAga2V5bGVu ID0gMDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp Ci0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgt S2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDE2OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FF UyAxOTItS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDI0OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1 ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDMyOwotKwlpZiAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3Ry Y21wKGtleXdvcmQsIktleSIpKQotKwkgICAgewotKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwm aSk7Ci0rCSAgICBpZiAoaSAhPSBrZXlsZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIklu dmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJCXJldHVybjsK LSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCi0rCSAgICB7 Ci0rCSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsK LSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKLSsJICAgIHsK LSsJICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJ CX0KLSsKLSsJICAgIGlmICgha2V5IHx8ICFkdCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi TWlzc2luZyBrZXkgb3IgRFRcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgRklQU194 OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7Ci0r CSAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKLSsJCXsKLSsJCSAgICBGSVBTX3g5MzFf c2V0X2R0KGR0KTsKLSsJCSAgICBpZiAoRklQU194OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJ CQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOwot KwkJICAgICAgICByZXR1cm47Ci0rCQkgICAgICAgIH0KLSsJCSAgICAvKiBJbmNyZW1lbnQgRFQg Ki8KLSsJCSAgICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCi0rCQkJewotKwkJCWR0W2pdKys7 Ci0rCQkJaWYgKGR0W2pdKQotKwkJCQlicmVhazsKLSsJCQl9Ci0rCQl9Ci0rCi0rCSAgICBwdigi UiIscmV0LDE2KTsKLSsJICAgIE9QRU5TU0xfZnJlZShrZXkpOwotKwkgICAga2V5ID0gTlVMTDsK LSsJICAgIE9QRU5TU0xfZnJlZShkdCk7Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAgICBPUEVOU1NM X2ZyZWUodik7Ci0rCSAgICB2ID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50 IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQot Kwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7Ci0rCWV4aXQo MSk7Ci0rCX0KLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJy b3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgRklQU194OTMxX3Jlc2V0KCk7Ci0rICAgIGlm ICghRklQU194OTMxX3Rlc3RfbW9kZSgpKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCAiRXJyb3Ig c2V0dGluZyBQUk5HIHRlc3QgbW9kZVxuIik7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0 KDEpOwotKwl9Ci0rICAgIGlmKCFzdHJjbXAoYXJndlsxXSwibWN0IikpCi0rCW1jdCgpOwotKyAg ICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwidnN0IikpCi0rCXZzdCgpOwotKyAgICBlbHNlCi0r CXsKLSsJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsK LSsJZXhpdCgxKTsKLSsJfQotKwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRpZgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxMi0w Ny0xMiAyMTo0OToyNS4zMzczNTIyNjEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNzM1MjI2MSAr MDIwMAotQEAgLTAsMCArMSwzOTAgQEAKLSsvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KLSsvKiBXcml0 dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9w ZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDUsMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgot KyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5 djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwot KyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgi Ci0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOwotK3N0YXRpYyBpbnQgcnNh X3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAq WHAyLCBCSUdOVU0gKlhwLAotKwkJQklHTlVNICplKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtl eTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklH TlVNICpYcSk7Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJ TEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwotKwlpZigh RklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBl bmQ7Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0r CQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9 IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYg KCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRp b24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIp OwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJv clxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5k OgotKwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAo aW4gIT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91 dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZp bmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQs IEZJTEUgKmluKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwlj aGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCVJTQSAqcnNhID0gTlVMTDsKLSsJQklHTlVNICpYcDEg PSBOVUxMLCAqWHAyID0gTlVMTCwgKlhwID0gTlVMTDsKLSsJQklHTlVNICpYcTEgPSBOVUxMLCAq WHEyID0gTlVMTCwgKlhxID0gTlVMTDsKLSsJQklHTlVNICplID0gTlVMTDsKLSsJaW50IHJldCA9 IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ff VEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01B WExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJv cjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikp Ci0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5 d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkv KiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJ CS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3Qg Y29weSAqLwotKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlmIChmcHV0 cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0r CQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICov Ci0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0r Ci0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcg c3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZh bHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUg KCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7 Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAxIikpCi0rCQkJewotKwkJCWlmIChYcDEg fHwgIWRvX2hleDJibigmWHAxLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cDIiKSkKLSsJCQl7Ci0rCQkJaWYgKFhw MiB8fCAhZG9faGV4MmJuKCZYcDIsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhwIikpCi0rCQkJewotKwkJCWlmIChY cCB8fCAhZG9faGV4MmJuKCZYcCx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHExIikpCi0rCQkJewotKwkJCWlmIChY cTEgfHwgIWRvX2hleDJibigmWHExLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTIiKSkKLSsJCQl7Ci0rCQkJaWYg KFhxMiB8fCAhZG9faGV4MmJuKCZYcTIsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhxIikpCi0rCQkJewotKwkJCWlm IChYcSB8fCAhZG9faGV4MmJuKCZYcSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAo ZSB8fCAhZG9faGV4MmJuKCZlLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInAiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgInExIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJxMiIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAicSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi biIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQot KwkJCWNvbnRpbnVlOwotKwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0 cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCi0rCQkJ ewotKwkJCXJzYSA9IEZJUFNfcnNhX25ldygpOwotKwkJCWlmICghcnNhKQotKwkJCQlnb3RvIGVy cm9yOwotKwkJCWlmICghcnNhX3ByaW50a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKFhwMSk7Ci0rCQkJWHAxID0gTlVMTDsKLSsJ CQlCTl9mcmVlKFhwMik7Ci0rCQkJWHAyID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhwKTsKLSsJCQlY cCA9IE5VTEw7Ci0rCQkJQk5fZnJlZShlKTsKLSsJCQllID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQlp ZiAocnNhICYmIFhxMSAmJiBYcTIgJiYgWHEpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50a2V5 MihvdXQsIHJzYSwgWHExLCBYcTIsIFhxKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVl KFhxMSk7Ci0rCQkJWHExID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhxMik7Ci0rCQkJWHEyID0gTlVM TDsKLSsJCQlCTl9mcmVlKFhxKTsKLSsJCQlYcSA9IE5VTEw7Ci0rCQkJRklQU19yc2FfZnJlZShy c2EpOwotKwkJCXJzYSA9IE5VTEw7Ci0rCQkJfQotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwll cnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJ aWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCi0rCWlmIChYcDEpCi0r CQlCTl9mcmVlKFhwMSk7Ci0rCWlmIChYcDIpCi0rCQlCTl9mcmVlKFhwMik7Ci0rCWlmIChYcCkK LSsJCUJOX2ZyZWUoWHApOwotKwlpZiAoWHExKQotKwkJQk5fZnJlZShYcTEpOwotKwlpZiAoWHEx KQotKwkJQk5fZnJlZShYcTEpOwotKwlpZiAoWHEyKQotKwkJQk5fZnJlZShYcTIpOwotKwlpZiAo WHEpCi0rCQlCTl9mcmVlKFhxKTsKLSsJaWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwlpZiAocnNh KQotKwkJRklQU19yc2FfZnJlZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9l cnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5n IGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGlj IGludCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwg QklHTlVNICpYcDIsIEJJR05VTSAqWHAsCi0rCQlCSUdOVU0gKmUpCi0rCXsKLSsJaW50IHJldCA9 IDA7Ci0rCUJJR05VTSAqcDEgPSBOVUxMLCAqcDIgPSBOVUxMOwotKwlwMSA9IEJOX25ldygpOwot KwlwMiA9IEJOX25ldygpOwotKwlpZiAoIXAxIHx8ICFwMikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0r CWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhw MiwgWHAsCi0rCQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwgZSwgTlVMTCkpCi0rCQlnb3RvIGVycm9y OwotKwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAxIiwgcDEpOwotKwlkb19ibl9wcmludF9u YW1lKG91dCwgInAyIiwgcDIpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnAp OwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHAxKQotKwkJQk5fZnJlZShwMSk7 Ci0rCWlmIChwMikKLSsJCUJOX2ZyZWUocDIpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r c3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0g KlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCUJJ R05VTSAqcTEgPSBOVUxMLCAqcTIgPSBOVUxMOwotKwlxMSA9IEJOX25ldygpOwotKwlxMiA9IEJO X25ldygpOwotKwlpZiAoIXExIHx8ICFxMikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghUlNB X1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxM LAotKwkJCQkJCVhxMSwgWHEyLCBYcSwgTlVMTCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwot Kwlkb19ibl9wcmludF9uYW1lKG91dCwgInExIiwgcTEpOwotKwlkb19ibl9wcmludF9uYW1lKG91 dCwgInEyIiwgcTIpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOwotKwlk b19ibl9wcmludF9uYW1lKG91dCwgIm4iLCByc2EtPm4pOwotKwlkb19ibl9wcmludF9uYW1lKG91 dCwgImQiLCByc2EtPmQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHExKQot KwkJQk5fZnJlZShxMSk7Ci0rCWlmIChxMikKLSsJCUJOX2ZyZWUocTIpOwotKwotKwlyZXR1cm4g cmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2Nh dnMvZmlwc19yc2FzdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3JzYXN0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNzM1MjI2MSArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTIt MDctMTIgMjE6NDk6MjUuMzM3MzUyMjYxICswMjAwCi1AQCAtMCwwICsxLDM3MCBAQAotKy8qIGZp cHNfcnNhc3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3Rl dmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8K LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChl YXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJ UFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0r I2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0 LCBGSUxFICppbiwgaW50IFNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUg Km91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1z ZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50 IHJldCA9IDEsIFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7 Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFy Z2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxl biA9IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5k OwotKwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAo KGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxl biA9IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAx KQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwot KwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZv cGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0 cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoIXJzYV9zdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgUlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5k OwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0r CQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlm Y2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQp OwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5F TEVOCTEwMjQwCi0rCi0raW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2Fs dGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdz dCA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0g LTE7Ci0rCWludCBrZXlsZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9 IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ff VEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01B WExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJv cjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikp Ci0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5 d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkv KiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJ CS8qIElmIG5vID0ganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChmcHV0 cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0r CQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICov Ci0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0r Ci0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcg c3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZh bHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUg KCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7 Ci0rCi0rCQkvKiBMb29rIGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLwotKwotKwkJ aWYgKCFzdHJjbXAoa2V5d29yZCwgIlttb2QiKSkKLSsJCQl7Ci0rCQkJcCA9IHZhbHVlICsgc3Ry bGVuKHZhbHVlKSAtIDE7Ci0rCQkJaWYgKCpwICE9ICddJykKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQkqcCA9IDA7Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxl biA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hB MSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVl LCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0 cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVs c2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQo KTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBF VlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJ CQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFs dWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUp ID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFN c2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwotKwkJZnB1dHMob2xpbmVidWYs IG91dCk7Ci0rCi0rCQkvKiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQg b3V0cHV0IHB1YmxpYwotKwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtl eS4KLSsJCSAqLwotKwotKwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKLSsJCQl7Ci0r CQkJQklHTlVNICpibl9lOwotKwkJCWlmIChyc2EpCi0rCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsK LSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJv cjsKLSsJCQlibl9lID0gQk5fbmV3KCk7Ci0rCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChi bl9lLCAweDEwMDEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJh dGVfa2V5X2V4KHJzYSwga2V5bGVuLCBibl9lLCBOVUxMKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJ CQlCTl9mcmVlKGJuX2UpOwotKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmlu dChvdXQsIHJzYS0+bik7Ci0rCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJp bnQob3V0LCByc2EtPmUpOwotKwkJCWZwdXRzKCJcbiIsIG91dCk7Ci0rCQkJY3VycmVudF9rZXls ZW4gPSBrZXlsZW47Ci0rCQkJfQotKwotKwkJaWYgKE1zZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlp ZiAoIXJzYV9wcmludHNpZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlT YWx0bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlN c2cgPSBOVUxMOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0r Ci0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5l YnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2Ff ZnJlZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxu dW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRz aWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQg Y2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7 Ci0rCXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8q IEVWUF9QS0VZIHN0cnVjdHVyZSAqLwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7 Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhOwotKwotKwlz aWdsZW4gPSBSU0Ffc2l6ZShyc2EpOwotKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4p OwotKwlpZiAoIXNpZ2J1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgm Y3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRf ZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2 KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0 X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1NpZ25J bml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2ln blVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9T aWduRmluYWwoJmN0eCwgc2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJ CWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJZnB1dHMo IlMgPSAiLCBvdXQpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCi0rCQlmcHJp bnRmKG91dCwgIiUwMlgiLCBzaWdidWZbaV0pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwot KwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwotLS0t IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAx Mi0wNy0xMiAyMTo0OToyNS4zMzczNTIyNjEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzNzM1MjI2 MSArMDIwMAotQEAgLTAsMCArMSwzNzcgQEAKLSsvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KLSsvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1 MDl2My5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsg ICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgot KwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Ci0rc3Rh dGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdOVU0gKmUs Ci0rCQljb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNn bGVuLAotKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0r aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwg Km91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwlpbnQgU2FsdGxlbiA9IC0xOwotKwot KwlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJ Z290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVu IiwgYXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKLSsJCWlmIChT YWx0bGVuIDwgMCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBz YWx0IGxlbmd0aFxuIik7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYXJnYyAtPSAyOwotKwkJ YXJndiArPSAyOwotKwkJfQotKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMx IiwgYXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gLTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2 Kys7Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0r CQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9 IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYg KCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRp b24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIp OwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxl bikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vz c2luZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsK LSsKLSsJZW5kOgotKwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlm IChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0 ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQot KwotKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChG SUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAq b2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwljb25zdCBFVlBf TUQgKmRnc3QgPSBOVUxMOwotKwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7Ci0rCXVuc2ln bmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTID0gTlVMTDsKLSsJbG9uZyBNc2dsZW4sIFNsZW47Ci0r CWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhS U0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJ CWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElO RUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVm KTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0r CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsr OwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9 Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBs aW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJ CQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNv bnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpx LS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92 ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBz cGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsK LSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJ CSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQl7Ci0rCQkJ aWYgKCFkb19oZXgyYm4oJm4sdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19o ZXgyYm4oJmUsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2 YWx1ZSwgIlNIQTEiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0 cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVs c2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYo KTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3QgPSBF VlBfc2hhMzg0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJ CQlkZ3N0ID0gRVZQX3NoYTUxMigpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0 ZGVyciwKLSsJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJ CQkJCQkJCXZhbHVlKTsKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJ KigtLXZhbHVlKSA9ICcwJzsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwot KwkJCWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIlMiKSkKLSsJCQl7Ci0rCQkJaWYgKFMpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0g JzAnOwotKwkJCVMgPSBoZXgyYmluX20odmFsdWUsICZTbGVuKTsKLSsJCQlpZiAoIVMpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi UmVzdWx0IikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsK LSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYg UyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3Qs Ci0rCQkJCQlNc2csIE1zZ2xlbiwgUywgU2xlbiwgU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7 Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlPUEVOU1NMX2Zy ZWUoUyk7Ci0rCQkJUyA9IE5VTEw7Ci0rCQkJfQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwot KwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5l YnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChu KQotKwkJQk5fZnJlZShuKTsKLSsJaWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwotKwlyZXR1cm4g cmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJz ZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwot KwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVN ICpuLCBCSUdOVU0gKmUsCi0rCQljb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFy ICpNc2csIGxvbmcgTXNnbGVuLAotKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQg U2FsdGxlbikKLSsJewotKwlpbnQgcmV0ID0gMCwgcjsKLSsJLyogU2V0dXAgUlNBIGFuZCBFVlBf UEtFWSBzdHJ1Y3R1cmVzICovCi0rCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7Ci0rCUVWUF9QS0VZ IHBrOwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKLSsJ cnNhX3B1YmtleSA9IEZJUFNfcnNhX25ldygpOwotKwlpZiAoIXJzYV9wdWJrZXkpCi0rCQlnb3Rv IGVycm9yOwotKwlyc2FfcHVia2V5LT5uID0gQk5fZHVwKG4pOwotKwlyc2FfcHVia2V5LT5lID0g Qk5fZHVwKGUpOwotKwlpZiAoIXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCi0rCQln b3RvIGVycm9yOwotKwlway50eXBlID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9IHJz YV9wdWJrZXk7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4g Pj0gMCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNh bHRsZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVM TCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBN c2dsZW4pKQotKwkJZ290byBlcnJvcjsKLSsKLSsJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBT LCBTbGVuLCAmcGspOwotKwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlm IChyIDwgMCkKLSsJCWdvdG8gZXJyb3I7Ci0rCUVSUl9jbGVhcl9lcnJvcigpOwotKwotKwlpZiAo ciA9PSAwKQotKwkJZnB1dHMoIlJlc3VsdCA9IEZcbiIsIG91dCk7Ci0rCWVsc2UKLSsJCWZwdXRz KCJSZXN1bHQgPSBQXG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYg KHJzYV9wdWJrZXkpCi0rCQlGSVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOwotKwlpZiAoYnVmKQot KwkJT1BFTlNTTF9mcmVlKGJ1Zik7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTItMDct MTIgMjE6NDk6MjUuMzM4MzUyMjg0ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3NoYXRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzODM1MjI4NCArMDIw MAotQEAgLTAsMCArMSwzODggQEAKLSsvKiBmaXBzX3NoYXRlc3QuYyAqLwotKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRl IDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgot KwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7Ci0rICAg IHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsK LStzdGF0aWMgaW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50 IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hh ciAqTXNnLCBpbnQgTXNnbGVuKTsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9N RCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsK LSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBO VUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBTX21vZGVf c2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9w ZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0Owot KwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxu Iik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJ Z290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYg KHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGlu KSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNs b3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFNIQV9URVNU X01BWF9CSVRTCTEwMjQwMAotKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVT VF9NQVhfQklUUyA+PiAzKSAqIDIpICsgMTAwKQotKwotK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0 LCBGSUxFICppbikKLSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJY2hhciAqbGlu ZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJdW5z aWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOwotKwlsb25nIE1zZ0xlbiA9IC0x LCBMZW4gPSAtMSwgU2VlZExlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAw OwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwot KwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlm ICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwotKwl3aGlsZSAo ZmdldHMob2xpbmVidWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0r KzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsK LSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2ln biAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBz dGFydHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQot KwkJCXsKLSsJCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0r Ci0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpw ID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBm cm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQot KwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAq LwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xu JyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlm ICghc3RyY21wKGtleXdvcmQsIltMIikgJiYgKnA9PSddJykKLSsJCQl7Ci0rCQkJc3dpdGNoIChh dG9pKHZhbHVlKSkKLSsJCQkJewotKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFr OwotKwkJCQljYXNlIDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOwotKwkJCQljYXNlIDMyOiBt ZD1FVlBfc2hhMjU2KCk7IGJyZWFrOwotKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJy ZWFrOwotKwkJCQljYXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOwotKwkJCQlkZWZhdWx0 OiBnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiTGVuIikpCi0rCQkJewotKwkJCWlmIChMZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJTGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKExlbiA8IDApCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0 cyAqLwotKwkJCWlmIChMZW4gJiAweDcpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYg KExlbiA+IFNIQV9URVNUX01BWF9CSVRTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1z Z0xlbiA9IExlbiA+PiAzOwotKwkJCX0KLSsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg Ik1zZyIpKQotKwkJCXsKLSsJCQlsb25nIHRtcGxlbjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAm IDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOwotKwkJCWlmICgh TXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIlNlZWQiKSkKLSsJCQl7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJ CQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCWlmIChTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCVNlZWQgPSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKLSsJCQlpZiAoIVNlZWQp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiTUQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobWQgJiYgTXNnICYmIChN c2dMZW4gPj0gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1z Z0xlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNn ID0gTlVMTDsKLSsJCQlNc2dMZW4gPSAtMTsKLSsJCQlMZW4gPSAtMTsKLSsJCQl9Ci0rCQllbHNl IGlmIChtZCAmJiBTZWVkICYmIChTZWVkTGVuID4gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRf bW9udGUobWQsIG91dCwgU2VlZCwgU2VlZExlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BF TlNTTF9mcmVlKFNlZWQpOwotKwkJCVNlZWQgPSBOVUxMOwotKwkJCVNlZWRMZW4gPSAtMTsKLSsJ CQl9Ci0rCQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJ aWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYp Ci0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUo TXNnKTsKLSsJaWYgKFNlZWQpCi0rCQlPUEVOU1NMX2ZyZWUoU2VlZCk7Ci0rCi0rCXJldHVybiBy ZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNl IGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0r Ci0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUg Km91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKLSsJewotKwlpbnQgaSwg bWRsZW47Ci0rCXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKLSsJaWYgKCFFVlBf RGlnZXN0KE1zZywgTXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxM KSkKLSsJCXsKLSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCWZvciAoaSA9IDA7 IGkgPCBtZGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOwotKwlmcHV0 cygiXG4iLCBvdXQpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfbW9u dGUoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwg aW50IFNlZWRMZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGksIGosIGs7Ci0rCWludCByZXQgPSAw OwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsK LSsJdW5zaWduZWQgaW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47Ci0rCi0rCUVWUF9NRF9D VFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCi0rCQlt bGVuID0gU2VlZExlbjsKLSsJZWxzZQotKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKLSsKLSsJ bTEgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsK LSsJbTMgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsKLSsJaWYgKCFtMSB8fCAhbTIgfHwgIW0z KQotKwkJZ290byBtY19lcnJvcjsKLSsKLSsJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExl bjsKLSsJbWVtY3B5KG0xLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0yLCBTZWVkLCBTZWVk TGVuKTsKLSsJbWVtY3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0 KTsKLSsKLSsJZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQotKwkJewotKwkJZm9yIChpID0gMDsg aSA8IDEwMDA7IGkrKykKLSsJCQl7Ci0rCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5V TEwpOwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKLSsJCQlFVlBfRGln ZXN0VXBkYXRlKCZjdHgsIG0yLCBtMmxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBt MywgbTNsZW4pOwotKwkJCXAgPSBtMTsKLSsJCQltMSA9IG0yOwotKwkJCW0xbGVuID0gbTJsZW47 Ci0rCQkJbTIgPSBtMzsKLSsJCQltMmxlbiA9IG0zbGVuOwotKwkJCW0zID0gcDsKLSsJCQlFVlBf RGlnZXN0RmluYWxfZXgoJmN0eCwgbTMsICZtM2xlbik7Ci0rCQkJfQotKwkJZnByaW50ZihvdXQs ICJDT1VOVCA9ICVkXG4iLCBqKTsKLSsJCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCQlmb3IgKGsg PSAwOyBrIDwgbTNsZW47IGsrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7Ci0r CQlmcHV0cygiXG5cbiIsIG91dCk7Ci0rCQltZW1jcHkobTEsIG0zLCBtM2xlbik7Ci0rCQltZW1j cHkobTIsIG0zLCBtM2xlbik7Ci0rCQltMWxlbiA9IG0ybGVuID0gbTNsZW47Ci0rCQl9Ci0rCi0r CXJldCA9IDE7Ci0rCi0rCW1jX2Vycm9yOgotKwlpZiAobTEpCi0rCQlPUEVOU1NMX2ZyZWUobTEp OwotKwlpZiAobTIpCi0rCQlPUEVOU1NMX2ZyZWUobTIpOwotKwlpZiAobTMpCi0rCQlPUEVOU1NM X2ZyZWUobTMpOwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCXJldHVybiBy ZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBz L2NhdnMvZmlwc191dGwuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlw c191dGwuaAotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5m aXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzM4MzUyMjg0ICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzM4MzUy Mjg0ICswMjAwCi1AQCAtMCwwICsxLDM0MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot KwotK3ZvaWQgZG9fcHJpbnRfZXJyb3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hhciAqZmlsZSwg KmRhdGE7Ci0rCWludCBsaW5lLCBmbGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwotKwl3aGlsZSAo KGwgPSBFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3Mp KSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJl YXNvbj0lZCIKLSsJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwgRVJSX0dFVF9M SUIobCksIEVSUl9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJZmlsZSwgbGlu ZSwgZmxhZ3MgJiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0rCX0KLSsKLStp bnQgaGV4MmJpbihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0r ICAgIGludCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAobjE9 MCxuMj0wIDsgaW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZpcnN0IGJ5dGUg Ki8KLSsJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9 IGluW24xKytdIC0gJzAnOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8 PSAnRicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5b bjFdID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdh JyArIDEwOwotKwllbHNlCi0rCSAgICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0pCi0rCSAgICB7 Ci0rCSAgICBvdXRbbjIrK109Y2g7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJb3V0W24yXSA9 IGNoIDw8IDQ7Ci0rCS8qIHNlY29uZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYg KGluW24xXSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAo KGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10g LSAnQScgKyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2Yn KSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJu IC0xOwotKwlvdXRbbjIrK10gfD0gY2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0r Ci0rdW5zaWduZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQot Kwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGlu KSArIDEpLzIpOwotKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4gcDsKLSsJfQot KwotK2ludCBkb19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXVu c2lnbmVkIGNoYXIgKnA7Ci0rCWxvbmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlwID0gaGV4MmJp bl9tKGluLCAmcGxlbik7Ci0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAoISpwcikKLSsJ CSpwciA9IEJOX25ldygpOwotKwlpZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlpZiAoQk5fYmlu MmJuKHAsIHBsZW4sICpwcikpCi0rCQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHApOwotKwlyZXR1 cm4gcjsKLSsJfQotKwotK2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCi0r CXsKLSsJaW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1f Ynl0ZXMoYm4pOwotKwlpZiAobGVuID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAiLCBvdXQpOwot KwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlm ICghdG1wKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJv clxuIik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlmb3Ig KGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOwot KwlPUEVOU1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJp bnRfbmFtZShGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJ aW50IHI7Ci0rCWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRvX2JuX3ByaW50 KG91dCwgYm4pOwotKwlpZiAoIXIpCi0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxuIiwgb3V0KTsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoq cHZhbCwgY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29y ZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdv cmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwotKwkvKiBMb29r IGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBu byAnPScgZXhpdCAqLwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9IHAgLSAxOwot KwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsg MTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZh bHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkqcHZhbCA9IHZh bHVlOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmlu KQotKyAgICB7Ci0rICAgIEJJR05VTSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRvX2hleDJibigm cCwgaW4pKQotKwlyZXR1cm4gTlVMTDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsKLStp bnQgYmluMmhleChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsg ICAgewotKyAgICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBm b3IgKG4xPTAsbjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKLSsJewotKwljaD1pbltuMV0gPj4gNDsK LSsJaWYgKGNoIDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAg ICBvdXRbbjIrK109Y2gtMTArJ2EnOwotKwljaD1pbltuMV0gJiAweDBmOwotKwlpZihjaCA8PSAw eDA5KQotKwkgICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNo LTEwKydhJzsKLSsJfQotKyAgICBvdXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBuMjsKLSsgICAg fQotKwotK3ZvaWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxp bnQgbGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAgYmluMmhleCh2 YWwsbGVuLG9idWYpOwotKyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOwotKyAgICB9 Ci0rCi0rLyogVG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRo aXMgc3RhZ2UganVzdCBjb252ZXJ0Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRh YmxlIGZvcm0uIEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAia2V5d29yZCA9 IHZhbHVlXG4iIG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBs aW5lcwotKyAqIGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgot KyAqLwotKwotK2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0r CXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBv bGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29y ZCsrOwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScp OwotKwotKwkvKiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCi0r CWlmICghcCkKLSsJCXsKLSsJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKLSsJ CXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpw LS0gPSAwOwotKwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNhdChvbGluZWJ1 ZiwgIlxuIik7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBS ZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJ LyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7 Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQot KwkJKnAtLSA9IDA7Ci0rCi0rCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCXN0cmNhdChv bGluZWJ1ZiwgIiA9ICIpOwotKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJc3RyY2F0KG9s aW5lYnVmLCAiXG4iKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjogdGhpcyByZXR1 cm4gdGhlIG51bWJlciBvZiBfYml0c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihjb25zdCBjaGFy ICppbiwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwot KwotKyAgICBtZW1zZXQob3V0LDAsbGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24p Ci0rCWlmKGluW25dID09ICcxJykKLSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7Ci0r ICAgIHJldHVybiBsZW47Ci0rICAgIH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQg Y2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAg IGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4l OCkpKSA/ICcxJyA6ICcwJzsKLSsgICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2b2lkIFByaW50 VmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rewotKyNpZiBW RVJCT1NFCi0rICBjaGFyIG9idWZbMjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9sZW4gPSBiaW4y aGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4s IG9idWYpOwotKyNlbmRpZgotK30KLSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5z aWduZWQgY2hhciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCi0rICAgIHsK LSsgICAgY2hhciBvYnVmWzIwNDhdOwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAgaWYoYml0bW9k ZSkKLSsJb2xlbj1iaW4yYmludCh2YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0rCW9sZW49Ymlu MmhleCh2YWwsbGVuLG9idWYpOwotKwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwg dGFnLCBvbGVuLCBvYnVmKTsKLSsjaWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVzID0gJS4qc1xu IiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4z MzgzNTIyODQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2Flc19z ZWxmdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM4MzUyMjg0ICswMjAwCi1AQCAtMCwwICsx LDM1OSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu 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 aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgY29uc3Qgc3RydWN0Ci0rICAgIHsK LSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyIHBsYWludGV4dFsxNl07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsx Nl07Ci0rICAgIH0gdGVzdHNbXT0KLSsJewotKwl7Ci0rCXsgMHgwMCwweDAxLDB4MDIsMHgwMyww eDA0LDB4MDUsMHgwNiwweDA3LAotKwkgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4 MEUsMHgwRiB9LAotKwl7IDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywK LSsJICAweDg4LDB4OTksMHhBQSwweEJCLDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKLSsJeyAweDY5 LDB4QzQsMHhFMCwweEQ4LDB4NkEsMHg3QiwweDA0LDB4MzAsCi0rCSAgMHhEOCwweENELDB4Qjcs MHg4MCwweDcwLDB4QjQsMHhDNSwweDVBIH0sCi0rCX0sCi0rCX07Ci0rCi0rc3RhdGljIGludCBj b3JydXB0X2FlczsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9hZXMoKQotKyAgICB7Ci0rICAgIGNv cnJ1cHRfYWVzID0gMTsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCi0rICAg IHsKLSsgICAgaW50IG47Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBj dHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGZvcihuPTAgOyBu IDwgMSA7ICsrbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rCi0rCW1lbWNweShr ZXksIHRlc3RzW25dLmtleSwgc2l6ZW9mKGtleSkpOwotKwlpZiAoY29ycnVwdF9hZXMpCi0rCQlr ZXlbMF0rKzsKLSsJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCks Ci0rCQkJCWtleSwgTlVMTCwKLSsJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAotKwkJCQl0ZXN0c1tu XS5jaXBoZXJ0ZXh0LAotKwkJCQkxNikgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rICAgIHJl dCA9IDE7Ci0rICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsg ICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMs RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSsv KiBBRVMtQ0NNIHRlc3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9rZXlbXSA9IHsKLSsJMHhjZSwweGIwLDB4 MDksMHhhZSwweGE0LDB4NDUsMHg0NCwweDUxLDB4ZmUsMHhhZCwweGYwLDB4ZTYsCi0rCTB4YjMs MHg2ZiwweDQ1LDB4NTUsMHg1ZCwweGQwLDB4NDcsMHgyMywweGJhLDB4YTQsMHg0OCwweGU4Ci0r fTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fbm9uY2VbXSA9IHsKLSsJMHg3Niww eDQwLDB4NDMsMHhjNCwweDk0LDB4NjAsMHhiNwotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgY2NtX2FkYXRhW10gPSB7Ci0rCTB4NmUsMHg4MCwweGRkLDB4N2YsMHgxYiwweGFkLDB4 ZjMsMHhhMSwweGM5LDB4YWIsMHgyNSwweGM3LAotKwkweDVmLDB4MTAsMHhiZCwweGU3LDB4OGMs MHgyMywweGZhLDB4MGUsMHhiOCwweGY5LDB4YWEsMHhhNSwKLSsJMHgzYSwweGRlLDB4ZmIsMHhm NCwweGNiLDB4ZjcsMHg4ZiwweGU0Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBj Y21fcHRbXSA9IHsKLSsJMHhjOCwweGQyLDB4NzUsMHhmOSwweDE5LDB4ZTEsMHg3ZCwweDdmLDB4 ZTYsMHg5YywweDJhLDB4MWYsCi0rCTB4NTgsMHg5MywweDlkLDB4ZmUsMHg0ZCwweDQwLDB4Mzcs MHg5MSwweGI1LDB4ZGYsMHgxMywweDEwCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBjY21fY3RbXSA9IHsKLSsJMHg4YSwweDBmLDB4M2QsMHg4MiwweDI5LDB4ZTQsMHg4ZSwweDc0 LDB4ODcsMHhmZCwweDk1LDB4YTIsCi0rCTB4OGEsMHhkMywweDkyLDB4YzgsMHgwYiwweDM2LDB4 ODEsMHhkNCwweGZiLDB4YzcsMHhiYiwweGZkCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBjY21fdGFnW10gPSB7Ci0rCTB4MmQsMHhkNiwweGVmLDB4MWMsMHg0NSwweGQ0LDB4Y2Ms MHhiNywweDIzLDB4ZGMsMHgwNywweDQ0LAotKwkweDE0LDB4ZGIsMHg1MCwweDZkCi0rfTsKLSsK LStpbnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0r CXVuc2lnbmVkIGNoYXIgb3V0WzEyOF0sIHRhZ1sxNl07Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsK LSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91 dCkpOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxM LCBOVUxMLCAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0 eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwKLSsJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxM KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NU UkxfQ0NNX1NFVF9UQUcsCi0rCQkJCQlzaXplb2YoY2NtX3RhZyksIE5VTEwpKQotKwkJZ290byBl cnI7Ci0rCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNl LCAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBz aXplb2YoY2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVW UF9DaXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQot KwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX3B0LCBzaXplb2Yo Y2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFFVlBf Q0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCAxNiwgdGFnKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAobWVtY21wKHRhZywgY2NtX3RhZywgc2l6ZW9mKGNjbV90YWcpKQot KwkJfHwgbWVtY21wKG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkpCi0rCQlnb3RvIGVycjsK LSsKLSsJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwotKwotKwlpZiAoIUVWUF9DaXBoZXJJ bml0KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCAwKSkKLSsJCWdvdG8gZXJy OwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxF TiwKLSsJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo IUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIDE2LCB0YWcp KQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgY2NtX2tl eSwgY2NtX25vbmNlLCAwKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBO VUxMLCBOVUxMLCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCi0rCQlnb3RvIGVy cjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2Fk YXRhKSkgPCAwKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2Nt X2N0LCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCi0rCQlnb3RvIGVycjsKLSsK LSsJaWYgKG1lbWNtcChvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkpKQotKwkJZ290byBlcnI7 Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4 KTsKLSsKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxG VEVTVF9BRVNfQ0NNLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9 Ci0rCWVsc2UKLSsJCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsvKiBBRVMtR0NNIHRlc3QgZGF0 YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGdjbV9rZXlbXSA9IHsKLSsJMHhlZSwweGJjLDB4MWYsMHg1NywweDQ4LDB4N2Ys MHg1MSwweDkyLDB4MWMsMHgwNCwweDY1LDB4NjYsCi0rCTB4NWYsMHg4YSwweGU2LDB4ZDEsMHg2 NSwweDhiLDB4YjIsMHg2ZCwweGU2LDB4ZjgsMHhhMCwweDY5LAotKwkweGEzLDB4NTIsMHgwMiww eDkzLDB4YTUsMHg3MiwweDA3LDB4OGYKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGdjbV9pdltdID0gewotKwkweDk5LDB4YWEsMHgzZSwweDY4LDB4ZWQsMHg4MSwweDczLDB4YTAs MHhlZSwweGQwLDB4NjYsMHg4NAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2Nt X3B0W10gPSB7Ci0rCTB4ZjUsMHg2ZSwweDg3LDB4MDUsMHg1YiwweGMzLDB4MmQsMHgwZSwweGVi LDB4MzEsMHhiMiwweGVhLAotKwkweGNjLDB4MmIsMHhmMiwweGE1Ci0rfTsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBnY21fYWFkW10gPSB7Ci0rCTB4NGQsMHgyMywweGMzLDB4Y2UsMHhj MywweDM0LDB4YjQsMHg5YiwweGRiLDB4MzcsMHgwYywweDQzLAotKwkweDdmLDB4ZWMsMHg3OCww eGRlCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fY3RbXSA9IHsKLSsJMHhm NywweDI2LDB4NDQsMHgxMywweGE4LDB4NGMsMHgwZSwweDdjLDB4ZDUsMHgzNiwweDg2LDB4N2Us Ci0rCTB4YjksMHhmMiwweDE3LDB4MzYKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGdjbV90YWdbXSA9IHsKLSsJMHg2NywweGJhLDB4MDUsMHgxMCwweDI2LDB4MmEsMHhlNCwweDg3 LDB4ZDcsMHgzNywweGVlLDB4NjIsCi0rCTB4OTgsMHhmNywweDdlLDB4MGMKLSt9OwotKwotK2lu dCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5z aWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7 Ci0rCW1lbXNldCh0YWcsIDAsIHNpemVvZih0YWcpKTsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgm Y3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgMSkpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCi0r CQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lw aGVySW5pdCgmY3R4LCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDEpKQotKwkJZ290byBlcnI7Ci0r CWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAw KQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX3B0LCBzaXpl b2YoZ2NtX3B0KSkgIT0gc2l6ZW9mKGdjbV9jdCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9D aXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICgh RVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywgMTYsIHRhZykp Ci0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcCh0YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1j bXAob3V0LCBnY21fY3QsIDE2KSkKLSsJCWdvdG8gZXJyOwotKwotKwltZW1zZXQob3V0LCAwLCBz aXplb2Yob3V0KSk7Ci0rCi0rCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18yNTZf Z2NtKCksIE5VTEwsIE5VTEwsIDApKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9D VFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGdjbV9p diksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFF VlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDApKQotKwkJZ290byBl cnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFk KSkgPCAwKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX2N0 LCBzaXplb2YoZ2NtX2N0KSkgIT0gc2l6ZW9mKGdjbV9wdCkpCi0rCQlnb3RvIGVycjsKLSsJaWYg KEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQotKwkJZ290byBlcnI7Ci0rCi0r CWlmIChtZW1jbXAob3V0LCBnY21fcHQsIDE2KSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAx OwotKwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChy ZXQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSxG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwllbHNlCi0rCQly ZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRT XzEyOF9rZXlbXSA9IHsKLSsJMHhhMSwweGI5LDB4MGMsMHhiYSwweDNmLDB4MDYsMHhhYywweDM1 LDB4M2IsMHgyYywweDM0LDB4MzgsCi0rCTB4NzYsMHgwOCwweDE3LDB4NjIsMHgwOSwweDA5LDB4 MjMsMHgwMiwweDZlLDB4OTEsMHg3NywweDE4LAotKwkweDE1LDB4ZjIsMHg5ZCwweGFiLDB4MDEs MHg5MywweDJmLDB4MmYKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhf aVtdID0gewotKwkweDRmLDB4YWUsMHhmNywweDExLDB4N2MsMHhkYSwweDU5LDB4YzYsMHg2ZSww eDRiLDB4OTIsMHgwMSwKLSsJMHgzZSwweDc2LDB4OGEsMHhkNQotK307Ci0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9wdFtdID0gewotKwkweGViLDB4YWIsMHhjZSwweDk1LDB4 YjEsMHg0ZCwweDNjLDB4OGQsMHg2ZiwweGIzLDB4NTAsMHgzOSwKLSsJMHgwNywweDkwLDB4MzEs MHgxYwotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0gewot KwkweDc3LDB4OGEsMHhlOCwweGI0LDB4M2MsMHhiOSwweDhkLDB4NWEsMHg4MiwweDUwLDB4ODEs MHhkNSwKLSsJMHhiZSwweDQ3LDB4MWMsMHg2MwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgWFRTXzI1Nl9rZXlbXSA9IHsKLSsJMHgxZSwweGE2LDB4NjEsMHhjNSwweDhkLDB4 OTQsMHgzYSwweDBlLDB4NDgsMHgwMSwweGU0LDB4MmYsCi0rCTB4NGIsMHgwOSwweDQ3LDB4MTQs MHg5ZSwweDdmLDB4OWYsMHg4ZSwweDNlLDB4NjgsMHhkMCwweGM3LAotKwkweDUwLDB4NTIsMHgx MCwweGJkLDB4MzEsMHgxYSwweDBlLDB4N2MsMHhkNiwweGUxLDB4M2YsMHhmZCwKLSsJMHhmMiww eDQxLDB4OGQsMHg4ZCwweDE5LDB4MTEsMHhjMCwweDA0LDB4Y2QsMHhhNSwweDhkLDB4YTMsCi0r CTB4ZDYsMHgxOSwweGI3LDB4ZTIsMHhiOSwweDE0LDB4MWUsMHg1OCwweDMxLDB4OGUsMHhlYSww eDM5LAotKwkweDJjLDB4ZjQsMHgxYiwweDA4Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBYVFNfMjU2X2lbXSA9IHsKLSsJMHhhZCwweGY4LDB4ZDksMHgyNiwweDI3LDB4NDYsMHg0 YSwweGQyLDB4ZjAsMHg0MiwweDhlLDB4ODQsCi0rCTB4YTksMHhmOCwweDc1LDB4NjQKLSt9Owot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfcHRbXSA9IHsKLSsJMHgyZSwweGVk LDB4ZWEsMHg1MiwweGNkLDB4ODIsMHgxNSwweGUxLDB4YWMsMHhjNiwweDQ3LDB4ZTgsCi0rCTB4 MTAsMHhiYiwweGMzLDB4NjQsMHgyZSwweDg3LDB4MjgsMHg3ZiwweDhkLDB4MmUsMHg1NywweGUz LAotKwkweDZjLDB4MGEsMHgyNCwweGZiLDB4YzEsMHgyYSwweDIwLDB4MmUKLSt9OwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfY3RbXSA9IHsKLSsJMHhjYiwweGFhLDB4ZDAs MHhlMiwweGY2LDB4Y2UsMHhhMywweGY1LDB4MGIsMHgzNywweGY5LDB4MzQsCi0rCTB4ZDQsMHg2 YSwweDliLDB4MTMsMHgwYiwweDlkLDB4NTQsMHhmMCwweDdlLDB4MzQsMHhmMywweDZhLAotKwkw eGY3LDB4OTMsMHhlOCwweDZmLDB4NzMsMHhjNiwweGQ3LDB4ZGIKLSt9OwotKwotK2ludCBGSVBT X3NlbGZ0ZXN0X2Flc194dHMoKQotKwl7Ci0rCWludCByZXQgPSAxOwotKwlFVlBfQ0lQSEVSX0NU WCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChmaXBzX2NpcGhl cl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X3h0cygpLAotKwkJCQlYVFNfMTI4X2tleSwgWFRTXzEy OF9pLCBYVFNfMTI4X3B0LCBYVFNfMTI4X2N0LAotKwkJCQlzaXplb2YoWFRTXzEyOF9wdCkpIDw9 IDApCi0rCQlyZXQgPSAwOwotKwotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVz XzI1Nl94dHMoKSwKLSsJCQkJWFRTXzI1Nl9rZXksIFhUU18yNTZfaSwgWFRTXzI1Nl9wdCwgWFRT XzI1Nl9jdCwKLSsJCQkJc2l6ZW9mKFhUU18yNTZfcHQpKSA8PSAwKQotKwkJcmV0ID0gMDsKLSsK LSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJaWYgKHJldCA9PSAwKQotKwkJRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQp OwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBz LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDEyLTA3LTEy IDIxOjQ5OjI1LjMzODM1MjI4NCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBz L2ZpcHMuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzODM1MjI4NCArMDIwMAotQEAgLTAsMCArMSw0 ODkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT 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 SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIF9HTlVfU09VUkNF Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jp by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNpbmNsdWRl IDxkbGZjbi5oPgotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsj aW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSsjaWZuZGVmIFBBVEhfTUFYCi0rI2RlZmluZSBQQVRI X01BWCAxMDI0Ci0rI2VuZGlmCi0rCi0rc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAw OwotK3N0YXRpYyBpbnQgZmlwc19tb2RlID0gMDsKLStzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9 IDA7Ci0rCi0rc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCk7Ci0rc3RhdGlj IGludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQgZmlwc19jbGVh cl9vd25pbmdfdGhyZWFkKHZvaWQpOwotKwotKyNkZWZpbmUgZmlwc193X2xvY2soKQlDUllQVE9f d19sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3dfdW5sb2NrKCkJQ1JZUFRP X3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3JfbG9jaygpCUNSWVBU T19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUykKLSsjZGVmaW5lIGZpcHNfcl91bmxvY2soKQlDUllQ VE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKLSsKLStzdGF0aWMgdm9pZCBmaXBzX3NldF9t b2RlKGludCBvbm9mZikKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5n X3RocmVhZCgpOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJaWYgKCFvd25pbmdf dGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19tb2RlID0gb25vZmY7Ci0rCQlpZiAoIW93 bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKLSsJCX0KLSsJfQotKwotK2ludCBGSVBTX21v ZHVsZV9tb2RlKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhyZWFk ID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0ZWQpCi0rCQl7 Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCQlyZXQgPSBmaXBzX21v ZGU7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJCX0KLSsJcmV0 dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQotKyAgICB7 Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBpZiAoZmlwc19zdGFydGVkKQotKwl7Ci0rCWludCBv d25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmICghb3duaW5n X3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOwotKwlp ZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJfQotKyAgICByZXR1cm4gcmV0 OwotKyAgICB9Ci0rCi0rLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRo aXMgd2lsbCBiZSBjYWxsZWQKLSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRp b24uIEl0IGhhcyB0aGUgbWluaW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRv byBiaWcgYSBwZXJmb3JtYW5jZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2No ZWNrKHZvaWQpCi0rICAgIHsKLSsgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKLSsJewotKwlP cGVuU1NMRGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlMVVJF Iik7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQot KyAgICB7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgIH0KLSsKLSsvKiB3ZSBp bXBsZW1lbnQgd2hhdCBsaWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8KLSsKLStzdGF0aWMg aW50Ci0rZ2V0X2xpYnJhcnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpz eW1ib2xuYW1lLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbikKLSt7Ci0rCURsX2luZm8gaW5m bzsKLSsJdm9pZCAqZGwsICpzeW07Ci0rCWludCBydiA9IC0xOwotKwotKyAgICAgICAgZGwgPSBk bG9wZW4obGlibmFtZSwgUlRMRF9MQVpZKTsKLSsgICAgICAgIGlmIChkbCA9PSBOVUxMKSB7Ci0r CSAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfSAgICAgICAKLSsKLSsJc3ltID0gZGxzeW0o ZGwsIHN5bWJvbG5hbWUpOwotKwotKwlpZiAoc3ltICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwgJmlu Zm8pKSB7Ci0rCQlzdHJuY3B5KHBhdGgsIGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuLTEpOwotKwkJ cGF0aFtwYXRobGVuLTFdID0gJ1wwJzsKLSsJCXJ2ID0gMDsKLSsJfQotKwotKwlkbGNsb3NlKGRs KTsJCi0rCQotKwlyZXR1cm4gcnY7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBjaGFyIGNvbnZbXSA9 ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSsKLStzdGF0aWMgY2hhciAqCi0rYmluMmhleCh2b2lkICpi dWYsIHNpemVfdCBsZW4pCi0rewotKwljaGFyICpoZXgsICpwOwotKwl1bnNpZ25lZCBjaGFyICpz cmMgPSBidWY7Ci0rCQotKwloZXggPSBtYWxsb2MobGVuICogMiArIDEpOwotKwlpZiAoaGV4ID09 IE5VTEwpCi0rCQlyZXR1cm4gTlVMTDsKLSsKLSsJcCA9IGhleDsKLSsKLSsJd2hpbGUgKGxlbiA+ IDApIHsKLSsJCXVuc2lnbmVkIGM7Ci0rCi0rCQljID0gKnNyYzsKLSsJCXNyYysrOwotKwotKwkJ KnAgPSBjb252W2MgPj4gNF07Ci0rCQkrK3A7Ci0rCQkqcCA9IGNvbnZbYyAmIDB4MGZdOwotKwkJ KytwOwotKwkJLS1sZW47Ci0rCX0KLSsJKnAgPSAnXDAnOwotKwlyZXR1cm4gaGV4OwotK30KLSsK LSsjZGVmaW5lIEhNQUNfUFJFRklYICIuIiAKLSsjZGVmaW5lIEhNQUNfU1VGRklYICIuaG1hYyIg Ci0rI2RlZmluZSBSRUFEX0JVRkZFUl9MRU5HVEggMTYzODQKLSsKLStzdGF0aWMgY2hhciAqCi0r bWFrZV9obWFjX3BhdGgoY29uc3QgY2hhciAqb3JpZ3BhdGgpCi0rewotKwljaGFyICpwYXRoLCAq cDsKLSsJY29uc3QgY2hhciAqZm47Ci0rCi0rCXBhdGggPSBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJF RklYKSArIHNpemVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKLSsJaWYocGF0 aCA9PSBOVUxMKSB7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlmbiA9IHN0cnJjaHIob3Jp Z3BhdGgsICcvJyk7Ci0rCWlmIChmbiA9PSBOVUxMKSB7Ci0rCQlmbiA9IG9yaWdwYXRoOwotKwl9 IGVsc2UgewotKwkJKytmbjsKLSsJfQotKwotKwlzdHJuY3B5KHBhdGgsIG9yaWdwYXRoLCBmbi1v cmlncGF0aCk7Ci0rCXAgPSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOwotKwlwID0gc3RwY3B5KHAs IEhNQUNfUFJFRklYKTsKLSsJcCA9IHN0cGNweShwLCBmbik7Ci0rCXAgPSBzdHBjcHkocCwgSE1B Q19TVUZGSVgpOwotKwotKwlyZXR1cm4gcGF0aDsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IGNoYXIg aG1hY2tleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKLSsKLStzdGF0 aWMgaW50Ci0rY29tcHV0ZV9maWxlX2htYWMoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmJ1Ziwg c2l6ZV90ICpobWFjbGVuKQotK3sKLSsJRklMRSAqZiA9IE5VTEw7Ci0rCWludCBydiA9IC0xOwot Kwl1bnNpZ25lZCBjaGFyIHJidWZbUkVBRF9CVUZGRVJfTEVOR1RIXTsKLSsJc2l6ZV90IGxlbjsK LSsJdW5zaWduZWQgaW50IGhsZW47Ci0rCUhNQUNfQ1RYIGM7Ci0rCi0rCUhNQUNfQ1RYX2luaXQo JmMpOwotKwotKwlmID0gZm9wZW4ocGF0aCwgInIiKTsKLSsKLSsJaWYgKGYgPT0gTlVMTCkgewot KwkJZ290byBlbmQ7Ci0rCX0KLSsKLSsJSE1BQ19Jbml0KCZjLCBobWFja2V5LCBzaXplb2YoaG1h Y2tleSktMSwgRVZQX3NoYTI1NigpKTsKLSsKLSsJd2hpbGUgKChsZW49ZnJlYWQocmJ1ZiwgMSwg c2l6ZW9mKHJidWYpLCBmKSkgIT0gMCkgewotKwkJSE1BQ19VcGRhdGUoJmMsIHJidWYsIGxlbik7 Ci0rCX0KLSsKLSsJbGVuID0gc2l6ZW9mKHJidWYpOwotKwkvKiByZXVzZSByYnVmIGZvciBobWFj ICovCi0rCUhNQUNfRmluYWwoJmMsIHJidWYsICZobGVuKTsKLSsKLSsJKmJ1ZiA9IG1hbGxvYyho bGVuKTsKLSsJaWYgKCpidWYgPT0gTlVMTCkgewotKwkJZ290byBlbmQ7Ci0rCX0KLSsKLSsJKmht YWNsZW4gPSBobGVuOwotKwotKwltZW1jcHkoKmJ1ZiwgcmJ1ZiwgaGxlbik7Ci0rCi0rCXJ2ID0g MDsKLStlbmQ6Ci0rCUhNQUNfQ1RYX2NsZWFudXAoJmMpOwotKwotKwlpZiAoZikKLSsJCWZjbG9z ZShmKTsKLSsKLSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgaW50Ci0rRklQU0NIRUNLX3Zl cmlmeShjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lKQotK3sKLSsJ Y2hhciBwYXRoW1BBVEhfTUFYKzFdOwotKwlpbnQgcnY7Ci0rCUZJTEUgKmhmOwotKwljaGFyICpo bWFjcGF0aCwgKnA7Ci0rCWNoYXIgKmhtYWMgPSBOVUxMOwotKwlzaXplX3QgbjsKLSsJCi0rCXJ2 ID0gZ2V0X2xpYnJhcnlfcGF0aChsaWJuYW1lLCBzeW1ib2xuYW1lLCBwYXRoLCBzaXplb2YocGF0 aCkpOwotKwotKwlpZiAocnYgPCAwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWhtYWNwYXRoID0gbWFr ZV9obWFjX3BhdGgocGF0aCk7Ci0rCWlmIChobWFjcGF0aCA9PSBOVUxMKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCWhmID0gZm9wZW4oaG1hY3BhdGgsICJyIik7Ci0rCWlmIChoZiA9PSBOVUxMKSB7Ci0r CQlmcmVlKGhtYWNwYXRoKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCWlmIChnZXRsaW5lKCZo bWFjLCAmbiwgaGYpID4gMCkgewotKwkJdm9pZCAqYnVmOwotKwkJc2l6ZV90IGhtYWNsZW47Ci0r CQljaGFyICpoZXg7Ci0rCi0rCQlpZiAoKHA9c3RyY2hyKGhtYWMsICdcbicpKSAhPSBOVUxMKQot KwkJCSpwID0gJ1wwJzsKLSsKLSsJCWlmIChjb21wdXRlX2ZpbGVfaG1hYyhwYXRoLCAmYnVmLCAm aG1hY2xlbikgPCAwKSB7Ci0rCQkJcnYgPSAtNDsKLSsJCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJ CWlmICgoaGV4PWJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgewotKwkJCWZyZWUoYnVm KTsKLSsJCQlydiA9IC01OwotKwkJCWdvdG8gZW5kOwotKwkJfQotKwotKwkJaWYgKHN0cmNtcCho ZXgsIGhtYWMpICE9IDApIHsKLSsJCQlydiA9IC0xOwotKwkJfQotKwkJZnJlZShidWYpOwotKwkJ ZnJlZShoZXgpOwotKwl9Ci0rCi0rZW5kOgotKwlmcmVlKGhtYWMpOwotKwlmcmVlKGhtYWNwYXRo KTsKLSsJZmNsb3NlKGhmKTsKLSsKLSsJaWYgKHJ2IDwgMCkKLSsJCXJldHVybiAwOwotKwotKwkv KiBjaGVjayBzdWNjZXNzZnVsICovCi0rCXJldHVybiAxOwkKLSt9Ci0rCi0raW50IEZJUFNfbW9k dWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCkKLSsgICAgewotKyAgICBp bnQgcmV0ID0gMDsKLSsKLSsgICAgZmlwc193X2xvY2soKTsKLSsgICAgZmlwc19zdGFydGVkID0g MTsKLSsgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwotKwotKyAgICBpZihvbm9mZikKLSsJ ewotKwotKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOwotKwotKwkvKiBEb24ndCBnbyBpbnRvIEZJ UFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCi0rCSAgIHNlZWRpbmcg Ki8KLSsJaWYoRklQU19tb2R1bGVfbW9kZSgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBT X0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCk7Ci0r CSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8g ZW5kOwotKwkgICAgfQotKwotKyNpZmRlZiBPUEVOU1NMX0lBMzJfU1NFMgotKwl7Ci0rCWV4dGVy biB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07Ci0rCWlmICgoT1BFTlNTTF9pYTMy Y2FwX1BbMF0gJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8MjYpKQotKwkgICAgewotKwkg ICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9SVEVE X1BMQVRGT1JNKTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAw OwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rCU9QRU5TU0xfaWEzMmNhcF9QWzBdIHw9ICgx PDwyOCk7CS8qIHNldCAic2hhcmVkIGNhY2hlIgkqLwotKwlPUEVOU1NMX2lhMzJjYXBfUFsxXSAm PSB+KDE8PCg2MC0zMikpOwkvKiBjbGVhciBBVlgJCSovCi0rCX0KLSsjZW5kaWYKLSsKLSsJaWYo IUZJUFNDSEVDS192ZXJpZnkoImxpYmNyeXB0by5zby4iIFNITElCX1ZFUlNJT05fTlVNQkVSLCJG SVBTX21vZGVfc2V0IikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVM RV9NT0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOwotKwkgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJ ICAgIH0KLSsKLSsJaWYoIUZJUFNDSEVDS192ZXJpZnkoImxpYnNzbC5zby4iIFNITElCX1ZFUlNJ T05fTlVNQkVSLCJTU0xfQ1RYX25ldyIpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0Zf RklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsK LSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290 byBlbmQ7Ci0rCSAgICB9Ci0rCi0rCWlmKEZJUFNfc2VsZnRlc3QoKSkKLSsJICAgIGZpcHNfc2V0 X21vZGUob25vZmYpOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlyZXQgPSAx OwotKwlnb3RvIGVuZDsKLSsJfQotKyAgICBmaXBzX3NldF9tb2RlKDApOwotKyAgICBmaXBzX3Nl bGZ0ZXN0X2ZhaWwgPSAwOwotKyAgICByZXQgPSAxOwotK2VuZDoKLSsgICAgZmlwc19jbGVhcl9v d25pbmdfdGhyZWFkKCk7Ci0rICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgcmV0dXJuIHJldDsK LSsgICAgfQotKwotK3N0YXRpYyBDUllQVE9fVEhSRUFESUQgZmlwc190aHJlYWQ7Ci0rc3RhdGlj IGludCBmaXBzX3RocmVhZF9zZXQgPSAwOwotKwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdf dGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0ZWQp Ci0rCQl7Ci0rCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBz X3RocmVhZF9zZXQpCi0rCQkJewotKwkJCUNSWVBUT19USFJFQURJRCBjdXI7Ci0rCQkJQ1JZUFRP X1RIUkVBRElEX2N1cnJlbnQoJmN1cik7Ci0rCQkJaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZj dXIsICZmaXBzX3RocmVhZCkpCi0rCQkJCXJldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3JfdW5s b2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2lu dCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0r CWlmIChmaXBzX3N0YXJ0ZWQpCi0rCQl7Ci0rCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJ UFMyKTsKLSsJCWlmICghZmlwc190aHJlYWRfc2V0KQotKwkJCXsKLSsJCQlDUllQVE9fVEhSRUFE SURfY3VycmVudCgmZmlwc190aHJlYWQpOwotKwkJCXJldCA9IDE7Ci0rCQkJZmlwc190aHJlYWRf c2V0ID0gMTsKLSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwot KwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVh ZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJ ewotKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJl YWRfc2V0KQotKwkJCXsKLSsJCQlDUllQVE9fVEhSRUFESUQgY3VyOwotKwkJCUNSWVBUT19USFJF QURJRF9jdXJyZW50KCZjdXIpOwotKwkJCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAm Zmlwc190aHJlYWQpKQotKwkJCQlmaXBzX3RocmVhZF9zZXQgPSAwOwotKwkJCX0KLSsJCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0K LSsKLSsKLSsjaWYgMAotKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gZW5zdXJlIHRoZSBl cnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCi0rICogbmFtZSBpcyB0byBrZWVwIHRo ZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVpZXQKLSsgKi8KLSt2b2lkIGhhc2hfZmluYWwodm9p ZCkKLSsJewotKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19NRVRI T0QpOwotKwl9Ci0rI2VuZGlmCi0rCi0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzODM1 MjI4NCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxm dGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM5MzUyMzA3ICswMjAwCi1AQCAtMCwwICsxLDE2 MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NM 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 TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwlpbnQgbmlkOwotKwljb25z dCB1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5HVEhdOyBzaXplX3Qga2V5c2l6ZTsK LSsJY29uc3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOyBzaXplX3QgbXNnc2l6ZTsKLSsJY29uc3Qg dW5zaWduZWQgY2hhciBtYWNbMzJdOyBzaXplX3QgbWFjc2l6ZTsKLSt9IENNQUNfS0FUOwotKwot Ky8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0z OEIvU1BfODAwLTM4Qi5wZGYgKi8KLStzdGF0aWMgY29uc3QgQ01BQ19LQVQgdmVjdG9yW10gPSB7 Ci0rICAgIHsJTklEX2Flc18xMjhfY2JjLAkvKiBDb3VudCA9IDMyIGZyb20gQ01BQ0dlbkFFUzEy OC50eHQgKi8KLSsJeyAweDc3LDB4YTcsMHg3ZiwweGFmLCAweDI5LDB4MGMsMHgxZiwweGEzLAot KwkgIDB4MGMsMHg2OCwweDNkLDB4ZjEsIDB4NmIsMHhhNywweGE3LDB4N2IsIH0sIDEyOCwKLSsJ eyAweDAyLDB4MDYsMHg4MywweGUxLCAweGYwLDB4MzksMHgyZiwweDRjLAotKwkgIDB4YWMsMHg1 NCwweDMxLDB4OGIsIDB4NjAsMHgyOSwweDI1LDB4OWUsCi0rCSAgMHg5YywweDU1LDB4M2QsMHhi YywgMHg0YiwweDZhLDB4ZDksMHg5OCwKLSsJICAweGU2LDB4NGQsMHg1OCwweGU0LCAweGU3LDB4 ZGMsMHgyZSwweDEzLCB9LCAyNTYsCi0rCXsgMHhmYiwweGZlLDB4YTQsMHgxYiwgfSwgMzIKLSsg ICAgfSwKLSsgICAgewlOSURfYWVzXzE5Ml9jYmMsCS8qIENvdW50ID0gMjMgZnJvbSBDTUFDR2Vu QUVTMTkyLnR4dCAqLwotKwl7IDB4N2IsMHgzMiwweDM5LDB4MTMsIDB4NjksMHhhYSwweDRjLDB4 YTksCi0rCSAgMHg3NSwweDU4LDB4MDksMHg1YiwgMHhlMywweGMzLDB4ZWMsMHg4NiwKLSsJICAw eDJiLDB4ZDAsMHg1NywweGNlLCAweGYxLDB4ZTMsMHgyZCwweDYyLCB9LCAxOTIsCi0rCXsgMHgw IH0sIDAsCi0rCXsgMHhlNCwweGQ5LDB4MzQsMHgwYiwgMHgwMywweGU2LDB4N2QsMHhlZiwKLSsJ ICAweGQ0LDB4OTYsMHg5YywweGMxLCAweGVkLDB4MzcsMHgzNSwweGU2LCB9LCAxMjgsCi0rICAg IH0sCi0rICAgIHsJTklEX2Flc18yNTZfY2JjLAkvKiBDb3VudCA9IDMzIGZyb20gQ01BQ0dlbkFF UzI1Ni50eHQgKi8KLSsJeyAweDBiLDB4MTIsMHgyYSwweGM4LCAweGYzLDB4NGUsMHhkMSwweGZl LAotKwkgIDB4MDgsMHgyYSwweDM2LDB4MjUsIDB4ZDEsMHg1NywweDU2LDB4MTQsCi0rCSAgMHg1 NCwweDE2LDB4N2EsMHhjMSwgMHg0NSwweGExLDB4MGIsMHhiZiwKLSsJICAweDc3LDB4YzYsMHhh NywweDA1LCAweDk2LDB4ZDUsMHg3NCwweGYxLCB9LCAyNTYsCi0rCXsgMHg0OSwweDhiLDB4NTMs MHhmZCwgMHhlYywweDg3LDB4ZWQsMHhjYiwKLSsJICAweGYwLDB4NzAsMHg5NywweGRjLCAweGNk LDB4ZTksMHgzYSwweDA4LAotKwkgIDB4NGIsMHhhZCwweDc1LDB4MDEsIDB4YTIsMHgyNCwweGUz LDB4ODgsCi0rCSAgMHhkZiwweDM0LDB4OWMsMHhlMSwgMHg4OSwweDU5LDB4ZmUsMHg4NCwKLSsJ ICAweDg1LDB4ZjgsMHhhZCwweDE1LCAweDM3LDB4ZjAsMHhkOCwweDk2LAotKwkgIDB4ZWEsMHg3 MywweGJlLDB4ZGMsIDB4NzIsMHgxNCwweDcxLDB4M2YsIH0sIDM4NCwKLSsJeyAweGY2LDB4MmMs MHg0NiwweDMyLCAweDliLCB9LCA0MCwKLSsgICAgfSwKLSsgICAgewlOSURfZGVzX2VkZTNfY2Jj LAkvKiBDb3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJlcSAqLwotKwl7IDB4ODksMHhiYyww eGQ5LDB4NTIsIDB4YTgsMHhjOCwweGFiLDB4MzcsCi0rCSAgMHgxYSwweGY0LDB4OGEsMHhjNywg MHhkMCwweDcwLDB4ODUsMHhkNSwKLSsJICAweGVmLDB4ZjcsMHgwMiwweGU2LCAweGQ2LDB4MmMs MHhkYywweDIzLCB9LCAxOTIsCi0rCXsgMHhmYSwweDYyLDB4MGMsMHgxYiwgMHhiZSwweDk3LDB4 MzEsMHg5ZSwKLSsJICAweDlhLDB4MGMsMHhmMCwweDQ5LCAweDIxLDB4MjEsMHhmNywweGEyLAot KwkgIDB4MGUsMHhiMCwweDhhLDB4NmEsIDB4NzAsMHg5ZCwweGNiLDB4ZDAsCi0rCSAgMHgwYSww eGFmLDB4MzgsMHhlNCwgMHhmOSwweDllLDB4NzUsMHg0ZSwgfSwgMjU2LAotKwl7IDB4OGYsMHg0 OSwweGExLDB4YjcsIDB4ZDYsMHhhYSwweDIyLDB4NTgsIH0sIDY0LAotKyAgICB9LAotK307Ci0r Ci0raW50IEZJUFNfc2VsZnRlc3RfY21hYygpCi0rCXsKLSsJc2l6ZV90IG4sIG91dGxlbjsKLSsJ dW5zaWduZWQgY2hhciAgICBvdXRbMzJdOwotKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXI7Ci0r CUNNQUNfQ1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsJY29uc3QgQ01BQ19LQVQgKnQ7Ci0r CWludCBydiA9IDE7Ci0rCi0rCWZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6 ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCi0rCQl7Ci0rCQljaXBoZXIgPSBGSVBTX2dldF9jaXBo ZXJieW5pZCh0LT5uaWQpOwotKwkJaWYgKCFjaXBoZXIpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0r CQkJZ290byBlcnI7Ci0rCQkJfQotKwkJaWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQtPmtl eXNpemUvOCwgY2lwaGVyLCAwKSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVycjsK LSsJCQl9Ci0rCQlpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+bXNnLCB0LT5tc2dzaXplLzgpKQot KwkJCXsKLSsJCQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCQkKLSsJCWlmICgh Q01BQ19GaW5hbChjdHgsIG91dCwgJm91dGxlbikpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0rCQkJ Z290byBlcnI7Ci0rCQkJfQotKwkJQ01BQ19DVFhfY2xlYW51cChjdHgpOwotKwotKwkJaWYob3V0 bGVuIDwgdC0+bWFjc2l6ZS84IHx8IG1lbWNtcChvdXQsdC0+bWFjLHQtPm1hY3NpemUvOCkpCi0r CQkJewotKwkJICAgIAlydiA9IDA7Ci0rCQkgICAgCX0KLSsJCX0KLSsKLSsJZXJyOgotKwlDTUFD X0NUWF9mcmVlKGN0eCk7Ci0rCi0rCWlmIChydiA9PSAtMSkKLSsJCXsKLSsJCXJ2ID0gMDsKLSsJ CX0KLSsJaWYgKCFydikKLSsJCSAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQyxG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA3 LTEyIDIxOjQ5OjI1LjMzOTM1MjMwNyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9m aXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzkzNTIzMDcgKzAy MDAKLUBAIC0wLDAgKzEsMTQ3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNvbnN0IHN0cnVjdAotKyAgICB7Ci0rICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBw bGFpbnRleHRbOF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKLSsg ICAgfSB0ZXN0czJbXT0KLSsJewotKwl7Ci0rCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4 MDQsMHgxNiwweGVjLAotKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhj NCB9LAotKwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAotKwl7 IDB4NGMsMHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9Ci0rCX0sCi0rCXsKLSsJ eyAweDVkLDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCi0rCSAgMHgwMSwweDE2 LDB4N2MsMHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCi0rCXsgMHg5YywweDUwLDB4MDksMHgw ZiwweDVlLDB4N2QsMHg2OSwweDdlIH0sCi0rCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4 MGQsMHg5ZSwweGZmIH0sCi0rCX0KLSsJfTsKLSsKLStzdGF0aWMgY29uc3Qgc3RydWN0Ci0rICAg IHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMjRdOwotKyAgICBjb25zdCB1bnNpZ25l ZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0 WzhdOwotKyAgICB9IHRlc3RzM1tdPQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCSAgMHhGRSwweERDLDB4QkEsMHg5OCwweDc2LDB4NTQs MHgzMiwweDEwLAotKwkgIDB4MTIsMHgzNCwweDU2LDB4NzgsMHg5YSwweGJjLDB4ZGUsMHhmMCB9 LAotKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1ZCwweDQ4LDB4YjQsMHgxYyB9LAotKwl7IDB4 NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEyLDB4ZWEsMHgxYiB9LAotKwl9LAotKwl7Ci0rCXsg MHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwweEZFLAotKwkgIDB4MDEsMHgyMyww eDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKLSsJICAweEVELDB4MzksMHhEOSwweDUwLDB4 RkEsMHg3NCwweEJDLDB4QzQgfSwKLSsJeyAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiww eENELDB4RUYgfSwKLSsJeyAweDExLDB4MjUsMHhiMCwweDM1LDB4YmUsMHhhMCwweDgyLDB4ODYg fSwKLSsJfSwKLSsJfTsKLSsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfZGVzOwotKwotK3ZvaWQg RklQU19jb3JydXB0X2RlcygpCi0rICAgIHsKLSsgICAgY29ycnVwdF9kZXMgPSAxOwotKyAgICB9 Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKLSsgICAgewotKyAgICBpbnQgbiwgcmV0ID0g MDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZj dHgpOwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJl IHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQotKwl7Ci0r CXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKwotKwltZW1jcHkocGxhaW50ZXh0LCB0ZXN0 czJbbl0ucGxhaW50ZXh0LCBzaXplb2YocGxhaW50ZXh0KSk7Ci0rCWlmIChjb3JydXB0X2RlcykK LSsJCXBsYWludGV4dFswXSsrOwotKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rl c19lZGVfZWNiKCksCi0rCQkJCXRlc3RzMltuXS5rZXksIE5VTEwsCi0rCQkJCXBsYWludGV4dCwg dGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290byBlcnI7Ci0rCX0KLSsKLSsgICAgLyog RW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICov Ci0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKLSsJewotKwlpZiAoIWZpcHNfY2lwaGVyX3Rl c3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAotKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxMLAot KwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCi0rCQln b3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAgICBlcnI6Ci0rICAgIEVWUF9DSVBIRVJf Q1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkKLSsJICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwotKyAgICBy ZXR1cm4gcmV0OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfY3RyLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdf Y3RyLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjMzOTM1MjMwNyArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjMzOTM1MjMwNyArMDIwMAotQEAgLTAsMCArMSw0MzYgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19k cmJnX2N0ci5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBv 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 IDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5j bHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotK3N0YXRpYyB2b2lkIGluY18xMjgoRFJCR19DVFJf Q1RYICpjY3R4KQotKwl7Ci0rCWludCBpOwotKwl1bnNpZ25lZCBjaGFyIGM7Ci0rCXVuc2lnbmVk IGNoYXIgKnAgPSBjY3R4LT5WICsgMTU7Ci0rCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKwkJ ewotKwkJYyA9ICpwOwotKwkJYysrOwotKwkJKnAgPSBjOwotKwkJaWYgKGMpCi0rCQkJcmV0dXJu OwotKwkJcC0tOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX1hPUihEUkJHX0NUUl9D VFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsKLSsJ c2l6ZV90IGksIG47Ci0rCS8qIEFueSB6ZXJvIHBhZGRpbmcgd2lsbCBoYXZlIG5vIGVmZmVjdCBv biB0aGUgcmVzdWx0IGFzIHdlCi0rCSAqIGFyZSBYT1JpbmcuIFNvIGp1c3QgcHJvY2VzcyBob3dl dmVyIG11Y2ggaW5wdXQgd2UgaGF2ZS4KLSsJICovCi0rCi0rCWlmICghaW4gfHwgIWlubGVuKQot KwkJcmV0dXJuOwotKwotKwlpZiAoaW5sZW4gPCBjY3R4LT5rZXlsZW4pCi0rCQluID0gaW5sZW47 Ci0rCWVsc2UKLSsJCW4gPSBjY3R4LT5rZXlsZW47Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCBuOyBp KyspCi0rCQljY3R4LT5LW2ldIF49IGluW2ldOwotKwlpZiAoaW5sZW4gPD0gY2N0eC0+a2V5bGVu KQotKwkJcmV0dXJuOwotKwotKwluID0gaW5sZW4gLSBjY3R4LT5rZXlsZW47Ci0rCS8qIFNob3Vs ZCBuZXZlciBoYXBwZW4gKi8KLSsJaWYgKG4gPiAxNikKLSsJCW4gPSAxNjsKLSsJZm9yIChpID0g MDsgaSA8IDE2OyBpKyspCi0rCQljY3R4LT5WW2ldIF49IGluW2kgKyBjY3R4LT5rZXlsZW5dOwot Kwl9Ci0rCi0rLyogUHJvY2VzcyBhIGNvbXBsZXRlIGJsb2NrIHVzaW5nIEJDQyBhbGdvcml0aG0g b2YgU1BQIDgwMC05MCAxMC40LjMgKi8KLSsKLStzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrKERS QkdfQ1RSX0NUWCAqY2N0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCQljb25zdCB1bnNpZ25l ZCBjaGFyICppbikKLSsJewotKwlpbnQgaTsKLSsJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0r CQlvdXRbaV0gXj0gaW5baV07Ci0rCUFFU19lbmNyeXB0KG91dCwgb3V0LCAmY2N0eC0+ZGZfa3Mp OwotKyNpZiAwCi0rZnByaW50ZihzdGRlcnIsICJCQ0MgaW4rb3V0XG4iKTsKLStCSU9fZHVtcF9m cChzdGRlcnIsIGluLCAxNik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBvdXQsIDE2KTsKLSsjZW5k aWYKLSsJfQotKwotKy8qIEhhbmRsZSBzZXZlcmFsIEJDQyBvcGVyYXRpb25zIGZvciBhcyBtdWNo IGRhdGEgYXMgd2UgbmVlZCBmb3IgSyBhbmQgWCAqLwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxv Y2tzKERSQkdfQ1RSX0NUWCAqY2N0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4pCi0rCXsKLSsJ Y3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgaW4pOwotKwljdHJfQkNDX2Jsb2NrKGNjdHgs IGNjdHgtPktYICsgMTYsIGluKTsKLSsJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKLSsJCWN0cl9C Q0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAzMiwgaW4pOwotKwl9Ci0rLyogSW5pdGlhbGlzZSBC Q0MgYmxvY2tzOiB0aGVzZSBoYXZlIHRoZSB2YWx1ZSAwLDEsMiBpbiBsZWZ0bW9zdCBwb3NpdGlv bnM6Ci0rICogc2VlIDEwLjQuMiBzdGFnZSA3LgotKyAqLwotK3N0YXRpYyB2b2lkIGN0cl9CQ0Nf aW5pdChEUkJHX0NUUl9DVFggKmNjdHgpCi0rCXsKLSsJbWVtc2V0KGNjdHgtPktYLCAwLCA0OCk7 Ci0rCW1lbXNldChjY3R4LT5ibHRtcCwgMCwgMTYpOwotKwljdHJfQkNDX2Jsb2NrKGNjdHgsIGNj dHgtPktYLCBjY3R4LT5ibHRtcCk7Ci0rCWNjdHgtPmJsdG1wWzNdID0gMTsKLSsJY3RyX0JDQ19i bG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBjY3R4LT5ibHRtcCk7Ci0rCWlmIChjY3R4LT5rZXls ZW4gIT0gMTYpCi0rCQl7Ci0rCQljY3R4LT5ibHRtcFszXSA9IDI7Ci0rCQljdHJfQkNDX2Jsb2Nr KGNjdHgsIGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsKLSsJCX0KLSsJfQotKwotKy8qIFBy b2Nlc3Mgc2V2ZXJhbCBibG9ja3MgaW50byBCQ0MgYWxnb3JpdGhtLCBzb21lIHBvc3NpYmx5IHBh cnRpYWwgKi8KLStzdGF0aWMgdm9pZCBjdHJfQkNDX3VwZGF0ZShEUkJHX0NUUl9DVFggKmNjdHgs Ci0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsKLSsJaWYg KCFpbiB8fCAhaW5sZW4pCi0rCQlyZXR1cm47Ci0rCS8qIElmIHdlIGhhdmUgcGFydGlhbCBibG9j ayBoYW5kbGUgaXQgZmlyc3QgKi8KLSsJaWYgKGNjdHgtPmJsdG1wX3BvcykKLSsJCXsKLSsJCXNp emVfdCBsZWZ0ID0gMTYgLSBjY3R4LT5ibHRtcF9wb3M7Ci0rCQkvKiBJZiB3ZSBub3cgaGF2ZSBh IGNvbXBsZXRlIGJsb2NrIHByb2Nlc3MgaXQgKi8KLSsJCWlmIChpbmxlbiA+PSBsZWZ0KQotKwkJ CXsKLSsJCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBsZWZ0KTsK LSsJCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7Ci0rCQkJY2N0eC0+Ymx0bXBf cG9zID0gMDsKLSsJCQlpbmxlbiAtPSBsZWZ0OwotKwkJCWluICs9IGxlZnQ7Ci0rCQkJfQotKwkJ fQotKwkvKiBQcm9jZXNzIHplcm8gb3IgbW9yZSBjb21wbGV0ZSBibG9ja3MgKi8KLSsJd2hpbGUg KGlubGVuID49IDE2KQotKwkJewotKwkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgaW4pOwotKwkJaW4g Kz0gMTY7Ci0rCQlpbmxlbiAtPSAxNjsKLSsJCX0KLSsJLyogQ29weSBhbnkgcmVtYWluaW5nIHBh cnRpYWwgYmxvY2sgdG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KLSsJaWYgKGlubGVuID4gMCkK LSsJCXsKLSsJCW1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGlubGVu KTsKLSsJCWNjdHgtPmJsdG1wX3BvcyArPSBpbmxlbjsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyB2 b2lkIGN0cl9CQ0NfZmluYWwoRFJCR19DVFJfQ1RYICpjY3R4KQotKwl7Ci0rCWlmIChjY3R4LT5i bHRtcF9wb3MpCi0rCQl7Ci0rCQltZW1zZXQoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3Ms IDAsIDE2IC0gY2N0eC0+Ymx0bXBfcG9zKTsKLSsJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNjdHgt PmJsdG1wKTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyB2b2lkIGN0cl9kZihEUkJHX0NUUl9DVFgg KmNjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKLSsJCQljb25zdCB1bnNp Z25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4pCi0rCXsKLSsJc2l6ZV90IGlubGVuOwotKwl1 bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+Ymx0bXA7Ci0rCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGM4 MCA9IDB4ODA7Ci0rCi0rCWN0cl9CQ0NfaW5pdChjY3R4KTsKLSsJaWYgKCFpbjEpCi0rCQlpbjFs ZW4gPSAwOwotKwlpZiAoIWluMikKLSsJCWluMmxlbiA9IDA7Ci0rCWlmICghaW4zKQotKwkJaW4z bGVuID0gMDsKLSsJaW5sZW4gPSBpbjFsZW4gKyBpbjJsZW4gKyBpbjNsZW47Ci0rCS8qIEluaXRp YWxpc2UgTHx8TiBpbiB0ZW1wb3JhcnkgYmxvY2sgKi8KLSsJKnArKyA9IChpbmxlbiA+PiAyNCkg JiAweGZmOwotKwkqcCsrID0gKGlubGVuID4+IDE2KSAmIDB4ZmY7Ci0rCSpwKysgPSAoaW5sZW4g Pj4gOCkgJiAweGZmOwotKwkqcCsrID0gaW5sZW4gJiAweGZmOwotKwkvKiBOQiBrZXlsZW4gaXMg YXQgbW9zdCAzMiBieXRlcyAqLwotKwkqcCsrID0gMDsKLSsJKnArKyA9IDA7Ci0rCSpwKysgPSAw OwotKwkqcCA9ICh1bnNpZ25lZCBjaGFyKSgoY2N0eC0+a2V5bGVuICsgMTYpICYgMHhmZik7Ci0r CWNjdHgtPmJsdG1wX3BvcyA9IDg7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMSwgaW4xbGVu KTsKLSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4yLCBpbjJsZW4pOwotKwljdHJfQkNDX3VwZGF0 ZShjY3R4LCBpbjMsIGluM2xlbik7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsICZjODAsIDEpOwot KwljdHJfQkNDX2ZpbmFsKGNjdHgpOwotKwkvKiBTZXQgdXAga2V5IEsgKi8KLSsJQUVTX3NldF9l bmNyeXB0X2tleShjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICogOCwgJmNjdHgtPmRmX2t4a3MpOwot KwkvKiBYIGZvbGxvd3Mga2V5IEsgKi8KLSsJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyBjY3R4LT5r ZXlsZW4sIGNjdHgtPktYLCAmY2N0eC0+ZGZfa3hrcyk7Ci0rCUFFU19lbmNyeXB0KGNjdHgtPktY LCBjY3R4LT5LWCArIDE2LCAmY2N0eC0+ZGZfa3hrcyk7Ci0rCWlmIChjY3R4LT5rZXlsZW4gIT0g MTYpCi0rCQlBRVNfZW5jcnlwdChjY3R4LT5LWCArIDE2LCBjY3R4LT5LWCArIDMyLCAmY2N0eC0+ ZGZfa3hrcyk7Ci0rI2lmIDAKLStmcHJpbnRmKHN0ZGVyciwgIk91dHB1dCBvZiBjdHJfZGY6XG4i KTsKLStCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKyAxNik7Ci0r I2VuZGlmCi0rCX0KLSsKLSsvKiBOQiB0aGUgbm8tZGYgIFVwZGF0ZSBpbiBTUDgwMC05MCBzcGVj aWZpZXMgYSBjb25zdGFudCBpbnB1dCBsZW5ndGgKLSsgKiBvZiBzZWVkbGVuLCBob3dldmVyIG90 aGVyIHVzZXMgb2YgdGhpcyBhbGdvcml0aG0gcGFkIHRoZSBpbnB1dCB3aXRoCi0rICogemVyb2Vz IGlmIG5lY2Vzc2FyeSBhbmQgaGF2ZSB1cCB0byB0d28gcGFyYW1ldGVycyBYT1JlZCB0b2dldGhl ciwKLSsgKiBoYW5kbGUgYm90aCBjYXNlcyBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCi0rICov Ci0rCi0rc3RhdGljIHZvaWQgY3RyX1VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmluMiwgc2l6ZV90IGluMmxlbiwKLSsJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXpl X3Qgbm9uY2VsZW4pCi0rCXsKLSsJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwot KwkvKiBrcyBpcyBhbHJlYWR5IHNldHVwIGZvciBjb3JyZWN0IGtleSAqLwotKwlpbmNfMTI4KGNj dHgpOwotKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOwotKwkvKiBJ ZiBrZXlsZW4gbG9uZ2VyIHRoYW4gMTI4IGJpdHMgbmVlZCBleHRyYSBlbmNyeXB0ICovCi0rCWlm IChjY3R4LT5rZXlsZW4gIT0gMTYpCi0rCQl7Ci0rCQlpbmNfMTI4KGNjdHgpOwotKwkJQUVTX2Vu Y3J5cHQoY2N0eC0+ViwgY2N0eC0+SyArIDE2LCAmY2N0eC0+a3MpOwotKwkJfQotKwlpbmNfMTI4 KGNjdHgpOwotKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5WLCAmY2N0eC0+a3MpOwotKwkv KiBJZiAxOTIgYml0IGtleSBwYXJ0IG9mIFYgaXMgb24gZW5kIG9mIEsgKi8KLSsJaWYgKGNjdHgt PmtleWxlbiA9PSAyNCkKLSsJCXsKLSsJCW1lbWNweShjY3R4LT5WICsgOCwgY2N0eC0+ViwgOCk7 Ci0rCQltZW1jcHkoY2N0eC0+ViwgY2N0eC0+SyArIDI0LCA4KTsKLSsJCX0KLSsKLSsJaWYgKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQotKwkJewotKwkJLyogSWYgbm8gaW5w dXQgcmV1c2UgZXhpc3RpbmcgZGVyaXZlZCB2YWx1ZSAqLwotKwkJaWYgKGluMSB8fCBub25jZSB8 fCBpbjIpCi0rCQkJY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVuLCBub25jZSwgbm9uY2VsZW4sIGlu MiwgaW4ybGVuKTsKLSsJCS8qIElmIHRoaXMgYSByZXVzZSBpbnB1dCBpbjFsZW4gIT0gMCAqLwot KwkJaWYgKGluMWxlbikKLSsJCQljdHJfWE9SKGNjdHgsIGNjdHgtPktYLCBkY3R4LT5zZWVkbGVu KTsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJY3RyX1hPUihjY3R4LCBpbjEsIGluMWxlbik7Ci0r CQljdHJfWE9SKGNjdHgsIGluMiwgaW4ybGVuKTsKLSsJCX0KLSsKLSsJQUVTX3NldF9lbmNyeXB0 X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKLSsjaWYgMAotK2Zwcmlu dGYoc3RkZXJyLCAiSytWIGFmdGVyIHVwZGF0ZSBpczpcbiIpOwotK0JJT19kdW1wX2ZwKHN0ZGVy ciwgY2N0eC0+SywgY2N0eC0+a2V5bGVuKTsKLStCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPlYs IDE2KTsKLSsjZW5kaWYKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfaW5zdGFudGlhdGUo RFJCR19DVFggKmRjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50 bGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCi0rCXsKLSsJRFJC R19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKwltZW1zZXQoY2N0eC0+SywgMCwgc2l6 ZW9mKGNjdHgtPkspKTsKLSsJbWVtc2V0KGNjdHgtPlYsIDAsIHNpemVvZihjY3R4LT5WKSk7Ci0r CUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7 Ci0rCWN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIHBlcnMsIHBlcnNsZW4sIG5vbmNlLCBu b25jZWxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9yZXNl ZWQoRFJCR19DVFggKmRjdHgsIAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90 IGVudGxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikK LSsJewotKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBhZGluLCBhZGlubGVuLCBOVUxM LCAwKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX2dlbmVyYXRl KERSQkdfQ1RYICpkY3R4LAotKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwK LSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKLSsJewotKwlE UkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rCWlmIChhZGluICYmIGFkaW5sZW4p Ci0rCQl7Ci0rCQljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5VTEws IDApOwotKwkJLyogVGhpcyBtZWFucyB3ZSByZXVzZSBkZXJpdmVkIHZhbHVlICovCi0rCQlpZiAo ZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCi0rCQkJewotKwkJCWFkaW4gPSBO VUxMOwotKwkJCWFkaW5sZW4gPSAxOwotKwkJCX0KLSsJCX0KLSsJZWxzZQotKwkJYWRpbmxlbiA9 IDA7Ci0rCi0rCWZvciAoOzspCi0rCQl7Ci0rCQlpbmNfMTI4KGNjdHgpOwotKwkJaWYgKCEoZGN0 eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKLSsJCQl7Ci0r CQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgZGN0eC0+bGIsICZjY3R4LT5rcyk7Ci0rCQkJZGN0eC0+ bGJfdmFsaWQgPSAxOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmIChvdXRsZW4gPCAxNikK LSsJCQl7Ci0rCQkJLyogVXNlIEsgYXMgdGVtcCBzcGFjZSBhcyBpdCB3aWxsIGJlIHVwZGF0ZWQg Ki8KLSsJCQlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOwotKwkJCWlm ICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgY2N0eC0+SykpCi0rCQkJCXJldHVybiAwOwot KwkJCW1lbWNweShvdXQsIGNjdHgtPkssIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwkJ QUVTX2VuY3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3MpOwotKwkJaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBvdXQpKQotKwkJCXJldHVybiAwOwotKwkJb3V0ICs9IDE2OwotKwkJ b3V0bGVuIC09IDE2OwotKwkJaWYgKG91dGxlbiA9PSAwKQotKwkJCWJyZWFrOwotKwkJfQotKwot KwljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOwotKwot KwlyZXR1cm4gMTsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfdW5pbnN0YW50aWF0 ZShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwltZW1zZXQoJmRjdHgtPmQuY3RyLCAwLCBzaXplb2Yo RFJCR19DVFJfQ1RYKSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGZpcHNfZHJiZ19jdHJf aW5pdChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ ZC5jdHI7Ci0rCi0rCXNpemVfdCBrZXlsZW47Ci0rCi0rCXN3aXRjaCAoZGN0eC0+dHlwZSkKLSsJ CXsKLSsJCWNhc2UgTklEX2Flc18xMjhfY3RyOgotKwkJa2V5bGVuID0gMTY7Ci0rCQlicmVhazsK LSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY3RyOgotKwkJa2V5bGVuID0gMjQ7Ci0rCQlicmVhazsK LSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY3RyOgotKwkJa2V5bGVuID0gMzI7Ci0rCQlicmVhazsK LSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gLTI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmluc3RhbnRp YXRlID0gZHJiZ19jdHJfaW5zdGFudGlhdGU7Ci0rCWRjdHgtPnJlc2VlZCA9IGRyYmdfY3RyX3Jl c2VlZDsKLSsJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2N0cl9nZW5lcmF0ZTsKLSsJZGN0eC0+dW5p bnN0YW50aWF0ZSA9IGRyYmdfY3RyX3VuaW5zdGFudGlhdGU7Ci0rCi0rCWNjdHgtPmtleWxlbiA9 IGtleWxlbjsKLSsJZGN0eC0+c3RyZW5ndGggPSBrZXlsZW4gKiA4OwotKwlkY3R4LT5ibG9ja2xl bmd0aCA9IDE2OwotKwlkY3R4LT5zZWVkbGVuID0ga2V5bGVuICsgMTY7Ci0rCi0rCWlmIChkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKLSsJCXsKLSsJCS8qIGRmIGluaXRpYWxp c2F0aW9uICovCi0rCQlzdGF0aWMgdW5zaWduZWQgY2hhciBkZl9rZXlbMzJdID0KLSsJCQl7Ci0r CQkJMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAotKwkJCTB4MDgsMHgw OSwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwKLSsJCQkweDEwLDB4MTEsMHgxMiwweDEz LDB4MTQsMHgxNSwweDE2LDB4MTcsCi0rCQkJMHgxOCwweDE5LDB4MWEsMHgxYiwweDFjLDB4MWQs MHgxZSwweDFmIAotKwkJCX07Ci0rCQkvKiBTZXQga2V5IHNjaGVkdWxlIGZvciBkZl9rZXkgKi8K LSsJCUFFU19zZXRfZW5jcnlwdF9rZXkoZGZfa2V5LCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmRm X2tzKTsKLSsKLSsJCWRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0eC0+a2V5bGVuOwotKwkJZGN0eC0+ bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCQlkY3R4LT5taW5fbm9uY2UgPSBkY3R4 LT5taW5fZW50cm9weSAvIDI7Ci0rCQlkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7 Ci0rCQlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCWRjdHgtPm1heF9hZGlu ID0gRFJCR19NQVhfTEVOR1RIOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlkY3R4LT5taW5fZW50 cm9weSA9IGRjdHgtPnNlZWRsZW47Ci0rCQlkY3R4LT5tYXhfZW50cm9weSA9IGRjdHgtPnNlZWRs ZW47Ci0rCQkvKiBOb25jZSBub3QgdXNlZCAqLwotKwkJZGN0eC0+bWluX25vbmNlID0gMDsKLSsJ CWRjdHgtPm1heF9ub25jZSA9IDA7Ci0rCQlkY3R4LT5tYXhfcGVycyA9IGRjdHgtPnNlZWRsZW47 Ci0rCQlkY3R4LT5tYXhfYWRpbiA9IGRjdHgtPnNlZWRsZW47Ci0rCQl9Ci0rCi0rCWRjdHgtPm1h eF9yZXF1ZXN0ID0gMTw8MTY7Ci0rCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0OwotKwot KwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19o YXNoLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jLmZp cHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzkzNTIzMDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM5MzUy MzA3ICswMjAwCi1AQCAtMCwwICsxLDM3OCBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaGFz aC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9w ZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNp bmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyogVGhp cyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQuMSAqLwotKwotK3N0YXRpYyBpbnQgaGFz aF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpp bjIsIHNpemVfdCBpbjJsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3Qg aW4zbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluNCwgc2l6ZV90IGluNGxlbikKLSsJ ewotKwlFVlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQuaGFzaC5tY3R4OwotKwl1bnNpZ25lZCBj aGFyICp2dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7Ci0rCXVuc2lnbmVkIGNoYXIgdG1wWzZdOwot KwkvKiBTdGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdh eXMgbGVzcyB0aGFuCi0rCSAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sg bGVuZ3RoLgotKwkgKi8KLSsJc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47Ci0rCXRtcFsw XSA9IDE7Ci0rCXRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsKLSsJdG1wWzJd ID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOwotKwl0bXBbM10gPSAoKG91dGxlbiAqIDgp ID4+IDgpICYgMHhmZjsKLSsJdG1wWzRdID0gKG91dGxlbiAqIDgpICYgMHhmZjsKLSsJaWYgKCFp bjEpCi0rCQl7Ci0rCQl0bXBbNV0gPSAodW5zaWduZWQgY2hhcilpbjFsZW47Ci0rCQlpbjEgPSB0 bXAgKyA1OwotKwkJaW4xbGVuID0gMTsKLSsJCX0KLSsJZm9yICg7OykKLSsJCXsKLSsJCWlmICgh RklQU19kaWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkpCi0rCQkJcmV0dXJuIDA7Ci0r CQlpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCi0rCQkJcmV0dXJuIDA7Ci0r CQlpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEsIGluMWxlbikpCi0rCQkJ cmV0dXJuIDA7Ci0rCQlpZiAoaW4yICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIsIGlu MmxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZSht Y3R4LCBpbjMsIGluM2xlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW40ICYmICFGSVBTX2Rp Z2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAob3V0 bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCi0rCQkJewotKwkJCWlmICghRklQU19kaWdlc3RmaW5h bChtY3R4LCB2dG1wLCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5KG91dCwgdnRt cCwgb3V0bGVuKTsKLSsJCQlPUEVOU1NMX2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgp OwotKwkJCXJldHVybiAxOwotKwkJCX0KLSsJCWVsc2UgaWYoIUZJUFNfZGlnZXN0ZmluYWwobWN0 eCwgb3V0LCBOVUxMKSkKLSsJCQlyZXR1cm4gMDsKLSsKLSsJCW91dGxlbiAtPSBkY3R4LT5ibG9j a2xlbmd0aDsKLSsJCWlmIChvdXRsZW4gPT0gMCkKLSsJCQlyZXR1cm4gMTsKLSsJCXRtcFswXSsr OwotKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKwkJfQotKwl9Ci0rCi0rCi0rLyogQWRk IGFuIHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1bHQg aW4gYnVmLiBGb3IKLSsgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVy IGV4Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0eF9hZGRf YnVmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCi0rCQkJCXVuc2lnbmVkIGNo YXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsKLSsJc2l6ZV90IGkgPSBpbmxlbjsKLSsJY29uc3Qg dW5zaWduZWQgY2hhciAqcTsKLSsJdW5zaWduZWQgY2hhciBjLCAqcDsKLSsJcCA9IGJ1ZiArIGRj dHgtPnNlZWRsZW47Ci0rCXEgPSBpbiArIGlubGVuOwotKwotKwlPUEVOU1NMX2Fzc2VydChpIDw9 IGRjdHgtPnNlZWRsZW4pOwotKwotKwkvKiBTcGVjaWFsIGNhc2U6IHplcm8gbGVuZ3RoLCBqdXN0 IGluY3JlbWVudCBidWZmZXIgKi8KLSsJaWYgKGkpCi0rCQljID0gMDsKLSsJZWxzZSAKLSsJCWMg PSAxOwotKwotKwl3aGlsZSAoaSkKLSsJCXsKLSsJCWludCByOwotKwkJcC0tOwotKwkJcS0tOwot KwkJciA9ICpwICsgKnEgKyBjOwotKwkJLyogQ2FycnkgKi8KLSsJCWlmIChyID4gMHhmZikKLSsJ CQljID0gMTsKLSsJCWVsc2UKLSsJCQljID0gMDsKLSsJCSpwID0gciAmIDB4ZmY7Ci0rCQlpLS07 Ci0rCQl9Ci0rCi0rCWkgPSBkY3R4LT5zZWVkbGVuIC0gaW5sZW47Ci0rCi0rCS8qIElmIG5vdCBh ZGRpbmcgd2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJyaWVzICovCi0rCWlmIChjICYmIGkp Ci0rCQl7Ci0rCQlkbwotKwkJCXsKLSsJCQlwLS07Ci0rCQkJYyA9ICpwOwotKwkJCWMrKzsKLSsJ CQkqcCA9IGM7Ci0rCQkJaWYoYykKLSsJCQkJcmV0dXJuOwotKwkJCX0gd2hpbGUoaS0tKTsKLSsJ CX0KLSsJfQotKwotKy8qIEZpbmFsaXNlIGFuZCBhZGQgaGFzaCB0byBWICovCi0rCQotK3N0YXRp YyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlpZiAoIUZJUFNfZGlnZXN0 ZmluYWwoJmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhhc2gudnRtcCwgTlVMTCkpCi0rCQkJ cmV0dXJuIDA7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGRjdHgtPmQuaGFzaC5WLCBkY3R4LT5kLmhh c2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRp YyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90 IG91dGxlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJ aWYgKG91dGxlbiA9PSAwKQotKwkJcmV0dXJuIDE7Ci0rCW1lbWNweShoY3R4LT52dG1wLCBoY3R4 LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsJZm9yKDs7KQotKwkJewotKwkJRklQU19kaWdlc3Rpbml0 KCZoY3R4LT5tY3R4LCBoY3R4LT5tZCk7Ci0rCQlGSVBTX2RpZ2VzdHVwZGF0ZSgmaGN0eC0+bWN0 eCwgaGN0eC0+dnRtcCwgZGN0eC0+c2VlZGxlbik7Ci0rCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBE UkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlGSVBTX2RpZ2Vz dGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7Ci0rCQkJZGN0eC0+bGJfdmFsaWQg PSAxOwotKwkJCX0KLSsJCWVsc2UgaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJ CXsKLSsJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1wLCBOVUxMKTsK LSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhjdHgtPnZ0bXApKQotKwkJCQly ZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBoY3R4LT52dG1wLCBvdXRsZW4pOwotKwkJCXJldHVy biAxOwotKwkJCX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+ bWN0eCwgb3V0LCBOVUxMKTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91 dCkpCi0rCQkJCXJldHVybiAwOwotKwkJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJ CQlpZiAob3V0bGVuID09IDApCi0rCQkJCXJldHVybiAxOwotKwkJCW91dCArPSBkY3R4LT5ibG9j a2xlbmd0aDsKLSsJCQl9Ci0rCQljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT52dG1wLCBOVUxMLCAw KTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2luc3RhbnRpYXRlKERSQkdf Q1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVu LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKLSsJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQotKwl7Ci0rCURS QkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwlpZiAoIWhhc2hfZGYoZGN0eCwg aGN0eC0+ViwgCi0rCQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3Ry X2xlbiwKLSsJCQlOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIWhhc2hfZGYoZGN0eCwg aGN0eC0+QywgCi0rCQkJTlVMTCwgMCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKLSsJCQlOVUxM LCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwotKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UK LSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKLSsJaGV4cHJp bnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBo Y3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsJ Ci0rc3RhdGljIGludCBkcmJnX2hhc2hfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKwkJCQljb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJRFJCR19IQVNIX0NUWCAqaGN0 eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCS8qIFYgYWJvdXQgdG8gYmUgdXBkYXRlZCBzbyB1c2UgQyBh cyBvdXRwdXQgaW5zdGVhZCAqLwotKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywKLSsJCQlO VUxMLCAxLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAotKwkJCWVudCwgZW50X2xlbiwgYWRpbiwg YWRpbl9sZW4pKQotKwkJcmV0dXJuIDA7Ci0rCW1lbWNweShoY3R4LT5WLCBoY3R4LT5DLCBkY3R4 LT5zZWVkbGVuKTsKLSsJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIE5VTEwsIDAsCi0rCQkJ aGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsK LSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIHJl c2VlZDpcbiIpOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwot KwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKwly ZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RY ICpkY3R4LAotKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSsJewotKwlEUkJHX0hB U0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJRVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4 LT5tY3R4OwotKwl1bnNpZ25lZCBjaGFyIHRtcFs0XTsKLSsJaWYgKGFkaW4gJiYgYWRpbl9sZW4p Ci0rCQl7Ci0rCQl0bXBbMF0gPSAyOwotKwkJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0 eC0+bWQpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRt cCwgMSkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgaGN0 eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RV cGRhdGUobWN0eCwgYWRpbiwgYWRpbl9sZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFjdHhf YWRkX21kKGRjdHgpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWhhc2hfZ2VuKGRjdHgs IG91dCwgb3V0bGVuKSkKLSsJCXJldHVybiAwOwotKwotKwl0bXBbMF0gPSAzOwotKwlpZiAoIUZJ UFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFFVlBf RGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFFVlBfRGln ZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKwkJcmV0dXJuIDA7Ci0r Ci0rCWlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsJCXJldHVybiAwOwotKwotKwljdHhfYWRkX2J1 ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsKLSsJdG1wWzBdID0g KGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7Ci0rCXRtcFsxXSA9IChkY3R4LT5y ZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOwotKwl0bXBbMl0gPSAoZGN0eC0+cmVzZWVkX2Nv dW50ZXIgPj4gOCkgJiAweGZmOwotKwl0bXBbM10gPSBkY3R4LT5yZXNlZWRfY291bnRlciAmIDB4 ZmY7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRtcCwgNCk7Ci0rI2lmZGVmIEhBU0hf RFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBnZW5lcmF0ZTpcbiIpOwot KwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKwloZXhwcmludChz dGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJ fQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgp Ci0rCXsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhhc2gubWN0eCk7Ci0rCU9QRU5T U0xfY2xlYW5zZSgmZGN0eC0+ZC5oYXNoLCBzaXplb2YoRFJCR19IQVNIX0NUWCkpOwotKwlyZXR1 cm4gMTsKLSsJfQotKwotK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KQot Kwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ ZC5oYXNoOwotKwltZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOwotKwlpZiAo IW1kKQotKwkJcmV0dXJuIC0yOwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNl IE5JRF9zaGExOgotKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7Ci0rCQlicmVhazsKLSsKLSsJCWNh c2UgTklEX3NoYTIyNDoKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOwotKwkJYnJlYWs7Ci0rCi0r CQlkZWZhdWx0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAyNTY7Ci0rCQlicmVhazsKLSsJCX0KLSsK LSsJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfaW5zdGFudGlhdGU7Ci0rCWRjdHgtPnJl c2VlZCA9IGRyYmdfaGFzaF9yZXNlZWQ7Ci0rCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19oYXNoX2dl bmVyYXRlOwotKwlkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX3VuaW5zdGFudGlhdGU7 Ci0rCi0rCWRjdHgtPmQuaGFzaC5tZCA9IG1kOwotKwlFVlBfTURfQ1RYX2luaXQoJmhjdHgtPm1j dHgpOwotKwotKwkvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4MDAtOTAgMTAuMSB0YWJsZSAy ICovCi0rCi0rCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rCWlmIChk Y3R4LT5ibG9ja2xlbmd0aCA+IDMyKQotKwkJZGN0eC0+c2VlZGxlbiA9IDExMTsKLSsJZWxzZQot KwkJZGN0eC0+c2VlZGxlbiA9IDU1OwotKwotKwotKwlkY3R4LT5taW5fZW50cm9weSA9IGRjdHgt PnN0cmVuZ3RoIC8gODsKLSsJZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7Ci0r Ci0rCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKLSsJZGN0eC0+bWF4 X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKwlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFY X0xFTkdUSDsKLSsJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rCWRjdHgt Pm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0Owot KwotKwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5j LmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zMzkzNTIzMDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzM5 MzUyMzA3ICswMjAwCi1AQCAtMCwwICsxLDI4MSBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdf aG1hYy5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVu 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 PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLStzdGF0aWMg aW50IGRyYmdfaG1hY191cGRhdGUoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4y LCBzaXplX3QgaW4ybGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBp bjNsZW4KLSsJCQkpCi0rCXsKLSsJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzAgPSAwLCBjMSA9IDE7 Ci0rCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwlITUFDX0NUWCAqaGN0 eCA9ICZobWFjLT5oY3R4OwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBk Y3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICgh SE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0dXJu IDA7Ci0rCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMwLCAxKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCi0rCQlyZXR1cm4g MDsKLSsJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQotKwkJ cmV0dXJuIDA7Ci0rCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVu KSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVM TCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+Sywg ZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlpZiAo IUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCXJldHVy biAwOwotKwotKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rCQlyZXR1 cm4gMDsKLSsKLSsJaWYgKCFpbjFsZW4gJiYgIWluMmxlbiAmJiAhaW4zbGVuKQotKwkJcmV0dXJu IDE7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVu Z3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZSho Y3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFI TUFDX1VwZGF0ZShoY3R4LCAmYzEsIDEpKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjFsZW4gJiYg IUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4y bGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rCQlyZXR1cm4gMDsKLSsJ aWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQotKwkJcmV0dXJu IDA7Ci0rCi0rCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKLSsJCXJldHVy biAwOwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xl bmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghSE1BQ19VcGRhdGUo aGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlm ICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwotKwly ZXR1cm4gMTsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX2luc3RhbnRpYXRlKERS QkdfQ1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRf bGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwK LSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQotKwl7Ci0r CURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwltZW1zZXQoaG1hYy0+Sywg MCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwltZW1zZXQoaG1hYy0+ViwgMSwgZGN0eC0+YmxvY2ts ZW5ndGgpOwotKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKLSsJCQllbnQsIGVudF9sZW4s IG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuKSkKLSsJCXJldHVybiAwOwotKwotKyNp ZmRlZiBITUFDX0RSQkdfVFJBQ0UKLSsJZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgaW5zdGFu dGlhdGU6XG4iKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0 aCk7Ci0rCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOwotKyNl bmRpZgotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX3Jlc2VlZChE UkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50 X2xlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQot Kwl7Ci0rCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAotKwkJCWVudCwgZW50X2xlbiwgYWRp biwgYWRpbl9sZW4sIE5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNfRFJC R19UUkFDRQotKwl7Ci0rCQlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKLSsJ CWZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHJlc2VlZDpcbiIpOwotKwkJaGV4cHJpbnQoc3Rk ZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rCQloZXhwcmludChzdGRlcnIsIGht YWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJfQotKyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJ fQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJ CQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSsJewotKwlEUkJHX0hNQUNfQ1RYICpobWFj ID0gJmRjdHgtPmQuaG1hYzsKLSsJSE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKLSsJY29u c3QgdW5zaWduZWQgY2hhciAqVnRtcCA9IGhtYWMtPlY7Ci0rCWlmIChhZGluX2xlbiAmJiAhZHJi Z19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwKLSsJCQkJCQlOVUxMLCAwLCBOVUxM LCAwKSkKLSsJCXJldHVybiAwOwotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFITUFDX0luaXRf ZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsCi0rCQkJCQkJCWhtYWMtPm1kLCBO VUxMKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgVnRtcCwgZGN0 eC0+YmxvY2tsZW5ndGgpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCEoZGN0eC0+eGZsYWdzICYg RFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKLSsJCQl7Ci0rCQkJaWYgKCFITUFD X0ZpbmFsKGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJZGN0eC0+ bGJfdmFsaWQgPSAxOwotKwkJCVZ0bXAgPSBkY3R4LT5sYjsKLSsJCQljb250aW51ZTsKLSsJCQl9 Ci0rCQllbHNlIGlmIChvdXRsZW4gPiBkY3R4LT5ibG9ja2xlbmd0aCkKLSsJCQl7Ci0rCQkJaWYg KCFITUFDX0ZpbmFsKGhjdHgsIG91dCwgTlVMTCkpCi0rCQkJCXJldHVybiAwOwotKwkJCWlmICgh Zmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJVnRt cCA9IG91dDsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJewotKwkJCWlmICghSE1BQ19GaW5hbChoY3R4 LCBobWFjLT5WLCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfY3By bmdfdGVzdChkY3R4LCBobWFjLT5WKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5KG91dCwg aG1hYy0+Viwgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0rCQlvdXQgKz0gZGN0eC0+Ymxv Y2tsZW5ndGg7Ci0rCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQl9Ci0rCWlmICgh ZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCwgTlVMTCwgMCkp Ci0rCQlyZXR1cm4gMDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdf aG1hY191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCUhNQUNfQ1RYX2NsZWFu dXAoJmRjdHgtPmQuaG1hYy5oY3R4KTsKLSsJT1BFTlNTTF9jbGVhbnNlKCZkY3R4LT5kLmhtYWMs IHNpemVvZihEUkJHX0hNQUNfQ1RYKSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGZpcHNf ZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJY29uc3QgRVZQX01EICptZCA9 IE5VTEw7Ci0rCURSQkdfSE1BQ19DVFggKmhjdHggPSAmZGN0eC0+ZC5obWFjOwotKwlkY3R4LT5z dHJlbmd0aCA9IDI1NjsKLSsJc3dpdGNoIChkY3R4LT50eXBlKQotKwkJewotKwkJY2FzZSBOSURf aG1hY1dpdGhTSEExOgotKwkJbWQgPSBFVlBfc2hhMSgpOwotKwkJZGN0eC0+c3RyZW5ndGggPSAx Mjg7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgotKwkJbWQgPSBF VlBfc2hhMjI0KCk7Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsKLSsJCWJyZWFrOwotKwotKwkJ Y2FzZSBOSURfaG1hY1dpdGhTSEEyNTY6Ci0rCQltZCA9IEVWUF9zaGEyNTYoKTsKLSsJCWJyZWFr OwotKwotKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEzODQ6Ci0rCQltZCA9IEVWUF9zaGEzODQoKTsK LSsJCWJyZWFrOwotKwotKwkJY2FzZSBOSURfaG1hY1dpdGhTSEE1MTI6Ci0rCQltZCA9IEVWUF9z aGE1MTIoKTsKLSsJCWJyZWFrOwotKwotKwkJZGVmYXVsdDoKLSsJCWRjdHgtPnN0cmVuZ3RoID0g MDsKLSsJCXJldHVybiAtMjsKLSsJCX0KLSsgICAgICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJi Z19obWFjX2luc3RhbnRpYXRlOwotKyAgICAgICAgZGN0eC0+cmVzZWVkID0gZHJiZ19obWFjX3Jl c2VlZDsKLSsgICAgICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19obWFjX2dlbmVyYXRlOwotKyAg ICAgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOwotKwlI TUFDX0NUWF9pbml0KCZoY3R4LT5oY3R4KTsKLSsJaGN0eC0+bWQgPSBtZDsKLSsJZGN0eC0+Ymxv Y2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsJZGN0eC0+c2VlZGxlbiA9IE1fRVZQX01E X3NpemUobWQpOwotKwotKyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0 aCAvIDg7Ci0rICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKLSsK LSsgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKLSsgICAg ICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgICAgIGRjdHgt Pm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOwotKyAgICAgICAgZGN0eC0+bWF4X2FkaW4gPSBE UkJHX01BWF9MRU5HVEg7Ci0rCi0rICAgICAgICBkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2Owot KyAgICAgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7Ci0rCi0rCXJldHVybiAxOwot Kwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMKLS0tLSBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcwkyMDEyLTA3LTEyIDIx OjQ5OjI1LjM0MDM1MjMyOSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2Zp cHNfZHJiZ19saWIuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MDM1MjMyOSArMDIwMAotQEAgLTAs MCArMSw1NzggQEAKLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9w ZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsg KgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNp bmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwot KyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgot KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rI2lu Y2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBTdXBwb3J0IGZyYW1ld29yayBmb3IgU1A4 MDAtOTAgRFJCR3MgKi8KLSsKLStpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIGlu dCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rCXsKLSsJaW50IHJ2OwotKwltZW1zZXQoZGN0 eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VO SU5JVElBTElTRUQ7Ci0rCWRjdHgtPnhmbGFncyA9IGZsYWdzOwotKwlkY3R4LT50eXBlID0gdHlw ZTsKLSsKLSsJZGN0eC0+aWZsYWdzID0gMDsKLSsJZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9IDA7 Ci0rCWRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tfaW50 ZXJ2YWwgPSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKLSsKLSsJcnYgPSBmaXBzX2RyYmdfaGFzaF9p bml0KGRjdHgpOwotKwotKwlpZiAocnYgPT0gLTIpCi0rCQlydiA9IGZpcHNfZHJiZ19jdHJfaW5p dChkY3R4KTsKLSsJaWYgKHJ2ID09IC0yKQotKwkJcnYgPSBmaXBzX2RyYmdfaG1hY19pbml0KGRj dHgpOwotKwotKwlpZiAocnYgPD0gMCkKLSsJCXsKLSsJCWlmIChydiA9PSAtMikKLSsJCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1VOU1VQUE9SVEVEX0RSQkdfVFlQRSk7 Ci0rCQllbHNlCi0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9FUlJP Ul9JTklUSUFMSVNJTkdfRFJCRyk7Ci0rCQl9Ci0rCi0rCS8qIElmIG5vdCBpbiB0ZXN0IG1vZGUg cnVuIHNlbGZ0ZXN0cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5cGUgKi8KLSsKLSsJaWYgKCEoZGN0 eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKQotKwkJewotKwkJaWYgKCFGSVBTX2RyYmdfaGVh bHRoX2NoZWNrKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5J VCwgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0K LSsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0rRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5 cGUsIHVuc2lnbmVkIGludCBmbGFncykKLSsJewotKwlEUkJHX0NUWCAqZGN0eDsKLSsJZGN0eCA9 IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEUkJHX0NUWCkpOwotKwlpZiAoIWRjdHgpCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfTkVXLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0r CQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsKLSsJaWYgKHR5cGUgPT0gMCkKLSsJCXsKLSsJCW1lbXNl dChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKLSsJCWRjdHgtPnR5cGUgPSAwOwotKwkJZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsJCXJldHVybiBkY3R4Owot KwkJfQotKwotKwlpZiAoRklQU19kcmJnX2luaXQoZGN0eCwgdHlwZSwgZmxhZ3MpIDw9IDApCi0r CQl7Ci0rCQlPUEVOU1NMX2ZyZWUoZGN0eCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsJCQot KwlyZXR1cm4gZGN0eDsKLSsJfQotKwotK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRj dHgpCi0rCXsKLSsJaWYgKGRjdHgtPnVuaW5zdGFudGlhdGUpCi0rCQlkY3R4LT51bmluc3RhbnRp YXRlKGRjdHgpOwotKwkvKiBEb24ndCBmcmVlIHVwIGRlZmF1bHQgRFJCRyAqLwotKwlpZiAoZGN0 eCA9PSBGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSkKLSsJCXsKLSsJCW1lbXNldChkY3R4LCAwLCBz aXplb2YoRFJCR19DVFgpKTsKLSsJCWRjdHgtPnR5cGUgPSAwOwotKwkJZGN0eC0+c3RhdHVzID0g RFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJT1BFTlNT TF9jbGVhbnNlKCZkY3R4LT5kLCBzaXplb2YoZGN0eC0+ZCkpOwotKwkJT1BFTlNTTF9mcmVlKGRj dHgpOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHNpemVfdCBmaXBzX2dldF9lbnRyb3B5KERSQkdf Q1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVf dCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICp0b3V0LCAq cDsKLSsJc2l6ZV90IGJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbiwgcnY7Ci0rCWlmICghZGN0 eC0+Z2V0X2VudHJvcHkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdf RkxBR19URVNUIHx8ICFibCkKLSsJCXJldHVybiBkY3R4LT5nZXRfZW50cm9weShkY3R4LCBwb3V0 LCBlbnRyb3B5LCBtaW5fbGVuLCBtYXhfbGVuKTsKLSsJcnYgPSBkY3R4LT5nZXRfZW50cm9weShk Y3R4LCAmdG91dCwgZW50cm9weSArIGJsLAotKwkJCQltaW5fbGVuICsgYmwsIG1heF9sZW4gKyBi bCk7Ci0rCWlmICh0b3V0ID09IE5VTEwpCi0rCQlyZXR1cm4gMDsKLSsJKnBvdXQgPSB0b3V0ICsg Ymw7Ci0rCWlmIChydiA8IChtaW5fbGVuICsgYmwpIHx8IChydiAlIGJsKSkKLSsJCXJldHVybiAw OwotKwkvKiBDb21wYXJlIGNvbnNlY3V0aXZlIGJsb2NrcyBmb3IgY29udGludW91cyBQUk5HIHRl c3QgKi8KLSsJZm9yIChwID0gdG91dDsgcCA8IHRvdXQgKyBydiAtIGJsOyBwICs9IGJsKQotKwkJ ewotKwkJaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQ U19GX0ZJUFNfR0VUX0VOVFJPUFksIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyk7Ci0rCQkJ cmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwlydiAtPSBibDsKLSsJaWYgKHJ2ID4gbWF4X2xlbikK LSsJCXJldHVybiBtYXhfbGVuOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBm aXBzX2NsZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJCXVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG9sZW4pCi0rCXsKLSsJc2l6ZV90IGJsOwotKwlpZiAoZGN0eC0+eGZsYWdz ICYgRFJCR19GTEFHX1RFU1QpCi0rCQlibCA9IDA7Ci0rCWVsc2UKLSsJCWJsID0gZGN0eC0+ZW50 cm9weV9ibG9ja2xlbjsKLSsJLyogQ2FsbCBjbGVhbnVwIHdpdGggb3JpZ2luYWwgYXJndW1lbnRz ICovCi0rCWRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4LCBvdXQgLSBibCwgb2xlbiArIGJsKTsK LSsJfQotKwotKwotK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCi0r CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQotKwl7Ci0rCXNp emVfdCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKm5vbmNlID0g TlVMTCwgKmVudHJvcHkgPSBOVUxMOwotKwotKyNpZiAwCi0rCS8qIFB1dCBoZXJlIHNvIGVycm9y IHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCi0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNU QU5USUFURSwKLSsJCQkJRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkcpOwot KwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTl9FUlJPUl9T VEFURSk7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0FM UkVBRFlfSU5TVEFOVElBVEVEKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJ QVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZKTsKLSsJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRSk7Ci0r CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOU1RBTlRJQVRF X0VSUk9SKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1Jf RFJCR19OT1RfSU5JVElBTElTRUQpOwotKyNlbmRpZgotKwotKwlpbnQgciA9IDA7Ci0rCi0rCWlm IChwZXJzbGVuID4gZGN0eC0+bWF4X3BlcnMpCi0rCQl7Ci0rCQlyID0gRklQU19SX1BFUlNPTkFM SVNBVElPTl9TVFJJTkdfVE9PX0xPTkc7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFk Y3R4LT5pbnN0YW50aWF0ZSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElT RUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NU QVRVU19VTklOSVRJQUxJU0VEKQotKwkJewotKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NU QVRVU19FUlJPUikKLSsJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwotKwkJZWxzZQotKwkJ CXIgPSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsK LSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCi0rCWVudGxlbiA9IGZpcHNf Z2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAotKwkJCQlkY3R4LT5t aW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwotKwotKwlpZiAoZW50bGVuIDwgZGN0eC0+ bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCi0rCQl7Ci0rCQlyID0g RklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwot KwlpZiAoZGN0eC0+bWF4X25vbmNlID4gMCAmJiBkY3R4LT5nZXRfbm9uY2UpCi0rCQl7Ci0rCQlu b25jZWxlbiA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAmbm9uY2UsCi0rCQkJCQlkY3R4LT5zdHJl bmd0aCAvIDIsCi0rCQkJCQlkY3R4LT5taW5fbm9uY2UsIGRjdHgtPm1heF9ub25jZSk7Ci0rCi0r CQlpZiAobm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2UgfHwgbm9uY2VsZW4gPiBkY3R4LT5tYXhf bm9uY2UpCi0rCQkJewotKwkJCXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRTsKLSsJ CQlnb3RvIGVuZDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCWlmICghZGN0eC0+aW5zdGFudGlhdGUo ZGN0eCwgCi0rCQkJCWVudHJvcHksIGVudGxlbiwKLSsJCQkJbm9uY2UsIG5vbmNlbGVuLAotKwkJ CQlwZXJzLCBwZXJzbGVuKSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElO R19EUkJHOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdf U1RBVFVTX1JFQURZOwotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQp KQotKwkJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOwotKwotKwllbmQ6Ci0rCi0rCWlmIChlbnRy b3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9weSkKLSsJCWZpcHNfY2xlYW51cF9lbnRyb3B5KGRj dHgsIGVudHJvcHksIGVudGxlbik7Ci0rCi0rCWlmIChub25jZSAmJiBkY3R4LT5jbGVhbnVwX25v bmNlKQotKwkJZGN0eC0+Y2xlYW51cF9ub25jZShkY3R4LCBub25jZSwgbm9uY2VsZW4pOwotKwot KwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZKQotKwkJcmV0dXJuIDE7Ci0r Ci0rCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgcik7Ci0rCi0rCXJldHVybiAwOwotKwot Kwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKLSsJCQljb25z dCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbiwgaW50IGhjaGVjaykKLSsJewot Kwl1bnNpZ25lZCBjaGFyICplbnRyb3B5ID0gTlVMTDsKLSsJc2l6ZV90IGVudGxlbiA9IDA7Ci0r CWludCByID0gMDsKLSsKLSsjaWYgMAotKwlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQ U19SX05PVF9JTlNUQU5USUFURUQpOwotKwlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQ U19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcpOwotKyNlbmRpZgotKwlpZiAoZGN0eC0+c3Rh dHVzICE9IERSQkdfU1RBVFVTX1JFQURZCi0rCQkmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFU VVNfUkVTRUVEKQotKwkJewotKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJP UikKLSsJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwotKwkJZWxzZSBpZihkY3R4LT5zdGF0 dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCQlyID0gRklQU19SX05PVF9JTlNU QU5USUFURUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFhZGluKQotKwkJYWRpbmxl biA9IDA7Ci0rCWVsc2UgaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikKLSsJCXsKLSsJCXIg PSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsJLyogUGVmb3JtIGhlYWx0 aCBjaGVjayBvbiBhbGwgcmVzZWVkIG9wZXJhdGlvbnMgaWYgbm90IGEgcHJlZGljdGlvbgotKwkg KiByZXNpc3RhbmNlIHJlcXVlc3QgYW5kIG5vdCBpbiB0ZXN0IG1vZGUuCi0rCSAqLwotKwlpZiAo aGNoZWNrICYmICEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKQotKwkJewotKwkJaWYg KCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQotKwkJCXsKLSsJCQlyID0gRklQU19SX1NF TEZURVNUX0ZBSUxVUkU7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJfQotKwotKwllbnRsZW4g PSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKLSsJCQkJ ZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKLSsKLSsJaWYgKGVudGxlbiA8 IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KQotKwkJewot KwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rCQlnb3RvIGVuZDsKLSsJ CX0KLSsKLSsJaWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwgZW50cm9weSwgZW50bGVuLCBhZGluLCBh ZGlubGVuKSkKLSsJCWdvdG8gZW5kOwotKwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19S RUFEWTsKLSsJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKLSsJCWRj dHgtPnJlc2VlZF9jb3VudGVyID0gMTsKLSsJZW5kOgotKwotKwlpZiAoZW50cm9weSAmJiBkY3R4 LT5jbGVhbnVwX2VudHJvcHkpCi0rCQlmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5 LCBlbnRsZW4pOwotKwotKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZKQot KwkJcmV0dXJuIDE7Ci0rCi0rCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05P RVJSKSkKLSsJCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCByKTsKLSsKLSsJcmV0dXJuIDA7 Ci0rCX0KLSsKLStpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKLSsJCQljb25z dCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKLSsJewotKwlyZXR1cm4gZHJi Z19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZp cHNfZHJiZ19jaGVjayhEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlpZiAoZGN0eC0+eGZsYWdzICYg RFJCR19GTEFHX1RFU1QpCi0rCQlyZXR1cm4gMTsKLSsJZGN0eC0+aGVhbHRoX2NoZWNrX2NudCsr OwotKwlpZiAoZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA+PSBkY3R4LT5oZWFsdGhfY2hlY2tfaW50 ZXJ2YWwpCi0rCQl7Ci0rCQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpCi0rCQkJ ewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DSEVDSywgRklQU19SX1NFTEZURVNUX0ZB SUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LStpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKLSsJCQlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKLSsJewotKwlpbnQgciA9 IDA7Ci0rCi0rCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKwotKwlpZiAoIWZpcHNfZHJiZ19jaGVjayhkY3R4KSkKLSsJCXJldHVy biAwOwotKwotKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCi0rCQkmJiBk Y3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQotKwkJewotKwkJaWYgKGRjdHgtPnN0 YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKLSsJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRF OwotKwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkK LSsJCQlyID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsK LSsJaWYgKG91dGxlbiA+IGRjdHgtPm1heF9yZXF1ZXN0KQotKwkJewotKwkJciA9IEZJUFNfUl9S RVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlpZiAo YWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQotKwkJewotKwkJciA9IEZJUFNfUl9BRERJVElPTkFM X0lOUFVUX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChkY3R4LT5pZmxh Z3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpCi0rCQlkY3R4LT5nZW5lcmF0ZShkY3R4LCBOVUxMLCBv dXRsZW4sIE5VTEwsIDApOwotKwllbHNlIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+PSBkY3R4 LT5yZXNlZWRfaW50ZXJ2YWwpCi0rCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7 Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVTRUVEIHx8IHByZWRpY3Rp b25fcmVzaXN0YW5jZSkKLSsJCXsKLSsJCS8qIElmIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1 ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLwotKwkJaW50IGhjaGVjayA9IHByZWRpY3Rpb25f cmVzaXN0YW5jZSA/IDAgOiAxOwotKwkJCi0rCQlpZiAoIWRyYmdfcmVzZWVkKGRjdHgsIGFkaW4s IGFkaW5sZW4sIGhjaGVjaykpCi0rCQkJewotKwkJCXIgPSBGSVBTX1JfUkVTRUVEX0VSUk9SOwot KwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFkaW4gPSBOVUxMOwotKwkJYWRpbmxlbiA9IDA7Ci0r CQl9Ci0rCi0rCWlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwgb3V0LCBvdXRsZW4sIGFkaW4sIGFk aW5sZW4pKQotKwkJewotKwkJciA9IEZJUFNfUl9HRU5FUkFURV9FUlJPUjsKLSsJCWRjdHgtPnN0 YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWlmICghKGRj dHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+cmVz ZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQotKwkJCWRjdHgtPnN0YXR1cyA9 IERSQkdfU1RBVFVTX1JFU0VFRDsKLSsJCWVsc2UKLSsJCQlkY3R4LT5yZXNlZWRfY291bnRlcisr OwotKwkJfQotKwotKwllbmQ6Ci0rCWlmIChyKQotKwkJewotKwkJaWYgKCEoZGN0eC0+aWZsYWdz ICYgRFJCR19GTEFHX05PRVJSKSkKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfR0VORVJB VEUsIHIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50 IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWludCBydjsK LSsJaWYgKCFkY3R4LT51bmluc3RhbnRpYXRlKQotKwkJcnYgPSAxOwotKwllbHNlCi0rCQlydiA9 IGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7Ci0rCS8qIEFsdGhvdWdoIHdlJ2QgbGlrZSB0byBj bGVhbnNlIGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBoYXZlIHRvCi0rCSAqIHRlc3QgdGhlIHVu aW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0YS4KLSsJICovCi0rCW1lbXNldCgmZGN0 eC0+ZCwgMCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNf VU5JTklUSUFMSVNFRDsKLSsJLyogSWYgbWV0aG9kIGhhcyBwcm9ibGVtcyB1bmluc3RhbnRpYXRp bmcsIHJldHVybiBlcnJvciAqLwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19kcmJn X3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAoKmdldF9lbnRyb3B5KShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNp emVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkp KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAotKwlzaXpl X3QgZW50cm9weV9ibG9ja2xlbiwKLSsJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVu LCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSkKLSsJewotKwlpZiAoZGN0eC0+c3Rh dHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQlyZXR1cm4gMDsKLSsJZGN0eC0+ ZW50cm9weV9ibG9ja2xlbiA9IGVudHJvcHlfYmxvY2tsZW47Ci0rCWRjdHgtPmdldF9lbnRyb3B5 ID0gZ2V0X2VudHJvcHk7Ci0rCWRjdHgtPmNsZWFudXBfZW50cm9weSA9IGNsZWFudXBfZW50cm9w eTsKLSsJZGN0eC0+Z2V0X25vbmNlID0gZ2V0X25vbmNlOwotKwlkY3R4LT5jbGVhbnVwX25vbmNl ID0gY2xlYW51cF9ub25jZTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU19kcmJnX3Nl dF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2FkaW4pKERS QkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKLSsJdm9pZCAoKmNsZWFudXBfYWRp bikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0rCWlu dCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVt KSwKLSsJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHZvaWQg KmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKQotKwl7Ci0rCWlmIChkY3R4LT5zdGF0dXMg IT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXJldHVybiAwOwotKwlkY3R4LT5nZXRf YWRpbiA9IGdldF9hZGluOwotKwlkY3R4LT5jbGVhbnVwX2FkaW4gPSBjbGVhbnVwX2FkaW47Ci0r CWRjdHgtPnJhbmRfc2VlZF9jYiA9IHJhbmRfc2VlZF9jYjsKLSsJZGN0eC0+cmFuZF9hZGRfY2Ig PSByYW5kX2FkZF9jYjsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSt2b2lkICpGSVBTX2RyYmdfZ2V0 X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCXJldHVybiBkY3R4LT5hcHBfZGF0YTsK LSsJfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCwgdm9p ZCAqYXBwX2RhdGEpCi0rCXsKLSsJZGN0eC0+YXBwX2RhdGEgPSBhcHBfZGF0YTsKLSsJfQotKwot K3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0r CXJldHVybiBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfZ2V0X3N0 cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCXJldHVybiBkY3R4LT5zdHJlbmd0aDsKLSsJ fQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwg aW50IGludGVydmFsKQotKwl7Ci0rCWRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IGludGVy dmFsOwotKwl9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NU WCAqZGN0eCwgaW50IGludGVydmFsKQotKwl7Ci0rCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IGlu dGVydmFsOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX3N0aWNrID0gMDsKLSsKLSt2b2lkIEZJ UFNfZHJiZ19zdGljayhpbnQgb25vZmYpCi0rCXsKLSsJZHJiZ19zdGljayA9IG9ub2ZmOwotKwl9 Ci0rCi0rLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkgZnVuY3Rpb24gKi8KLStpbnQgZmlwc19k cmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm91dCkK LSsJewotKwkvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8KLSsJaWYgKGRjdHgtPnhmbGFncyAm IERSQkdfRkxBR19URVNUKQotKwkJcmV0dXJuIDE7Ci0rCS8qIENoZWNrIGJsb2NrIGlzIHZhbGlk OiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0rCWlmIChkY3R4LT5sYl92YWxpZCA9PSAwKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNfUl9JTlRFUk5B TF9FUlJPUik7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlyZXR1cm4gMDsKLSsJ CX0KLSsJaWYgKGRyYmdfc3RpY2spCi0rCQltZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+Ymxv Y2tsZW5ndGgpOwotKwkvKiBDaGVjayBhZ2FpbnN0IGxhc3QgYmxvY2s6IGZhaWwgaWYgbWF0Y2gg Ki8KLSsJaWYgKCFtZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNfUl9EUkJHX1NU VUNLKTsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCXJldHVybiAwOwotKwkJfQot KwkvKiBTYXZlIGxhc3QgYmxvY2sgZm9yIG5leHQgY29tcGFyaXNvbiAqLwotKwltZW1jcHkoZGN0 eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwlyZXR1cm4gMTsKLSsJfQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4z NDAzNTIzMjkgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdf cmFuZC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQwMzUyMzI5ICswMjAwCi1AQCAtMCwwICsxLDE3 MiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfcmFuZC5jICovCi0rLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0r ICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAx MSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsK LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0r Ci0rLyogTWFwcGluZyBvZiBTUDgwMC05MCBEUkJHcyB0byBPcGVuU1NMIFJBTkRfTUVUSE9EICov Ci0rCi0rLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBnbG9iYWwgUFJORyB1c2VkIGF0IGFueSB0 aW1lIGluIE9wZW5TU0wgdXNlIGEgZ2xvYmFsCi0rICogdmFyaWFibGUgdG8gc3RvcmUgY29udGV4 dC4KLSsgKi8KLSsKLStzdGF0aWMgRFJCR19DVFggb3NzbF9kY3R4OwotKwotK0RSQkdfQ1RYICpG SVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCkKLSsJewotKwlyZXR1cm4gJm9zc2xfZGN0eDsKLSsJ fQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50 IGNvdW50KQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJaW50IHJ2ID0g MDsKLSsJdW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7Ci0rCXNpemVfdCBhZGlubGVuID0gMDsK LSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJZG8gCi0rCQl7Ci0rCQlzaXpl X3QgcmNudDsKLSsJCWlmIChjb3VudCA+IChpbnQpZGN0eC0+bWF4X3JlcXVlc3QpCi0rCQkJcmNu dCA9IGRjdHgtPm1heF9yZXF1ZXN0OwotKwkJZWxzZQotKwkJCXJjbnQgPSBjb3VudDsKLSsJCWlm IChkY3R4LT5nZXRfYWRpbikKLSsJCQl7Ci0rCQkJYWRpbmxlbiA9IGRjdHgtPmdldF9hZGluKGRj dHgsICZhZGluKTsKLSsJCQlpZiAoYWRpbmxlbiAmJiAhYWRpbikKLSsJCQkJewotKwkJCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfQllURVMsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElU SU9OQUxfSU5QVVQpOwotKwkJCQlnb3RvIGVycjsKLSsJCQkJfQotKwkJCX0KLSsJCXJ2ID0gRklQ U19kcmJnX2dlbmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwgYWRpbiwgYWRpbmxlbik7Ci0rCQlp ZiAoYWRpbikKLSsJCQl7Ci0rCQkJaWYgKGRjdHgtPmNsZWFudXBfYWRpbikKLSsJCQkJZGN0eC0+ Y2xlYW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOwotKwkJCWFkaW4gPSBOVUxMOwotKwkJ CX0KLSsJCWlmICghcnYpCi0rCQkJZ290byBlcnI7Ci0rCQlvdXQgKz0gcmNudDsKLSsJCWNvdW50 IC09IHJjbnQ7Ci0rCQl9Ci0rCXdoaWxlIChjb3VudCk7Ci0rCXJ2ID0gMTsKLSsJZXJyOgotKwlD UllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwot K3N0YXRpYyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3Vu dCkKLSsJewotKwlpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwgY291bnQpIDw9IDApCi0rCQlyZXR1 cm4gLTE7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfc3RhdHVz KHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpbnQgcnY7Ci0r CUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJ2ID0gZGN0eC0+c3RhdHVzID09 IERSQkdfU1RBVFVTX1JFQURZID8gMSA6IDA7Ci0rCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9D S19SQU5EKTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19kcmJnX2Ns ZWFudXAodm9pZCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCUNSWVBU T193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCX0KLSsKLStzdGF0 aWMgaW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQotKwl7 Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJaWYgKGRjdHgtPnJhbmRfc2VlZF9j YikKLSsJCXJldHVybiBkY3R4LT5yYW5kX3NlZWRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbik7Ci0r CXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfYWRkKGNvbnN0IHZvaWQg KnNlZWQsIGludCBzZWVkbGVuLAotKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQotKwl7Ci0rCURS QkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJaWYgKGRjdHgtPnJhbmRfYWRkX2NiKQotKwkJ cmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9lbnRyb3B5 KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF9k cmJnX21ldGggPQotKwl7Ci0rCWZpcHNfZHJiZ19zZWVkLAotKwlmaXBzX2RyYmdfYnl0ZXMsCi0r CWZpcHNfZHJiZ19jbGVhbnVwLAotKwlmaXBzX2RyYmdfYWRkLAotKwlmaXBzX2RyYmdfcHNldWRv LAotKwlmaXBzX2RyYmdfc3RhdHVzCi0rCX07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNf ZHJiZ19tZXRob2Qodm9pZCkKLSsJewotKwlyZXR1cm4gJnJhbmRfZHJiZ19tZXRoOwotKwl9Ci0r Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCi0t LS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlwcwky MDEyLTA3LTEyIDIxOjQ5OjI1LjM0MDM1MjMyOSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQwMzUy MzI5ICswMjAwCi1AQCAtMCwwICsxLDg2MiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfc2Vs ZnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy 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 PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0r I2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpbmNsdWRlICJmaXBzX2RyYmdfc2VsZnRlc3Qu aCIKLSsKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rCWludCBwb3N0OwotKwlpbnQgbmlkOwotKwl1bnNp Z25lZCBpbnQgZmxhZ3M7Ci0rCi0rCS8qIEtBVCBkYXRhIGZvciBubyBQUiAqLwotKwljb25zdCB1 bnNpZ25lZCBjaGFyICplbnQ7Ci0rCXNpemVfdCBlbnRsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNo YXIgKm5vbmNlOwotKwlzaXplX3Qgbm9uY2VsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBl cnM7Ci0rCXNpemVfdCBwZXJzbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluOwotKwlz aXplX3QgYWRpbmxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50cmVzZWVkOwotKwlzaXpl X3QgZW50cmVzZWVkbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGlucmVzZWVkOwotKwlz aXplX3QgYWRpbnJlc2VlZGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7Ci0rCXNp emVfdCBhZGluMmxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0OwotKwlzaXplX3Qga2F0 bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyOwotKwlzaXplX3Qga2F0MmxlbjsKLSsK LSsJLyogS0FUIGRhdGEgZm9yIFBSICovCi0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudF9wcjsK LSsJc2l6ZV90IGVudGxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2VfcHI7Ci0r CXNpemVfdCBub25jZWxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyc19wcjsKLSsJ c2l6ZV90IHBlcnNsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5fcHI7Ci0rCXNp emVfdCBhZGlubGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRwcl9wcjsKLSsJc2l6 ZV90IGVudHBybGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluZ19wcjsKLSsJc2l6 ZV90IGFkaW5nbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOwotKwlzaXpl X3QgZW50Z2xlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0X3ByOwotKwlzaXplX3Qg a2F0bGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyX3ByOwotKwlzaXplX3Qga2F0 Mmxlbl9wcjsKLSsKLSsJfSBEUkJHX1NFTEZURVNUX0RBVEE7Ci0rCi0rI2RlZmluZSBtYWtlX2Ry YmdfdGVzdF9kYXRhKG5pZCwgZmxhZywgcHIsIHApIHtwLCBuaWQsIGZsYWcgfCBEUkJHX0ZMQUdf VEVTVCwgXAotKwlwciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0KSwg XAotKwlwciMjX25vbmNlLCBzaXplb2YocHIjI19ub25jZSksIFwKLSsJcHIjI19wZXJzb25hbGl6 YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKLSsJcHIj I19hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dCksIFwKLSsJcHIj I19lbnRyb3B5aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dHJlc2VlZCksIFwK LSsJcHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1 dHJlc2VlZCksIFwKLSsJcHIjI19hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19hZGRpdGlv bmFsaW5wdXQyKSwgXAotKwlwciMjX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX2ludF9y ZXR1cm5lZGJpdHMpLCBcCi0rCXByIyNfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19yZXR1cm5l ZGJpdHMpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19wcl9lbnRyb3B5 aW5wdXQpLCBcCi0rCXByIyNfcHJfbm9uY2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAotKwlw ciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nKSwgXAotKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfcHJf YWRkaXRpb25hbGlucHV0KSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1dHByLCBzaXplb2YocHIj I19wcl9lbnRyb3B5aW5wdXRwciksIFwKLSsJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyLCBzaXpl b2YocHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyKSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1dHBy Miwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAotKwlwciMjX3ByX2ludF9yZXR1 cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMpLCBcCi0rCXByIyNfcHJf cmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9yZXR1cm5lZGJpdHMpLCBcCi0rCX0KLSsKLSsj ZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBwciwgcCkgXAotKwltYWtlX2RyYmdf dGVzdF9kYXRhKG5pZCwgRFJCR19GTEFHX0NUUl9VU0VfREYsIHByLCBwKQotKwotKyNkZWZpbmUg bWFrZV9kcmJnX3Rlc3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHByLCBwKSBcCi0rCW1ha2VfZHJiZ190 ZXN0X2RhdGEoKGN1cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIsIHApCi0rCi0rc3RhdGljIERSQkdf U0VMRlRFU1RfREFUQSBkcmJnX3Rlc3RbXSA9IHsKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihO SURfYWVzXzEyOF9jdHIsIGFlc18xMjhfdXNlX2RmLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0 YV9kZihOSURfYWVzXzE5Ml9jdHIsIGFlc18xOTJfdXNlX2RmLCAwKSwKLSsJbWFrZV9kcmJnX3Rl c3RfZGF0YV9kZihOSURfYWVzXzI1Nl9jdHIsIGFlc18yNTZfdXNlX2RmLCAxKSwKLSsJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfYWVzXzEyOF9jdHIsIDAsIGFlc18xMjhfbm9fZGYsIDApLAotKwlt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMTkyX2N0ciwgMCwgYWVzXzE5Ml9ub19kZiwgMCks Ci0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18yNTZfY3RyLCAwLCBhZXNfMjU2X25vX2Rm LCAxKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMSwgMCwgc2hhMSwgMCksCi0rCW1h a2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTIyNCwgMCwgc2hhMjI0LCAwKSwKLSsJbWFrZV9kcmJn X3Rlc3RfZGF0YShOSURfc2hhMjU2LCAwLCBzaGEyNTYsIDEpLAotKwltYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9zaGEzODQsIDAsIHNoYTM4NCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklE X3NoYTUxMiwgMCwgc2hhNTEyLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dp dGhTSEExLCAwLCBobWFjX3NoYTEsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFj V2l0aFNIQTIyNCwgMCwgaG1hY19zaGEyMjQsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5J RF9obWFjV2l0aFNIQTI1NiwgMCwgaG1hY19zaGEyNTYsIDEpLAotKwltYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9obWFjV2l0aFNIQTM4NCwgMCwgaG1hY19zaGEzODQsIDApLAotKwltYWtlX2RyYmdf dGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTUxMiwgMCwgaG1hY19zaGE1MTIsIDApLAotKwl7MCww LDB9Ci0rCX07Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJY29uc3QgdW5zaWduZWQgY2hh ciAqZW50OwotKwlzaXplX3QgZW50bGVuOwotKwlpbnQgZW50Y250OwotKwljb25zdCB1bnNpZ25l ZCBjaGFyICpub25jZTsKLSsJc2l6ZV90IG5vbmNlbGVuOwotKwlpbnQgbm9uY2VjbnQ7Ci0rCX0g VEVTVF9FTlQ7Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRjdHgs IHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwlURVNU X0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rCSpwb3V0ID0gKHVuc2ln bmVkIGNoYXIgKil0LT5lbnQ7Ci0rCXQtPmVudGNudCsrOwotKwlyZXR1cm4gdC0+ZW50bGVuOwot Kwl9Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25l ZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRy b3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJVEVTVF9FTlQgKnQg PSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFy ICopdC0+bm9uY2U7Ci0rCXQtPm5vbmNlY250Kys7Ci0rCXJldHVybiB0LT5ub25jZWxlbjsKLSsJ fQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX3NpbmdsZV9rYXQoRFJCR19DVFggKmRjdHgsIERS QkdfU0VMRlRFU1RfREFUQSAqdGQsCi0rCQkJCQkJCQlpbnQgcXVpY2spCi0rCXsKLSsJVEVTVF9F TlQgdDsKLSsJaW50IHJ2ID0gMDsKLSsJc2l6ZV90IGFkaW5sZW47Ci0rCXVuc2lnbmVkIGNoYXIg cmFuZG91dFsxMDI0XTsKLSsKLSsJLyogSW5pdGlhbCB0ZXN0IHdpdGhvdXQgUFIgKi8KLSsKLSsJ LyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFs aXNhdGlvbgotKwkgKiBzdHJpbmcuCi0rCSAqLwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRj dHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFGSVBTX2RyYmdf c2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQot KwkJcmV0dXJuIDA7Ci0rCi0rCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwotKwot Kwl0LmVudCA9IHRkLT5lbnQ7Ci0rCXQuZW50bGVuID0gdGQtPmVudGxlbjsKLSsJdC5ub25jZSA9 IHRkLT5ub25jZTsKLSsJdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbjsKLSsJdC5lbnRjbnQgPSAw OwotKwl0Lm5vbmNlY250ID0gMDsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0 eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBOb3RlIGZv ciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwgaW5wdXQgdmFsdWVzCi0rCSAqIGlnbm9y ZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1Y2UgYWRpbmxlbgotKwkgKiB0byBo YWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGluLgotKwkgKi8KLSsJaWYgKCFmaXBz X3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykp Ci0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW4gLyAyOwotKwllbHNlCi0rCQlhZGlubGVuID0gdGQt PmFkaW5sZW47Ci0rCi0rCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQg bWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCi0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgs IHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCBhZGlubGVuKSkKLSsJCWdv dG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQsIHRkLT5rYXRsZW4pKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BS X1RFU1QxX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwkvKiBJZiBhYmJyZXZpYXRl ZCBQT1NUIGVuZCBvZiB0ZXN0ICovCi0rCWlmIChxdWljaykKLSsJCXsKLSsJCXJ2ID0gMTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKwkvKiBSZXNlZWQgRFJCRyB3aXRoIHRlc3QgZW50cm9weSBhbmQg YWRkaXRpb25hbCBpbnB1dCAqLwotKwl0LmVudCA9IHRkLT5lbnRyZXNlZWQ7Ci0rCXQuZW50bGVu ID0gdGQtPmVudHJlc2VlZGxlbjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRk LT5hZGlucmVzZWVkLCB0ZC0+YWRpbnJlc2VlZGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyog R2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRh dGEgKi8KLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJs ZW4sIDAsCi0rCQkJCXRkLT5hZGluMiwgdGQtPmFkaW4ybGVuKSkKLSsJCWdvdG8gZXJyOwotKwot KwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+a2F0MmxlbikpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDJfRkFJ TFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCi0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRl KGRjdHgpOwotKwotKwkvKiBOb3cgdGVzdCB3aXRoIFBSICovCi0rCi0rCS8qIEluc3RhbnRpYXRl IERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KLSsJICog c3RyaW5nLgotKwkgKi8KLSsJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ ZmxhZ3MpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0 eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwotKwot KwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKLSsKLSsJdC5lbnQgPSB0ZC0+ZW50 X3ByOwotKwl0LmVudGxlbiA9IHRkLT5lbnRsZW5fcHI7Ci0rCXQubm9uY2UgPSB0ZC0+bm9uY2Vf cHI7Ci0rCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW5fcHI7Ci0rCXQuZW50Y250ID0gMDsKLSsJ dC5ub25jZWNudCA9IDA7Ci0rCi0rCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzX3ByLCB0ZC0+cGVyc2xlbl9wcikpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogTm93IGdl bmVyYXRlIHdpdGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJvcHkgYXMgdGhpcyB3aWxsCi0r CSAqIHBlcmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBl Y3RlZCB2YWx1ZS4KLSsJICovCi0rCi0rCXQuZW50ID0gdGQtPmVudHByX3ByOwotKwl0LmVudGxl biA9IHRkLT5lbnRwcmxlbl9wcjsKLSsKLSsJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29t ZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcwotKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtl eWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KLSsJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxp ZCBkYXRhIGlzIGZlZCBpbi4KLSsJICovCi0rCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19U RVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQotKwkJYWRpbmxlbiA9IHRkLT5h ZGlubGVuX3ByIC8gMjsKLSsJZWxzZQotKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOwotKwlp ZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3ByLCAxLAot KwkJCQl0ZC0+YWRpbl9wciwgYWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNt cChyYW5kb3V0LCB0ZC0+a2F0X3ByLCB0ZC0+a2F0bGVuX3ByKSkKLSsJCXsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSk7Ci0r CQlnb3RvIGVycjI7Ci0rCQl9Ci0rCi0rCS8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3aXRoIFBSOiBz dXBwbHkgbmV3IGVudHJvcHkgYWdhaW4uCi0rCSAqIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVj dGVkIHZhbHVlLgotKwkgKi8KLSsKLSsJdC5lbnQgPSB0ZC0+ZW50Z19wcjsKLSsJdC5lbnRsZW4g PSB0ZC0+ZW50Z2xlbl9wcjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdDJsZW5fcHIsIDEsCi0rCQkJCXRkLT5hZGluZ19wciwgdGQtPmFkaW5nbGVu X3ByKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyX3By LCB0ZC0+a2F0Mmxlbl9wcikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lO R0xFX0tBVCwgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQot KwkvKiBBbGwgT0ssIHRlc3QgY29tcGxldGUgKi8KLSsJcnYgPSAxOwotKwotKwllcnI6Ci0rCWlm IChydiA9PSAwKQotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKwllcnIyOgotKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KTsKLSsJCi0rCXJldHVybiBydjsKLSsKLSsJfQotKwotKy8qIEluaXRpYWxpc2UgYSBEUkJH IGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KLSsKLStzdGF0aWMgaW50IGRvX2RyYmdfaW5pdChE UkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwgVEVTVF9FTlQgKnQpCi0rCXsK LSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKwkJ cmV0dXJuIDA7Ci0rCi0rCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9l bnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlGSVBTX2Ry Ymdfc2V0X2FwcF9kYXRhKGRjdHgsIHQpOwotKwotKwl0LT5lbnQgPSB0ZC0+ZW50OwotKwl0LT5l bnRsZW4gPSB0ZC0+ZW50bGVuOwotKwl0LT5ub25jZSA9IHRkLT5ub25jZTsKLSsJdC0+bm9uY2Vs ZW4gPSB0ZC0+bm9uY2VsZW47Ci0rCXQtPmVudGNudCA9IDA7Ci0rCXQtPm5vbmNlY250ID0gMDsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBJbml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBEUkJH IGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KLStzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFudGlh dGUoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCi0rCQkJCQkJCQlURVNU X0VOVCAqdCkKLSsJewotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgdCkpCi0rCQlyZXR1 cm4gMDsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5w ZXJzbGVuKSkKLSsJCXJldHVybiAwOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotKy8qIFRoaXMg ZnVuY3Rpb24gcGVyZm9ybXMgZXh0ZW5zaXZlIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVkIGJ5 IFNQODAwLTkwLgotKyAqIEluZHVjZSBzZXZlcmFsIGZhaWx1cmUgbW9kZXMgYW5kIGNoZWNrIGFu IGVycm9yIGNvbmRpdGlvbiBpcyBzZXQuCi0rICogVGhpcyBmdW5jdGlvbiBhbG9uZyB3aXRoIGZp cHNfZHJiZ19zaW5nbGVfa2F0IHBlZm9ybXMgdGhlIGhlYWx0aCBjaGVja2luZwotKyAqIG9wZXJh dGlvbi4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhEUkJHX0NU WCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCkKLSsJewotKwl1bnNpZ25lZCBjaGFyIHJh bmRvdXRbMTAyNF07Ci0rCVRFU1RfRU5UIHQ7Ci0rCXNpemVfdCBpOwotKwl1bnNpZ25lZCBpbnQg cmVzZWVkX2NvdW50ZXJfdG1wOwotKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIg KilkY3R4OwotKwotKwkvKiBJbml0aWFsaXNlIERSQkcgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2lu aXQoZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBEb24ndCByZXBvcnQgaW5k dWNlZCBlcnJvcnMgKi8KLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJ LyogUGVyc29uYWxpc2F0aW9uIHN0cmluZyB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IGRldGVjdGlv biBvZiB0b28gbGFyZ2UgcGVyc29ubGlzYXRpb24gc3RyaW5nICovCi0rCi0rCWlmIChGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIGRjdHgtPm1heF9wZXJzICsgMSkgPiAwKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUEVS U09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0r CS8qIEVudHJvcHkgc291cmNlIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZW50cm9weSBzb3VyY2Ug ZmFpbHVyZSBkZXRlY2lvbjogaS5lLiByZXR1cm5zIG5vIGRhdGEgKi8KLSsKLSsJdC5lbnRsZW4g PSAwOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+ cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJ fQotKwotKwkvKiBUcnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQgRFJC RyAqLwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4s IDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVE KTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19O T0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgs IHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19O T0VSUjsKLSsKLSsJLyogVGVzdCBpbnN1ZmZpY2llbnQgZW50cm9weSAqLwotKwotKwl0LmVudGxl biA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0 ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RF RCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdf Tk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRF X0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IHRvbyBtdWNoIGVudHJv cHkgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJy OwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwl0LmVudGxlbiA9 IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShk Y3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7 Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9F UlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VS Uk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBOb25jZSB0ZXN0cyAqLwotKwotKwkv KiBUZXN0IHRvbyBzbWFsbCBub25jZSAqLwotKwotKwlpZiAoZGN0eC0+bWluX25vbmNlKQotKwkJ ewotKwotKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsK LSsKLSsJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCQl0Lm5vbmNlbGVu ID0gZGN0eC0+bWluX25vbmNlIC0gMTsKLSsKLSsJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUo ZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQkJewotKwkJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQp OwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFH X05PRVJSOwotKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCQl7Ci0r CQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJfQotKwotKwkvKiBUZXN0 IHRvbyBsYXJnZSBub25jZSAqLwotKwotKwlpZiAoZGN0eC0+bWF4X25vbmNlKQotKwkJewotKwot KwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsKLSsKLSsJ CWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCQl0Lm5vbmNlbGVuID0gZGN0 eC0+bWF4X25vbmNlICsgMTsKLSsKLSsJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwg dGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOwotKwkJ CWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJS OwotKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCQl7Ci0rCQkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9F UlJPUik7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJfQotKwotKwkvKiBJbnN0YW50aWF0 ZSB3aXRoIHZhbGlkIGRhdGEuICovCi0rCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0 ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwotKwkvKiBDaGVjayBnZW5lcmF0aW9uIGlzIG5vdyBP SyAqLwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVu LCAwLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCWRj dHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCS8qIFJlcXVlc3QgdG9vIG11Y2gg ZGF0YSBmb3Igb25lIHJlcXVlc3QgKi8KLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBy YW5kb3V0LCBkY3R4LT5tYXhfcmVxdWVzdCArIDEsIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRp bmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJ fQotKwotKwkvKiBUcnkgdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJaWYgKEZJUFNf ZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRp biwgZGN0eC0+bWF4X2FkaW4gKyAxKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7 Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNl IHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKLSsJICogZmFpbHVyZS4KLSsJICovCi0r Ci0rCXQuZW50bGVuID0gMDsKLSsKLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5k b3V0LCB0ZC0+a2F0bGVuLCAxLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9F UlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkJCi0rCWRjdHgtPmlmbGFn cyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsKLSsJLyog SW5zdGFudGlhdGUgYWdhaW4gd2l0aCB2YWxpZCBkYXRhICovCi0rCi0rCWlmICghZG9fZHJiZ19p bnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwkvKiBUZXN0IHJlc2Vl ZCBjb3VudGVyIHdvcmtzICovCi0rCS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLwot KwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKLSsJLyogU2V0IHJl c2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLwotKwlkY3R4LT5yZXNlZWRfY291bnRl ciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKLSsKLSsJLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBj aGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCi0rCXQuZW50Y250 ID0gMDsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxl biwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo dC5lbnRjbnQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLwot KwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VF RF9DT1VOVEVSX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3Mg Jj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4 KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIENoZWNr IHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCi0r CSAqIGZhaWx1cmUuCi0rCSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWRjdHgtPmlmbGFn cyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdGxlbiwgMSwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCXsK LSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlf RVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJCQotKwlkY3R4LT5pZmxh Z3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCi0r CWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwot KwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCi0rCS8qIFNhdmUgaW5pdGlhbCByZXNl ZWQgY291bnRlciAqLwotKwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRl cjsKLSsJLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLwotKwlkY3R4 LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKLSsKLSsJLyogR2VuZXJh dGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVk ICovCi0rCXQuZW50Y250ID0gMDsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCWdv dG8gZXJyOwotKwlpZiAodC5lbnRjbnQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVT RUVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMg YmVlbiByZXNldCAqLwotKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50 ZXJfdG1wICsgMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwot KwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9 Ci0rCi0rCS8qIEV4cGxpY2l0IHJlc2VlZCB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IGV4cGxpY2l0 IHJlc2VlZCB3aXRoIHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCi0rCWlmICghZG9fZHJi Z19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9 IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFk aW4sIGRjdHgtPm1heF9hZGluICsgMSkgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVD VEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3 aXRoIGVudHJvcHkgc291cmNlIGZhaWx1cmUgKi8KLSsKLSsJdC5lbnRsZW4gPSAwOwotKwotKwlp ZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJP UFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFGSVBT X2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBl cnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIG11Y2ggZW50 cm9weSAqLwotKwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBl cnI7Ci0rCi0rCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50bGVu ID0gZGN0eC0+bWF4X2VudHJvcHkgKyAxOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4 LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0r CQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4 KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3Qg ZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5ICovCi0rCi0rCWlmICghZG9f ZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdz IHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAt IDE7Ci0rCi0rCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxl bikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwot KwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7 Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJcCA9ICh1bnNpZ25lZCBjaGFyICopJmRjdHgtPmQ7 Ci0rCS8qIFN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0byBjaGVjayB1bmluc3RhbnRpYXRlIHJlYWxs eSB6ZXJvZXMKLSsJICogdGhlIGRhdGEuLi4KLSsJICovCi0rCWZvciAoaSA9IDA7IGkgPCBzaXpl b2YoZGN0eC0+ZCk7IGkrKykKLSsJCXsKLSsJCWlmICgqcCAhPSAwKQotKwkJCXsKLSsJCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pF Uk9JU0VfRVJST1IpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCXArKzsKLSsJCX0KLSsKLSsJ cmV0dXJuIDE7Ci0rCi0rCWVycjoKLSsJLyogQSByZWFsIGVycm9yIGFzIG9wcG9zZWQgdG8gYW4g aW5kdWNlZCBvbmU6IHVuZGVybHlpbmcgZnVuY3Rpb24gd2lsbAotKwkgKiBpbmRpY2F0ZSB0aGUg ZXJyb3IuCi0rCSAqLwotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRlVOQ1RJT05f RVJST1IpOwotKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJcmV0dXJuIDA7Ci0r Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5z aWduZWQgaW50IGZsYWdzKQotKwl7Ci0rCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rCWZsYWdz IHw9IERSQkdfRkxBR19URVNUOwotKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7 IHRkKyspCi0rCQl7Ci0rCQlpZiAodGQtPm5pZCA9PSBuaWQgJiYgdGQtPmZsYWdzID09IGZsYWdz KQotKwkJCXsKLSsJCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKLSsJ CQkJcmV0dXJuIDA7Ci0rCQkJcmV0dXJuIGZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCk7 Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMDsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfaGVhbHRo X2NoZWNrKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWludCBydjsKLSsJRFJCR19DVFggKnRjdHgg PSBOVUxMOwotKwl0Y3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJZmlwc19wb3N0X3N0YXJ0 ZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOwotKwlpZiAoIXRj dHgpCi0rCQlyZXR1cm4gMDsKLSsJcnYgPSBmaXBzX2RyYmdfa2F0KHRjdHgsIGRjdHgtPnR5cGUs IGRjdHgtPnhmbGFncyk7Ci0rCWlmICh0Y3R4KQotKwkJRklQU19kcmJnX2ZyZWUodGN0eCk7Ci0r CWlmIChydikKLSsJCWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBl LCAmZGN0eC0+eGZsYWdzKTsKLSsJZWxzZQotKwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1Rf RFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWlmICghcnYpCi0rCQlkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsJZWxzZQotKwkJZGN0eC0+aGVhbHRoX2NoZWNr X2NudCA9IDA7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmco dm9pZCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eDsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsK LSsJaW50IHJ2ID0gMTsKLSsJZGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rCWlmICghZGN0 eCkKLSsJCXJldHVybiAwOwotKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRk KyspCi0rCQl7Ci0rCQlpZiAodGQtPnBvc3QgIT0gMSkKLSsJCQljb250aW51ZTsKLSsJCWlmICgh Zmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQot KwkJCXJldHVybiAxOwotKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMSkp Ci0rCQkJewotKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0 ZC0+ZmxhZ3MpOwotKwkJCXJ2ID0gMDsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoIWZp cHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsJ CQlyZXR1cm4gMDsKLSsJCX0KLSsJRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rCXJldHVybiBydjsK LSsJfQotKwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpCi0rCXsKLSsJRFJC R19DVFggKmRjdHg7Ci0rCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rCWludCBydiA9IDE7Ci0r CWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwotKwlpZiAoIWRjdHgpCi0rCQlyZXR1cm4gMDsK LSsJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQotKwkJewotKwkJaWYg KCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykp Ci0rCQkJcmV0dXJuIDE7Ci0rCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAw KSkKLSsJCQl7Ci0rCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwg JnRkLT5mbGFncyk7Ci0rCQkJcnYgPSAwOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICgh Zmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKSkKLSsJCQl7Ci0rCQkJZmlwc19wb3N0X2Zh aWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7Ci0rCQkJcnYgPSAwOwot KwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNU X0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlGSVBT X2RyYmdfZnJlZShkY3R4KTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCi0tLS0gb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjM0MTM1MjM1MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19zZWxmdGVzdC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzQxMzUyMzUxICswMjAwCi1AQCAtMCww ICsxLDIzMzUgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rLyogU2VsZnRlc3QgYW5kIGhlYWx0 aCBjaGVjayBkYXRhIGZvciB0aGUgU1A4MDAtOTAgRFJCRyAqLwotKwotKyNkZWZpbmUgX19maXBz X2NvbnN0c2VnCi0rCi0rLyogQUVTLTEyOCB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlu cHV0W10gPQotKwl7Ci0rCTB4NjEsMHg1MiwweDdjLDB4ZTMsMHgyMywweDdkLDB4MGEsMHgwNyww eDEwLDB4MGMsMHg1MCwweDMzLAotKwkweGM4LDB4ZGIsMHhmZiwweDEyCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZf cHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg1MSwweDBkLDB4ODUsMHg3NywweGVkLDB4MjIsMHg5Nyww eDI4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4 NTksMHg5ZiwweGJiLDB4Y2QsMHhkNSwweDI1LDB4NjksMHhiNSwweGNiLDB4YjUsMHgwMywweGZl LAotKwkweGQ3LDB4ZDcsMHgwMSwweDY3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4ZWYsMHg4OCwweDc2LDB4MDEsMHhhZiwweDNjLDB4ZmUsMHg4YiwweGFm LDB4MjYsMHgwNiwweDllLAotKwkweDlhLDB4NDcsMHgwOCwweDc2Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJf ZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhlMiwweDc2LDB4ZjksMHhmNiwweDNhLDB4YmEs MHgxMCwweDlmLDB4YmYsMHg0NywweDBlLDB4NTEsCi0rCTB4MDksMHhmYiwweGEzLDB4YjYKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZDQsMHg5OCwweDhh LDB4NDYsMHg4MCwweDRjLDB4ZGIsMHhhMywweDU5LDB4MDIsMHg1NywweDUyLAotKwkweDY2LDB4 MWMsMHhlYSwweDViCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewot KwkweDg4LDB4OGMsMHg5MSwweGQ2LDB4YmUsMHg1NiwweDZlLDB4MDgsMHg5YSwweDYyLDB4MmIs MHgxMSwKLSsJMHgzZiwweDVlLDB4MzEsMHgwNgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1 dHByMltdID0KLSsJewotKwkweGMwLDB4NWMsMHg2YiwweDk4LDB4MDEsMHgwZCwweDU4LDB4MTgs MHg1MSwweDE4LDB4OTYsMHhhZSwKLSsJMHhhNywweGUzLDB4YTgsMHg2NwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGNmLDB4MDEsMHhhYywweDIyLDB4MzEsMHgw NiwweDhlLDB4ZmMsMHhjZSwweDU2LDB4ZWEsMHgyNCwKLSsJMHgwZiwweDM4LDB4NDMsMHhjNgot Kwl9OwotKwotKwotKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlpbnB1 dFtdID0KLSsJewotKwkweDFmLDB4OGUsMHgzNCwweDgyLDB4MGMsMHhiNywweGJlLDB4YzUsMHgw MSwweDNlLDB4ZDAsMHhhMywKLSsJMHg5ZCwweDdkLDB4MWMsMHg5YgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX25v bmNlW10gPQotKwl7Ci0rCTB4ZDUsMHg0ZCwweGJkLDB4NGEsMHg5MywweDdmLDB4YjgsMHg5Ngot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGFiLDB4ZDYs MHgzZiwweDA0LDB4ZmUsMHgyNywweDZiLDB4MmQsMHhkNywweGMzLDB4MWMsMHhmMywKLSsJMHgz OCwweDY2LDB4YmEsMHgxYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweGZlLDB4ZjQsMHgwOSwweGE4LDB4YjcsMHg3MywweDI3LDB4OWMsMHg1ZiwweGE3LDB4ZWEs MHg0NiwKLSsJMHhiNSwweGUyLDB4YjIsMHg0MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2ludF9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHg0MiwweGU0LDB4NGUsMHg3YiwweDI3LDB4ZGQsMHhjYiwweGJjLDB4 MGEsMHhjZiwweGE2LDB4NjcsCi0rCTB4ZTcsMHg1NywweDExLDB4YjQKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9l bnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgxNCwweDI2LDB4NjksMHhkOSwweGYzLDB4 NjUsMHgwMywweGQ2LDB4NmIsMHhiOSwweDQ0LDB4MGIsCi0rCTB4YzcsMHhjNCwweDllLDB4MzkK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg1NSwweDJl LDB4NjAsMHg5YSwweDA1LDB4NzIsMHg4YSwweGE4LDB4ZWYsMHgyMiwweDgxLDB4NWEsCi0rCTB4 YzgsMHg5MywweGZhLDB4ODQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7 Ci0rCTB4M2MsMHg0MCwweGM4LDB4YzQsMHgxNiwweDBjLDB4MjEsMHhhNCwweDM3LDB4MmMsMHg4 ZiwweGE1LAotKwkweDA2LDB4MGMsMHgxNSwweDJjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4ZTEsMHgzZSwweDk5LDB4OTgsMHg4NiwweDY3LDB4MGIsMHg2MywweDdi LDB4YmUsMHgzZiwweDg4LAotKwkweDQ2LDB4ODEsMHhjNywweDE5Ci0rCX07Ci0rCi0rCi0rLyog QUVTLTE5MiB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4 MmIsMHg0ZSwweDhiLDB4ZTEsMHhmMSwweDM0LDB4ODAsMHg1NiwweDgxLDB4ZjksMHg3NCwweGVj LAotKwkweDE3LDB4NDQsMHgyYSwweGYxLDB4MTQsMHhiMCwweGJmLDB4OTcsMHgzOSwweGI3LDB4 MDQsMHg3ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4ZDYsMHg5ZCwweGVi LDB4MTQsMHg0ZSwweDZjLDB4MzAsMHgxZSwweDM5LDB4NTUsMHg3MywweGQwLAotKwkweGQxLDB4 ODAsMHg3OCwweGZhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQot Kwl7Ci0rCTB4ZmMsMHg0MywweDRhLDB4ZjgsMHg5YSwweDU1LDB4YjMsMHg1MywweDgzLDB4ZTIs MHgxOCwweDE2LAotKwkweDBjLDB4ZGMsMHhjZCwweDVlLDB4NGYsMHhhMCwweDAzLDB4MDEsMHgy YiwweDlmLDB4ZTQsMHhkNSwKLSsJMHg3ZCwweDQ5LDB4ZjAsMHg0MSwweDllLDB4M2QsMHg5OSww eDA0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4NWUsMHg5 ZiwweDQ5LDB4NmYsMHgyMSwweDhiLDB4MWQsMHgzMiwweGQ1LDB4ODQsMHg1YywweGFjLAotKwkw eGFmLDB4ZGYsMHhlNCwweDc5LDB4OWUsMHhhZiwweGE5LDB4ODIsMHhkMCwweGY4LDB4NGYsMHhj YiwKLSsJMHg2OSwweDEwLDB4MGEsMHg3ZSwweDgxLDB4NTcsMHhiNSwweDM2Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhkNCwweDgxLDB4MGMsMHhkNywweDY2 LDB4MzksMHhlYywweDQyLDB4NTMsMHg4NywweDQxLDB4YTUsCi0rCTB4MWUsMHg3ZCwweDgwLDB4 OTEsMHg4ZSwweGJiLDB4ZWQsMHhhYywweDE0LDB4MDIsMHgxYSwweGQ1Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZf cHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGRmLDB4MWQsMHgzOSwweDQ1LDB4N2Ms MHg5YiwweGM2LDB4MmIsMHg3ZCwweDhjLDB4OTMsMHhlOSwKLSsJMHgxOSwweDMwLDB4NmIsMHg2 NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgwMCwweDcx LDB4MjcsMHg0ZSwweGQzLDB4MTQsMHhmMSwweDIwLDB4N2YsMHg0YSwweDQxLDB4MzIsCi0rCTB4 MmEsMHg5NywweDExLDB4NDMsMHg4ZiwweDRhLDB4MTUsMHg3YiwweDliLDB4NTEsMHg3OSwweGRh LAotKwkweDQ5LDB4M2QsMHhkZSwweGU4LDB4YmMsMHg5MywweDkxLDB4OTkKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9k Zl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHg5MCwweGVlLDB4NzYsMHhhMSwweDQ1 LDB4OGQsMHhiNywweDQwLDB4YjAsMHgxMSwweGJmLDB4ZDAsCi0rCTB4NjUsMHhkNywweDNjLDB4 N2MsMHg0ZiwweDIwLDB4M2YsMHg0ZSwweDExLDB4OWQsMHhiMywweDVlCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZf cHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjQsMHgzYiwweDIwLDB4YTQsMHgzNywweDY2 LDB4YmEsMHg3MiwweDM5LDB4M2YsMHhjZiwweDNjLAotKwkweDdlLDB4MWEsMHgyYiwweDgzCi0r CX07Ci0rCi0rCi0rLyogQUVTLTE5MiB1c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0 W10gPQotKwl7Ci0rCTB4OGQsMHg3NCwweGE0LDB4NTAsMHgxYSwweDAyLDB4NjgsMHgwYywweDJh LDB4NjksMHhjNCwweDgyLAotKwkweDNiLDB4YmIsMHhkYSwweDBlLDB4N2YsMHg3NywweGEzLDB4 MTcsMHg3OCwweDU3LDB4YjIsMHg3YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX25vbmNlW10gPQotKwl7Ci0rCTB4 NzUsMHhkNSwweDFmLDB4YWMsMHhhNCwweDhkLDB4NDIsMHg3OCwweGQ3LDB4NjksMHg4NiwweDlk LAotKwkweDc3LDB4ZDcsMHg0MSwweDBlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQotKwl7Ci0rCTB4NGUsMHgzMywweDQxLDB4M2MsMHg5YywweGMyLDB4ZDIsMHg1Myww eGFmLDB4OTAsMHhlYSwweGNmLAotKwkweDE5LDB4NTAsMHgxZSwweGU2LDB4NmYsMHg2MywweGM4 LDB4MzIsMHgyMiwweGRjLDB4MDcsMHg2NSwKLSsJMHg5YywweGQzLDB4ZjgsMHgzMCwweDllLDB4 ZWQsMHgzNSwweDcwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4 NWQsMHg4YiwweDhjLDB4YzEsMHhkZiwweDBlLDB4MDIsMHg3OCwweGZiLDB4MTksMHhiOCwweDY5 LAotKwkweDc4LDB4NGUsMHg5YywweDUyLDB4YmMsMHhjNywweDIwLDB4YzksMHhlNiwweDVlLDB4 NzcsMHgyMiwKLSsJMHgyOCwweDNkLDB4MGMsMHg5ZSwweDY4LDB4YTgsMHg0NSwweGQ3Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGQ1LDB4ZTcsMHgwOCwweGM1 LDB4MTksMHg5OSwweGQ1LDB4MzEsMHgwMywweDBhLDB4NzQsMHhiNiwKLSsJMHhiNywweGVkLDB4 ZTksMHhlYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDlj LDB4MjYsMHhkYSwweGYxLDB4YWMsMHhkOSwweDVhLDB4ZDYsMHhhOCwweDY1LDB4ZjUsMHgwMiwK LSsJMHg4ZiwweGRjLDB4YTIsMHgwOSwweDU0LDB4YTYsMHhlMiwweGE0LDB4ZGUsMHgzMiwweGUw LDB4MDEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg5 YiwweDkwLDB4YjAsMHgzYSwweDBlLDB4M2EsMHg4MCwweDA3LDB4NGEsMHhmNCwweGRhLDB4NzYs Ci0rCTB4MjgsMHgzMCwweDNjLDB4ZWUsMHg1NCwweDFiLDB4OTQsMHg1OSwweDUxLDB4NDMsMHg1 NiwweDc3LAotKwkweGFmLDB4ODgsMHhkZCwweDYzLDB4ODksMHg0NywweDA2LDB4NjUKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4M2MsMHgxMSwweDY0LDB4N2Es MHg5NiwweGY1LDB4ZDgsMHhiOCwweGFlLDB4ZDYsMHg3MCwweDRlLAotKwkweDE2LDB4OTYsMHhk ZSwweGU5LDB4NjIsMHhiYywweGVlLDB4MjgsMHgyZiwweDI2LDB4YTYsMHhmMCwKLSsJMHg1Niww eGVmLDB4YTMsMHhmMSwweDZiLDB4YTEsMHhiMSwweDc3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4MGIsMHhlMiwweDU2LDB4MDMsMHgxZSwweGRiLDB4MmMsMHg2ZCww eDdmLDB4MWIsMHgxNSwweDU4LAotKwkweDFhLDB4ZjksMHgxMywweDI4Ci0rCX07Ci0rCi0rCi0r LyogQUVTLTI1NiB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0r CTB4NjEsMHg2OCwweGZjLDB4MWEsMHhmMCwweGI1LDB4OTUsMHg2YiwweDg1LDB4MDksMHg5Yiww eDc0LAotKwkweDNmLDB4MTMsMHg3OCwweDQ5LDB4M2IsMHg4NSwweGVjLDB4OTMsMHgxMywweDNi LDB4YTksMHg0ZiwKLSsJMHg5NiwweGFiLDB4MmMsMHhlNCwweGM4LDB4OGYsMHhkZCwweDZhCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhZCwweGQyLDB4YmIsMHhiYSwweGI3 LDB4NjUsMHg4OSwweGMzLDB4MjEsMHg2YywweDU1LDB4MzMsCi0rCTB4MmIsMHgzNiwweGZmLDB4 YTQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg2 ZSwweGNhLDB4ZTcsMHgyMCwweDcyLDB4ZDMsMHg4NCwweDVhLDB4MzIsMHhkMywweDRiLDB4MjQs Ci0rCTB4NzIsMHhjNCwweDYzLDB4MmIsMHg5ZCwweDEyLDB4MjQsMHgwYywweDIzLDB4MjYsMHg4 ZSwweDgzLAotKwkweDE2LDB4MzcsMHgwYiwweGQxLDB4MDYsMHg0ZiwweDY4LDB4NmQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg3ZSwweDA4LDB4NGEsMHhi YiwweGUzLDB4MjEsMHg3YywweGM5LDB4MjMsMHhkMiwweGY4LDB4YjAsCi0rCTB4NzMsMHg5OCww eGJhLDB4ODQsMHg3NCwweDIzLDB4YWIsMHgwNiwweDhhLDB4ZTIsMHgyMiwweGQzLAotKwkweDdi LDB4Y2UsMHg5YiwweGQyLDB4NGEsMHg3NiwweGI4LDB4ZGUKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0KLSsJewotKwkweDBiLDB4MjMsMHhhZiwweGRmLDB4ZjEsMHg2MiwweGQ3 LDB4ZDMsMHg0MywweDk3LDB4ZjgsMHg3NywKLSsJMHgwNCwweGE4LDB4NDIsMHgyMCwweGJkLDB4 ZjYsMHgwZiwweGMxLDB4MTcsMHgyZiwweDlmLDB4NTQsCi0rCTB4YmIsMHg1NiwweDE3LDB4ODYs MHg2OCwweDBlLDB4YmEsMHhhOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHgzMSwweDhlLDB4YWQsMHhhZiwweDQwLDB4ZWIsMHg2YiwweDc0LDB4MzEsMHg0 NiwweDgwLDB4YzcsCi0rCTB4MTcsMHhhYiwweDNjLDB4N2EKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRp dGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OTQsMHg2YiwweGM5LDB4OWYsMHhhYiwweDhkLDB4 YzUsMHhlYywweDcxLDB4ODgsMHgxZCwweDAwLAotKwkweDhjLDB4ODksMHg2OCwweGU0LDB4Yzgs MHgwNywweDc3LDB4MzYsMHgxNywweDZkLDB4NzksMHg3OCwKLSsJMHhjNywweDA2LDB4NGUsMHg5 OSwweDA0LDB4MjgsMHgyOSwweGMzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10g PQotKwl7Ci0rCTB4YmYsMHg2YywweDU5LDB4MmEsMHgwZCwweDQ0LDB4MGYsMHhhZSwweDlhLDB4 NWUsMHgwMywweDczLAotKwkweGQ4LDB4YTYsMHhlMSwweGNmLDB4MjUsMHg2MSwweDM4LDB4MjQs MHg4NiwweDllLDB4NTMsMHhlOCwKLSsJMHhhNCwweGRmLDB4NTYsMHhmNCwweDA2LDB4MDcsMHg5 YywweDBmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjIsMHg0 YSwweGI0LDB4YjgsMHhiNiwweGVlLDB4N2QsMHhiMSwweDllLDB4YzksMHhmOSwweGEwLAotKwkw eGQ5LDB4ZTIsMHg5NywweDAwCi0rCX07Ci0rCi0rCi0rLyogQUVTLTI1NiB1c2UgZGYgTm8gUFIg ICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YTUsMHgzZSwweDM3LDB4MTAsMHgx NywweDQzLDB4OTEsMHg5MywweDU5LDB4MWUsMHg0NywweDUwLAotKwkweDg3LDB4YWEsMHhkZCww eGQ1LDB4YzEsMHhjMywweDg2LDB4Y2QsMHhjYSwweDBkLDB4ZGIsMHg2OCwKLSsJMHhlMCwweDAy LDB4ZDgsMHgwZiwweGRjLDB4NDAsMHgxYSwweDQ3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfbm9uY2VbXSA9Ci0r CXsKLSsJMHhhOSwweDRkLDB4YTUsMHg1YSwweGZkLDB4YzUsMHgwYywweGU1LDB4MWMsMHg5YSww eDNiLDB4OGEsCi0rCTB4NGMsMHg0NCwweDg0LDB4NDAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg4YiwweDUyLDB4YTIsMHg0YSwweDkzLDB4YzMsMHg0 ZSwweGE3LDB4MWUsMHgxYywweGE3LDB4MDUsCi0rCTB4ZWIsMHg4MiwweDliLDB4YTYsMHg1ZCww eGU0LDB4ZDQsMHhlMCwweDdmLDB4YTMsMHhkOCwweDZiLAotKwkweDM3LDB4ODQsMHg1ZiwweGYx LDB4YzcsMHhkNSwweGY2LDB4ZDIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHgyMCwweGY0LDB4MjIsMHhlZCwweGY4LDB4NWMsMHhhMSwweDZhLDB4MDEsMHhjZiww eGJlLDB4NWYsCi0rCTB4OGQsMHg2YywweDk0LDB4N2YsMHhhZSwweDEyLDB4YTgsMHg1NywweGRi LDB4MmEsMHhhOSwweGJmLAotKwkweGM3LDB4YjMsMHg2NSwweDgxLDB4ODAsMHg4ZCwweDBkLDB4 NDYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NGUsMHg0NCww eGZkLDB4ZjMsMHg5ZSwweDI5LDB4YTIsMHhiOCwweDBmLDB4NWQsMHg2YywweGUxLAotKwkweDI4 LDB4MGMsMHgzYiwweGMxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4ZGQsMHg0MCwweGU1LDB4OTgsMHg3YiwweDI3LDB4MTYsMHg3MywweDE1LDB4NjgsMHhk MiwweDc2LAotKwkweGJmLDB4MGMsMHg2NywweDE1LDB4NzUsMHg3OSwweDAzLDB4ZDMsMHhkZSww eGRlLDB4OTEsMHg0NiwKLSsJMHg0MiwweGRkLDB4ZDQsMHg2NywweGM4LDB4NzksMHhjOCwweDFl Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4N2YsMHhk OCwweDFmLDB4YmQsMHgyYSwweGI1LDB4MWMsMHgxMSwweDVkLDB4ODMsMHg0ZSwweDk5LAotKwkw eGY2LDB4NWMsMHhhNSwweDQwLDB4MjAsMHhlZCwweDM4LDB4OGUsMHhkNSwweDllLDB4ZTAsMHg3 NSwKLSsJMHg5MywweGZlLDB4MTIsMHg1ZSwweDVkLDB4NzMsMHhmYiwweDc1Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGNkLDB4MmMsMHhmZiwweDE0LDB4Njks MHgzZSwweDRjLDB4OWUsMHhmZCwweGZlLDB4MjYsMHgwZCwKLSsJMHhlOSwweDg2LDB4MDAsMHg0 OSwweDMwLDB4YmEsMHhiMSwweGM2LDB4NTAsMHg1NywweDc3LDB4MmEsCi0rCTB4NjIsMHgzOSww eDJjLDB4M2IsMHg3NCwweGViLDB4YzksMHgwZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3JldHVybmVkYml0c1td ID0KLSsJewotKwkweDRmLDB4NzgsMHhiZSwweGI5LDB4NGQsMHg5NywweDhjLDB4ZTksMHhkMCww eDk3LDB4ZmUsMHhhZCwKLSsJMHhmYSwweGZkLDB4MzUsMHg1ZQotKwl9OwotKwotKwotKy8qIEFF Uy0xMjggbm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg5YSww eDI1LDB4NjUsMHgxMCwweDY3LDB4ZDUsMHhiNiwweDZiLDB4NzAsMHhhMSwweGIzLDB4YTQsCi0r CTB4NDMsMHg5NSwweDgwLDB4YzAsMHg4NCwweDBhLDB4NzksMHhiMCwweDg4LDB4NzQsMHhmMiww eGJmLAotKwkweDMxLDB4NmMsMHgzMywweDM4LDB4MGIsMHgwMCwweGIyLDB4NWEKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25v X2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NzgsMHg0NywweDZiLDB4ZjcsMHg5MCwweDhlLDB4 ODcsMHhmMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0r CTB4ZjcsMHgyMiwweDFkLDB4M2EsMHhiZSwweDFkLDB4Y2EsMHgzMiwweDFiLDB4YmQsMHg4Nyww eDBjLAotKwkweDUxLDB4MjQsMHgxOSwweGVlLDB4YTMsMHgyMywweDA5LDB4NjMsMHgzMywweDNk LDB4YTgsMHgwYywKLSsJMHgxYywweGZhLDB4NDIsMHg4OSwweGNjLDB4NmYsMHhhMCwweGE4Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHhjOSwweGUwLDB4ODAs MHhiZiwweDhjLDB4NDUsMHg1OCwweDM5LDB4ZmYsMHgwMCwweGFiLDB4MDIsCi0rCTB4NGMsMHgz ZSwweDNhLDB4OTUsMHg5YiwweDgwLDB4YTgsMHgyMSwweDJhLDB4ZWUsMHhiYSwweDczLAotKwkw eGIxLDB4ZDksMHhjZiwweDI4LDB4ZjYsMHg4ZiwweDliLDB4MTIKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2Vu dHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4NGMsMHhhOCwweGM1LDB4ZjAsMHg1OSwweDllLDB4 YTYsMHg4ZCwweDI2LDB4NTMsMHhkNywweDhhLAotKwkweGE5LDB4ZDgsMHhmNywweGVkLDB4YjIs MHhmOSwweDEyLDB4NDIsMHhlMSwweGU1LDB4YmQsMHhlNywKLSsJMHhlNywweDFkLDB4NzQsMHg5 OSwweDAwLDB4OWQsMHgzMSwweDNlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4ZTIsMHhhYywweDIwLDB4ZjAsMHg4MCwweGU3LDB4YmMsMHg3ZSwweDljLDB4 N2IsMHg2NSwweDcxLAotKwkweGFmLDB4MTksMHgzMiwweDE2Ci0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRp dGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MzIsMHg3ZiwweDM4LDB4OGIsMHg3MywweDBhLDB4 NzgsMHg4MywweGRjLDB4MzAsMHhiZSwweDlmLAotKwkweDEwLDB4MWYsMHhmNSwweDFmLDB4Y2Es MHgwMCwweGI1LDB4MGQsMHhkNiwweDlkLDB4NjAsMHg4MywKLSsJMHg1MSwweDU0LDB4N2QsMHgz OCwweDIzLDB4M2EsMHg1MiwweDUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9 Ci0rCXsKLSsJMHgxOCwweDYxLDB4NTMsMHg1NiwweGVkLDB4ZWQsMHhkNywweDIwLDB4ZmIsMHg3 MSwweDA0LDB4N2EsCi0rCTB4YjIsMHhhYywweGMxLDB4MjgsMHhjZCwweGYyLDB4YzIsMHhmYyww eGFhLDB4YjEsMHgwNiwweDA3LAotKwkweGU5LDB4NDYsMHg5NSwweDAyLDB4NDgsMHgwMSwweDc4 LDB4ZjkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDI5LDB4Yzgs MHgxYiwweDE1LDB4YjEsMHhkMSwweGMyLDB4ZjYsMHg3MSwweDg2LDB4NjgsMHgzMywKLSsJMHg1 NywweDgyLDB4MzMsMHhhZgotKwl9OwotKwotKwotKy8qIEFFUy0xMjggbm8gZGYgTm8gUFIgICov Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhjOSwweGM1LDB4NzksMHhiYywweGU4LDB4 YzUsMHgxOSwweGQ4LDB4YmMsMHg2NiwweDczLDB4NjcsCi0rCTB4ZjYsMHhkMywweDcyLDB4YWEs MHhhNiwweDE2LDB4YjgsMHg1MCwweGI3LDB4NDcsMHgzYSwweDQyLAotKwkweGFiLDB4ZjQsMHgx NiwweGIyLDB4OTYsMHhkMiwweGI2LDB4NjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX25vbmNlW10gPQotKwl7Ci0r CTB4NWYsMHhiZiwweDk3LDB4MGMsMHg0YiwweGE0LDB4ODcsMHgxMwotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4Y2UsMHhmYiwweDdiLDB4M2YsMHhkNCww eDZiLDB4MjksMHgwZCwweDY5LDB4MDYsMHhmZiwweGJiLAotKwkweGYyLDB4ZTUsMHhjNiwweDZj LDB4MGEsMHgxMCwweGEwLDB4Y2YsMHgxYSwweDQ4LDB4YzcsMHg4YiwKLSsJMHgzYywweDE2LDB4 ODgsMHhlZCwweDUwLDB4MTMsMHg4MSwweGNlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRb XSA9Ci0rCXsKLSsJMHg0YiwweDIyLDB4NDYsMHgxOCwweDAyLDB4N2IsMHhkMiwweDFiLDB4MjIs MHg0MiwweDdjLDB4MzcsCi0rCTB4ZDksMHhmNiwweGU4LDB4OWIsMHgxMiwweDMwLDB4NWYsMHhl OSwweDkwLDB4ZTgsMHgwOCwweDI0LAotKwkweDRmLDB4MDYsMHg2NiwweGRiLDB4MTksMHgyYiww eDEzLDB4OTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyZSww eDk2LDB4NzAsMHg2NCwweGZhLDB4ZGYsMHhkZiwweDU3LDB4YjUsMHg4MiwweGVlLDB4ZDYsCi0r CTB4ZWQsMHgzZSwweDY1LDB4YzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0K LSsJewotKwkweDI2LDB4YzAsMHg3MiwweDE2LDB4M2EsMHg0YiwweGI3LDB4OTksMHhkNCwweDA3 LDB4YWYsMHg2NiwKLSsJMHg2MiwweDM2LDB4OTYsMHhhNCwweDUxLDB4MTcsMHhmYSwweDA3LDB4 OGIsMHgxNywweDVlLDB4YTEsCi0rCTB4MmYsMHgzYywweDEwLDB4ZTcsMHg5MCwweGQwLDB4NDYs MHgwMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4ODMs MHgzOSwweDM3LDB4N2IsMHgwMiwweDA2LDB4ZDIsMHgxMiwweDEzLDB4OGQsMHg4YiwweGYyLAot KwkweGYwLDB4ZjYsMHgyNiwweGViLDB4YTQsMHgyMiwweDdiLDB4YzIsMHhlNywweGJhLDB4Nzks MHhlNCwKLSsJMHgzYiwweDc3LDB4NWQsMHg0ZCwweDQ3LDB4YjIsMHgyZCwweGI0Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MGIsMHhiOSwweDY3LDB4MzcsMHhk YiwweDgzLDB4ZGYsMHhjYSwweDgxLDB4OGIsMHhmOSwweDNmLAotKwkweGYxLDB4MTEsMHgxYiww eDJmLDB4ZjAsMHg2MSwweGE2LDB4ZGYsMHhiYSwweGEzLDB4YjEsMHhhYywKLSsJMHhkMywweGU2 LDB4MDksMHhiOCwweDJjLDB4NmEsMHg2NywweGQ2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHgxZSwweGE3LDB4YTQsMHhlNCwweGUxLDB4YTYsMHg3YywweDY5LDB4OWEs MHg0NCwweDZjLDB4MzYsCi0rCTB4ODEsMHgzNywweDE5LDB4ZDQKLSsJfTsKLSsKLSsKLSsvKiBB RVMtMTkyIG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4OWQs MHgyYywweGQyLDB4NTUsMHg2NiwweGVhLDB4ZTAsMHhiZSwweDE4LDB4YjcsMHg3NiwweGU3LAot KwkweDczLDB4MzUsMHhkOCwweDFmLDB4YWQsMHgzYSwweGUzLDB4ODEsMHgwZSwweDkyLDB4ZDAs MHg2MSwKLSsJMHhjOSwweDEyLDB4MjYsMHhmNiwweDFjLDB4ZGYsMHhmZSwweDQ3LDB4YWEsMHhm ZSwweDdkLDB4NWEsCi0rCTB4MTcsMHgxZiwweDhkLDB4OWEKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX25vbmNl W10gPQotKwl7Ci0rCTB4NDQsMHg4MiwweGVkLDB4ZTgsMHg0YywweDI4LDB4NWEsMHgxNCwweGZm LDB4ODgsMHg4ZCwweDE5LAotKwkweDYxLDB4NWMsMHhlZSwweDBmCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg0NywweGQ3LDB4OWIsMHg5OSwweGFh LDB4Y2IsMHhlNywweGQyLDB4NTcsMHg2NiwweDJjLDB4ZTEsCi0rCTB4NzgsMHhkNiwweDJjLDB4 ZWEsMHhhMywweDIzLDB4NWYsMHgyYSwweGMxLDB4M2EsMHhmMCwweGE0LAotKwkweDIwLDB4M2Is MHhmYSwweDA3LDB4ZDUsMHgwNSwweDAyLDB4ZTQsMHg1NywweDAxLDB4YjYsMHgxMCwKLSsJMHg1 NywweDJlLDB4ZTcsMHg1NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7 Ci0rCTB4NGIsMHg3NCwweDBiLDB4NDAsMHhjZSwweDZiLDB4YzIsMHg2YSwweDI0LDB4YjQsMHhm MywweGFkLAotKwkweDdhLDB4YTUsMHg3YSwweGEyLDB4MTUsMHhlMiwweGM4LDB4NjEsMHgxNSww eGM2LDB4YjcsMHg4NSwKLSsJMHg2OSwweDExLDB4YWQsMHg3YiwweDE0LDB4ZDIsMHhmNiwweDEy LDB4YTEsMHg5NSwweDVkLDB4M2YsCi0rCTB4ZTIsMHhkMCwweDBjLDB4MmYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2Rm X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4MGMsMHg5YywweGFkLDB4MDUsMHhlZSww eGFlLDB4NDgsMHgyMywweDg5LDB4NTksMHhhMSwweDk0LAotKwkweGQ3LDB4ZDgsMHg3NSwweGQ1 LDB4NTQsMHg5MywweGM3LDB4NGEsMHhkOSwweDI2LDB4ZGUsMHhlYiwKLSsJMHhiYSwweGIwLDB4 N2UsMHgzMCwweDFkLDB4NWYsMHg2OSwweDQwLDB4OWMsMHgzYiwweDE3LDB4NTgsCi0rCTB4MWQs MHgzMCwweGIzLDB4NzgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsK LSsJMHhmNywweDkzLDB4YjAsMHg2ZCwweDc3LDB4ODMsMHhkNSwweDM4LDB4MDEsMHhlMSwweDUy LDB4NDAsCi0rCTB4N2UsMHgzZSwweDBjLDB4MjYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9Ci0rCXsKLSsJMHhiYywweDRiLDB4MzcsMHg0NCwweDFjLDB4YzUsMHg0NSwweDVm LDB4OGYsMHg1MSwweDYyLDB4OGEsCi0rCTB4ODUsMHgzMCwweDFkLDB4N2MsMHhlNCwweGNmLDB4 ZjcsMHg0NCwweGNlLDB4MzIsMHgzZSwweDU3LAotKwkweDk1LDB4YTQsMHgyYSwweGRmLDB4ZmQs MHg5ZSwweDM4LDB4NDEsMHhiMywweGY2LDB4YzUsMHhlZSwKLSsJMHgwYywweDRiLDB4ZWUsMHg2 ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4ZWMsMHhhZiww eGY2LDB4NGYsMHhiMSwweGEwLDB4NTQsMHhiNSwweDViLDB4ZTMsMHg0NiwweGIwLAotKwkweDc2 LDB4NWEsMHg3YywweDNmLDB4N2IsMHg5NCwweDY5LDB4MjEsMHg1MSwweDAyLDB4ZTUsMHg5ZiwK LSsJMHgwNCwweDU5LDB4MDIsMHg5OCwweGM2LDB4NDMsMHgyYywweGNjLDB4MjYsMHg0YywweDg3 LDB4NmIsCi0rCTB4OGUsMHgwYSwweDgzLDB4ZGYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3JldHVybmVkYml0 c1tdID0KLSsJewotKwkweDc0LDB4NDUsMHhmYiwweDUzLDB4ODQsMHg5NiwweGJlLDB4ZmYsMHgx NSwweGNjLDB4NDEsMHg5MSwKLSsJMHhiOSwweGExLDB4MjEsMHg2OAotKwl9OwotKwotKwotKy8q IEFFUy0xOTIgbm8gZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgz YywweDdkLDB4YjUsMHhlMCwweDU0LDB4ZDksMHg2ZSwweDhjLDB4YTksMHg4NiwweGNlLDB4NGUs Ci0rCTB4NmIsMHhhZiwweGViLDB4MmYsMHhlNywweDc1LDB4ZTAsMHg4YiwweGE0LDB4M2IsMHgw NywweGZlLAotKwkweGJlLDB4MzMsMHg3NSwweDkzLDB4ODAsMHgyNywweGI1LDB4MjksMHg0Nyww eDhiLDB4YzcsMHgyOCwKLSsJMHg5NCwweGMzLDB4NTksMHg2MwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfbm9uY2Vb XSA9Ci0rCXsKLSsJMHg0MywweGYxLDB4N2QsMHhiOCwweGMzLDB4ZmUsMHhkMCwweDIzLDB4NmIs MHhiNCwweDkyLDB4ZGIsCi0rCTB4MjksMHhmZCwweDQ1LDB4NzEKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDlmLDB4MjQsMHgyOSwweDk5LDB4OWUsMHgw MSwweGFiLDB4ZTksMHgxOSwweGQ4LDB4MjMsMHgwOCwKLSsJMHhiNywweGQ2LDB4N2UsMHg4Yyww eGMwLDB4OWUsMHg3ZiwweDZlLDB4NWIsMHgzMywweDIwLDB4OTYsCi0rCTB4MGIsMHgyMywweDJj LDB4YTUsMHg2YSwweGY4LDB4MWIsMHgwNCwweDI2LDB4ZGIsMHgyZSwweDJiLAotKwkweDNiLDB4 ODgsMHhjZSwweDM1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg5 NCwweGU5LDB4N2MsMHgzZCwweGE3LDB4ZGIsMHg2MCwweDgzLDB4MWYsMHg5OCwweDNmLDB4MGIs Ci0rCTB4ODgsMHg1OSwweDU3LDB4NTEsMHg4OCwweDlmLDB4NzYsMHg0OSwweDlmLDB4YTYsMHhk YSwweDcxLAotKwkweDFkLDB4MGQsMHg0NywweDE2LDB4NjMsMHhjNSwweDY4LDB4ZTQsMHg1ZCww eDM5LDB4NjksMHhiMywKLSsJMHgzZSwweGJlLDB4ZDQsMHg4ZQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfaW50X3Jl dHVybmVkYml0c1tdID0KLSsJewotKwkweGY5LDB4ZDcsMHhhZCwweDY5LDB4YWIsMHg4ZiwweDIz LDB4NTYsMHg3MCwweDE3LDB4NGYsMHgyYSwKLSsJMHg0NSwweGU3LDB4NGEsMHhjNQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf bm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4YTYsMHg3MSwweDZhLDB4M2Qs MHhiYSwweGQxLDB4ZTgsMHg2NiwweGE2LDB4ZWYsMHhiMiwweDBlLAotKwkweGE4LDB4OWMsMHhh YSwweDRlLDB4YWYsMHgxNywweDg5LDB4NTAsMHgwMCwweGRhLDB4YTEsMHhiMSwKLSsJMHgwYiww eGE0LDB4ZDksMHgzNSwweDg5LDB4YzgsMHhlNSwweGIwLDB4ZDksMHhiNywweGM0LDB4MzMsCi0r CTB4OWIsMHhjYiwweDdlLDB4NzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtd ID0KLSsJewotKwkweDI3LDB4MjEsMHhmYywweGMyLDB4YmQsMHhmMywweDNjLDB4Y2UsMHhjMyww eGNhLDB4YzEsMHgwMSwKLSsJMHhlMCwweGZmLDB4OTMsMHgxMiwweDdkLDB4NTQsMHg0MiwweGUz LDB4OWYsMHgwMywweGRmLDB4MjcsCi0rCTB4MDQsMHgwNywweDNjLDB4NTMsMHg3ZiwweGE4LDB4 NjYsMHhjOCwweDk3LDB4NGIsMHg2MSwweDQwLAotKwkweDVkLDB4N2EsMHgyNSwweDc5Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MmQsMHg4ZSwweDE2LDB4NWQs MHgwYiwweDlmLDB4ZWIsMHhhYSwweGQ2LDB4ZWMsMHgyOCwweDcxLAotKwkweDdjLDB4MGIsMHhj MSwweDFkLDB4ZDQsMHg0NCwweDE5LDB4NDcsMHhmZCwweDFkLDB4N2MsMHhlNSwKLSsJMHhmMyww eDI3LDB4ZTEsMHhiNiwweDcyLDB4MGEsMHhlMCwweGVjLDB4MGUsMHhjZCwweGVmLDB4MWEsCi0r CTB4OTEsMHg2YSwweGUzLDB4NWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3JldHVybmVkYml0c1tdID0KLSsJewot KwkweGU1LDB4ZGEsMHhiOCwweGUwLDB4NjMsMHg1OSwweDVhLDB4Y2MsMHgzZCwweGRjLDB4OWYs MHhlOCwKLSsJMHg2NiwweDY3LDB4MmMsMHg5MgotKwl9OwotKwotKwotKy8qIEFFUy0yNTYgbm8g ZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxNSwweGM3LDB4NWQs MHhjYiwweDQxLDB4NGIsMHgxNiwweDAxLDB4M2EsMHhkMSwweDQ0LDB4ZTgsCi0rCTB4MjIsMHgz MiwweGM2LDB4OWMsMHgzZiwweGU3LDB4NDMsMHhmNSwweDlhLDB4ZDMsMHhlYSwweGYyLAotKwkw eGQ3LDB4NGUsMHg2ZSwweDZhLDB4NTUsMHg3MywweDQwLDB4ZWYsMHg4OSwweGFkLDB4MGQsMHgw MywKLSsJMHg5NiwweDdlLDB4NzgsMHg4MSwweDJmLDB4OTEsMHgxYiwweDQ0LDB4YjAsMHgwMiww eGJhLDB4MWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4ZGMsMHhlNCwweGQ0 LDB4MjcsMHg3YSwweDkwLDB4ZDcsMHg5OSwweDQzLDB4YTEsMHgzYywweDMwLAotKwkweGNjLDB4 NGIsMHhlZSwweDJlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0r CXsKLSsJMHhlMywweGU2LDB4YjksMHgxMSwweGU0LDB4N2EsMHhhNCwweDQwLDB4NmIsMHhmOCww eDczLDB4ZjcsCi0rCTB4N2UsMHhlYywweGM3LDB4YjksMHg5NywweGJmLDB4ZjgsMHgyNSwweDdi LDB4YmUsMHgxMSwweDliLAotKwkweDViLDB4NmEsMHgwYywweDJlLDB4MmIsMHgwMSwweDUxLDB4 Y2QsMHg0MSwweDRiLDB4NmIsMHhhYywKLSsJMHgzMSwweGE4LDB4MGIsMHhmNywweGU2LDB4NTks MHg0MiwweGI4LDB4MDMsMHgwYywweGY4LDB4MDYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxp bnB1dFtdID0KLSsJewotKwkweDZhLDB4OWYsMHgwMCwweDkxLDB4YWUsMHhmZSwweGNmLDB4ODQs MHg5OSwweGNlLDB4YjEsMHg0MCwKLSsJMHg2ZCwweDVkLDB4MzMsMHgyOCwweDg0LDB4ZjQsMHg4 YywweDYzLDB4NGMsMHg3ZSwweGJkLDB4MmMsCi0rCTB4ODAsMHg3NiwweGVlLDB4NWEsMHhhYSww eDE1LDB4MDcsMHgzMSwweGQ4LDB4YmIsMHg4YywweDY5LAotKwkweDlkLDB4OWQsMHhiYywweDdl LDB4NDksMHhhZSwweGVjLDB4MzksMHg2YiwweGQxLDB4MWYsMHg3ZQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJf ZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhmMywweGI5LDB4NzUsMHg5YywweGJkLDB4ODgs MHhlYSwweGEyLDB4NTAsMHhhZCwweGQ2LDB4MTYsCi0rCTB4MWEsMHgxMiwweDNjLDB4ODYsMHg2 OCwweGFmLDB4NmYsMHhiZSwweDE5LDB4ZjIsMHhlZSwweGNjLAotKwkweGE1LDB4NzAsMHg4NCww eDUzLDB4NTAsMHhjYiwweDlmLDB4MTQsMHhhOSwweGU1LDB4ZWUsMHhiOSwKLSsJMHg0OCwweDQ1 LDB4NDAsMHhlMiwweGM3LDB4YzksMHg5YSwweDc0LDB4ZmYsMHg4YywweDk5LDB4MWYKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyZSwweGYyLDB4NDUsMHg0 YywweDYyLDB4MmUsMHgwYSwweGI5LDB4NmIsMHhhMiwweGZkLDB4NTYsCi0rCTB4NzksMHg2MCww eDkzLDB4Y2YKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhh ZiwweDY5LDB4MjAsMHhlOSwweDNiLDB4MzcsMHg5ZCwweDNmLDB4YjQsMHg4MCwweDAyLDB4N2Es Ci0rCTB4MjUsMHg3ZCwweGI4LDB4ZGUsMHg3MSwweGM1LDB4MDYsMHgwYywweGI0LDB4ZTIsMHg4 ZiwweDM1LAotKwkweGQ4LDB4MTQsMHgwZCwweDdmLDB4NzYsMHg2MywweDRlLDB4YjUsMHhlZSww eGU5LDB4NmYsMHgzNCwKLSsJMHhjNywweDVmLDB4NTYsMHgxNCwweDRhLDB4ZTgsMHg3MywweDk1 LDB4NWIsMHgxYywweGI5LDB4Y2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0K LSsJewotKwkweGU1LDB4YjAsMHgyZSwweDdlLDB4NTIsMHgzMCwweGUzLDB4NjMsMHg4MiwweGI2 LDB4NDQsMHhkMywKLSsJMHgyNSwweDE5LDB4MDUsMHgyNCwweDlhLDB4OWYsMHg1ZiwweDI3LDB4 NmEsMHgyOSwweGFiLDB4ZmEsCi0rCTB4MDcsMHhhMiwweDQyLDB4MGYsMHhjNSwweGE4LDB4OTQs MHg3YywweDE3LDB4N2IsMHg4NSwweDgzLAotKwkweDBjLDB4MjUsMHgwZSwweDYzLDB4MGIsMHhl OSwweDEyLDB4NjAsMHhjZCwweGVmLDB4ODAsMHgwZgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4NWUsMHhmMiwweDI2LDB4ZWYsMHg5ZiwweDU4LDB4NWQsMHhkNSww eDRhLDB4MTAsMHhmZSwweGE3LAotKwkweDJkLDB4NWYsMHg0YSwweDQ2Ci0rCX07Ci0rCi0rCi0r LyogQUVTLTI1NiBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkw eGZiLDB4Y2YsMHgxYiwweDYxLDB4MTYsMHg4OSwweDc4LDB4MjMsMHhmNSwweGQ4LDB4OTYsMHhl MywKLSsJMHg0ZSwweDY0LDB4MGIsMHgyOSwweDlhLDB4M2YsMHhmOCwweGE1LDB4ZWQsMHhmMiww eGZlLDB4ZGIsCi0rCTB4MTYsMHhjYSwweDdmLDB4MTAsMHhmYSwweDVlLDB4MTgsMHg3NiwweDJj LDB4NjMsMHg1ZSwweDk2LAotKwkweGNmLDB4YjMsMHhkNiwweGZjLDB4YWYsMHg5OSwweDM5LDB4 MjgsMHg5YywweDYxLDB4ZTgsMHhiMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfbm9uY2VbXSA9Ci0rCXsKLSsJMHgx MiwweDk2LDB4ZjAsMHg1MiwweGYzLDB4OGQsMHg4MSwweGNmLDB4ZGUsMHg4NiwweGYyLDB4OTks Ci0rCTB4NDMsMHg5NiwweGI5LDB4ZjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0KLSsJewotKwkweDYzLDB4MGQsMHg3OCwweGY1LDB4OTAsMHg4ZSwweDMyLDB4NDcsMHhi MCwweDRkLDB4MzcsMHg2MCwKLSsJMHgwOSwweDk2LDB4YmMsMHhiZiwweDk3LDB4N2EsMHg2Miww eDE0LDB4NDUsMHhiZCwweDhkLDB4Y2MsCi0rCTB4NjksMHhmYiwweDAzLDB4ZTEsMHg4MCwweDFj LDB4YzcsMHhlMiwweDJhLDB4ZjksMHgzNywweDNmLAotKwkweDY2LDB4NGQsMHg2MiwweGQ5LDB4 MTAsMHhlMCwweGFkLDB4YzgsMHg5YSwweGYwLDB4YTgsMHg2ZAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4MzYsMHhjNiwweDEzLDB4NjAsMHhiYiwweDE0LDB4YWQs MHgyMiwweGIwLDB4MzgsMHhhYywweGE2LAotKwkweDE4LDB4MTYsMHg5MywweDI1LDB4ODYsMHhi NywweGRjLDB4ZGMsMHgzNiwweDk4LDB4MmIsMHhmOSwKLSsJMHg2OCwweDMzLDB4ZDMsMHhjNiww eGZmLDB4Y2UsMHg4ZCwweDE1LDB4NTksMHg4MiwweDc2LDB4ZWQsCi0rCTB4NmYsMHg4ZCwweDQ5 LDB4NzQsMHgyZiwweGRhLDB4ZGMsMHgxZiwweDE3LDB4ZDAsMHhkZSwweDE3Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19k Zl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MTYsMHgyZiwweDhlLDB4M2YsMHgyMSww eDdhLDB4MWMsMHgyMCwweDU2LDB4ZDEsMHg5MiwweGY2LAotKwkweGQyLDB4MjUsMHg3NSwweDBl Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg5MSwweDc5LDB4 NzYsMHhlZSwweGUwLDB4Y2YsMHg5ZSwweGMyLDB4ZDUsMHhkNCwweDIzLDB4OWIsCi0rCTB4MTIs MHg4YywweDdlLDB4MGEsMHhiNywweGQyLDB4OGIsMHhkNiwweDdjLDB4YTMsMHhjNiwweGU1LAot KwkweDBlLDB4YWEsMHhjNywweDZiLDB4YWUsMHgwZCwweGZhLDB4NTMsMHgwNiwweDc5LDB4YTEs MHhlZCwKLSsJMHg0ZCwweDZhLDB4MGUsMHhkOCwweDlkLDB4YmUsMHgxYiwweDMxLDB4OTMsMHg3 YiwweGVjLDB4ZmIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewot KwkweGQyLDB4NDYsMHg1MCwweDIyLDB4MTAsMHgxNCwweDYzLDB4ZjcsMHhlYSwweDBmLDB4Yjks MHg3ZSwKLSsJMHgwZCwweGUxLDB4OTQsMHgwNywweGFmLDB4MDksMHg0NCwweDMxLDB4ZWEsMHg2 NCwweGE0LDB4MTgsCi0rCTB4NWIsMHhmOSwweGQ4LDB4YzIsMHhmYSwweDAzLDB4NDcsMHhjNSww eDM5LDB4NDMsMHhkNSwweDNiLAotKwkweDYyLDB4ODYsMHg2NCwweGVhLDB4MmMsMHg3MywweDhj LDB4YWUsMHg5ZCwweDk4LDB4OTgsMHgyOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0Mltd ID0KLSsJewotKwkweDhjLDB4YWIsMHgxOCwweGY4LDB4YzMsMHhlYywweDE4LDB4NWMsMHhiMyww eDFlLDB4OWQsMHhiZSwKLSsJMHgzZiwweDAzLDB4YjQsMHgwMCwweDk4LDB4OWQsMHhhZSwweGVi LDB4ZjQsMHg5NCwweGY4LDB4NDIsCi0rCTB4OGYsMHhlMywweDM5LDB4MDcsMHhlMSwweGM5LDB4 YWQsMHgwYiwweDFmLDB4ZWQsMHhjMCwweGJhLAotKwkweGY2LDB4ZDEsMHhlYywweDI3LDB4ODYs MHg3YiwweGQ2LDB4NTUsMHg5YiwweDYwLDB4YTUsMHhjNgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4ZWYsMHhkMiwweGQ4LDB4NWMsMHhkYywweDYyLDB4MjUsMHg5Ziww eGFhLDB4MWUsMHgyYywweDY3LAotKwkweGY2LDB4MDIsMHgzMiwweGUyCi0rCX07Ci0rCi0rCi0r LyogU0hBLTEgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhkMiwweDM2LDB4YTUsMHgy NywweDMxLDB4NzMsMHhkZCwweDExLDB4NGYsMHg5MywweGJkLDB4ZTIsCi0rCTB4MzEsMHhhNSww eDkxLDB4MTMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4YjUsMHhiMywweDYwLDB4ZWYsMHhm NywweDYzLDB4MzEsMHhmMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0r CTB4ZDQsMHhiYiwweDAyLDB4MTAsMHhiMiwweDcxLDB4ZGIsMHg4MSwweGQ2LDB4ZjAsMHg0Miww eDYwLAotKwkweGRhLDB4ZWEsMHg3NywweDUyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHg0ZCwweGQyLDB4NmMsMHg4NywweGZiLDB4MmMsMHg0ZiwweGE2LDB4OGQsMHgxNiww eDYzLDB4MjIsCi0rCTB4NmEsMHg1MSwweGUzLDB4ZjgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByW10g PQotKwl7Ci0rCTB4YzksMHg4MywweDllLDB4MTYsMHhmNiwweDFjLDB4MGYsMHhiMiwweGVjLDB4 NjAsMHgzMSwweGE5LAotKwkweGNiLDB4YTksMHgzNiwweDdhCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4YTgsMHgxMywweDRmLDB4ZjQsMHgzMSwweDAyLDB4NDQsMHhlMyww eGQzLDB4M2QsMHg2MSwweDllLAotKwkweGU1LDB4YzYsMHgzZSwweDg5LDB4YjUsMHg5YiwweDBm LDB4MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhmOSwweGU4LDB4ZDIs MHg3MiwweDEzLDB4MzQsMHg5NSwweDZmLDB4MTUsMHg0OSwweDQ3LDB4OTksCi0rCTB4MTYsMHgw MywweDE5LDB4NDcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDRlLDB4OGMs MHg0OSwweDliLDB4NGEsMHg1YywweDliLDB4OWMsMHgzYSwweGVlLDB4ZmIsMHhkMiwKLSsJMHhh ZSwweGNkLDB4OGMsMHhjNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NTAsMHhi NCwweGI0LDB4Y2QsMHg2OCwweDU3LDB4ZmMsMHgyZSwweGMxLDB4NTIsMHhjYywweGY2LAotKwkw eDY4LDB4YTQsMHg4MSwweGVkLDB4N2UsMHhlNCwweDFkLDB4ODcKLSsJfTsKLSsKLSsKLSsvKiBT SEEtMSBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGE5LDB4NDcsMHgxYiwweDI5LDB4 MmQsMHgxYywweDA1LDB4ZGYsMHg3NiwweGQwLDB4NjIsMHhmOSwKLSsJMHhlMiwweDdmLDB4NGMs MHg3YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTFfbm9uY2VbXSA9Ci0rCXsKLSsJMHg1MywweDIzLDB4MjQsMHhlMywweGVjLDB4MGMs MHg1NCwweDE0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg3YSwweDg3 LDB4YTEsMHhhYywweDFjLDB4ZmQsMHhhYiwweGFlLDB4ZjcsMHhkNiwweGZiLDB4NzYsCi0rCTB4 MjgsMHhlYywweDZkLDB4Y2EKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGZjLDB4 OTIsMHgzNSwweGQ2LDB4N2UsMHhiNywweDI0LDB4NjUsMHhmZCwweDEyLDB4MjcsMHgzNSwKLSsJ MHhjMCwweDcyLDB4Y2EsMHgyOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDU3 LDB4ODgsMHg4MiwweGU1LDB4MjUsMHhhNSwweDJjLDB4NGEsMHgwNiwweDIwLDB4NmMsMHg3MiwK LSsJMHg1NSwweDYxLDB4ZGQsMHg5MCwweDcxLDB4OWYsMHg5NSwweGVhCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5w dXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg2OSwweGE1LDB4NDAsMHg2MiwweDk4LDB4NDcsMHg1Niww eDczLDB4NGEsMHg4ZiwweDYwLDB4OTYsCi0rCTB4ZDYsMHg5OSwweDI3LDB4ZWQKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGU1LDB4NDAsMHg0ZSwweGJkLDB4NTAsMHgw MCwweGY1LDB4MTUsMHhhNiwweGVlLDB4NDUsMHhkYSwKLSsJMHg4NCwweDNkLDB4ZDQsMHhjMAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDExLDB4NTEsMHgxNCwweGYwLDB4MDks MHgxYiwweDRlLDB4NTYsMHgwZCwweGU5LDB4ZjYsMHgxZSwKLSsJMHg1MiwweDY1LDB4Y2QsMHg5 NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YTEsMHg5YywweDk0LDB4NmUsMHgyOSww eGUxLDB4MzMsMHgwZCwweDMyLDB4ZDYsMHhhYSwweGNlLAotKwkweDcxLDB4M2YsMHg1MiwweDcy LDB4OGIsMHg0MiwweGE4LDB4ZDcKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMjI0IFBSICAqLwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRy b3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxMiwweDY5LDB4MzIsMHg0ZiwweDgzLDB4YTYsMHhmNSww eDE0LDB4ZTMsMHg0OSwweDNlLDB4NzUsCi0rCTB4M2UsMHhkZSwweGFkLDB4YTEsMHgyOSwweGMz LDB4ZjMsMHgxOSwweDIwLDB4YjUsMHg0YywweGQ5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX25vbmNlW10gPQotKwl7Ci0r CTB4NmEsMHg3OCwweGQwLDB4ZWIsMHhiYiwweDVhLDB4ZjAsMHhlZSwweGU4LDB4YzMsMHhiYSww eDcxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGQ1LDB4Yjgs MHhiNiwweGJjLDB4YzEsMHg1YiwweDYwLDB4MzEsMHgzYywweGY1LDB4ZTUsMHhjMCwKLSsJMHg4 ZSwweDUyLDB4N2EsMHhiZCwweGVhLDB4NDcsMHhhOSwweDVmLDB4OGYsMHhmOSwweDhiLDB4YWUK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4MWYsMHg1NSwweGVjLDB4YWUs MHgxNiwweDEyLDB4ODQsMHhiYSwweDg0LDB4MTYsMHgxOSwweDg4LAotKwkweDhlLDB4YjgsMHgz MywweDI1LDB4NTQsMHhmZiwweGNhLDB4NzksMHhhZiwweDA3LDB4MjUsMHg1MAotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9l bnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDkyLDB4YTMsMHgzMiwweGE4LDB4OWEsMHgwYSww eDU4LDB4N2MsMHgxZCwweDVhLDB4N2UsMHhlMSwKLSsJMHhiMiwweDczLDB4YWIsMHgwZSwweDE2 LDB4NzksMHgyMywweGQzLDB4MjksMHg4OSwweDgxLDB4ZTEKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfaW50X3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweGYzLDB4MzgsMHg5MSwweDQwLDB4MzcsMHg3YSwweDUxLDB4NzIs MHg0MiwweDc0LDB4NzgsMHgwYSwKLSsJMHg2OSwweGZkLDB4YTYsMHg0NCwweDQzLDB4NDUsMHg2 YywweDBjLDB4NWEsMHgxOSwweGZmLDB4ZjEsCi0rCTB4NTQsMHg2MCwweGVlLDB4NmEKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf cHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDc1LDB4ZjMsMHgwNCwweDI1LDB4ZGQs MHgzNiwweGE4LDB4MzcsMHg0NiwweGFlLDB4MGMsMHg1MiwKLSsJMHgwNSwweDc5LDB4NGMsMHgy NiwweGRiLDB4ZTksMHg3MSwweDE2LDB4NGMsMHgwYSwweGYyLDB4NjAKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9w eWlucHV0cHIyW10gPQotKwl7Ci0rCTB4ZWEsMHhjNSwweDAzLDB4MGEsMHg0ZiwweGIwLDB4Mzgs MHg4ZCwweDIzLDB4ZDQsMHhjOCwweDc3LAotKwkweGUyLDB4NmQsMHg5YywweDBiLDB4NDQsMHhm NywweDJkLDB4NWIsMHhiZiwweDVkLDB4MmEsMHgxMQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHg2MCwweDUwLDB4MmIsMHhlNywweDg2LDB4ZDgsMHgyNiwweDczLDB4ZTMsMHgx ZCwweDk1LDB4MjAsCi0rCTB4YjMsMHgyYywweDMyLDB4MWMsMHhmNSwweGNlLDB4NTcsMHhhNiww eDY3LDB4MmIsMHhkYywweDRlLAotKwkweGRkLDB4MTEsMHg0YywweGM0Ci0rCX07Ci0rCi0rCi0r LyogU0hBLTIyNCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YjIsMHgxYywweDc3 LDB4NGQsMHhmNiwweGQzLDB4YjYsMHg0MCwweGI3LDB4MzAsMHgzZSwweDI5LAotKwkweGIwLDB4 ODUsMHgxYywweGJlLDB4NGEsMHhlYSwweDZiLDB4NWEsMHhiNSwweDhhLDB4OTcsMHhlYgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9ub25jZVtdID0KLSsJewotKwkweDQyLDB4MDIsMHgwYSwweDFjLDB4OTgsMHg5YSwweDc3LDB4 OWUsMHg5ZiwweDgwLDB4YmEsMHhlMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0r CXsKLSsJMHg5OCwweGI4LDB4MDQsMHg0MSwweGZjLDB4YzEsMHg1ZCwweGM1LDB4ZTksMHhiOSww eDA4LDB4ZGEsCi0rCTB4ZjksMHhmYSwweDBkLDB4OTAsMHhjZSwweGRmLDB4MWQsMHgxMCwweGE5 LDB4OGQsMHg1MCwweDBjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDlhLDB4 OGQsMHgzOSwweDQ5LDB4NDIsMHhkNSwweDBiLDB4YWUsMHhlMSwweGFmLDB4YjcsMHgwMCwKLSsJ MHgwMiwweGZhLDB4OTYsMHhiMSwweGE1LDB4MWQsMHgyZCwweDI1LDB4NzgsMHhlZSwweDgzLDB4 M2YKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGU0LDB4ZjUsMHg1MywweDc5 LDB4NWEsMHg5NywweDU4LDB4MDYsMHgwOCwweGJhLDB4N2IsMHhmYSwKLSsJMHhmMCwweDgzLDB4 MDUsMHg4YywweDIyLDB4YzAsMHhjOSwweGRiLDB4MTUsMHhlNywweGRlLDB4MjAsCi0rCTB4NTUs MHgyMiwweDlhLDB4YWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4Njcs MHgwOSwweDQ4LDB4YWEsMHgwNywweDE2LDB4OTksMHg4OSwweDdmLDB4NmQsMHhhMCwweGU1LAot KwkweDhmLDB4ZGYsMHhiYywweGRiLDB4ZmUsMHhlNSwweDZjLDB4N2EsMHg5NSwweDRhLDB4NjYs MHgxNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgwZiwweDRiLDB4 MWMsMHg2ZiwweGI3LDB4ZTMsMHg0NywweGU1LDB4NWQsMHg3ZCwweDM4LDB4ZDYsCi0rCTB4Mjgs MHg5YiwweGViLDB4NTUsMHg2MywweDA5LDB4M2UsMHg3YywweDU2LDB4ZWEsMHhmOCwweDE5Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgyZCwweDI2LDB4N2MsMHgzNywweGU0 LDB4N2EsMHgyOCwweDVlLDB4NWEsMHgzYywweGFmLDB4M2QsCi0rCTB4NWEsMHg4ZSwweDU1LDB4 YTIsMHgxYSwweDZlLDB4YzAsMHhlNSwweGY2LDB4MjEsMHhkMywweGY2Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweDRkLDB4ODMsMHgzNSwweGRmLDB4NjcsMHhhOSwweGZjLDB4MTcs MHhkYSwweDcwLDB4Y2MsMHg4YiwKLSsJMHg3ZiwweDc3LDB4YWUsMHhhMiwweDVmLDB4YjksMHg3 ZSwweDc0LDB4NGMsMHgyNiwweGMxLDB4N2EsCi0rCTB4M2IsMHhhNywweDVjLDB4OTMKLSsJfTsK LSsKLSsKLSsvKiBTSEEtMjU2IFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhjZSww eDQ5LDB4MDAsMHg3YSwweDU2LDB4ZTMsMHg2NywweDhmLDB4ZTEsMHhiNiwweGE3LDB4ZDQsCi0r CTB4NGYsMHgwOCwweDdhLDB4MWIsMHgwMSwweGY0LDB4ZmEsMHg2YiwweGVmLDB4YjcsMHhlNSww eGViLAotKwkweDA3LDB4M2QsMHgxMSwweDBkLDB4YzgsMHhlYSwweDJiLDB4ZmUKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJf bm9uY2VbXSA9Ci0rCXsKLSsJMHg3MywweDQxLDB4YzgsMHg5MiwweDk0LDB4ZTIsMHhjNSwweDVm LDB4OTMsMHhmZCwweDM5LDB4NWQsCi0rCTB4MmIsMHg5MSwweDRkLDB4MzgKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NTAsMHg2ZCwweDAxLDB4MDEsMHgwNyww eDVhLDB4ODAsMHgzNSwweDdhLDB4NTYsMHgxYSwweDU2LAotKwkweDJmLDB4OWEsMHgwYiwweDM1 LDB4YjIsMHhiMSwweGM5LDB4ZTUsMHhjYSwweDY5LDB4NjEsMHg0OCwKLSsJMHhmZiwweGZiLDB4 MGYsMHhkOSwweDRiLDB4NzksMHgxZCwweGJhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0K LSsJewotKwkweDIwLDB4YjgsMHhkZiwweDQ0LDB4NzcsMHg1YSwweGI4LDB4ZDMsMHhiZiwweGY2 LDB4Y2YsMHhhYywKLSsJMHg1ZSwweGE2LDB4OTYsMHg2MiwweDczLDB4NDQsMHg0MCwweDRhLDB4 MzAsMHhmYiwweDM4LDB4YTUsCi0rCTB4N2IsMHgwZCwweGU0LDB4MGQsMHhjNiwweGU0LDB4OWEs MHgxZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDA0LDB4YzQsMHg2NSww eGY0LDB4ZDMsMHhiZiwweDgzLDB4NGIsMHhhYiwweGM4LDB4NDEsMHhhOCwKLSsJMHhjMiwweGUw LDB4NDQsMHg2MywweDc3LDB4NGMsMHg2ZiwweDZjLDB4NDksMHg0NiwweGZmLDB4OTQsCi0rCTB4 MTcsMHhlYSwweGU2LDB4MWEsMHg5ZCwweDVlLDB4NjYsMHg3OAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4MDcsMHg0ZCwweGFjLDB4OWIsMHg4NiwweGNhLDB4NGEsMHhh YSwweDZlLDB4N2EsMHgwMywweGEyLAotKwkweDVkLDB4MTAsMHhlYSwweDBiLDB4ZjksMHg4Myww eGNjLDB4ZDEsMHhmYywweGUyLDB4MDcsMHhjNywKLSsJMHgwNiwweDM0LDB4NjAsMHg2ZiwweDgz LDB4OTQsMHg5OSwweDc2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg4 OSwweDRlLDB4NDUsMHg4YywweDExLDB4ZjksMHhiYywweDViLDB4YWMsMHg3NCwweDhiLDB4NGIs Ci0rCTB4NWYsMHhmNywweDE5LDB4ZjMsMHhmNSwweDI0LDB4NTQsMHgxNCwweGQxLDB4MTUsMHhi MSwweDQzLAotKwkweDEyLDB4YTQsMHg1ZiwweGQ0LDB4ZWMsMHhmYywweGNkLDB4MDkKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf cHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4MGUsMHhlYiwweDFmLDB4ZDcsMHhmYyww eGQxLDB4OWQsMHhkNCwweDA1LDB4MzYsMHg4YiwweGIyLAotKwkweGZiLDB4ZTQsMHhmNCwweDUx LDB4MGMsMHg4NywweDliLDB4MDIsMHg0NCwweGQ1LDB4OTIsMHg0ZCwKLSsJMHg0NCwweGZlLDB4 MWEsMHgwMywweDQzLDB4NTYsMHhiZCwweDg2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDAyLDB4YWEsMHhiNiwweDFkLDB4N2UsMHgyYSwweDQwLDB4MDMsMHg2OSwweDJkLDB4 NDksMHhhMywKLSsJMHg0MSwweGU3LDB4NDQsMHgwYiwweGFmLDB4N2IsMHg4NSwweGU0LDB4NWYs MHg1MywweDNiLDB4NjQsCi0rCTB4YmMsMHg4OSwweGM4LDB4ODIsMHhkNCwweDc4LDB4MzcsMHhh MgotKwl9OwotKwotKwotKy8qIFNIQS0yNTYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweDViLDB4MWIsMHhlYywweDRkLDB4YTksMHgzOCwweDc0LDB4NWEsMHgzNCwweDBiLDB4N2Is MHhjNSwKLSsJMHhlNSwweGQ3LDB4NjYsMHg3YywweGJjLDB4ODIsMHhiOSwweDBlLDB4MmQsMHgx ZiwweDkyLDB4ZDcsCi0rCTB4YzEsMHhiYywweDY3LDB4NjksMHhlYywweDZiLDB4MDMsMHgzYwot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTI1Nl9ub25jZVtdID0KLSsJewotKwkweGE0LDB4MGMsMHhkOCwweDljLDB4NjEsMHhkOCwweGMz LDB4NTQsMHhmZSwweDUzLDB4YzksMHhlNSwKLSsJMHg1ZCwweDZmLDB4NmQsMHgzNQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgyMiwweDVlLDB4NjIsMHg5MywweDQy LDB4ODMsMHg3OCwweDI0LDB4ZDgsMHg0MCwweDhjLDB4ZGUsCi0rCTB4NmYsMHhmOSwweGE0LDB4 N2EsMHhjNSwweGE3LDB4M2IsMHg4OCwweGEzLDB4ZWUsMHg0MiwweDIwLAotKwkweGZkLDB4NjEs MHg1NiwweGM2LDB4NGMsMHgxMywweDQxLDB4OWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0W10gPQot Kwl7Ci0rCTB4YmYsMHg3NCwweDViLDB4ZjYsMHhjNSwweDY0LDB4NWUsMHg5OSwweDM0LDB4OGYs MHhiYywweGE0LAotKwkweGUyLDB4YmQsMHhkOCwweDg1LDB4MjYsMHgzNywweGVhLDB4YmEsMHg0 ZiwweGYyLDB4OWEsMHg5YSwKLSsJMHg2NiwweGZjLDB4ZGYsMHg2MywweDI2LDB4MjYsMHgxOSww eDg3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhiMywweGM2LDB4MDcsMHgw NywweGQ2LDB4NzUsMHhmNiwweDJiLDB4ZDYsMHgyMSwweDk2LDB4ZjEsCi0rCTB4YWUsMHhkYiww eDJiLDB4YWMsMHgyNSwweDJhLDB4YWUsMHhhZSwweDQxLDB4NzIsMHgwMywweDVlLAotKwkweGJm LDB4ZDMsMHg2NCwweGJjLDB4NTksMHhmOSwweGMwLDB4NzYKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0cmVz ZWVkW10gPQotKwl7Ci0rCTB4YmYsMHgyMCwweDMzLDB4NTYsMHgyOSwweGE4LDB4MzcsMHgwNCww eDFmLDB4NzgsMHgzNCwweDNkLAotKwkweDgxLDB4MmEsMHhjOSwweDg2LDB4YzYsMHg3YSwweDJm LDB4ODgsMHg1ZSwweGQ1LDB4YmUsMHgzNCwKLSsJMHg0NiwweDIwLDB4YTQsMHgzNSwweGViLDB4 YzcsMHhlMiwweDlkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDli LDB4YWUsMHgyZCwweDJkLDB4NjEsMHhhNCwweDg5LDB4ZWIsMHg0MywweDQ2LDB4YTcsMHhkYSwK LSsJMHhlZiwweDQwLDB4Y2EsMHg0YSwweDk5LDB4MTEsMHg0MSwweGRjLDB4NWMsMHg5NCwweGU5 LDB4YWMsCi0rCTB4ZDQsMHhkMCwweGU2LDB4YmQsMHhmYiwweDAzLDB4OWMsMHhhOAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MjMsMHhhYSwweDBjLDB4YmQsMHgyOCwweDMz LDB4ZTIsMHg1MSwweGZjLDB4NzEsMHhkMiwweDE1LAotKwkweDFmLDB4NzYsMHhmZCwweDBkLDB4 ZTAsMHhiNywweGI1LDB4ODQsMHg3NSwweDViLDB4YmUsMHhmMywKLSsJMHg1YywweGNhLDB4YzUs MHgzMCwweGYyLDB4NzUsMHgxZiwweGRhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eDkwLDB4M2MsMHhjMSwweDEwLDB4OGMsMHgxMiwweDAxLDB4YzYsMHhhNiwweDNhLDB4MGYsMHg0 ZCwKLSsJMHhiNiwweDNhLDB4NGYsMHg0MSwweDljLDB4NjEsMHg3NSwweDg0LDB4ZTksMHg3NCww eDc1LDB4ZmQsCi0rCTB4ZmUsMHhmMiwweDFmLDB4NDMsMHhkOCwweDVlLDB4MjQsMHhhMwotKwl9 OwotKwotKwotKy8qIFNIQS0zODQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDcx LDB4OWQsMHhiMiwweDVhLDB4NzEsMHg2ZCwweDA0LDB4ZTksMHgxZSwweGM3LDB4OTIsMHgyNCwK LSsJMHg2ZSwweDEyLDB4MzMsMHhhOSwweDUyLDB4NjQsMHgzMSwweGVmLDB4NzEsMHhlYiwweDIy LDB4NTUsCi0rCTB4MjgsMHg5NywweDA2LDB4NmEsMHhjMCwweDBjLDB4YTAsMHg3ZQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9w cl9ub25jZVtdID0KLSsJewotKwkweGY1LDB4MGQsMHhmYSwweGIwLDB4ZWMsMHg2YSwweDdjLDB4 ZDYsMHhiZCwweDliLDB4MDUsMHhmZCwKLSsJMHgzOCwweDNlLDB4MmUsMHg1NgotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg3NCwweGFjLDB4N2UsMHg2ZCwweGIx LDB4YTQsMHhlNywweDIxLDB4ZDEsMHgxZSwweDZlLDB4OTYsCi0rCTB4NmQsMHg0ZCwweDUzLDB4 NDYsMHg4MiwweDk2LDB4NmUsMHhjZiwweGFhLDB4ODEsMHg4ZCwweDdkLAotKwkweDllLDB4ZTEs MHgwZiwweDE1LDB4ZWEsMHg0MSwweGJmLDB4ZTMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10g PQotKwl7Ci0rCTB4ZGEsMHg5NSwweGQ0LDB4ZDAsMHhiOCwweDExLDB4ZDMsMHg0OSwweDI3LDB4 NWQsMHhhOSwweDM5LAotKwkweDY4LDB4ZjMsMHhhOCwweGU5LDB4NWQsMHgxOSwweDhhLDB4MmIs MHg2NiwweGU4LDB4NjksMHgwNiwKLSsJMHg3YywweDllLDB4MDMsMHhhMSwweDhiLDB4MjYsMHgy ZCwweDZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4NDksMHhkZiwweDQ0 LDB4MDAsMHhlNCwweDFjLDB4NzUsMHgwYiwweDI2LDB4NWEsMHg1OSwweDY0LAotKwkweDFmLDB4 NGUsMHhiMSwweGIyLDB4MTMsMHhmMSwweDIyLDB4NGUsMHhiNCwweDZkLDB4OWEsMHhjYywKLSsJ MHhhMCwweDQ4LDB4ZTYsMHhjZiwweDFkLDB4ZDEsMHg5MiwweDBkCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2ludF9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjOCwweDUyLDB4YWUsMHhiZiwweDA0LDB4M2MsMHgyNyww eGI3LDB4NzgsMHgxOCwweGFhLDB4OGYsCi0rCTB4ZmYsMHhjZiwweGE0LDB4ZjEsMHhjYywweGU3 LDB4NjgsMHhmYSwweDIyLDB4YTIsMHgxMywweDQ1LAotKwkweGU4LDB4ZGQsMHg4NywweGU2LDB4 ZjIsMHg2ZSwweGRkLDB4YzcsMHg1MiwweDkwLDB4OWYsMHg3YiwKLSsJMHhmYSwweDYxLDB4MmQs MHg5ZCwweDllLDB4Y2YsMHg5OCwweGFjLDB4NTIsMHg0MCwweGNlLDB4YWYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRk aXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDYxLDB4N2MsMHgwMywweDlhLDB4M2UsMHg1MCww eDU3LDB4NjAsMHhjNSwweDgzLDB4YzksMHhiMiwKLSsJMHhkMSwweDg3LDB4ODUsMHg2NiwweDky LDB4NWQsMHg4NCwweDBlLDB4NTMsMHhmYiwweDcwLDB4MDMsCi0rCTB4NzIsMHhmZCwweGJhLDB4 YWUsMHg5YywweDhmLDB4ZjgsMHgxOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsK LSsJMHhmOCwweGViLDB4ODksMHhiMSwweDhkLDB4NzgsMHhiZSwweDIxLDB4ZTAsMHhiYiwweDlk LDB4YjcsCi0rCTB4OTUsMHgwZSwweGQ5LDB4NDYsMHgwYywweDhjLDB4ZTIsMHg2MywweGI3LDB4 OWQsMHg2NywweDkwLAotKwkweGJkLDB4YzcsMHgwYiwweGE1LDB4Y2UsMHhiMiwweDY1LDB4ODEK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTYsMHg5ZiwweGZlLDB4NjgsMHhk NiwweGI1LDB4NzksMHhmMSwweDA2LDB4NWYsMHhhMywweGJiLAotKwkweDIzLDB4ODUsMHhkOCww eGYwLDB4MjksMHg1YSwweDY4LDB4OWUsMHhmNSwweGY0LDB4YTYsMHgxMiwKLSsJMHhlMCwweDlh LDB4ZTIsMHhhYywweDAwLDB4MWQsMHg5OCwweDI2LDB4ZmMsMHg1MywweDk1LDB4NTMsCi0rCTB4 ZTQsMHgzZSwweDE3LDB4ZDUsMHgwOCwweDBiLDB4NzAsMHgzZCwweDY3LDB4OTksMHhhYywweDY2 Ci0rCX07Ci0rCi0rCi0rLyogU0hBLTM4NCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0W10gPQotKwl7Ci0r CTB4MDcsMHgxNSwweDI3LDB4MmEsMHhhZiwweDc0LDB4MjQsMHgzNywweGJjLDB4ZDUsMHgxNCww eDY5LAotKwkweGNlLDB4MTEsMHhmZiwweGEyLDB4NmIsMHhiOCwweDA1LDB4NjcsMHgzNCwweGY4 LDB4YmQsMHg2ZCwKLSsJMHg2YSwweGNjLDB4Y2QsMHg2MCwweGEzLDB4NjgsMHhjYSwweGY0Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X25vbmNlW10gPQotKwl7Ci0rCTB4NzAsMHgxNywweGMyLDB4NWIsMHg1ZCwweDIyLDB4MGIs MHgwNiwweDE1LDB4NTQsMHg3OCwweDc3LAotKwkweDQ0LDB4YWYsMHgyZiwweDA5Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDg5LDB4MzksMHgyOCwweGIwLDB4NjAs MHhlYiwweDNkLDB4ZGMsMHg1NSwweDc1LDB4ODYsMHhlYiwKLSsJMHhhZSwweGEyLDB4OGYsMHhi YywweDFiLDB4NzUsMHhkNCwweGUxLDB4MGYsMHhhYSwweDM4LDB4Y2EsCi0rCTB4NjIsMHg4Yiww eGNiLDB4MmMsMHgyNiwweGY2LDB4YmMsMHhiMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHgzMCwweDJiLDB4NDIsMHgzNSwweGVmLDB4ZGEsMHg0MCwweDU1LDB4MjgsMHhjNiww eDk1LDB4ZmIsCi0rCTB4NTQsMHgwMSwweDYyLDB4ZDcsMHg4NywweDE0LDB4NDgsMHg2ZCwweDkw LDB4NGMsMHhhOSwweDAyLAotKwkweDU0LDB4NDAsMHgyMiwweGM4LDB4NjYsMHhhNSwweDQ4LDB4 NDgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDgyLDB4YzQsMHhhMSwweDlj LDB4MjEsMHhkMiwweGU3LDB4YTUsMHhhNiwweGY2LDB4NWYsMHgwNCwKLSsJMHg1YywweGM3LDB4 MzEsMHg5ZCwweDhkLDB4NTksMHg3NCwweDUwLDB4MTksMHg4OSwweDJmLDB4NjMsCi0rCTB4ZDUs MHhiNywweDdlLDB4ZWIsMHgxNSwweGUzLDB4NzAsMHg4MywweGExLDB4MjQsMHg1OSwweGZhLAot KwkweDJjLDB4NTYsMHhmNiwweDg4LDB4M2EsMHg5MiwweDkzLDB4YTEsMHhmYiwweDc5LDB4YzEs MHg3YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgzOSwweGE2LDB4ZTgs MHg1YywweDgyLDB4MTcsMHg3MSwweDI2LDB4NTcsMHg0ZiwweDlmLDB4YzIsCi0rCTB4NTUsMHhm ZiwweDVjLDB4OWIsMHg1MywweDFhLDB4ZDEsMHg1ZiwweGJjLDB4NjIsMHhlNCwweDI3LAotKwkw eDJkLDB4MzIsMHhmMCwweGU0LDB4NTIsMHg4YywweGM1LDB4MGMKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlu cHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4OGQsMHhjYiwweDhkLDB4Y2UsMHgwOCwweGVhLDB4ODAs MHhlOCwweDliLDB4NjEsMHhhOCwweDBmLAotKwkweGFmLDB4NDksMHgyMCwweDllLDB4NzQsMHhj YiwweDU3LDB4ODAsMHg0MiwweGIwLDB4ODQsMHg1ZSwKLSsJMHgzMCwweDJhLDB4NjcsMHgwOCww eGY0LDB4ZTMsMHg0MCwweDIyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3 YywweDhmLDB4YzIsMHhhZSwweDIyLDB4NGEsMHhkNiwweGY2LDB4MDUsMHhhNCwweDdhLDB4ZWEs Ci0rCTB4YmIsMHgyNSwweGQwLDB4YjcsMHg1YSwweGQ2LDB4Y2YsMHg5ZCwweGYzLDB4NmMsMHhl MiwweGIyLAotKwkweDRlLDB4YjQsMHhiZCwweGY0LDB4ZTUsMHg0MCwweDgwLDB4OTQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4OWUsMHg3ZSwweGZiLDB4NTksMHhiYiwweGFhLDB4 M2MsMHhmNywweGUxLDB4ZjgsMHg3NiwweGRkLAotKwkweDYzLDB4NWYsMHhhZiwweDIzLDB4ZDYs MHg2NCwweDYxLDB4YzAsMHg5YSwweDA5LDB4NDcsMHhjOSwKLSsJMHgzMywweGRmLDB4NmQsMHg1 NSwweDkxLDB4MzQsMHg3OSwweDcwLDB4YzQsMHg5OSwweDZlLDB4NTQsCi0rCTB4MDksMHg2NCww eDIxLDB4MWEsMHhiZCwweDFlLDB4ODAsMHg0MCwweDM0LDB4YWQsMHhmYSwweGQ3Ci0rCX07Ci0r Ci0rCi0rLyogU0hBLTUxMiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTMsMHhm NywweDYxLDB4NzUsMHg2NSwweDI4LDB4YTIsMHg1OSwweDEzLDB4NWEsMHg0YSwweDRmLAotKwkw eDU2LDB4NjAsMHg4YywweDUzLDB4N2QsMHhiMCwweGJkLDB4MDYsMHg0ZiwweGVkLDB4Y2MsMHhk MiwKLSsJMHhhMiwweGI1LDB4ZmQsMHg1YiwweDNhLDB4YWIsMHhlYywweDI4Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX25v bmNlW10gPQotKwl7Ci0rCTB4YmUsMHhhMywweDkxLDB4OTMsMHgxZCwweGMzLDB4MzEsMHgzYSww eDIzLDB4MzMsMHg1MCwweDY3LAotKwkweDg4LDB4YzcsMHhhMiwweGM0Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDFmLDB4NTksMHg0ZCwweDdiLDB4ZTYsMHg0 NiwweDkxLDB4NDgsMHhjMSwweDI1LDB4ZmEsMHhmZiwKLSsJMHg4OSwweDEyLDB4NzcsMHgzNSww eGRmLDB4M2UsMHhmNCwweDgwLDB4NWYsMHhkOSwweGIwLDB4MDcsCi0rCTB4MjIsMHg0MSwweGRk LDB4NDgsMHg3OCwweDZiLDB4NzcsMHgyYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHgzMCwweGZmLDB4NjMsMHg2ZiwweGFjLDB4ZDksMHg4NCwweDM5LDB4NmYsMHhlNCww eDk5LDB4Y2UsCi0rCTB4OTEsMHg3ZCwweDdlLDB4YzgsMHg1OCwweGYyLDB4MTIsMHhjMywweGI2 LDB4YWQsMHhkYSwweDIyLAotKwkweDA0LDB4YTAsMHhkMiwweDIxLDB4ZmUsMHhmMiwweDk1LDB4 MWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg2NCwweDU0LDB4MTMsMHhl YywweDRmLDB4NzcsMHhkYSwweGIyLDB4OTIsMHgyZSwweDUyLDB4ODAsCi0rCTB4MTEsMHgxMCww eGMyLDB4ZjgsMHhlNiwweGE3LDB4Y2QsMHg0YiwweGZjLDB4MzIsMHgyZSwweDllLAotKwkweGVi LDB4YmIsMHhiMSwweGJmLDB4MTUsMHg1YywweDczLDB4MDgKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfaW50X3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweGVmLDB4MWUsMHhkYywweDBhLDB4YTQsMHgzNiwweDkxLDB4OWMs MHgzZCwweDI3LDB4OTcsMHg1MCwKLSsJMHg4ZCwweDM2LDB4MjksMHg4ZCwweGNlLDB4NmEsMHgw YywweGY3LDB4MjEsMHhjMCwweDkxLDB4YWUsCi0rCTB4MGMsMHg5NiwweDcyLDB4YmQsMHg1Miww eDgxLDB4NTgsMHhmYywweDZkLDB4ZTUsMHhmNywweGE1LAotKwkweGZkLDB4NWQsMHhhNywweDU4 LDB4NjgsMHhjOCwweDk5LDB4NTgsMHg4ZSwweGM4LDB4Y2UsMHg5NSwKLSsJMHgwMSwweDdkLDB4 ZmYsMHhhNCwweGM4LDB4ZjcsMHg2MywweGZlLDB4NWYsMHg2OSwweDgzLDB4NTMsCi0rCTB4ZTIs MHhjNiwweDhiLDB4YzMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGU2 LDB4OWIsMHhjNCwweDg4LDB4MzQsMHhjYSwweGVhLDB4MjksMHgyZiwweDk4LDB4MDUsMHhhNCwK LSsJMHhkMywweGMwLDB4N2IsMHgxMSwweGU4LDB4YmIsMHg3NSwweGYyLDB4YmQsMHgyOSwweGI3 LDB4NDAsCi0rCTB4MjUsMHg3ZiwweGMxLDB4YjcsMHhiMSwweGYxLDB4MjUsMHg2MQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgyMywweDZkLDB4ZmYsMHhkZSwweGZiLDB4 ZDEsMHhiYSwweDMzLDB4MTgsMHhlNiwweGJlLDB4YjUsCi0rCTB4NDgsMHg3NywweDZkLDB4N2Ys MHhhNywweGUxLDB4NGQsMHg0OCwweDFlLDB4M2MsMHhhNywweDM0LAotKwkweDFhLDB4YzgsMHg2 MCwweGRiLDB4OGYsMHg5OSwweDE1LDB4OTkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7 Ci0rCTB4NzAsMHgyNywweDMxLDB4ZGIsMHg5MiwweDcwLDB4MjEsMHhmZSwweDE2LDB4YjYsMHhj OCwweDUxLAotKwkweDM0LDB4ODcsMHg2NSwweGQwLDB4NGUsMHhmZCwweGZlLDB4NjgsMHhlYyww eGFjLDB4ZGMsMHg5MywKLSsJMHg0MSwweDM4LDB4OTIsMHg5MCwweGI0LDB4OTQsMHhmOSwweDBk LDB4YTQsMHhmNywweDRlLDB4ODAsCi0rCTB4OTIsMHg2NywweDQ4LDB4NDAsMHhhNywweDA4LDB4 YzcsMHhiYywweDY2LDB4MDAsMHhmZCwweGY3LAotKwkweDRjLDB4OGIsMHgxNywweDZlLDB4ZDEs MHg4ZiwweDliLDB4ZjMsMHg2ZiwweGY2LDB4MzQsMHhkZCwKLSsJMHg2NywweGY3LDB4NjgsMHhk ZAotKwl9OwotKwotKwotKy8qIFNIQS01MTIgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweGI2LDB4MGIsMHhiNywweGJjLDB4ODQsMHg1NiwweGY2LDB4MTIsMHhhZiwweDQ1LDB4Njcs MHgxNywKLSsJMHg3YywweGQxLDB4YjIsMHg3OCwweDJiLDB4YTAsMHhmMiwweGJlLDB4YjYsMHg2 ZCwweDhiLDB4NTYsCi0rCTB4YzYsMHhiYywweDRkLDB4ZTEsMHhmNywweGJlLDB4Y2UsMHhiZAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTUxMl9ub25jZVtdID0KLSsJewotKwkweDlkLDB4ZWQsMHhjMCwweGU1LDB4NWEsMHg5OCwweDZh LDB4Y2IsMHg1MSwweDdkLDB4NzYsMHgzMSwKLSsJMHg1YSwweDY0LDB4ZjAsMHhmNwotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhjMiwweDZkLDB4YTMsMHhjMywweDA2 LDB4NzQsMHhlNSwweDAxLDB4NWMsMHgxMCwweDE3LDB4YzcsCi0rCTB4YWYsMHg4MywweDlkLDB4 NTksMHg4ZCwweDJkLDB4MjksMHgzOCwweGM1LDB4NTksMHg3MCwweDhiLAotKwkweDQ2LDB4NDgs MHgyZCwweGNmLDB4MzYsMHg3ZCwweDU5LDB4YzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0W10gPQot Kwl7Ci0rCTB4ZWMsMHg4YywweGQ0LDB4ZjcsMHg2MSwweDZlLDB4MGQsMHg5NSwweDc5LDB4Yjcs MHgyOCwweGFkLAotKwkweDVmLDB4NjksMHg3NCwweDVmLDB4MmQsMHgzNiwweDA2LDB4OGEsMHg2 YiwweGFjLDB4NTQsMHg5NywKLSsJMHhjNCwweGExLDB4MTIsMHg4NSwweDBhLDB4ZGYsMHg0Yiww eDM0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4NCwweDJmLDB4MWYsMHg2 OCwweDZhLDB4YTMsMHhhZCwweDFlLDB4ZmIsMHhmNCwweDE1LDB4YmQsCi0rCTB4ZGUsMHgzOCww eGQ0LDB4MzAsMHg4MCwweDUxLDB4ZTksMHhkMywweGM3LDB4MjAsMHg4OCwweGU5LAotKwkweGY1 LDB4Y2MsMHhkZiwweDU3LDB4NWMsMHg0NywweDJmLDB4NTcsMHgzYywweDVmLDB4MTMsMHg1NiwK LSsJMHhjYywweGM1LDB4NGYsMHg4NCwweGY4LDB4MTAsMHg0MSwweGQ1LDB4N2UsMHg1OCwweDZl LDB4MTksCi0rCTB4MTksMHg5ZSwweGFmLDB4YzIsMHgyMiwweDU4LDB4NDEsMHg1MCwweDc5LDB4 YzIsMHhkOCwweDA0LAotKwkweDI4LDB4ZDQsMHgzOSwweDlhCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KLSsJewotKwkweGZhLDB4N2YsMHg0NiwweDUxLDB4ODMsMHg2MiwweDk4LDB4MTYs MHg5YSwweDE5LDB4YTIsMHg0OSwKLSsJMHhhOSwweGU2LDB4NGEsMHhkOCwweDg1LDB4ZTcsMHhk NCwweDNiLDB4MmMsMHg4MiwweGM1LDB4ODIsCi0rCTB4YmYsMHgxMSwweGY5LDB4OWUsMHhiYyww eGQwLDB4MDEsMHhlZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhi OSwweDEyLDB4ZTAsMHg0ZiwweGY3LDB4YTcsMHhjNCwweGQ4LDB4ZDAsMHg4ZSwweDk5LDB4Mjks Ci0rCTB4N2MsMHg5YSwweGU5LDB4Y2YsMHhjNCwweDZjLDB4ZjgsMHhjMywweGE3LDB4NDEsMHg4 MywweGQ2LAotKwkweDJlLDB4ZmEsMHhiOCwweDVlLDB4OGUsMHg2YiwweDc4LDB4MjAKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJf YWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGQ3LDB4MDcsMHg1MiwweGI5LDB4ODMsMHgy YywweDAzLDB4NzEsMHhlZSwweGM5LDB4YzAsMHg4NSwKLSsJMHhlMSwweDU3LDB4YjIsMHhjZCww eDNhLDB4ZjAsMHhjOSwweDM0LDB4MjQsMHg0MSwweDFjLDB4NDIsCi0rCTB4OTksMHhiMiwweDg0 LDB4ZTksMHgxNywweGQyLDB4NzYsMHg5MgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHgzNiwweDE3LDB4NWQsMHg5OCwweDJiLDB4NjUsMHgyNSwweDhlLDB4YzgsMHgyOSwweGRmLDB4 MjcsCi0rCTB4MDUsMHgzNiwweDI2LDB4MTIsMHg4YSwweDY4LDB4NzQsMHgyNywweDM3LDB4ZDQs MHg3ZiwweDMyLAotKwkweGIxLDB4MTIsMHhkNiwweDg1LDB4ODMsMHhlYiwweDJlLDB4YTAsMHhl ZCwweDRiLDB4YjUsMHg3YiwKLSsJMHg2ZiwweDM5LDB4M2MsMHg3MSwweDc3LDB4MDIsMHgxMiww eGNjLDB4MmMsMHgzYSwweDhlLDB4NjMsCi0rCTB4ZGYsMHg0YSwweGJkLDB4NmYsMHg2ZSwweDJl LDB4ZWQsMHgwYSwweDg1LDB4YTUsMHgyZiwweGEyLAotKwkweDY4LDB4ZGUsMHg0MiwweGI1Ci0r CX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtMSBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4MjYsMHg1ZiwweDM2LDB4MTQsMHhmZiwweDNkLDB4ODMsMHhmYSwweDczLDB4NWUsMHg3 NSwweGRjLAotKwkweDJjLDB4MTgsMHgxNywweDFiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX25vbmNlW10gPQotKwl7 Ci0rCTB4YzgsMHhlMywweDU3LDB4YTUsMHg3YiwweDc0LDB4ODYsMHg2ZQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg2ZSwweGRiLDB4MGQsMHhmZSwweDdk LDB4YWMsMHg3OSwweGQwLDB4YTUsMHgzYSwweDQ4LDB4ODUsCi0rCTB4ODAsMHhlMiwweDdmLDB4 MmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4MzEsMHhjZCwweDVl LDB4NDMsMHhkYywweGZiLDB4N2EsMHg3OSwweGNhLDB4ODgsMHhkZSwweDFmLAotKwkweGQ3LDB4 YmIsMHg0MiwweDA5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4N2Ms MHgyMywweDk1LDB4MzgsMHgwMCwweDk1LDB4YzEsMHg3OCwweDFmLDB4OGYsMHhkNywweDYzLAot KwkweDIzLDB4ODcsMHgyYSwweGVkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHhiYiwweDM0LDB4ZTcsMHg5MywweGEzLDB4MDIsMHgyYywweDRhLDB4ZDAsMHg4OSww eGRhLDB4N2YsCi0rCTB4ZWQsMHhmNCwweDRjLDB4ZGUsMHgxNywweGVjLDB4ZTUsMHg2YwotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4NDksMHhiYywweDJkLDB4MmMs MHhiNywweDMyLDB4Y2IsMHgyMCwweGRmLDB4ZjUsMHg3NywweDU4LAotKwkweGEwLDB4NGIsMHg5 MywweDZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDNjLDB4YWEs MHhiMCwweDIxLDB4NDIsMHhiMCwweGRkLDB4MzQsMHhmMCwweDE2LDB4N2YsMHgwYywKLSsJMHgw ZiwweGZmLDB4MmUsMHhhZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4 ZSwweGNiLDB4YTMsMHg2NCwweGIyLDB4YjgsMHgzMywweDZjLDB4NjQsMHgzYiwweDc4LDB4MTYs Ci0rCTB4OTksMHgzNSwweGM4LDB4MzAsMHhjYiwweDNlLDB4YTAsMHhkOAotKwl9OwotKwotKwot Ky8qIEhNQUMgU0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDMyLDB4 OWEsMHgyYSwweDg3LDB4N2IsMHg4OSwweDdjLDB4ZjYsMHhjYiwweDk1LDB4ZDUsMHg0MCwKLSsJ MHgxNywweGZlLDB4NDcsMHg3MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9ub25jZVtdID0KLSsJewotKwkweDE2LDB4ZDgs MHhlMCwweGM3LDB4NTIsMHhjZiwweDRhLDB4MjUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQotKwl7Ci0rCTB4MzUsMHgzNSwweGE5LDB4YTUsMHg0MCwweGJlLDB4OWIsMHhkMSww eDU2LDB4ZGQsMHg0NCwweDAwLAotKwkweDcyLDB4ZjcsMHhkMywweDVlCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0 aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDFiLDB4MmMsMHg4NCwweDJkLDB4NGEsMHg4OSwweDhm LDB4NjksMHgxOSwweGYxLDB4ZjMsMHhkYiwKLSsJMHhiYiwweGUzLDB4YWEsMHhlYQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MV9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4Y2YsMHhmYSwweDdkLDB4NzIsMHgwZiww eGU2LDB4YzcsMHg5NiwweGEwLDB4NjksMHgzMSwweDExLAotKwkweDliLDB4MGIsMHgxYSwweDIw LDB4MWYsMHgzZiwweGFhLDB4ZDEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4OTAsMHg3NSwweDE1LDB4MDQsMHg5NSwweGYxLDB4YmEsMHg4MSwweDBjLDB4MzcsMHg5 NCwweDZmLAotKwkweDg2LDB4NTIsMHg2ZCwweDljCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dHJl c2VlZFtdID0KLSsJewotKwkweDViLDB4NDAsMHhiYSwweDVmLDB4MTcsMHg3MCwweGYwLDB4NGIs MHhkZiwweGM5LDB4OTcsMHg5MiwKLSsJMHg3OSwweGM1LDB4ODIsMHgyOAotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRp dGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OTcsMHhjOCwweDgwLDB4OTAsMHhiMywweGFhLDB4 NmUsMHg2MCwweGVhLDB4ODMsMHg3YSwweGUzLAotKwkweDhhLDB4Y2EsMHhhNCwweDdmCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDkwLDB4YmQsMHgwNSwweDU2LDB4NmQsMHhi NSwweDIyLDB4ZDUsMHhiOSwweDVhLDB4MjksMHgyZCwKLSsJMHhlOSwweDBiLDB4ZTEsMHhhYyww eGRlLDB4MjcsMHgwYiwweGIwCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtMjI0IFBSICAqLwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDE3LDB4MzIsMHgyYiwweDJlLDB4NmYsMHgx YiwweDljLDB4NmQsMHgzMSwweGUwLDB4MzQsMHgwNywKLSsJMHhjZiwweGVkLDB4ZjYsMHhiNiww eDVhLDB4NzYsMHg0YywweGJjLDB4NjIsMHg4NSwweDAxLDB4OTAKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9ub25j ZVtdID0KLSsJewotKwkweDM4LDB4YmYsMHg1ZiwweDIwLDB4YjMsMHg2OCwweDJmLDB4NDMsMHg2 MSwweDA1LDB4OGYsMHgyMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K LSsJewotKwkweGMwLDB4YzksMHg0NSwweGFjLDB4OGQsMHgyNywweDc3LDB4MDgsMHgwYiwweDE3 LDB4NmQsMHhlZCwKLSsJMHhjMSwweDdkLDB4ZDUsMHgwNywweDlkLDB4NmUsMHhmOCwweDIzLDB4 MmEsMHgyMiwweDEzLDB4YmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsK LSsJMHhhNCwweDNjLDB4ZTcsMHgzYiwweGVhLDB4MTksMHg0NSwweDMyLDB4YzIsMHg4MywweDZk LDB4MjEsCi0rCTB4OGEsMHhjMCwweGVlLDB4NjcsMHg0NSwweGRlLDB4MTMsMHg3ZCwweDlkLDB4 NjEsMHgwMCwweDNiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgx NSwweDA1LDB4NzQsMHg0YSwweDdmLDB4OGQsMHg1YywweDYwLDB4MTYsMHhlNSwweDdiLDB4YWQs Ci0rCTB4ZjUsMHg0MSwweDhmLDB4NTUsMHg2MCwweGM0LDB4MDksMHhlZSwweDFlLDB4MTEsMHg4 MSwweGFiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDZmLDB4 ZjUsMHg5YSwweGUyLDB4NTQsMHg1MywweDMwLDB4M2QsMHg1YSwweDI3LDB4MjksMHgzOCwKLSsJ MHgyNywweGYyLDB4MGQsMHgwNSwweGU5LDB4MjYsMHhjYiwweDE2LDB4YzMsMHg1MSwweDVmLDB4 MTMsCi0rCTB4NDEsMHhmZSwweDk5LDB4ZjIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPQotKwl7Ci0rCTB4NzMsMHg4MSwweDg4LDB4ODQsMHg4ZiwweGVkLDB4NmYsMHgxMCwweDlm LDB4OTMsMHhiZiwweDE3LAotKwkweDM1LDB4N2MsMHhlZiwweGQ1LDB4OGQsMHgyNiwweGE2LDB4 N2EsMHhlOCwweDA5LDB4MzYsMHg0ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0K LSsJewotKwkweGU2LDB4Y2YsMHhjZiwweDdlLDB4MTIsMHhlNSwweDQzLDB4ZDIsMHgzOCwweGQ4 LDB4MjQsMHg2ZiwKLSsJMHg1YSwweDM3LDB4NjgsMHhiZiwweDRmLDB4YTAsMHhmZiwweGQ1LDB4 NjEsMHg4YSwweDkzLDB4ZTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHhhZiwweGY5LDB4ZDgsMHgxOSwweDkxLDB4MzAsMHg4MiwweDZmLDB4YTksMHgxZSwweDlkLDB4 ZDcsCi0rCTB4ZjMsMHg1MCwweGUwLDB4YzcsMHhkNSwweDY0LDB4OTYsMHg3ZCwweDRjLDB4NGQs MHg3OCwweDAzLAotKwkweDZkLDB4ZDgsMHg5ZSwweDcyCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBT SEEtMjI0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDExLDB4ODIsMHhm ZCwweGQ5LDB4NDIsMHhmNCwweGZhLDB4YzgsMHhmMiwweDQxLDB4ZTYsMHg1NCwKLSsJMHgwMSww eGFlLDB4MjIsMHg2ZSwweGM2LDB4YWYsMHhhZiwweGQwLDB4YTYsMHhiMiwweGUyLDB4NmQKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9ub25jZVtdID0KLSsJewotKwkweGE5LDB4NDgsMHhkNywweDkyLDB4MzksMHg3ZSww eDJhLDB4ZGMsMHgzMCwweDFmLDB4MGUsMHgyYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KLSsJewotKwkweDExLDB4ZDUsMHhmNCwweGJkLDB4NjcsMHg4YywweDMxLDB4Y2Ys MHhhMywweDNmLDB4MWUsMHg2YiwKLSsJMHhhOCwweDA3LDB4MDIsMHgwYiwweGM4LDB4MmUsMHg2 YywweDY0LDB4NDEsMHg1YiwweGM4LDB4MzcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHg2OCwweDE4LDB4YzIsMHgwNiwweGViLDB4M2UsMHgwNCwweDk1LDB4NDQsMHg1 ZSwweGZiLDB4ZTYsCi0rCTB4NDEsMHhjMSwweDVjLDB4Y2MsMHg0MCwweDJmLDB4YjcsMHhkMiww eDBmLDB4ZjMsMHg2YiwweGU3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewot KwkweDdmLDB4NDUsMHhjNywweDVkLDB4MzIsMHhlNiwweDE3LDB4NjAsMHhiYSwweGRjLDB4Yjgs MHg0MiwKLSsJMHgxYiwweDljLDB4ZjEsMHhmYSwweDNiLDB4NGQsMHgyOSwweDU0LDB4YzYsMHg5 MCwweGZmLDB4NWMsCi0rCTB4Y2QsMHhkNiwweGE5LDB4Y2MKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5w dXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhjNCwweDhlLDB4MzcsMHg5NSwweDY5LDB4NTMsMHgyOCww eGQ3LDB4MzcsMHhiYiwweDcwLDB4OTUsCi0rCTB4MWMsMHgwNywweDFkLDB4ZDksMHhiNywweGU2 LDB4MWIsMHhiYiwweGZlLDB4NDEsMHhlYiwweGM5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPQotKwl7Ci0rCTB4NTMsMHgxNywweGExLDB4NmEsMHhmYSwweDc3LDB4NDcsMHhi MCwweDk1LDB4NTYsMHg5YSwweDIwLAotKwkweDU3LDB4ZGUsMHg1YywweDg5LDB4OWYsMHg3Ziww eGUyLDB4ZGUsMHgxNywweDNhLDB4NTAsMHgyMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJb XSA9Ci0rCXsKLSsJMHgzYSwweDMyLDB4ZjksMHg4NSwweDBjLDB4YzEsMHhlZCwweDc2LDB4MmQs MHhkZiwweDQwLDB4YzMsCi0rCTB4MDYsMHgyMiwweDY2LDB4ZDQsMHg5YSwweDlhLDB4ZmYsMHg1 YSwweDdlLDB4N2EsMHhmMywweDk2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0r CTB4NDMsMHhiNCwweDU3LDB4NWMsMHgzOCwweDI1LDB4OWQsMHhhZSwweGVjLDB4OTYsMHhkMSww eDg1LAotKwkweDNhLDB4ODQsMHg4ZCwweGZlLDB4NjgsMHhkNSwweDBlLDB4NWMsMHg4ZiwweDY1 LDB4YTUsMHg0ZSwKLSsJMHg0NSwweDg0LDB4YTgsMHg5NAotKwl9OwotKwotKwotKy8qIEhNQUMg U0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg0ZCwweGIwLDB4 NDMsMHhkOCwweDM0LDB4NGIsMHgxMCwweDcwLDB4YjEsMHg4YiwweGVkLDB4ZWEsCi0rCTB4MDcs MHg5MiwweDlmLDB4NmMsMHg3OSwweDMxLDB4YWYsMHg4MSwweDI5LDB4ZWIsMHg2ZSwweGNhLAot KwkweDMyLDB4NDgsMHgyOCwweGU3LDB4MDIsMHg1ZCwweGE2LDB4YTYKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9u b25jZVtdID0KLSsJewotKwkweDNhLDB4YWUsMHgxNSwweGE5LDB4OTksMHhkYywweGU0LDB4Njcs MHgzNCwweDNiLDB4NzAsMHgxNSwKLSsJMHhhYSwweGQzLDB4MzAsMHg5YQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDEzLDB4MWQsMHgyNCwweDA0LDB4 YjAsMHgxOCwweDgxLDB4MTUsMHgyMSwweDUxLDB4MmEsMHgyNCwKLSsJMHg1MiwweDYxLDB4YmUs MHg2NCwweDgyLDB4NmIsMHg1NSwweDJmLDB4ZTIsMHhmMSwweDQwLDB4N2QsCi0rCTB4NzEsMHhk OCwweDAxLDB4ODYsMHgxNSwweGI3LDB4OGIsMHhiNQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxp bnB1dFtdID0KLSsJewotKwkweDhmLDB4YTYsMHg1NCwweDVmLDB4YjEsMHhkMCwweGQ4LDB4YzMs MHhlNywweDBjLDB4MTUsMHhhOSwKLSsJMHgyMywweDZlLDB4ZmUsMHhmYiwweDkzLDB4ZjcsMHgz YSwweGJkLDB4NTksMHgwMSwweGZhLDB4MTgsCi0rCTB4OGUsMHhlOSwweDFhLDB4YTksMHg3OCww eGZjLDB4NzksMHgwYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4 Y2YsMHgyNCwweGI5LDB4ZWIsMHhiMywweGQ0LDB4Y2QsMHgxNywweDM3LDB4MzgsMHg3NSwweDc5 LAotKwkweDE1LDB4Y2IsMHgyZCwweDc1LDB4NTEsMHhmMSwweGNjLDB4YWEsMHgzMiwweGE0LDB4 YTcsMHgzNiwKLSsJMHg3YywweDVjLDB4ZTQsMHg0NywweGYxLDB4M2UsMHgxZCwweGU1Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDUyLDB4NDIsMHhmYSwweGVi LDB4ODUsMHhlMCwweDMwLDB4MjIsMHg3OSwweDAwLDB4MTYsMHhiMiwKLSsJMHg4OCwweDJmLDB4 MTQsMHg2YSwweGI3LDB4ZmMsMHhiNywweDUzLDB4ZGMsMHg0YSwweDEyLDB4ZWYsCi0rCTB4NTQs MHhkNiwweDMzLDB4ZTksMHgyMCwweGQ2LDB4ZmQsMHg1NgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhmNCwweGY2LDB4NDksMHhhMSwweDJkLDB4NjQsMHgyYiww eDMwLDB4NTgsMHhmOCwweGJkLDB4YjgsCi0rCTB4NzUsMHhlYiwweGJiLDB4NWUsMHgxYywweDli LDB4ODEsMHg2YSwweGRhLDB4MTQsMHg4NiwweDZlLAotKwkweGQwLDB4ZGEsMHgxOCwweGI3LDB4 ODgsMHhmYiwweDU5LDB4ZjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsK LSsJMHgyMSwweGNkLDB4NmUsMHg0NiwweGFkLDB4OTksMHgwNywweDE3LDB4YjQsMHgzZCwweDc2 LDB4MGEsCi0rCTB4ZmYsMHg1YiwweDUyLDB4NTAsMHg3OCwweGRmLDB4MWYsMHgyNCwweDA2LDB4 MGQsMHgzZiwweDc0LAotKwkweGE5LDB4YzksMHgzNywweGNmLDB4ZDgsMHgyNiwweDI1LDB4OTEK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhhNywweGFmLDB4MmYsMHgy OSwweGUwLDB4M2EsMHg3MiwweDk1LDB4OTYsMHgxYywweGE5LDB4ZjAsCi0rCTB4NGEsMHgxNyww eDRkLDB4NjYsMHgwNiwweDEwLDB4YmYsMHgzOSwweDg5LDB4ODgsMHhiOCwweDkxLAotKwkweDM3 LDB4MTgsMHg5OSwweGNmLDB4OGMsMHg1MywweDNiLDB4N2UKLSsJfTsKLSsKLSsKLSsvKiBITUFD IFNIQS0yNTYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4OTYsMHhiNyww eDUzLDB4MjIsMHgxZSwweDUyLDB4MmEsMHg5NiwweGIxLDB4MTUsMHgzYywweDM1LAotKwkweDVh LDB4OGIsMHhkMywweDRhLDB4YTYsMHg2YywweDgzLDB4MGEsMHg3ZCwweGEzLDB4MjMsMHgzZCwK LSsJMHg0MywweGExLDB4MDcsMHgyYywweDJkLDB4ZTMsMHg4MSwweGNjCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfbm9u Y2VbXSA9Ci0rCXsKLSsJMHhmMSwweGFjLDB4OTcsMHhjYiwweDVlLDB4MDYsMHg0OCwweGQyLDB4 OTQsMHhiZSwweDE1LDB4MmUsCi0rCTB4YzcsMHhmYywweGMyLDB4MDEKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg5OCwweGM1LDB4MWUsMHgzNSwweDVlLDB4 ODksMHgwZCwweGNlLDB4NjQsMHg2ZCwweDE4LDB4YTcsCi0rCTB4NWEsMHhjNiwweGYzLDB4ZTcs MHhkNiwweDllLDB4YzAsMHhlYSwweGI3LDB4M2EsMHg4ZCwweDY1LAotKwkweGI4LDB4ZWIsMHgx MCwweGQ3LDB4NTcsMHgxOCwweGEwLDB4MzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHgxYiwweDEwLDB4YWYsMHhhYywweGQwLDB4NjUsMHg5NSwweGFkLDB4MDQsMHhh ZCwweDAzLDB4MWMsCi0rCTB4ZTAsMHg0MCwweGQ2LDB4M2UsMHgxYywweDQ2LDB4NTMsMHgzOSww eDdjLDB4ZTIsMHhiYywweGRhLAotKwkweDhjLDB4YTIsMHgzMywweGE3LDB4OWEsMHgyNiwweGQz LDB4MjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YmEsMHg2MSww eDBlLDB4NTUsMHhmZSwweDExLDB4OGEsMHg5ZSwweDBmLDB4ODAsMHhkZiwweDFkLAotKwkweDAz LDB4MGEsMHhmZSwweDE1LDB4OTQsMHgyOCwweDRiLDB4YmEsMHhmNCwweDlmLDB4NTEsMHgyNSwK LSsJMHg4OCwweGU1LDB4NGUsMHhmYiwweGFmLDB4Y2UsMHg2OSwweDkwCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50 cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NjIsMHg3ZiwweDFlLDB4NmIsMHhlOCwweDhl LDB4ZTEsMHgzNSwweDdkLDB4OWIsMHg0ZiwweGM3LAotKwkweGVjLDB4YzgsMHhhYywweGVmLDB4 NmIsMHgxMywweDllLDB4MDUsMHg1NiwweGMxLDB4MDgsMHhmOSwKLSsJMHgyZiwweDBmLDB4Mjcs MHg5YywweGQ0LDB4MTUsMHhlZCwweDJkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQotKwl7Ci0rCTB4YzcsMHg3NiwweDZlLDB4YTksMHhkMiwweGIyLDB4NzYsMHg0MCwweDgy LDB4MjUsMHgyYywweGIzLAotKwkweDZmLDB4YWMsMHhlOSwweDc0LDB4ZWYsMHg4ZiwweDNjLDB4 OGUsMHhjZCwweGYxLDB4YmYsMHhiMywKLSsJMHg0OSwweDc3LDB4MzQsMHg4OCwweDUyLDB4MzYs MHhlNiwweDJlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDhkLDB4 YjgsMHgwYywweGQxLDB4YmYsMHg3MCwweGY2LDB4MTksMHhjMywweDQxLDB4ODAsMHg5ZiwKLSsJ MHhlMSwweGE1LDB4YTQsMHgxZiwweDJjLDB4MjYsMHhiMSwweGU1LDB4ZDgsMHhlYiwweGJlLDB4 ZjgsCi0rCTB4ZGYsMHg4OCwweDZhLDB4ODksMHhkNiwweDA1LDB4ZDgsMHg5ZAotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2 X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDQzLDB4MTIsMHgyYSwweDJjLDB4NDAsMHg1Myww eDJlLDB4N2MsMHg2NiwweDM0LDB4YWMsMHhjMywKLSsJMHg0MywweGUzLDB4ZTAsMHg2YSwweGZj LDB4ZmEsMHhlYSwweDg3LDB4MjEsMHgxZiwweGUyLDB4MjYsCi0rCTB4YzQsMHhmOSwweDA5LDB4 OWEsMHgwZCwweDZlLDB4N2YsMHhlMAotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTM4NCBQUiAg Ki8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg2OSwweDgxLDB4OTgsMHg4OCwweDQ0 LDB4ZjUsMHhkNiwweDJlLDB4MDAsMHgwOCwweDNiLDB4YzUsCi0rCTB4ZmIsMHhkNywweDhlLDB4 NmYsMHgyMywweGY4LDB4NmQsMHgwOSwweGQ2LDB4ODUsMHg0OSwweGQxLAotKwkweGY4LDB4NmQs MHhhNCwweDU4LDB4NTQsMHhmZCwweDg4LDB4YTkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9ub25jZVtdID0KLSsJ ewotKwkweDZlLDB4MzgsMHg4MSwweGNhLDB4YjcsMHhlOCwweDZlLDB4NjYsMHg0OSwweDhhLDB4 YjIsMHg1OSwKLSsJMHhlZSwweDE2LDB4YzksMHhkZQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweGZlLDB4NGMsMHhkOSwweGY0LDB4NzgsMHgzYiwweDA4 LDB4NDEsMHg4ZCwweDhmLDB4NTUsMHhjNCwKLSsJMHg0MywweDU2LDB4YjYsMHgxMiwweDM2LDB4 NmIsMHgzMCwweGI3LDB4NWUsMHhlMSwweGI5LDB4NDcsCi0rCTB4MDQsMHhiMSwweDRlLDB4YTks MHgwMCwweGExLDB4NTIsMHhhMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJ ewotKwkweDg5LDB4ZTksMHhjYywweDhmLDB4MjcsMHgzYywweDI2LDB4ZDEsMHg5NSwweGM4LDB4 N2QsMHgwZiwKLSsJMHg1YiwweDFhLDB4ZjAsMHg3OCwweDM5LDB4NTYsMHg2ZiwweGE0LDB4MjMs MHhlNywweGQxLDB4ZGEsCi0rCTB4N2MsMHg2NiwweDMzLDB4YTAsMHg5MCwweGM5LDB4OTIsMHg4 OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4YmUsMHgzZCwweDdj LDB4MGQsMHhjYSwweGRhLDB4N2MsMHg0OSwweGI4LDB4MTIsMHgzNiwweGMwLAotKwkweGRiLDB4 YWQsMHgzNSwweGE4LDB4YzcsMHgwYiwweDJhLDB4MmMsMHg2OSwweDZkLDB4MjUsMHg1NiwKLSsJ MHg2MywweDgyLDB4MTEsMHgzZSwweGE3LDB4MzMsMHg3MCwweDcyCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfaW50 X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDgyLDB4M2QsMHhlNiwweDU0LDB4ODAsMHg0Miww eGY4LDB4YmEsMHg5MCwweDRmLDB4MDYsMHhhNiwKLSsJMHhkMiwweDdmLDB4YmYsMHg3OSwweDdj LDB4MTIsMHg3ZCwweGE2LDB4YTIsMHg2NiwweGU4LDB4YTYsCi0rCTB4YzAsMHhkNiwweDRhLDB4 NTUsMHhiZiwweGQ4LDB4MGEsMHhjNSwweGY4LDB4MDMsMHg4OCwweGRkLAotKwkweDhlLDB4ODcs MHhkMSwweDVhLDB4NDgsMHgyNiwweDcyLDB4MmEsMHg4ZSwweGNmLDB4ZWUsMHhiYQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh Mzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg4ZiwweGZmLDB4ZDksMHg4NCww eGJiLDB4ODUsMHgzYSwweDY2LDB4YTEsMHgyMSwweGNlLDB4YjIsCi0rCTB4M2EsMHgzYSwweDE3 LDB4MjIsMHgxOSwweGFlLDB4YzcsMHhiNiwweDYzLDB4ODEsMHhkNSwweGZmLAotKwkweDBkLDB4 YzgsMHhlMSwweGFmLDB4NTcsMHhkMiwweGNiLDB4NjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9Ci0rCXsKLSsJMHhkNywweGZiLDB4YzksMHhlOCwweGUyLDB4ZjIsMHhhYSwweDRj LDB4YjgsMHg1MSwweDJmLDB4ZTEsCi0rCTB4MjIsMHhiYSwweGYzLDB4ZGEsMHgwYSwweDE5LDB4 NzYsMHg3MSwweDU3LDB4YjIsMHgxZCwweDk0LAotKwkweDA5LDB4NjksMHg2YywweGQzLDB4OTcs MHg1MSwweDgxLDB4ODcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhl NiwweDE5LDB4MjgsMHhhOCwweDIxLDB4Y2UsMHg1ZSwweGRiLDB4MjQsMHg3OSwweDhjLDB4NzYs Ci0rCTB4NWQsMHg3MywweGIyLDB4ZGYsMHhhYywweGVmLDB4ODUsMHhhNywweDNiLDB4MTksMHgw OSwweDhiLAotKwkweDdmLDB4OTgsMHgyOCwweGE5LDB4OTMsMHhkOCwweDdhLDB4YWQsMHg1NSww eDhiLDB4MjQsMHg5ZCwKLSsJMHhlNiwweDk4LDB4ZmUsMHg0NywweGQ1LDB4NDgsMHhjMSwweDIz LDB4ZDgsMHgxZCwweDYyLDB4NzUKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0zODQgTm8gUFIg ICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEzODRfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YzMsMHg1NiwweDJiLDB4MWQsMHhjMiww eGJiLDB4YTgsMHhmMCwweGFlLDB4MWIsMHgwZCwweGQzLAotKwkweDVhLDB4NmMsMHhkYSwweDU3 LDB4OGUsMHhhNSwweDhhLDB4MGQsMHg2YywweDRiLDB4MTgsMHhiMSwKLSsJMHgwNCwweDNlLDB4 YjQsMHg5OSwweDM1LDB4YzQsMHhjMCwweDVmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfbm9uY2VbXSA9Ci0rCXsKLSsJ MHhjNSwweDQ5LDB4MWUsMHg2NiwweDI3LDB4OTIsMHhiZSwweGVjLDB4YjUsMHgxZSwweDRiLDB4 YjEsCi0rCTB4MzgsMHhlMywweGViLDB4NjIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9Ci0rCXsKLSsJMHhiZSwweGU3LDB4NmIsMHg1NywweGRlLDB4ODgsMHgxMSwweDk2LDB4 OWIsMHg2ZSwweGVhLDB4ZTUsCi0rCTB4NjMsMHg4MywweDRjLDB4YjYsMHg4ZCwweDY2LDB4YWEs MHgxZiwweDhiLDB4NTQsMHhlNywweDYyLAotKwkweDZkLDB4NWEsMHhmYywweGJmLDB4OTcsMHhi YSwweGNkLDB4NzcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHhlNSww eDI4LDB4NWYsMHg0MywweGY1LDB4ODMsMHg2ZSwweDBhLDB4ODMsMHg1YywweGUzLDB4ODEsCi0r CTB4MDMsMHhmMiwweGY4LDB4NzgsMHgwMCwweDdjLDB4OTUsMHg4NywweDE2LDB4ZDYsMHg2Yyww eDU4LAotKwkweDMzLDB4NmMsMHg1MywweDM1LDB4MGQsMHg2NiwweGUzLDB4Y2UKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTIsMHgxZiwweGYzLDB4ZGEsMHgwZCww eDE5LDB4OTksMHg4NywweGM0LDB4OTAsMHhhMiwweDMxLAotKwkweGNhLDB4MmEsMHg4OSwweDU4 LDB4NDMsMHg0NCwweGI4LDB4ZGUsMHhjZiwweGE0LDB4YmUsMHgzYiwKLSsJMHg1MywweDI2LDB4 MjIsMHgzMSwweDc2LDB4NDEsMHgyMiwweGI1LDB4YTgsMHg3MCwweDJmLDB4NGIsCi0rCTB4NjQs MHg5NSwweDRkLDB4NDgsMHg5NiwweDM1LDB4ZTYsMHhiZCwweDNjLDB4MzQsMHhkYiwweDFiCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NzcsMHg2MSwweGJhLDB4 YmMsMHhmMiwweGMxLDB4ZjMsMHg0YiwweDg2LDB4NjUsMHhmZCwweDQ4LAotKwkweDBlLDB4M2Ms MHgwMiwweDVlLDB4YTIsMHg3YSwweDZiLDB4N2MsMHhlZCwweDIxLDB4NWUsMHhmOSwKLSsJMHhj ZCwweGNkLDB4NzcsMHgwNywweDJiLDB4YmUsMHhjNSwweDVjCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25h bGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4MTgsMHgyNCwweDVmLDB4YzYsMHg4NCwweGQxLDB4 NjcsMHhjMywweDlhLDB4MTEsMHhhNSwweDhjLAotKwkweDA3LDB4MzksMHgyMSwweDgzLDB4NGQs MHgwNCwweGM0LDB4NmEsMHgyOCwweDE5LDB4Y2YsMHg5MiwKLSsJMHgyMSwweGQ5LDB4OWUsMHg0 MSwweDcyLDB4NmMsMHg5ZSwweDYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0KLSsJ ewotKwkweDk2LDB4NjcsMHg0MSwweDI4LDB4OWIsMHhiNywweDkyLDB4OGQsMHg2NCwweDNiLDB4 ZTQsMHhjZiwKLSsJMHg3ZSwweGFhLDB4MWUsMHhiMSwweDRiLDB4MWQsMHgwOSwweDU2LDB4Njcs MHg5YywweGM2LDB4NmQsCi0rCTB4M2IsMHhlOCwweDkxLDB4OWQsMHhlMSwweDhhLDB4YjcsMHgz MgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUzLDB4NTksMHg2MSwweDM4 LDB4OTIsMHhlYywweGUyLDB4M2MsMHhmZiwweGI3LDB4ZGIsMHgxOSwKLSsJMHgwZiwweDViLDB4 OTMsMHg2OCwweDBkLDB4YTQsMHg5NCwweDQwLDB4NzIsMHgwYiwweGUwLDB4ZWQsCi0rCTB4NGQs MHhjZCwweDY4LDB4YTAsMHgxZSwweGZlLDB4NjcsMHhiMiwweGZhLDB4MjEsMHg1NiwweDc0LAot KwkweGE0LDB4YWQsMHhjZiwweGI3LDB4NjAsMHg2NiwweDJlLDB4NDAsMHhkZSwweDgyLDB4Y2Es MHhmYgotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTUxMiBQUiAgKi8KLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5w dXRbXSA9Ci0rCXsKLSsJMHhhYSwweDllLDB4NDUsMHg2NywweDBlLDB4MDAsMHgyYSwweDY3LDB4 OTgsMHhkNiwweGRhLDB4MGIsCi0rCTB4MGYsMHgxNywweDdlLDB4YWMsMHhmZCwweDI3LDB4YzQs MHhjYSwweDg0LDB4ZGYsMHhkZSwweGJhLAotKwkweDg1LDB4ZDksMHhiZSwweDhmLDB4ZjMsMHhm ZiwweDkxLDB4NGQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9ub25jZVtdID0KLSsJewotKwkweDhjLDB4NDksMHgy ZiwweDU4LDB4MWUsMHg3YSwweGRhLDB4NGIsMHg3ZSwweDhhLDB4MzAsMHg3YiwKLSsJMHg4Niww eGVhLDB4YWYsMHhhMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJ ewotKwkweDcxLDB4ZTEsMHhiYiwweGFkLDB4YTcsMHg0YiwweDJlLDB4MzEsMHgzYiwweDBiLDB4 ZWMsMHgyNCwKLSsJMHg5OSwweDM4LDB4YmMsMHhhYSwweDA1LDB4NGMsMHg0NiwweDQ0LDB4ZmEs MHhhZCwweDhlLDB4MDIsCi0rCTB4YzEsMHg3ZSwweGFkLDB4ZWMsMHg1NCwweGE2LDB4ZDAsMHhh ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDNkLDB4NmUsMHhh NiwweGE4LDB4MjksMHgyYSwweGIyLDB4ZjUsMHg5OCwweDQyLDB4ZTQsMHg5MiwKLSsJMHg3OCww eDIyLDB4NjcsMHhmZCwweDFiLDB4MTUsMHgxZSwweDI5LDB4YWEsMHg3MSwweDNjLDB4M2MsCi0r CTB4ZTcsMHgwNSwweDIwLDB4YTksMHgyOSwweGM2LDB4NzUsMHg3MQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2Vu dHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4YWIsMHhiOSwweDE2LDB4ZDgsMHg1NSwweDM1LDB4 NTQsMHhiNywweDk3LDB4M2YsMHg5NCwweGJjLAotKwkweDJmLDB4N2MsMHg3MCwweGM3LDB4ZDAs MHhlZCwweGI3LDB4NGIsMHhmNywweGY2LDB4NmMsMHgwMywKLSsJMHgwYywweGIwLDB4MDMsMHhk OCwweGJiLDB4NzEsMHhkOSwweDEwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0K LSsJewotKwkweDhlLDB4ZDMsMHhmZCwweDUyLDB4OWUsMHg4MywweDA4LDB4NDksMHgxOCwweDZl LDB4MjMsMHg1NiwKLSsJMHg1YywweDQ1LDB4OTMsMHgzNCwweDA1LDB4ZTIsMHg5OCwweDhmLDB4 MGMsMHhkNCwweDMyLDB4MGMsCi0rCTB4ZmQsMHhkYSwweDVmLDB4OTIsMHgzYSwweDhjLDB4ODEs MHhiZCwweGY2LDB4NmMsMHg1NSwweGZkLAotKwkweGI4LDB4MjAsMHhjZSwweDhkLDB4OTcsMHgy NywweGU4LDB4ZTgsMHhlMCwweGIzLDB4ODUsMHg1MCwKLSsJMHhhMiwweGMyLDB4YjIsMHg5NSww eDFkLDB4NDgsMHhkMywweDdiLDB4NGIsMHg3OCwweDEzLDB4MzUsCi0rCTB4MDUsMHgxNywweGJl LDB4MGQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4YzMsMHhm YywweDk1LDB4YWEsMHg2OSwweDA2LDB4YWUsMHg1OSwweDQxLDB4Y2UsMHgyNiwweDA4LAotKwkw eDI5LDB4NmQsMHg0NSwweGRhLDB4ZTgsMHhiMywweDZjLDB4OTUsMHg2MCwweDBmLDB4NzAsMHgy YywKLSsJMHgxMCwweGJhLDB4MzgsMHg4YywweGNmLDB4MjksMHg5OSwweGFhCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4M2IsMHg5YSwweDI1LDB4Y2UsMHhkNyww eGY5LDB4NWMsMHhkMSwweDNhLDB4M2UsMHhhYSwweDcxLAotKwkweDE0LDB4M2UsMHgxOSwweGU4 LDB4Y2UsMHhlNiwweGZlLDB4NTEsMHg4NCwweGU5LDB4MWIsMHhmZSwKLSsJMHgzZiwweGE3LDB4 ZjIsMHhmZCwweDc2LDB4NWYsMHg2YSwweGU3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4YjcsMHg4MiwweGE5LDB4NTcsMHg4MSwweDY3LDB4NTMsMHhiNSwweGExLDB4 ZTksMHgzZCwweDM1LAotKwkweGY5LDB4ZTQsMHg5NywweGJlLDB4YTYsMHhjYSwweGYxLDB4MDEs MHgxMywweDA5LDB4ZTcsMHgyMSwKLSsJMHhjMCwweGVkLDB4OTMsMHg1ZCwweDRiLDB4ZjQsMHhl YiwweDhkLDB4NTMsMHgyNSwweDhhLDB4YzQsCi0rCTB4YjEsMHg2ZiwweDZlLDB4MzcsMHhjZCww eDJlLDB4YWMsMHgzOSwweGIyLDB4YjYsMHg5OSwweGEzLAotKwkweDgyLDB4MDAsMHhiMCwweDIx LDB4ZjAsMHhjNywweDJmLDB4NGMsMHg3MywweDkyLDB4ZmQsMHgwMCwKLSsJMHhiNiwweGFmLDB4 YmMsMHhkMwotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTUxMiBObyBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5 aW5wdXRbXSA9Ci0rCXsKLSsJMHg2ZSwweDg1LDB4ZTYsMHgyNSwweDk2LDB4MjksMHhhNywweDUy LDB4NWIsMHg2MCwweGJhLDB4YWEsCi0rCTB4ZGUsMHhkYiwweDM2LDB4MGEsMHg1MSwweDlhLDB4 MTUsMHhhZSwweDZlLDB4MTgsMHhkMywweGZlLAotKwkweDM5LDB4YjksMHg0YSwweDk2LDB4Zjgs MHg3NywweGNiLDB4OTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9ub25jZVtdID0KLSsJewotKwkweGUwLDB4YTYsMHg1 ZCwweDA4LDB4YzMsMHg3YywweGFlLDB4MjUsMHgyZSwweDgwLDB4ZDEsMHgzZSwKLSsJMHhkOSww eGFmLDB4NDMsMHgzYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewot KwkweDUzLDB4OTksMHg1MiwweDVmLDB4MTEsMHhhOSwweDY0LDB4NjYsMHgyMCwweDVlLDB4MWIs MHg1ZiwKLSsJMHg0MiwweGIzLDB4ZjQsMHhkYSwweGVkLDB4YmIsMHg2MywweGMxLDB4MjMsMHhh ZiwweGQwLDB4MDEsCi0rCTB4OTAsMHgzYiwweGQwLDB4NzgsMHhlNCwweDBiLDB4YTcsMHgyMAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDg1LDB4OTAsMHg4MCwweGQz LDB4OTgsMHhmMSwweDUzLDB4NmQsMHg2OCwweDE1LDB4OGYsMHhlNSwKLSsJMHg2MCwweDNmLDB4 MTcsMHgyOSwweDU1LDB4OGQsMHgzMywweGIxLDB4NDUsMHg2NCwweDY0LDB4OGQsCi0rCTB4NTAs MHgyMSwweDg5LDB4YWUsMHhmNiwweGZkLDB4MzIsMHg3MwotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2ludF9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHgyOCwweDU2LDB4MzAsMHg2ZiwweGY0LDB4YTEsMHg0OCwweGUw LDB4YzksMHhmNSwweDc1LDB4OTAsCi0rCTB4Y2MsMHhmYiwweGRmLDB4ZGYsMHg3MSwweDNkLDB4 MGEsMHg5YSwweDAzLDB4NjUsMHgzYiwweDE4LAotKwkweDYxLDB4ZTMsMHhkMSwweGRhLDB4Y2Ms MHg0YSwweGZlLDB4NTUsMHgzOCwweGY4LDB4MjEsMHg2YiwKLSsJMHhmYSwweDE4LDB4MDEsMHg0 MiwweDM5LDB4MmYsMHg5OSwweDUzLDB4MzgsMHgxNSwweDgyLDB4MzQsCi0rCTB4YzUsMHg5Myww eDkyLDB4YmMsMHg0ZCwweDc1LDB4MWEsMHg1ZiwweDIxLDB4MjcsMHhjYywweGExLAotKwkweGIx LDB4NTcsMHg2OSwweGU4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0r CTB4OGMsMHg1MiwweDdlLDB4NzcsMHg3MiwweDNmLDB4YTMsMHgwNCwweDk3LDB4MTAsMHg5Yiww eDQxLAotKwkweGJkLDB4ZTgsMHhmZiwweDg5LDB4ZWQsMHg4MCwweGUzLDB4YmQsMHhhYSwweDEy LDB4MmQsMHhjYSwKLSsJMHg3NSwweDgyLDB4MzYsMHg3NywweDg4LDB4Y2QsMHhhNiwweDczCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4N2UsMHgzMiwweGUz LDB4NjksMHg2OSwweDA3LDB4MzQsMHhhMiwweDE2LDB4YTIsMHg1ZCwweDFhLAotKwkweDEwLDB4 OTEsMHhkMywweGUyLDB4MjEsMHhhMiwweGEzLDB4ZGQsMHhjZCwweDBjLDB4MDksMHg4NiwKLSsJ MHgxMSwweGUxLDB4NTAsMHhmZiwweDVjLDB4YjcsMHhlYiwweDVjCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRp b25hbGlucHV0MltdID0KLSsJewotKwkweDdmLDB4NzgsMHg2NiwweGQ4LDB4ZmIsMHg2NywweGNm LDB4OGQsMHg4YywweDA4LDB4MzAsMHhhNSwKLSsJMHhmOCwweDdkLDB4Y2YsMHg0NCwweDU5LDB4 Y2UsMHhmOCwweGRmLDB4NTgsMHhkMywweDYwLDB4Y2IsCi0rCTB4YTgsMHg2MCwweGI5LDB4MDcs MHhjNCwweGIxLDB4OTUsMHg0OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eGRmLDB4YTcsMHgzNiwweGQ0LDB4ZGMsMHg1ZCwweDRkLDB4MzEsMHhhZCwweDY5LDB4NDYsMHg5 ZiwKLSsJMHhmMSwweDdjLDB4ZDcsMHgzYiwweDRmLDB4NTUsMHhmMiwweGQ3LDB4YjksMHg5ZCww eGFkLDB4N2EsCi0rCTB4NzksMHgwOCwweDU5LDB4YTUsMHhkYywweDc0LDB4ZjUsMHg5YiwweDcz LDB4ZDIsMHgxMywweDI1LAotKwkweDBiLDB4ODEsMHgwOCwweDA4LDB4MjUsMHhmYiwweDM5LDB4 ZjIsMHhmMCwweGEzLDB4YTQsMHg4ZCwKLSsJMHhlZiwweDA1LDB4OWUsMHhiOCwweGM3LDB4NTIs MHhlNCwweDBlLDB4NDIsMHhhYSwweDdjLDB4NzksCi0rCTB4YzIsMHhkNiwweGZkLDB4YTUKLSsJ fTsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBz CTIwMTItMDctMTIgMjE6NDk6MjUuMzQyMzUyMzczICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MjM1 MjM3MyArMDIwMAotQEAgLTAsMCArMSwxOTMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K 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 LSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4 X3BbXSA9IHsKLSsJMHhhOCwweDUzLDB4NzgsMHhkOCwweGZkLDB4M2YsMHg4ZCwweDcyLDB4ZWMs MHg3NCwweDE4LDB4MDgsCi0rCTB4MGQsMHhhMiwweDEzLDB4MTcsMHhlNCwweDNlLDB4YzQsMHhi NiwweDJiLDB4YTgsMHhjOCwweDYyLAotKwkweDNiLDB4N2UsMHg0ZCwweDA0LDB4NDQsMHgxZCww eGQxLDB4YTAsMHg2NSwweDg2LDB4NjIsMHg1OSwKLSsJMHg2NCwweDkzLDB4Y2EsMHg4ZSwweDll LDB4OGYsMHhiYiwweDdlLDB4MzQsMHhhYSwweGRkLDB4YjYsCi0rCTB4MmUsMHg1ZCwweDY3LDB4 YjYsMHhkMCwweDlhLDB4NmUsMHg2MSwweGI3LDB4NjksMHhlNywweGMzLAotKwkweDUyLDB4YWEs MHgyYiwweDEwLDB4ZTIsMHgwYywweGEwLDB4NjMsMHg2OSwweDYzLDB4YjUsMHg1MiwKLSsJMHgz ZSwweDg2LDB4NDcsMHgwZCwweGVjLDB4YmIsMHhlZCwweGEwLDB4MjcsMHhlNywweDk3LDB4ZTcs Ci0rCTB4YjYsMHg3NiwweDM1LDB4ZDQsMHhkNCwweDljLDB4MzAsMHg3MCwweDBlLDB4NzQsMHhh ZiwweDhhLAotKwkweDBmLDB4ZjEsMHg1NiwweGE4LDB4MDEsMHhhZiwweDU3LDB4YTIsMHg2ZSww eDcwLDB4NzgsMHhmMSwKLSsJMHhkOCwweDJmLDB4NzQsMHg5MCwweDhlLDB4Y2IsMHg2ZCwweDA3 LDB4ZTcsMHgwYiwweDM1LDB4MDMsCi0rCTB4ZWUsMHhkOSwweDRmLDB4YTMsMHgyYywweGYxLDB4 N2EsMHg3ZiwweGMzLDB4ZDYsMHhjZiwweDQwLAotKwkweGRjLDB4N2IsMHgwMCwweDgzLDB4MGUs MHg2YSwweDI1LDB4NjYsMHhkYywweDA3LDB4M2UsMHgzNCwKLSsJMHgzMywweDEyLDB4NTEsMHg3 YywweDZhLDB4YTUsMHgxNSwweDJiLDB4NGIsMHhmZSwweGNkLDB4MmUsCi0rCTB4NTUsMHgxZiww eGVlLDB4MzQsMHg2MywweDE4LDB4YTEsMHg1MywweDQyLDB4M2MsMHg5OSwweDZiLAotKwkweDBk LDB4NWQsMHhjYiwweDkxLDB4MDIsMHhhZSwweGRkLDB4MzgsMHg3OSwweDg2LDB4MTYsMHhmMSwK LSsJMHhmMSwweGUwLDB4ZDYsMHhjNCwweDAzLDB4NTIsMHg1YiwweDFmLDB4OWIsMHgzZCwweDRk LDB4YzcsCi0rCTB4NjYsMHhkZSwweDJkLDB4ZmMsMHg0YSwweDU2LDB4ZDcsMHhiOCwweGJhLDB4 NTksMHg2MywweGQ2LAotKwkweDBmLDB4M2UsMHgxNiwweDMxLDB4ODgsMHg3MCwweGFkLDB4NDMs MHg2OSwweDUyLDB4ZTUsMHg1NywKLSsJMHg2NSwweDM3LDB4NGUsMHhhYiwweDg1LDB4ZTgsMHhl YywweDE3LDB4ZDYsMHhiOSwweGE0LDB4NTQsCi0rCTB4N2IsMHg5YiwweDVmLDB4MjcsMHg1Miww eGYzLDB4MTAsMHg1YiwweGU4LDB4MDksMHhiMiwweDNhLAotKwkweDJjLDB4OGQsMHg3NCwweDY5 LDB4ZGIsMHgwMiwweGUyLDB4NGQsMHg1OSwweDIzLDB4OTQsMHhhNywKLSsJMHhkYiwweGEwLDB4 NjksMHhlOQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0 OF9xW10gPSB7Ci0rCTB4ZDIsMHg3NywweDA0LDB4NGUsMHg1MCwweGY1LDB4YTQsMHhlMywweGY1 LDB4MTAsMHhhNSwweDBhLAotKwkweDBiLDB4ODQsMHhmZCwweGZmLDB4YmMsMHhhMCwweDQ3LDB4 ZWQsMHgyNywweDYwLDB4MjAsMHg1NiwKLSsJMHg3NCwweDQxLDB4YTAsMHhhNQotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9nW10gPSB7Ci0rCTB4MTMs MHhkNywweDU0LDB4ZTIsMHgxZiwweGQyLDB4NDEsMHg2NSwweDVkLDB4YTgsMHg5MSwweGM1LAot KwkweDIyLDB4YTYsMHg1YSwweDcyLDB4YTgsMHg5YiwweGRjLDB4NjQsMHhlYywweDliLDB4NTQs MHhhOCwKLSsJMHgyMSwweGVkLDB4NGEsMHg4OSwweDhiLDB4NDksMHgwZSwweDBjLDB4NGYsMHhj YiwweDcyLDB4MTksCi0rCTB4MmEsMHg0YSwweDIwLDB4ZjUsMHg0MSwweGYzLDB4ZjIsMHg5Miww eDUzLDB4OTksMHhmMCwweGJhLAotKwkweGVjLDB4ZjksMHgyOSwweGFhLDB4ZmIsMHhmNywweDlk LDB4ZmUsMHg0MywweDMyLDB4MzksMHgzYiwKLSsJMHgzMiwweGNkLDB4MmUsMHgyZiwweGNmLDB4 MjcsMHgyZiwweDMyLDB4YTYsMHgyNywweDQzLDB4NGEsCi0rCTB4MGQsMHhmMiwweDQyLDB4Yjcs MHg1YiwweDQxLDB4NGQsMHhmMywweDcyLDB4MTIsMHgxZSwweDUzLAotKwkweGE1LDB4NTMsMHhm MiwweDIyLDB4ZjgsMHgzNiwweGIwLDB4MDAsMHhmMCwweDE2LDB4NDgsMHg1YiwKLSsJMHg2Yiww eGQwLDB4ODksMHg4NCwweDUxLDB4ODAsMHgxZCwweGNkLDB4OGQsMHhlNiwweDRjLDB4ZDUsCi0r CTB4MzYsMHg1NiwweDk2LDB4ZmYsMHhjNSwweDMyLDB4ZDUsMHgyOCwweGM1LDB4MDYsMHg2Miww eDBhLAotKwkweDk0LDB4MmEsMHgwMywweDA1LDB4MDQsMHg2ZCwweDhmLDB4MTgsMHg3NiwweDM0 LDB4MWYsMHgxZSwKLSsJMHg1NywweDBiLDB4YzMsMHg5NywweDRiLDB4YTYsMHhiOSwweGE0LDB4 MzgsMHhlOSwweDcwLDB4MjMsCi0rCTB4MDIsMHhhMiwweGU2LDB4ZTYsMHg3YiwweGZkLDB4MDYs MHhkMywweDJiLDB4YzYsMHg3OSwweDk2LAotKwkweDIyLDB4NzEsMHhkNywweGI0LDB4MGMsMHhk NywweDJmLDB4MzgsMHg2ZSwweDY0LDB4ZTAsMHhkNywKLSsJMHhlZiwweDg2LDB4Y2EsMHg4Yyww eGE1LDB4ZDEsMHg0MiwweDI4LDB4ZGMsMHgyYSwweDRmLDB4MTYsCi0rCTB4ZTMsMHgxOCwweDk4 LDB4ODYsMHhiNSwweDk5LDB4MDYsMHg3NCwweGY0LDB4MjAsMHgwZiwweDNhLAotKwkweDRjLDB4 ZjYsMHg1YSwweDNmLDB4MGQsMHhkYiwweGExLDB4ZmEsMHg2NywweDJkLDB4ZmYsMHgyZiwKLSsJ MHg1ZSwweDE0LDB4M2QsMHgxMCwweGU0LDB4ZTksMHg3YSwweGU4LDB4NGYsMHg2ZCwweGEwLDB4 OTUsCi0rCTB4MzUsMHhkNSwweGI5LDB4ZGYsMHgyNSwweDkxLDB4ODEsMHhhNywweDliLDB4NjMs MHhiMCwweDY5LAotKwkweGU5LDB4NDksMHg5NywweDJiLDB4MDIsMHhiYSwweDM2LDB4YjMsMHg1 OCwweDZhLDB4YWIsMHg3ZSwKLSsJMHg0NSwweGYzLDB4MjIsMHhmOCwweDJlLDB4NGUsMHg4NSww eGNhLDB4M2EsMHhiOCwweDU1LDB4OTEsCi0rCTB4YjMsMHhjMiwweGE5LDB4NjYKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHViX2tleVtdID0gewot KwkweDI0LDB4NTIsMHhmMywweGNjLDB4YmUsMHg5ZSwweGQ1LDB4Y2EsMHg3ZCwweGM3LDB4NGMs MHg2MCwKLSsJMHgyYiwweDk5LDB4MjIsMHg2ZSwweDhmLDB4MmYsMHhhYiwweDM4LDB4ZTcsMHhk NywweGRkLDB4ZmIsCi0rCTB4NzUsMHg1MywweDliLDB4MTcsMHgxNSwweDVlLDB4OWYsMHhjZiww eGQxLDB4YWIsMHhhNSwweDY0LAotKwkweGViLDB4ODUsMHgzNSwweGQ4LDB4MTIsMHhjOSwweGMy LDB4ZGMsMHhmOSwweDcyLDB4ODQsMHg0NCwKLSsJMHgxYiwweGM0LDB4ODIsMHgyNCwweDM2LDB4 MjQsMHhjNywweGY0LDB4NTcsMHg1OCwweDBjLDB4MWMsCi0rCTB4MzgsMHhhNSwweDdjLDB4NDYs MHhjNCwweDU3LDB4MzksMHgyNCwweDcwLDB4ZWQsMHhiNSwweDJjLAotKwkweGI1LDB4YTYsMHhl MCwweDNmLDB4ZTYsMHgyOCwweDdiLDB4YjYsMHhmNCwweDlhLDB4NDIsMHhhMiwKLSsJMHgwNiww eDVhLDB4MDUsMHg0ZiwweDAzLDB4MDgsMHgzOSwweGRmLDB4MWYsMHhkMywweDE0LDB4OWMsCi0r CTB4NGMsMHhhMCwweDUzLDB4MWQsMHhkOCwweGNhLDB4OGEsMHhhYSwweDljLDB4YzcsMHgzMyww eDcxLAotKwkweDkzLDB4MzgsMHg3MywweDQ4LDB4MzMsMHg2MSwweDE4LDB4MjIsMHg0NSwweDQ1 LDB4ZTgsMHg4YywKLSsJMHg4MCwweGZmLDB4ZDgsMHg3NiwweDVkLDB4NzQsMHgzNiwweDAzLDB4 MzMsMHhjYywweGFiLDB4OTksCi0rCTB4NzIsMHg3NywweDliLDB4NjUsMHgyNSwweGE2LDB4NWIs MHhkZCwweDBkLDB4MTAsMHhjNiwweDc1LAotKwkweGMxLDB4MDksMHhiYiwweGQzLDB4ZTUsMHhi ZSwweDRkLDB4NzIsMHhlZiwweDZlLDB4YmEsMHg2ZSwKLSsJMHg0MywweDhkLDB4NTIsMHgyNiww eDIzLDB4N2QsMHhiOCwweDg4LDB4MzcsMHg5YywweDVmLDB4Y2MsCi0rCTB4NDcsMHhhMywweDg0 LDB4N2YsMHhmNiwweDM3LDB4MTEsMHhiYSwweGVkLDB4NmQsMHgwMywweGFmLAotKwkweGU4LDB4 MWUsMHg2OSwweDRhLDB4NDEsMHgzYiwweDY4LDB4MGIsMHhkMywweDhhLDB4YjQsMHg5MCwKLSsJ MHgzZiwweDgzLDB4NzAsMHhhNywweDA3LDB4ZWYsMHg1NSwweDFkLDB4NDksMHg0MSwweDAyLDB4 NmQsCi0rCTB4OTUsMHg3OSwweGQ2LDB4OTEsMHhkZSwweDhlLDB4ZGEsMHhhMSwweDYxLDB4MDUs MHhlYiwweDlkLAotKwkweGJhLDB4M2MsMHgyZiwweDRjLDB4MWIsMHhlYywweDUwLDB4ODIsMHg3 NSwweGFhLDB4MDIsMHgwNywKLSsJMHhlMiwweDUxLDB4YjUsMHhlYywweGNiLDB4MjgsMHg2YSww eDRiLDB4MDEsMHhkNCwweDQ5LDB4ZDMsCi0rCTB4MGEsMHhjYiwweDY3LDB4MzcsMHgxNywweGEw LDB4ZDIsMHhmYiwweDNiLDB4NTAsMHhjOCwweDkzLAotKwkweGY3LDB4ZGEsMHhiMSwweDRmCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3ByaXZfa2V5 W10gPSB7Ci0rCTB4MGMsMHg0YiwweDMwLDB4ODksMHhkMSwweGI4LDB4NjIsMHhjYiwweDNjLDB4 NDMsMHg2NCwweDkxLAotKwkweGYwLDB4OTEsMHg1NCwweDcwLDB4YzUsMHgyNywweDk2LDB4ZTMs MHhhYywweGJlLDB4ZTgsMHgwMCwKLSsJMHhlYywweDU1LDB4ZjYsMHhjYwotK307Ci0rCi0rc3Rh dGljIGludCBjb3JydXB0X2RzYTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQotKyAgICB7 Ci0rICAgIGNvcnJ1cHRfZHNhID0gMTsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Rz YSgpCi0rCXsKLSsJRFNBICpkc2EgPSBOVUxMOwotKwlFVlBfUEtFWSAqcGsgPSBOVUxMOwotKwlp bnQgcmV0ID0gMDsKLSsKLSsJZHNhID0gRFNBX25ldygpOwotKwotKwlpZihkc2EgPT0gTlVMTCkK LSsJCWdvdG8gZXJyOwotKwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHAsIGRzYV90 ZXN0XzIwNDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHEsIGRzYV90ZXN0XzIw NDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIGcsIGRzYV90ZXN0XzIwNDgpOwot KwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHB1Yl9rZXksIGRzYV90ZXN0XzIwNDgpOwot KwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHByaXZfa2V5LCBkc2FfdGVzdF8yMDQ4KTsK LSsKLSsJaWYgKGNvcnJ1cHRfZHNhKQotKwkJQk5fc2V0X2JpdChkc2EtPnB1Yl9rZXksIDIwNDcp OwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0r Ci0rCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAotKwkJCQkJTlVMTCwgMCwgRVZQX3NoYTI1NigpLCAw LAotKwkJCQkJIkRTQSBTSEEyNTYiKSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwotKwll cnI6Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChkc2EpCi0r CQlEU0FfZnJlZShkc2EpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2ZpcHMvZmlwc19lbmMuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2Zp cHNfZW5jLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MjM1MjM3MyArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4z NDIzNTIzNzMgKzAyMDAKLUBAIC0wLDAgKzEsMTkxIEBACi0rLyogZmlwZS9ldnAvZmlwc19lbmMu YyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNv ZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2Ug aXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFz IHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBp cyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwot KyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJp YnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsg bm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVk ZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdo dCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywg YW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5v dCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVj dCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0 aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGlu IHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAq IGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBw YWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl Ci0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJp YyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFw aGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAq ICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQu IElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2 ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24g Y29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMg WU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ U0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAq IAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNh bGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fu bm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29w aWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNs dWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlv Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStj b25zdCBFVlBfQ0lQSEVSICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKQotKwl7Ci0rCXN3 aXRjaCAobmlkKQotKwkJewotKwkJY2FzZSBOSURfYWVzXzEyOF9jYmM6Ci0rCQlyZXR1cm4gRVZQ X2Flc18xMjhfY2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2NjbToKLSsJCXJldHVybiBF VlBfYWVzXzEyOF9jY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2ZiMToKLSsJCXJldHVy biBFVlBfYWVzXzEyOF9jZmIxKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoKLSsJ CXJldHVybiBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2Zi ODoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4 X2N0cjoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18x MjhfZWNiOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2VjYigpOwotKwotKwkJY2FzZSBOSURfYWVz XzEyOF9nY206Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfZ2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9h ZXNfMTI4X29mYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9vZmIoKTsKLSsKLSsJCWNhc2Ug TklEX2Flc18xMjhfeHRzOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOwotKwotKwkJY2Fz ZSBOSURfYWVzXzE5Ml9jYmM6Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJfY2JjKCk7Ci0rCi0rCQlj YXNlIE5JRF9hZXNfMTkyX2NjbToKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jY20oKTsKLSsKLSsJ CWNhc2UgTklEX2Flc18xOTJfY2ZiMToKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxKCk7Ci0r Ci0rCQljYXNlIE5JRF9hZXNfMTkyX2NmYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIx MjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY2ZiODoKLSsJCXJldHVybiBFVlBfYWVzXzE5 Ml9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKLSsJCXJldHVybiBFVlBfYWVz XzE5Ml9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfZWNiOgotKwkJcmV0dXJuIEVWUF9h ZXNfMTkyX2VjYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9nY206Ci0rCQlyZXR1cm4gRVZQ X2Flc18xOTJfZ2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKLSsJCXJldHVy biBFVlBfYWVzXzE5Ml9vZmIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2JjOgotKwkJcmV0 dXJuIEVWUF9hZXNfMjU2X2NiYygpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jY206Ci0rCQly ZXR1cm4gRVZQX2Flc18yNTZfY2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NmYjE6Ci0r CQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmIx Mjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMTI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MjU2X2NmYjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwotKwkJY2FzZSBOSURf YWVzXzI1Nl9jdHI6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7Ci0rCi0rCQljYXNlIE5J RF9hZXNfMjU2X2VjYjoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9lY2IoKTsKLSsKLSsJCWNhc2Ug TklEX2Flc18yNTZfZ2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2djbSgpOwotKwotKwkJY2Fz ZSBOSURfYWVzXzI1Nl9vZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfb2ZiKCk7Ci0rCi0r CQljYXNlIE5JRF9hZXNfMjU2X3h0czoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl94dHMoKTsKLSsK LSsJCWNhc2UgTklEX2Rlc19lZGVfZWNiOgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlKCk7Ci0rCi0r CQljYXNlIE5JRF9kZXNfZWRlM19lY2I6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzKCk7Ci0rCi0r CQljYXNlIE5JRF9kZXNfZWRlM19jYmM6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NiYygpOwot KwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiMToKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2Zi MSgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6Ci0rCQlyZXR1cm4gRVZQX2Rlc19l ZGUzX2NmYjY0KCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlM19jZmI4OgotKwkJcmV0dXJuIEVW UF9kZXNfZWRlM19jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlM19vZmI2NDoKLSsJCXJl dHVybiBFVlBfZGVzX2VkZTNfb2ZiKCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlX2NiYzoKLSsJ CXJldHVybiBFVlBfZGVzX2VkZV9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfY2ZiNjQ6 Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2ZiNjQoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVf b2ZiNjQ6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGVfb2ZiKCk7Ci0rCi0rCQlkZWZhdWx0OgotKwkJ cmV0dXJuIE5VTEw7Ci0rCi0rCQl9Ci0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHMuaAot LS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTItMDctMTIgMjE6 NDk6MjUuMzQyMzUyMzczICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlw cy5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzQyMzUyMzczICswMjAwCi1AQCAtMCwwICsxLDI3OSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPHN0ZGFy Zy5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2Vycm9yIEZJUFMgaXMgZGlzYWJsZWQu Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1c3Bs dXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLStzdHJ1Y3QgZHNhX3N0OwotK3N0cnVjdCBy c2Ffc3Q7Ci0rc3RydWN0IGV2cF9wa2V5X3N0OwotK3N0cnVjdCBlbnZfbWRfc3Q7Ci0rc3RydWN0 IGVudl9tZF9jdHhfc3Q7Ci0rc3RydWN0IGV2cF9jaXBoZXJfc3Q7Ci0rc3RydWN0IGV2cF9jaXBo ZXJfY3R4X3N0OwotK3N0cnVjdCBkaF9tZXRob2Q7Ci0rc3RydWN0IENNQUNfQ1RYX3N0OwotK3N0 cnVjdCBobWFjX2N0eF9zdDsKLSsKLStpbnQgRklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2Zm LCBjb25zdCBjaGFyICphdXRoKTsKLStpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKTsKLStjb25z dCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Qodm9pZCk7 Ci0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3No YTEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKLStpbnQgRklQU19zZWxm dGVzdF9zaGEyKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lkKTsKLStpbnQgRklQ U19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9p ZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVz dF9hZXModm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOwotK2ludCBGSVBTX3Nl bGZ0ZXN0X2Rlcyh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7Ci0rdm9pZCBG SVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9yc2Eodm9p ZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Rz YV9rZXlnZW4odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOwotK3ZvaWQgRklQ U19jb3JydXB0X3JuZyh2b2lkKTsKLSt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpOwotK3ZvaWQg RklQU194OTMxX3N0aWNrKGludCBvbm9mZik7Ci0rdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9u b2ZmKTsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rf eDkzMSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9obWFjKHZvaWQpOwotK2ludCBGSVBTX3Nl bGZ0ZXN0X2RyYmcodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3RfY21hYyh2b2lkKTsKLSsKLSt2b2lkIEZJUFNfZ2V0X3RpbWV2ZWMo dW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3RyKTsKLSsKLSsjZGVmaW5lIEZJ UFNfRVJST1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0r CQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdvcml0aG0gZXJyb3IgaWdub3JlZCIp OwotKwotK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5X3N0ICpw a2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJCQljb25z dCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29uc3Qgc3Ry dWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0rCQkJY29uc3Qg Y2hhciAqZmFpbF9zdHIpOwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBfY2lw aGVyX2N0eF9zdCAqY3R4LAotKwkJCWNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBoZXIs Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg Kml2LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKLSsJCQljb25zdCB1bnNp Z25lZCBjaGFyICpjaXBoZXJ0ZXh0LAotKwkJCWludCBsZW4pOwotKwotK3ZvaWQgZmlwc19zZXRf c2VsZnRlc3RfZmFpbCh2b2lkKTsKLSsKLStjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dl dF9kaWdlc3RieW5pZChpbnQgbmlkKTsKLSsKLStjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAq RklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7Ci0rCi0rCi0rLyogQkVHSU4gRVJST1IgQ09E RVMgKi8KLSsvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUg c2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBt YXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotKyAqLwotK3Zv aWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOwotKwotKy8qIEVycm9yIGNvZGVzIGZvciB0 aGUgRklQUyBmdW5jdGlvbnMuICovCi0rCi0rLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmlu ZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJCQkgMTAwCi0rI2RlZmluZSBGSVBTX0ZfREhf SU5JVAkJCQkJIDE0OAotKyNkZWZpbmUgRklQU19GX0RSQkdfUkVTRUVECQkJCSAxNjIKLSsjZGVm aW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMDEKLSsjZGVmaW5lIEZJUFNfRl9E U0FfQlVJTFRJTl9QQVJBTUdFTjIJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04J CQkJIDEwMgotKyNkZWZpbmUgRklQU19GX0RTQV9ET19WRVJJRlkJCQkJIDEwMwotKyNkZWZpbmUg RklQU19GX0VDREhfQ09NUFVURV9LRVkJCQkJIDE2MwotKyNkZWZpbmUgRklQU19GX0VDRFNBX0RP X1NJR04JCQkJIDE2NAotKyNkZWZpbmUgRklQU19GX0VDRFNBX0RPX1ZFUklGWQkJCQkgMTY1Ci0r I2RlZmluZSBGSVBTX0ZfRUNfS0VZX0dFTkVSQVRFX0tFWQkJCSAxNjYKLSsjZGVmaW5lIEZJUFNf Rl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKLSsjZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5J VF9FWAkJCSAxMjUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQQkJCQkgMTA0Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0FfUFJORwkJCSAxNTEKLSsjZGVmaW5lIEZJUFNfRl9G SVBTX0NIRUNLX0VDCQkJCSAxNDIKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDX1BSTkcJ CQkgMTUyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJCSAx MDUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkgMTA2Ci0rI2RlZmluZSBGSVBT X0ZfRklQU19DSEVDS19SU0FfUFJORwkJCSAxNTAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhF UgkJCQkgMTYwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJJTklUCQkJCSAxNDMKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX0NJUEhFUl9DVFhfQ1RSTAkJCSAxNjEKLSsjZGVmaW5lIEZJUFNfRl9G SVBTX0RJR0VTVEZJTkFMCQkJCSAxNTgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVElOSVQJ CQkJIDEyOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUVVBEQVRFCQkJIDE1OQotKyNkZWZp bmUgRklQU19GX0ZJUFNfRFJCR19CWVRFUwkJCQkgMTMxCi0rI2RlZmluZSBGSVBTX0ZfRklQU19E UkJHX0NIRUNLCQkJCSAxNDYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVAkJ CSAxMzIKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0sJCQkgMTM2Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFCQkJIDEzNAotKyNkZWZpbmUgRklQU19GX0ZJ UFNfRFJCR19JTklUCQkJCSAxMzUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElB VEUJCQkgMTM4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX05FVwkJCQkgMTM5Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19EUkJHX1JFU0VFRAkJCQkgMTQwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19E UkJHX1NJTkdMRV9LQVQJCQkgMTQxCi0rI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sJCS8q IHVudXNlZCAqLwkgMTA3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfU0lHTl9ESUdFU1QJCQkg MTU0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfVkVSSUZZX0RJR0VTVAkJCSAxNTUKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZCQkJCSAxNDcKLSsjZGVmaW5lIEZJUFNfRl9GSVBT X01PREVfU0VUCQkvKiB1bnVzZWQgKi8JIDEwOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9EVUxF X01PREVfU0VUCQkJIDEwOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVT VAkJCSAxMDkKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQURECQkJCSAxMzcKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEyMgotKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFO RF9QU0VVRE9fQllURVMJCQkgMTY3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFRUQJCQkJ IDE2OAotKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRVRfTUVUSE9ECQkJIDEyNgotKyNkZWZp bmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMJCQkJIDEyNwotKyNkZWZpbmUgRklQU19GX0ZJUFNf UlNBX1NJR05fRElHRVNUCQkJIDE1NgotKyNkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1ZFUklGWV9E SUdFU1QJCQkgMTU3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMJCQkgMTEwCi0r I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNCQkJIDE0NQotKyNkZWZpbmUgRklQ U19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTQkJCSAxMjkKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NF TEZURVNUX0FFU19YVFMJCQkgMTQ0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9DTUFD CQkJIDEzMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQotKyNkZWZp bmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgotKyNkZWZpbmUgRklQU19GX0ZJUFNf U0VMRlRFU1RfRUNEU0EJCQkgMTMzCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFD CQkJIDExMwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HCS8qIHVudXNlZCAqLwkg MTE0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExCQkJIDExNQotKyNkZWZpbmUg RklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMQkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NF VF9QUk5HX0tFWQkJCSAxNTMKLSsjZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMKLSsj ZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTE2Ci0rI2RlZmluZSBGSVBTX0Zf UlNBX0VBWV9JTklUCQkJCSAxNDkKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVD UllQVAkJCSAxMTcKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAx MTgKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJIDExOQotKyNkZWZp bmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkgMTIwCi0rI2RlZmluZSBGSVBTX0Zf UlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEyMQotKyNkZWZpbmUgRklQU19GX1NTTEVBWV9S QU5EX0JZVEVTCS8qIHVudXNlZCAqLwkgMTIyCi0rCi0rLyogUmVhc29uIGNvZGVzLiAqLwotKyNk ZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRAkgMTUwCi0rI2Rl ZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORwkJIDEyNQotKyNkZWZpbmUgRklQ U19SX0FMUkVBRFlfSU5TVEFOVElBVEVECQkJIDEzNAotKyNkZWZpbmUgRklQU19SX0FVVEhFTlRJ Q0FUSU9OX0ZBSUxVUkUJCQkgMTUxCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFCQkv KiB1bnVzZWQgKi8JIDEwMwotKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QJ LyogdW51c2VkICovCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNF CQkJIDExNAotKyNkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VECQkJIDE1MgotKyNk ZWZpbmUgRklQU19SX0RSQkdfU1RVQ0sJCQkJIDEwMwotKyNkZWZpbmUgRklQU19SX0VOVFJPUFlf RVJST1JfVU5ERVRFQ1RFRAkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9FTlRST1BZX05PVF9SRVFV RVNURURfRk9SX1JFU0VFRAkJIDEwNQotKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfU09VUkNFX1NU VUNLCQkJIDE0MgotKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDEx NQotKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMjcKLSsjZGVm aW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxfSU5QVVQJIDEyNAotKyNkZWZp bmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWQkJCSAxMjIKLSsjZGVmaW5lIEZJUFNf Ul9FUlJPUl9SRVRSSUVWSU5HX05PTkNFCQkJIDE0MAotKyNkZWZpbmUgRklQU19SX0VYRV9ESUdF U1RfRE9FU19OT1RfTUFUQ0ggICAvKiB1bnVzZWQgKi8JIDEwNQotKyNkZWZpbmUgRklQU19SX0ZJ TkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkgMTEwCi0rI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJ TlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSsjZGVmaW5lIEZJUFNfUl9G SU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDExMgotKyNkZWZpbmUg RklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKLSsjZGVmaW5lIEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfUl9GVU5DVElPTl9FUlJPUgkJ CQkgMTE2Ci0rI2RlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJST1IJCQkJIDEzNwotKyNkZWZpbmUg RklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQJCSAxMTgKLSsjZGVmaW5lIEZJUFNfUl9J TlNUQU5USUFURV9FUlJPUgkJCSAxMTkKLSsjZGVmaW5lIEZJUFNfUl9JTlNVRkZJQ0lFTlRfU0VD VVJJVFlfU1RSRU5HVEgJCSAxMjAKLSsjZGVmaW5lIEZJUFNfUl9JTlRFUk5BTF9FUlJPUgkJCQkg MTIxCi0rI2RlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RICQkJIDEwOQotKyNkZWZpbmUg RklQU19SX0lOVkFMSURfUEFSQU1FVEVSUwkJCSAxNDQKLSsjZGVmaW5lIEZJUFNfUl9JTl9FUlJP Ul9TVEFURQkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJCQkgMTA4Ci0r I2RlZmluZSBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRAkJCSAxNDkKLSsjZGVmaW5lIEZJ UFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMAotKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDFf RkFJTFVSRQkJCSAxNDUKLSsjZGVmaW5lIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUJCQkgMTQ2 Ci0rI2RlZmluZSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRAkJCQkgMTI2Ci0rI2RlZmluZSBGSVBT X1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX1JfUEVSU09OQUxJ U0FUSU9OX0VSUk9SX1VOREVURUNURUQJCSAxMjgKLSsjZGVmaW5lIEZJUFNfUl9QRVJTT05BTElT QVRJT05fU1RSSU5HX1RPT19MT05HCQkgMTI5Ci0rI2RlZmluZSBGSVBTX1JfUFJOR19TVFJFTkdU SF9UT09fTE9XCQkJIDE0MwotKyNkZWZpbmUgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUJCQkJIDE0 NwotKyNkZWZpbmUgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUJCQkJIDE0OAotKyNkZWZpbmUgRklQ U19SX1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQJCSAxMzAKLSsjZGVmaW5lIEZJUFNf Ul9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRwkJIDEzMQotKyNkZWZpbmUgRklQU19SX1JFU0VF RF9DT1VOVEVSX0VSUk9SCQkJIDEzMgotKyNkZWZpbmUgRklQU19SX1JFU0VFRF9FUlJPUgkJCQkg MTMzCi0rI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IJLyogdW51c2VkICovCSAxMTUK LSsjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNgotKyNk ZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCi0rI2RlZmluZSBGSVBTX1JfU0VM RlRFU1RfRkFJTFVSRQkJCQkgMTM1Ci0rI2RlZmluZSBGSVBTX1JfU1RSRU5HVEhfRVJST1JfVU5E RVRFQ1RFRAkJIDEzNgotKyNkZWZpbmUgRklQU19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3Ci0rI2Rl ZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUgkJCSAxNDEKLSsjZGVmaW5lIEZJUFNfUl9V TklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IJCSAxMzgKLSsjZGVmaW5lIEZJUFNfUl9VTlNVUFBP UlRFRF9EUkJHX1RZUEUJCQkgMTM5Ci0rI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZP Uk0JCQkgMTEzCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKLS0t LSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIw MTItMDctMTIgMjE6NDk6MjUuMzQyMzUyMzczICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDIzNTIz NzMgKzAyMDAKLUBAIC0wLDAgKzEsMTM3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0eXBlZGVm IHN0cnVjdCB7Ci0rCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOwotKwljb25zdCBjaGFyICpr ZXksICppdjsKLSsJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwotK30gSE1B Q19LQVQ7Ci0rCi0rc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7CUVW UF9zaGExLAotKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBz L2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwki U2FtcGxlICMyIiwKLSsJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4MTks Ci0rCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAotKwkgIDB4YzYs MHhjNywweDVkLDB4MjQgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyMjQsCi0rCS8qIGp1c3Qg a2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIs Ci0rCSJTYW1wbGUgIzIiLAotKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4NTAs MHhmYiwKLSsJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCi0rCSAg MHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAotKwkgIDB4OGMsMHg4ZCww eDEyLDB4YzcgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyNTYsCi0rCSIwMTIzNDU2Nzg5Ojs8 PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0MSww eGVhLDB4NDMsMHgwOSwKLSsJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4LDB4 MzQsCi0rCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAotKwkgIDB4 MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9Ci0rICAgIH0sCi0rICAgIHsJ RVZQX3NoYTM4NCwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0r CXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAotKwkgIDB4OWEsMHgx ZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKLSsJICAweGI3LDB4MTgsMHgwNiwweGE1 LDB4NzcsMHhjZCwweDQ5LDB4MDQsCi0rCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4NTEs MHg1MSwweDlmLAotKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1MCwK LSsJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQotKyAgICB9LAot KyAgICB7CUVWUF9zaGE1MTIsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUg IzIiLAotKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKLSsJICAw eDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCi0rCSAgMHg0NCwweGQ1LDB4 YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAotKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIsMHhj MCwweDkwLDB4NzcsMHg2OCwKLSsJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSwweDJj LDB4MmYsCi0rCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAotKwkg IDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKLSsJICAweGJkLDB4NGYs MHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQotKyAgICB9LAotK307Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfaG1hYygpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIHVuc2lnbmVkIGlu dCAgICBvdXRsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpFXTsK LSsgICAgY29uc3QgRVZQX01EICAgKm1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsKLSsg ICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBdKTsg bisrLHQrKykKLSsJewotKwltZCA9ICgqdC0+YWxnKSgpOwotKwlITUFDKG1kLHQtPmtleSxzdHJs ZW4odC0+a2V5KSwKLSsJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQtPml2 KSwKLSsJCW91dCwmb3V0bGVuKTsKLSsKLSsJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRsZW4p KQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAg cmV0dXJuIDE7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0 by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19s b2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzCTIw MTItMDctMTIgMjE6NDk6MjUuMzQzMzUyMzk1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDMzNTIzOTUgKzAyMDAK LUBAIC0wLDAgKzEsNzEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAx MSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl 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 RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNl bmRpZgotKwotKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkzMgotKyNkZWZpbmUg Zmlwc19sb2FkX2tleV9jb21wb25lbnQoa2V5LCBjb21wLCBwcmUpIFwKLSsJa2V5LT5jb21wID0g Qk5fYmluMmJuKHByZSMjXyMjY29tcCwgc2l6ZW9mKHByZSMjXyMjY29tcCksIGtleS0+Y29tcCk7 IFwKLSsJaWYgKCFrZXktPmNvbXApIFwKLSsJCWdvdG8gZXJyCi0rCi0rI2RlZmluZSBmaXBzX3Bv c3Rfc3RhcnRlZChpZCwgc3ViaWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3Rfc3VjY2Vzcyhp ZCwgc3ViaWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwgZXgp IDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJpZCwgZXgpIDEKLSsjZGVmaW5l IGZpcHNfcG9zdF9zdGF0dXMoKSAxCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5k aWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfbWQu Yy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfbWQuYwotLS0tIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQz MzUyMzk1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19tZC5jCTIw MTItMDctMTIgMjE6NDk6MjUuMzQzMzUyMzk1ICswMjAwCi1AQCAtMCwwICsxLDE0NSBAQAotKy8q IGZpcHMvZXZwL2ZpcHNfbWQuYyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMg WW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBi eSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9u IHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAot KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lh bCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJl ZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZv dW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gs IERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVu dGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5 IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMg VGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1h aW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0r ICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBp cyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRp b24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgot KyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dy YW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBw cm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdh cmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRo ZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJv bSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJl bGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNv ZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVj dG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRp bSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAq IFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVy bXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2 ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qg c2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24g bGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNTTCBQ 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 VFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVj dCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwot KyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg d3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAq LwotKwotKy8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZlcnNpb25zIG9mIERpZ2VzdCBvcGVy YXRpb25zICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8c3Rk aW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStjb25zdCBFVlBfTUQgKkZJUFNfZ2V0X2Rp Z2VzdGJ5bmlkKGludCBuaWQpCi0rCXsKLSsJc3dpdGNoIChuaWQpCi0rCQl7Ci0rCQljYXNlIE5J RF9zaGExOgotKwkJcmV0dXJuIEVWUF9zaGExKCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEyMjQ6Ci0r CQlyZXR1cm4gRVZQX3NoYTIyNCgpOwotKwotKwkJY2FzZSBOSURfc2hhMjU2OgotKwkJcmV0dXJu IEVWUF9zaGEyNTYoKTsKLSsKLSsJCWNhc2UgTklEX3NoYTM4NDoKLSsJCXJldHVybiBFVlBfc2hh Mzg0KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGE1MTI6Ci0rCQlyZXR1cm4gRVZQX3NoYTUxMigpOwot KwotKwkJZGVmYXVsdDoKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKwl9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHNfcG9zdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlw c19wb3N0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MzM1MjM5NSArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIwMTItMDctMTIgMjE6NDk6MjUu MzQzMzUyMzk1ICswMjAwCi1AQCAtMCwwICsxLDIwNSBAQAotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgot KyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBQ b3dlciBvbiBzZWxmIHRlc3QgKFBPU1QpIHN1cHBvcnQgZnVuY3Rpb25zICovCi0rCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsvKiBSdW4g YWxsIHNlbGZ0ZXN0cyAqLwotK2ludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJ2 ID0gMTsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFG SVBTX3NlbGZ0ZXN0X3g5MzEoKSkKLSsJCXJ2ID0gMDsKLSsgICAgCWlmICghRklQU19zZWxmdGVz dF9zaGExKCkpCi0rCQlydiA9IDA7Ci0rICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMigpKQot KwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfaG1hYygpKQotKwkJcnYgPSAwOwotKwlp ZiAoIUZJUFNfc2VsZnRlc3RfY21hYygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRl c3RfYWVzKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9hZXNfY2NtKCkpCi0r CQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9hZXNfZ2NtKCkpCi0rCQlydiA9IDA7Ci0r CWlmICghRklQU19zZWxmdGVzdF9hZXNfeHRzKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19z ZWxmdGVzdF9kZXMoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgpKQot KwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfZHNhKCkpCi0rCQlydiA9IDA7Ci0rCXJl dHVybiBydjsKLSsJfQotKwotKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0aW5l LiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKLSsgKiBzdXBwbGllZCBpbiB0YnMgdXNpbmcg bWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0Ci0rICogZmxhZ3MgbWRf ZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAotKyAqIGFk ZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5zd2Vy IHRlc3QKLSsgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmljYXRp b24gcHVycG9zZXMgaW4gY2FzZQotKyAqIG9mIGZhaWx1cmUuIElmICJwa2V5IiBpcyBOVUxMIGp1 c3QgcGVyZm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgotKyAqLwotKwotK2ludCBmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWdu ZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1k X2ZsYWdzLAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQotKwl7CQotKwlpbnQgcmV0ID0gMDsK LSsJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKLSsJdW5zaWduZWQg aW50IHNpZ2xlbjsKLSsJRVZQX01EX0NUWCBtY3R4OwotKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgp OwotKwotKwlpZiAoZGlnZXN0ID09IE5VTEwpCi0rCQlkaWdlc3QgPSBFVlBfc2hhMjU2KCk7Ci0r Ci0rCWlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCi0rCQkmJiAoUlNBX3NpemUocGtl eS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKQotKwkJewotKwkJc2lnID0gT1BFTlNTTF9t YWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKLSsJCWlmICghc2lnKQotKwkJCXsKLSsJ CQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9DX0ZB SUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsKLSsJaWYgKHRic2xlbiA9PSAt MSkKLSsJCXRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7Ci0rCi0rCWlmIChtZF9mbGFncykK LSsJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFncyk7Ci0rCi0rCWlmICghRVZQ X1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYg KCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJ aWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4sIHBrZXkpKQotKwkJZ290byBl cnJvcjsKLSsKLSsJaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQs IHNpZywga2F0bGVuKSkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUVWUF9WZXJpZnlJbml0 X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfVmVy aWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlyZXQgPSBF VlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5KTsKLSsKLSsJZXJyb3I6Ci0r CWlmIChzaWcgIT0gc2lndG1wKQotKwkJT1BFTlNTTF9mcmVlKHNpZyk7Ci0rCUVWUF9NRF9DVFhf Y2xlYW51cCgmbWN0eCk7Ci0rCWlmIChyZXQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9GQUlMVVJFKTsKLSsJCWlmIChm YWlsX3N0cikKLSsJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIpOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQg c3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3Vs dAotKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3Jp Z2luYWwgcGxhaW50ZXh0LgotKyAqLwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBI RVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25l ZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5z aWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRl eHQsCi0rCQkJaW50IGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFYX0NJ UEhFUl9URVNUX1NJWkVdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9U RVNUX1NJWkVdOwotKwotKwlPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RF U1RfU0laRSk7Ci0rCW1lbXNldChwbHRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7 Ci0rCW1lbXNldChjaXRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCi0rCWlm IChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkK LSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxl bikgPD0gMCkKLSsJCXJldHVybiAwOwotKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBs ZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwg TlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlcihj dHgsIHBsdG1wLCBjaXRtcCwgbGVuKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChtZW1jbXAo cGx0bXAsIHBsYWludGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlyZXR1cm4gMTsKLSsJfQot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwotLS0tIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4z NDMzNTIzOTUgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmQu YwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0MzM1MjM5NSArMDIwMAotQEAgLTAsMCArMSw0NTcgQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKgotKyAqIFRoaXMgaXMgYSBGSVBTIGFw cHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCi0rICovCi0rI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsvKiBJZiB3ZSBk b24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QK LSsgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRo IHN0cmljdCBjb21waWxlcnMKLSsgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KLSsj aWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKLSsjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhU RU5ERUQgMQotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaWYgIShkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8 fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpKQotKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4K LSsjZW5kaWYKLSsjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQotKyMgaW5jbHVkZSA8 dGltZS5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaWZuZGVmIE9QRU5TU0xf U1lTX1dJTjMyCi0rIyBpZmRlZiBPUEVOU1NMX1VOSVNURAotKyMgIGluY2x1ZGUgT1BFTlNTTF9V TklTVEQKLSsjIGVsc2UKLSsjICBpbmNsdWRlIDx1bmlzdGQuaD4KLSsjIGVuZGlmCi0rI2VuZGlm Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5j bHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3ZvaWQgKk9Q RU5TU0xfc3RkZXJyKHZvaWQpOwotKwotKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSAkxNgotKwot KwotKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8KLSsKLSt0eXBlZGVmIHN0cnVj dCAKLSsJewotKwlpbnQgc2VlZGVkOwotKwlpbnQga2V5ZWQ7Ci0rCWludCB0ZXN0X21vZGU7Ci0r CWludCBzZWNvbmQ7Ci0rCWludCBlcnJvcjsKLSsJdW5zaWduZWQgbG9uZyBjb3VudGVyOwotKwlB RVNfS0VZIGtzOwotKwlpbnQgdnBvczsKLSsJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBp ZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KLSsJdW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19C TE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVu c2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgbGFzdFtB RVNfQkxPQ0tfTEVOR1RIXTsKLSsJfSBGSVBTX1BSTkdfQ1RYOwotKwotK3N0YXRpYyBGSVBTX1BS TkdfQ1RYIHNjdHg7Ci0rCi0rc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7Ci0rCi0rdm9p ZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQotKwl7Ci0rCWZpcHNfcHJuZ19mYWlsID0gb25v ZmY7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCi0rCXsKLSsJRklQU194OTMx X3N0aWNrKDEpOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQ U19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJY3R4LT5rZXllZCA9 IDA7Ci0rCWN0eC0+dGVzdF9tb2RlID0gMDsKLSsJY3R4LT5jb3VudGVyID0gMDsKLSsJY3R4LT5z ZWNvbmQgPSAwOwotKwljdHgtPmVycm9yID0gMDsKLSsJY3R4LT52cG9zID0gMDsKLSsJT1BFTlNT TF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCU9QRU5TU0xfY2xlYW5zZSgm Y3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKLSsJfQotKwkKLSsKLStzdGF0aWMgaW50IGZpcHNf c2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCi0rCXsKLSsJaWYgKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWSwgRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKGtleWxlbiAhPSAx NiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQotKwkJewotKwkJLyogZXJyb3I6IGlu dmFsaWQga2V5IHNpemUgKi8KLSsJCXJldHVybiAwOwotKwkJfQotKwlBRVNfc2V0X2VuY3J5cHRf a2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKLSsJaWYgKGtleWxlbiA9PSAxNikKLSsJ CXsKLSsJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOwotKwkJY3R4LT5rZXllZCA9IDI7 Ci0rCQl9Ci0rCWVsc2UKLSsJCWN0eC0+a2V5ZWQgPSAxOwotKwljdHgtPnNlZWRlZCA9IDA7Ci0r CWN0eC0+c2Vjb25kID0gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNf c2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqc2VlZCwgdW5zaWduZWQgaW50IHNlZWRsZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGk7Ci0r CWlmICghY3R4LT5rZXllZCkKLSsJCXJldHVybiAwOwotKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBp cyBqdXN0IHN1cHBsaWVkIGRhdGEgKi8KLSsJaWYgKGN0eC0+dGVzdF9tb2RlKQotKwkJewotKwkJ aWYgKHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQlyZXR1cm4gMDsKLSsJCW1lbWNw eShjdHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJY3R4LT5zZWVkZWQgPSAxOwot KwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBk YXRhIHdpdGggZXhpc3Rpbmcgc2VlZCAqLwotKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsr KQotKwkJewotKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOwotKwkJaWYgKGN0eC0+ dnBvcyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQljdHgtPnZwb3MgPSAwOwotKwkJ CS8qIFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscwotKyAJ CQkgKiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCi0rIAkJCSAq LyAKLSsJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQotKwkJCQl7Ci0rCQkJCWlmICghbWVtY21wKGN0 eC0+dG1wX2tleSwgY3R4LT5WLCAxNikpCi0rCQkJCQl7Ci0rCQkJCQlSQU5EZXJyKFJBTkRfRl9G SVBTX1NFVF9QUk5HX1NFRUQsCi0rCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRD SF9LRVkpOwotKwkJCQkJcmV0dXJuIDA7Ci0rCQkJCQl9Ci0rCQkJCU9QRU5TU0xfY2xlYW5zZShj dHgtPnRtcF9rZXksIDE2KTsKLSsJCQkJY3R4LT5rZXllZCA9IDE7Ci0rCQkJCX0KLSsJCQljdHgt PnNlZWRlZCA9IDE7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBp bnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwlpZiAoY3R4 LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5E X1JfUFJOR19LRVlFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJY3R4LT50ZXN0X21vZGUgPSAx OwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpCi0r CXsKLSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7Ci0rCX0KLSsKLStpbnQgRklQ U19yYW5kX3Rlc3RfbW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUo JnNjdHgpOwotKwl9Ci0rCi0rCi0raW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAq ZHQpCi0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9G X0ZJUFNfWDkzMV9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCi0r CXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNf UkFORF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9 Ci0rCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAxOwot Kwl9Ci0rCi0rdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWdu ZWQgbG9uZyAqcGN0cikKLSsJewotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlGSUxFVElN RSBmdDsKLSsjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rICAgICAgICBzdHJ1 Y3QgdGltZXNwZWMgdHM7Ci0rI2Vsc2UKLSsJc3RydWN0IHRpbWV2YWwgdHY7Ci0rI2VuZGlmCi0r Ci0rI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJdW5zaWduZWQgbG9uZyBwaWQ7Ci0r I2VuZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUdldFN5c3RlbVRpbWVBc0Zp bGVUaW1lKCZmdCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRp bWUgJiAweGZmKTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRp bWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdo RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0 LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKwlidWZbNF0gPSAodW5zaWduZWQgY2hh cikgKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKLSsJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIp ICgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAodW5zaWduZWQg Y2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAodW5z aWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyNlbGlmIGRl ZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElN RSwgJnRzKTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9zZWMgJiAweGZmKTsK LSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDgpICYgMHhmZik7Ci0r CWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAxNikgJiAweGZmKTsKLSsJ YnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOwotKwli dWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X25zZWMgJiAweGZmKTsKLSsJYnVmWzVdID0g KHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAo dW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAo dW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDI0KSAmIDB4ZmYpOwotKyNlbHNlCi0rCWdl dHRpbWVvZmRheSgmdHYsTlVMTCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZf c2VjICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4 KSAmIDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYp ICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkg JiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhmZik7 Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsK LSsJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsK LSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsK LSsjZW5kaWYKLSsJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpICgqcGN0ciAmIDB4ZmYpOwotKwli dWZbOV0gPSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTBd ID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlsxMV0gPSAo dW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiAyNCkgJiAweGZmKTsKLSsKLSsJKCpwY3RyKSsrOwot KwotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXBpZD0odW5zaWduZWQgbG9u ZylnZXRwaWQoKTsKLSsJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7Ci0r CWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzE0 XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzE1XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKLSsjZW5kaWYKLSsgICAgfQotKwot K3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQl1bnNpZ25lZCBj aGFyICpvdXQsIHVuc2lnbmVkIGludCBvdXRsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBSW0FF U19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIHRt cFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCWlmIChjdHgtPmVycm9yKQotKwkJewot KwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VSUk9SKTsKLSsJCXJldHVy biAwOwotKwkJfQotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9G SVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICgh Y3R4LT5zZWVkZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BS TkdfTk9UX1NFRURFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJZm9yICg7OykKLSsJCXsKLSsJ CWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJRklQU19nZXRfdGltZXZlYyhjdHgtPkRULCAmY3R4 LT5jb3VudGVyKTsKLSsJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKLSsJCWZv ciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1wW2ldID0gSVtpXSBe IGN0eC0+VltpXTsKLSsJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOwotKwkJZm9yIChp ID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBSW2ldIF4gSVtp XTsKLSsJCUFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7Ci0rCQkvKiBDb250aW51 b3VzIFBSTkcgdGVzdCAqLwotKwkJaWYgKGN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQlpZiAoZmlw c19wcm5nX2ZhaWwpCi0rCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgp OwotKwkJCWlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCi0rCQkJ CXsKLSsJICAgIAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7 Ci0rCQkJCWN0eC0+ZXJyb3IgPSAxOwotKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0r CQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJfQotKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVT X0JMT0NLX0xFTkdUSCk7Ci0rCQlpZiAoIWN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQljdHgtPnNl Y29uZCA9IDE7Ci0rCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQkJY29udGludWU7Ci0rCQkJ fQotKwotKwkJaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQltZW1j cHkob3V0LCBSLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsKLSsJCW1lbWNweShvdXQs IFIsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7Ci0rCQlv dXRsZW4gLT0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsK LStpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5 bGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7Ci0rCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2lu dCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9T SVpFX1Qga2V5bGVuKQotKwl7Ci0rCXJldHVybiBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxl bik7Ci0rCX0KLSsKLStpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNl ZWRsZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5E KTsKLSsJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsJ Q1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0r Ci0rCi0raW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkK LSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwly ZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOwotKwlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU194OTMxX3N0 YXR1cyh2b2lkKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tf UkFORCk7Ci0rCXJldCA9IHNjdHguc2VlZGVkOwotKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xP Q0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfeDkzMV9yZXNldCh2 b2lkKQotKwl7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWZpcHNfcmFu ZF9wcm5nX3Jlc2V0KCZzY3R4KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVk LCBpbnQgc2VlZGxlbikKLSsJewotKwlGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9p ZCAqc2VlZCwgaW50IHNlZWRsZW4sCi0rCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCi0rCXsKLSsJ RklQU194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3Rh dGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRoPQotKyAgICB7Ci0rICAgIGZpcHNf ZG9fcmFuZF9zZWVkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0rICAgIEZJUFNfeDkzMV9yZXNl dCwKLSsgICAgZmlwc19kb19yYW5kX2FkZCwKLSsgICAgRklQU194OTMxX2J5dGVzLAotKyAgICBG SVBTX3g5MzFfc3RhdHVzCi0rICAgIH07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkz MV9tZXRob2Qodm9pZCkKLSt7Ci0rICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOwotK30KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZp cHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQz MzUyMzk1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJ MjAxMi0wNy0xMiAyMTo0OToyNS4zNDMzNTIzOTUgKzAyMDAKLUBAIC0wLDAgKzEsMTQ1IEBACi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj 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 IFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gK LSsjZGVmaW5lIEhFQURFUl9GSVBTX1JBTkRfSAotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwot KyNpZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLStpbnQgRklQ U194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKTsKLStp bnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKLStpbnQgRklQU194 OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG91dGxlbik7Ci0rCi0raW50IEZJUFNf eDkzMV90ZXN0X21vZGUodm9pZCk7Ci0rdm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCk7Ci0raW50 IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwotKwotK2ludCBGSVBTX3g5MzFf c3RhdHVzKHZvaWQpOwotKwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZv aWQpOwotKwotK3R5cGVkZWYgc3RydWN0IGRyYmdfY3R4X3N0IERSQkdfQ1RYOwotKy8qIERSQkcg ZXh0ZXJuYWwgZmxhZ3MgKi8KLSsvKiBGbGFnIGZvciBDVFIgbW9kZSBvbmx5OiB1c2UgZGVyaXZh dGlvbiBmdW5jdGlvbiBjdHJfZGYgKi8KLSsjZGVmaW5lCURSQkdfRkxBR19DVFJfVVNFX0RGCQkw eDEKLSsvKiBQUk5HIGlzIGluIHRlc3Qgc3RhdGUgKi8KLSsjZGVmaW5lCURSQkdfRkxBR19URVNU CQkJMHgyCi0rCi0rRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGlu dCBmbGFncyk7Ci0raW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwg dW5zaWduZWQgaW50IGZsYWdzKTsKLStpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7 Ci0raW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKLStpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdf Q1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJaW50IHBy ZWRpY3Rpb25fcmVzaXN0YW5jZSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXpl X3QgYWRpbmxlbik7Ci0rCi0raW50IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpk Y3R4KTsKLSt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KTsKLSsKLStpbnQgRklQ U19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAoKmdldF9lbnRy b3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJv cHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVwX2Vu dHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAot KwlzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKLSsJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVfdCBt aW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCi0rCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSk7Ci0rCi0raW50IEZJUFNf ZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAoKmdldF9h ZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCi0rCXZvaWQgKCpjbGVh bnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4p LAotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1Ziwg aW50IG51bSksCi0rCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25z dCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSk7Ci0rCi0rdm9pZCAqRklQU19k cmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfYXBw X2RhdGEoRFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2RhdGEpOwotK3NpemVfdCBGSVBTX2RyYmdf Z2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKLStpbnQgRklQU19kcmJnX2dldF9zdHJl bmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0rdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFs KERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOwotK3ZvaWQgRklQU19kcmJnX3NldF9yZXNl ZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7Ci0rCi0raW50IEZJUFNf ZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgpOwotKwotK0RSQkdfQ1RYICpGSVBTX2dl dF9kZWZhdWx0X2RyYmcodm9pZCk7Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRo b2Qodm9pZCk7Ci0rCi0rCi0raW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVU SE9EICptZXRoKTsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9p ZCk7Ci0rCi0rdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKTsKLSsKLStpbnQgRklQ U19yYW5kX3N0cmVuZ3RoKHZvaWQpOwotKwotKy8qIDEuMC4wIGNvbXBhdCBmdW5jdGlvbnMgKi8K LStpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JB TkRfU0laRV9UIGtleWxlbik7Ci0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1Ziwg RklQU19SQU5EX1NJWkVfVCBudW0pOwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hh ciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7Ci0raW50IEZJUFNfcmFuZF90ZXN0X21v ZGUodm9pZCk7Ci0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7Ci0raW50IEZJUFNfcmFuZF9z ZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwotK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOwot K2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpOwotKwotKyNpZmRlZiAg X19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcyBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NDM1MjQxOCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAkyMDEy LTA3LTEyIDIxOjQ5OjI1LjM0NDM1MjQxOCArMDIwMAotQEAgLTAsMCArMSwyMTkgQEAKLSsvKiBm aXBzL3JhbmQvZmlwc19yYW5kX2xjbC5oICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4K LSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgot KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS Ci0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSt0eXBlZGVmIHN0 cnVjdCBkcmJnX2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7Ci0rdHlwZWRlZiBzdHJ1Y3QgZHJi Z19obWFjX2N0eF9zdCBEUkJHX0hNQUNfQ1RYOwotK3R5cGVkZWYgc3RydWN0IGRyYmdfY3RyX2N0 eF9zdCBEUkJHX0NUUl9DVFg7Ci0rCi0rLyogODg4IGJpdHMgZnJvbSAxMC4xIHRhYmxlIDIgKi8K LSsjZGVmaW5lIEhBU0hfUFJOR19NQVhfU0VFRExFTgkxMTEKLSsKLStzdHJ1Y3QgZHJiZ19oYXNo X2N0eF9zdAotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJ dW5zaWduZWQgY2hhciBWW0hBU0hfUFJOR19NQVhfU0VFRExFTl07Ci0rCXVuc2lnbmVkIGNoYXIg Q1tIQVNIX1BSTkdfTUFYX1NFRURMRU5dOwotKwkvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFnZTog c2hvdWxkIGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5ndGggKi8KLSsJdW5zaWduZWQgY2hh ciB2dG1wW0hBU0hfUFJOR19NQVhfU0VFRExFTl07Ci0rCX07Ci0rCi0rc3RydWN0IGRyYmdfaG1h Y19jdHhfc3QKLSsJewotKwljb25zdCBFVlBfTUQgKm1kOwotKwlITUFDX0NUWCBoY3R4OwotKwl1 bnNpZ25lZCBjaGFyIEtbRVZQX01BWF9NRF9TSVpFXTsKLSsJdW5zaWduZWQgY2hhciBWW0VWUF9N QVhfTURfU0laRV07Ci0rCX07Ci0rCi0rc3RydWN0IGRyYmdfY3RyX2N0eF9zdAotKwl7Ci0rCUFF U19LRVkga3M7Ci0rCXNpemVfdCBrZXlsZW47Ci0rCXVuc2lnbmVkIGNoYXIgS1szMl07Ci0rCXVu c2lnbmVkIGNoYXIgVlsxNl07Ci0rCS8qIFRlbXAgdmFyaWFibGVzIHVzZWQgYnkgZGVyaXZhdGlv biBmdW5jdGlvbiAqLwotKwlBRVNfS0VZIGRmX2tzOwotKwlBRVNfS0VZIGRmX2t4a3M7Ci0rCS8q IFRlbXBvcmFyeSBibG9jayBzdG9yYWdlIHVzZWQgYnkgY3RyX2RmICovCi0rCXVuc2lnbmVkIGNo YXIgYmx0bXBbMTZdOwotKwlzaXplX3QgYmx0bXBfcG9zOwotKwl1bnNpZ25lZCBjaGFyIEtYWzQ4 XTsKLSsJfTsKLSsKLSsvKiBEUkJHIGludGVybmFsIGZsYWdzICovCi0rCi0rLyogRnVuY3Rpb25z IHNob3VsZG4ndCBjYWxsIGVyciBsaWJyYXJ5ICovCi0rI2RlZmluZQlEUkJHX0ZMQUdfTk9FUlIJ CQkweDEKLSsvKiBDdXN0b20gcmVzZWVkIGNoZWNraW5nICovCi0rI2RlZmluZQlEUkJHX0NVU1RP TV9SRVNFRUQJCTB4MgotKwotKy8qIERSQkcgc3RhdHVzIHZhbHVlcyAqLwotKy8qIG5vdCBpbml0 aWFsaXNlZCAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRAkwCi0rLyogb2sg YW5kIHJlYWR5IHRvIGdlbmVyYXRlIHJhbmRvbSBiaXRzICovCi0rI2RlZmluZSBEUkJHX1NUQVRV U19SRUFEWQkJMQotKy8qIHJlc2VlZCByZXF1aXJlZCAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNf UkVTRUVECQkyCi0rLyogZmF0YWwgZXJyb3IgY29uZGl0aW9uICovCi0rI2RlZmluZSBEUkJHX1NU QVRVU19FUlJPUgkJMwotKwotKy8qIEEgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aDogbGFyZ2VyIHRo YW4gYW55IHJlYXNvbmFibGUgdmFsdWUgdXNlZCBpbiBwcmF0aWNlICovCi0rCi0rI2RlZmluZSBE UkJHX01BWF9MRU5HVEgJCQkweDdmZmZmZmYwCi0rLyogTWF4aW11bSBEUkJHIGJsb2NrIGxlbmd0 aDogYWxsIG1kIHNpemVzIGFyZSBiaWdnZXIgdGhhbiBjaXBoZXIgYmxvY2tzIHNpemVzCi0rICog c28gdXNlIG1heCBkaWdlc3QgbGVuZ3RoLgotKyAqLwotKyNkZWZpbmUgRFJCR19NQVhfQkxPQ0sJ CQlFVlBfTUFYX01EX1NJWkUKLSsKLSsjZGVmaW5lIERSQkdfSEVBTFRIX0lOVEVSVkFMCQkoMSA8 PCAyNCkKLSsKLSsvKiBEUkJHIGNvbnRleHQgc3RydWN0dXJlICovCi0rCi0rc3RydWN0IGRyYmdf Y3R4X3N0Ci0rCXsKLSsJLyogRmlyc3QgdHlwZXMgY29tbW9uIHRvIGFsbCBpbXBsZW1lbnRhdGlv bnMgKi8KLSsJLyogRFJCRyB0eXBlOiBhIE5JRCBmb3IgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGht ICovCi0rCWludCB0eXBlOwotKwkvKiBWYXJpb3VzIGV4dGVybmFsIGZsYWdzICovCi0rCXVuc2ln bmVkIGludCB4ZmxhZ3M7Ci0rCS8qIFZhcmlvdXMgaW50ZXJuYWwgdXNlIG9ubHkgZmxhZ3MgKi8K LSsJdW5zaWduZWQgaW50IGlmbGFnczsKLSsJLyogVXNlZCBmb3IgcGVyaW9kaWMgaGVhbHRoIGNo ZWNrcyAqLwotKwlpbnQgaGVhbHRoX2NoZWNrX2NudCwgaGVhbHRoX2NoZWNrX2ludGVydmFsOwot KwotKwkvKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHNldHVwIGJ5IG1lY2hhbmlzbSBk cmJnX2luaXQoKSBjYWxsICovCi0rCWludCBzdHJlbmd0aDsKLSsJc2l6ZV90IGJsb2NrbGVuZ3Ro OwotKwlzaXplX3QgbWF4X3JlcXVlc3Q7Ci0rCi0rCXNpemVfdCBtaW5fZW50cm9weSwgbWF4X2Vu dHJvcHk7Ci0rCXNpemVfdCBtaW5fbm9uY2UsIG1heF9ub25jZTsKLSsJc2l6ZV90IG1heF9wZXJz LCBtYXhfYWRpbjsKLSsJdW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyOwotKwl1bnNpZ25lZCBp bnQgcmVzZWVkX2ludGVydmFsOwotKwlzaXplX3Qgc2VlZGxlbjsKLSsJaW50IHN0YXR1czsKLSsJ LyogQXBwbGljYXRpb24gZGF0YTogdHlwaWNhbGx5IHVzZWQgYnkgdGVzdCBnZXRfZW50cm9weSAq LwotKwl2b2lkICphcHBfZGF0YTsKLSsJLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3RydWN0 dXJlcyAqLwotKwl1bmlvbiAKLSsJCXsKLSsJCURSQkdfSEFTSF9DVFggaGFzaDsKLSsJCURSQkdf SE1BQ19DVFggaG1hYzsKLSsJCURSQkdfQ1RSX0NUWCAgY3RyOwotKwkJfSBkOwotKwkvKiBJbml0 aWFsaWFzZSBQUk5HIGFuZCBzZXR1cCBjYWxsYmFja3MgYmVsb3cgKi8KLSsJaW50ICgqaW5pdCko RFJCR19DVFggKmN0eCwgaW50IG5pZCwgaW50IHNlY3VyaXR5LCB1bnNpZ25lZCBpbnQgZmxhZ3Mp OwotKwkvKiBJbnRhbnRpYXRlIFBSTkcgKi8KLSsJaW50ICgqaW5zdGFudGlhdGUpKERSQkdfQ1RY ICpjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKLSsJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKLSsJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOwotKwkvKiByZXNlZWQgKi8K LSsJaW50ICgqcmVzZWVkKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICplbnQsIHNpemVfdCBlbnRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNp emVfdCBhZGlubGVuKTsKLSsJLyogZ2VuZXJhdCBvdXRwdXQgKi8KLSsJaW50ICgqZ2VuZXJhdGUp KERSQkdfQ1RYICpjdHgsCi0rCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwK LSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKwkvKiB1 bmluc3RhbnRpYXRlICovCi0rCWludCAoKnVuaW5zdGFudGlhdGUpKERSQkdfQ1RYICpjdHgpOwot KwotKwkvKiBFbnRyb3B5IHNvdXJjZSBibG9jayBsZW5ndGggKi8KLSsJc2l6ZV90IGVudHJvcHlf YmxvY2tsZW47Ci0rCi0rCS8qIGVudHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCi0rCXNpemVf dCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJ CQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7Ci0rCS8qIElu ZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggZW50cm9weSBidWZmZXIgKi8KLSsJdm9pZCAo KmNsZWFudXBfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXpl X3Qgb2xlbik7Ci0rCi0rCS8qIG5vbmNlIGdhdGhlcmluZyBmdW5jdGlvbiAqLwotKwlzaXplX3Qg KCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlp bnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsJLyogSW5kaWNh dGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBub25jZSBidWZmZXIgKi8KLSsJdm9pZCAoKmNsZWFu dXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4p OwotKwotKwkvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIgdGVzdCB0ZW1wb3JhcnkgYXJlYSAq LwotKwkvKiBMYXN0IGJsb2NrICovCQotKwl1bnNpZ25lZCBjaGFyIGxiW0VWUF9NQVhfTURfU0la RV07Ci0rCS8qIHNldCBpZiBsYiBpcyB2YWxpZCAqLwotKwlpbnQgbGJfdmFsaWQ7Ci0rCi0rCS8q IENhbGxiYWNrcyB1c2VkIHdoZW4gY2FsbGVkIHRocm91Z2ggUkFORCBpbnRlcmZhY2UgKi8KLSsJ LyogR2V0IGFueSBhZGRpdGlvbmFsIGlucHV0IGZvciBnZW5lcmF0ZSAqLwotKwlzaXplX3QgKCpn ZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpOwotKwl2b2lkICgq Y2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBv bGVuKTsKLSsJLyogQ2FsbGJhY2sgZm9yIFJBTkRfc2VlZCgpLCBSQU5EX2FkZCgpICovCi0rCWlu dCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVt KTsKLSsJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHZvaWQg KmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpOwotKwl9OwotKwotKwotK2ludCBmaXBzX2Ry YmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERS QkdfQ1RYICpkY3R4KTsKLStpbnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCk7 Ci0raW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGlu dCBmbGFncyk7Ci0raW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25z dCB1bnNpZ25lZCBjaGFyICpvdXQpOwotKwotK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNf Z2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpOwotKwotK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0 ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKLSsKLSsjZGVmaW5lIEZJUFNfZGlnZXN0 aW5pdCBFVlBfRGlnZXN0SW5pdAotKyNkZWZpbmUgRklQU19kaWdlc3R1cGRhdGUgRVZQX0RpZ2Vz dFVwZGF0ZQotKyNkZWZpbmUgRklQU19kaWdlc3RmaW5hbCBFVlBfRGlnZXN0RmluYWwKLSsjZGVm aW5lIE1fRVZQX01EX3NpemUgRVZQX01EX3NpemUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFu ZF9saWIuYy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ0MzUyNDE4ICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCTIwMTItMDctMTIgMjE6NDk6 MjUuMzQ0MzUyNDE4ICswMjAwCi1AQCAtMCwwICsxLDE5MSBAQAotKy8qID09PT09PT09PT09PT09 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 KgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImVf b3MuaCIKLSsKLSsvKiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNpbWlsYXIgdG8gUkFORCBmdW5j dGlvbmFsaXR5IGJ1dCB3aXRob3V0Ci0rICogRU5HSU5FIGFuZCBhZGRpdGlvbmFsIGNoZWNraW5n IGZvciBub24tRklQUyByYW5kIG1ldGhvZHMuCi0rICovCi0rCi0rc3RhdGljIGNvbnN0IFJBTkRf TUVUSE9EICpmaXBzX3JhbmRfbWV0aCA9IE5VTEw7Ci0rc3RhdGljIGludCBmaXBzX2FwcHJvdmVk X3JhbmRfbWV0aCA9IDA7Ci0rc3RhdGljIGludCBmaXBzX3JhbmRfYml0cyA9IDA7Ci0rCi0rLyog QWxsb3dzIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBvZiBiaXRzIGFuZCB1c2VzIG5v bi1GSVBTIG1ldGhvZHMgKi8KLSt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpCi0r CXsKLSsJZmlwc19yYW5kX2JpdHMgPSBuYml0czsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2V0 X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKLSsJewotKwlpZiAoIWZpcHNfcmFuZF9i aXRzKQotKwkJewotKwkJaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQotKwkJCWZpcHNf YXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKLSsJCWVsc2UgaWYgKG1ldGggPT0gRklQU194OTMxX21l dGhvZCgpKQotKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMjsKLSsJCWVsc2UKLSsJCQl7 Ci0rCQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOwotKwkJCWlmIChGSVBTX21vZHVsZV9t b2RlKCkpCi0rCQkJCXsKLSsJCQkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0Qs Ci0rCQkJCQkJRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9 Ci0rCQkJfQotKwkJfQotKwlmaXBzX3JhbmRfbWV0aCA9IG1ldGg7Ci0rCXJldHVybiAxOwotKwl9 Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpCi0rCXsK LSsJcmV0dXJuIGZpcHNfcmFuZF9tZXRoOwotKwl9Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJ UFNfcmFuZF9tZXRob2Qodm9pZCkKLSsJewotKwlyZXR1cm4gRklQU19yYW5kX2dldF9tZXRob2Qo KTsKLSsJfQotKwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpCi0rCXsKLSsJaWYgKGZpcHNf cmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQotKwkJZmlwc19yYW5kX21ldGgt PmNsZWFudXAoKTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYs IEZJUFNfUkFORF9TSVpFX1QgbnVtKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21l dGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19S QU5EX1NFRUQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c2VlZCkKLSsJCWZpcHNfcmFu ZF9tZXRoLT5zZWVkKGJ1ZixudW0pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgRklQU19y YW5kX2FkZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KQotKwl7Ci0r CWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0FERCwgRklQU19SX05PTl9GSVBTX01FVEhP RCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRf bWV0aC0+YWRkKQotKwkJZmlwc19yYW5kX21ldGgtPmFkZChidWYsbnVtLGVudHJvcHkpOwotKwl9 Ci0rCi0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIEZJUFNfUkFORF9T SVpFX1QgbnVtKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19t b2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0JZVEVTLCBG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19y YW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmJ5dGVzKQotKwkJcmV0dXJuIGZpcHNfcmFuZF9t ZXRoLT5ieXRlcyhidWYsbnVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5k X3BzZXVkb19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBudW0pCi0rCXsKLSsJaWYgKCFm aXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVU SE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19y YW5kX21ldGgtPnBzZXVkb3JhbmQpCi0rCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPnBzZXVkb3Jh bmQoYnVmLG51bSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc3RhdHVz KHZvaWQpCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVs ZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTLCBGSVBT X1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19yYW5k X21ldGggJiYgZmlwc19yYW5kX21ldGgtPnN0YXR1cykKLSsJCXJldHVybiBmaXBzX3JhbmRfbWV0 aC0+c3RhdHVzKCk7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rLyogUmV0dXJuIGluc3RhbnRpYXRl ZCBzdHJlbmd0aCBvZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlzIGFuIGludGVybmFsCi0rICogcGFy YW1ldGVyLiBGb3IgWDkuMzEgUFJORyBpdCBpcyA4MCBiaXRzIChmcm9tIFNQODAwLTEzMSkuIEFu eSBvdGhlcgotKyAqIHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92ZWQgYW5kIHJldHVybnMgMCBp biBGSVBTIG1vZGUgYW5kIG1heGltdW0KLSsgKiAyNTYgb3V0c2lkZSBGSVBTIG1vZGUuCi0rICov Ci0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQotKwl7Ci0rCWlmIChmaXBzX3JhbmRf Yml0cykKLSsJCXJldHVybiBmaXBzX3JhbmRfYml0czsKLSsJaWYgKGZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoID09IDEpCi0rCQlyZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dldF9k ZWZhdWx0X2RyYmcoKSk7Ci0rCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDIp Ci0rCQlyZXR1cm4gODA7Ci0rCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDAp Ci0rCQl7Ci0rCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKwkJCXJldHVybiAwOwotKwkJZWxz ZQotKwkJCXJldHVybiAyNTY7Ci0rCQl9Ci0rCXJldHVybiAwOwotKwl9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5 OjI1LjM0NDM1MjQxOCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNf cmFuZF9zZWxmdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ0MzUyNDE4ICswMjAwCi1AQCAt MCwwICsxLDE4MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxz dHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCi0rCi0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERUWzE2 XTsKLSsJdW5zaWduZWQgY2hhciBWWzE2XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJfSBB RVNfUFJOR19UVjsKLSsKLSsvKiBUaGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4g ZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAqLwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFy IGFlc18xMjhfa2V5WzE2XSA9Ci0rCQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3 MiwweDQyLAotKwkJIDB4ZWQsMHgwNiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07Ci0r Ci0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18xMjhfdHYgPSAKLSsJewotKwkJCQkvKiBEVCAqLwot KwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4 MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4Zjl9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4 MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDU5LDB4NTMs MHgxZSwweGQxLDB4M2IsMHhiMCwweGMwLDB4NTUsCi0rCQkgMHg4NCwweDc5LDB4NjYsMHg4NSww eGMxLDB4MmYsMHg3NiwweDQxfQotKwl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18x OTJfa2V5WzI0XSA9Ci0rCQl7MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSwweDZl LAotKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKLSsJCSAweDRh LDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9OwotKwotK3N0YXRpYyBBRVNfUFJO R19UViBhZXNfMTkyX3R2ID0gCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhm ZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0 LDB4NzgsMHhmMywweDRifSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5LDB4 NzksMHgxZSwweGVmLAotKwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5 M30KLSsJfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQotKwkJ ezB4NmQsMHgxNCwweDA2LDB4NmMsMHhiNiwweGQ4LDB4MjEsMHgyZCwKLSsJCSAweDgyLDB4OGQs MHhmYSwweGYyLDB4N2EsMHgwMywweGI3LDB4OWYsCi0rCQkgMHgwYywweGM3LDB4M2UsMHhjZCww eDc2LDB4ZWIsMHhlZSwweGI1LAotKwkJIDB4MjEsMHgwNSwweDhjLDB4NGYsMHgzMSwweDdhLDB4 ODAsMHhiYn07Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHYgPQotKwl7Ci0rCQkJ CS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAot KwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCi0rCQkJCS8qIFYg Ki8KLSsJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJ ezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywKLSsJCSAweDgyLDB4Nzks MHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9Ci0rCX07Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1 cHRfcm5nKCkKLSsgICAgewotKyAgICBhZXNfMTkyX3R2LlZbMF0rKzsKLSsgICAgfQotKwotKyNk ZWZpbmUgZmlwc194OTMxX3Rlc3Qoa2V5LCB0dikgXAotKwlkb194OTMxX3Rlc3Qoa2V5LCBzaXpl b2Yga2V5LCAmdHYpCi0rCi0rc3RhdGljIGludCBkb194OTMxX3Rlc3QodW5zaWduZWQgY2hhciAq a2V5LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5HX1RWICp0dikKLSsJewotKwl1bnNpZ25lZCBj aGFyIFJbMTZdLCBWWzE2XTsKLSsJaW50IHJ2ID0gMTsKLSsJbWVtY3B5KFYsIHR2LT5WLCBzaXpl b2YoVikpOwotKwlpZiAoIUZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKSkKLSsJCXJldHVy biAwOwotKwlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5V TEwpKQotKwkJcmV0dXJuIDE7Ci0rCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX1g5 MzEsIGtleWxlbiwgTlVMTCkpCi0rCQlWWzBdKys7Ci0rCUZJUFNfeDkzMV9zZWVkKFYsIDE2KTsK LSsJRklQU194OTMxX3NldF9kdCh0di0+RFQpOwotKwlGSVBTX3g5MzFfYnl0ZXMoUiwgMTYpOwot KwlpZiAobWVtY21wKFIsIHR2LT5SLCAxNikpCi0rCQl7Ci0rCQlmaXBzX3Bvc3RfZmFpbGVkKEZJ UFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpOwotKwkJcnYgPSAwOwotKwkJfQotKwllbHNlIGlm ICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCi0rCQly ZXR1cm4gMDsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfeDkzMSgp Ci0rCXsKLSsJaW50IHJ2ID0gMTsKLSsJRklQU194OTMxX3Jlc2V0KCk7Ci0rCWlmICghRklQU194 OTMxX3Rlc3RfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9Y OTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICgh Zmlwc194OTMxX3Rlc3QoYWVzXzEyOF9rZXksYWVzXzEyOF90dikpCi0rCQlydiA9IDA7Ci0rCWlm ICghZmlwc194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18xOTJfdHYpKQotKwkJcnYgPSAwOwot KwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsJCXJ2ID0g MDsKLSsJRklQU194OTMxX3Jlc2V0KCk7Ci0rCWlmICghcnYpCi0rCQlGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX1g5MzEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCXJldHVybiBydjsK LSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKQotKwl7Ci0rCXJldHVybiBGSVBT X3NlbGZ0ZXN0X3g5MzEoKTsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L2ZpcHMvZmlwc19yYW5kdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlw c19yYW5kdGVzdC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDQzNTI0MTggKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxMi0wNy0xMiAy MTo0OToyNS4zNDQzNTI0MTggKzAyMDAKLUBAIC0wLDAgKzEsMjUwIEBACi0rLyogQ29weXJpZ2h0 IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50 YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsg KiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5l dHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNp YWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBj b25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBS QzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNv ZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJp YnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0 IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICog Ci0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29w eXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0r ICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3Vs ZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9m IHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0 dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAo b25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dy YXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91 dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUg bm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55 IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0r ICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNs dWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5E Ci0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsg KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2Ug YW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNp b24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGku ZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBh bm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1Ymxp YyBMaWNlbmNlLl0KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw MyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl 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 RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBP UEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAg cHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0r Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsK LSsJdW5zaWduZWQgY2hhciBWWzE2XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJfSBBRVNf UFJOR19NQ1Q7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rfa2V5 WzE2XSA9Ci0rCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIsMHhmMywweDM0LDB4YjUsCi0rCSAw eGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9OwotKwotK3N0YXRpYyBjb25z dCBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4NjMs MHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKLSsJIDB4NjcsMHhjOSwweDI1LDB4 ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCi0rCQkJLyogViAqLwotKwl7MHg1NywweDJjLDB4OGUs MHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAotKwkgMHg3ZSwweDc0LDB4ZmIsMHhkZCwweGM0LDB4 OTUsMHgwMSwweGQxfSwKLSsJCQkvKiBSICovCi0rCXsweDQ4LDB4ZTksMHhiZCwweDBkLDB4MDYs MHhlZSwweDE4LDB4ZmIsCi0rCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4YzMsMHhmYywweDliLDB4 NzN9Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX21jdF9rZXlb MjRdID0KLSsJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3MywKLSsJIDB4 NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwKLSsJIDB4YmMsMHgzNSwweDUx LDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5HX01D VCBhZXNfMTkyX21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg4NCwweGNlLDB4MjIsMHg3 ZCwweDkxLDB4NWEsMHhhMywweGM5LAotKwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4NjMs MHgxNSwweDUyfSwKLSsJCQkvKiBWICovCi0rCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTksMHg5 ZSwweDkwLDB4NjQsCi0rCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4NmR9 LAotKwkJCS8qIFIgKi8KLSsJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYsMHgy MSwKLSsJIDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQotKwl7MHg5 YiwweDA1LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAotKwkgMHhhNiwweDNhLDB4YTgs MHhjYiwweDRlLDB4NzEsMHhiMiwweGUwLAotKwkgMHhiOCwweDdlLDB4ZjEsMHgzNywweGI2LDB4 YjQsMHhmNiwweDZkLAotKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSwweDUw fTsKLSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0gewotKwkJ CS8qIERUICovCi0rCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUsCi0r CSAweDYyLDB4NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAotKwkJCS8qIFYgKi8K LSsJezB4NGYsMHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKLSsJIDB4M2UsMHgw ZSwweDU2LDB4NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCi0rCQkJLyogUiAqLwotKwl7MHhjOCww eDg3LDB4YzIsMHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAotKwkgMHhlNywweGYzLDB4OGIsMHhk NywweDViLDB4ZDUsMHhmMSwweDhkfQotK307Ci0rCi0rc3RhdGljIHZvaWQgZHVtcChjb25zdCB1 bnNpZ25lZCBjaGFyICpiLGludCBuKQotKyAgICB7Ci0rICAgIHdoaWxlKG4tLSA+IDApCi0rCXsK LSsJcHJpbnRmKCIgJTAyeCIsKmIrKyk7Ci0rCX0KLSsgICAgfQotKwotK3N0YXRpYyB2b2lkIGNv bXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4 cGVjdGVkLAotKwkJICAgIGludCBuKQotKyAgICB7Ci0rICAgIGludCBpOwotKwotKyAgICBmb3Io aT0wIDsgaSA8IG4gOyArK2kpCi0rCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKLSsJICAg IHsKLSsJICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOwotKwkgICAgZHVtcChy ZXN1bHQsbik7Ci0rCSAgICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOwotKwkg ICAgZHVtcChleHBlY3RlZCxuKTsKLSsJICAgIHB1dGNoYXIoJ1xuJyk7Ci0rCSAgICBFWElUKDEp OwotKwkgICAgfQotKyAgICB9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcnVuX3Rlc3QoY29uc3QgdW5z aWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAotKwkJCQkJCQljb25zdCBBRVNfUFJOR19NQ1Qg KnR2KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRbMTZdOwotKyAgICBp bnQgaSwgajsKLSsgICAgRklQU194OTMxX3Jlc2V0KCk7Ci0rICAgIEZJUFNfeDkzMV90ZXN0X21v ZGUoKTsKLSsgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKyAgICBGSVBTX3g5 MzFfc2VlZCh0di0+ViwgMTYpOwotKyAgICBtZW1jcHkoZHQsIHR2LT5EVCwgMTYpOwotKyAgICBm b3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKLSsJewotKyAgICAJRklQU194OTMxX3NldF9kdChk dCk7Ci0rCUZJUFNfeDkzMV9ieXRlcyhidWYsIDE2KTsKLSsJLyogSW5jcmVtZW50IERUICovCi0r CWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCXsKLSsJCWR0W2pdKys7Ci0rCQlpZiAoZHRb al0pCi0rCQkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsKLSsgICAgY29tcGFyZShidWYsdHYtPlIsIDE2 KTsKLSsgICAgfQotKwotK2ludCBtYWluKCkKLSsJewotKwlydW5fdGVzdChhZXNfMTI4X21jdF9r ZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9u ZVxuIik7Ci0rCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7 Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzI1 Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVz dCAzIGRvbmVcbiIpOwotKwlyZXR1cm4gMDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNy0xMiAyMTo0OToy NS4zNDUzNTI0NDEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3Jz YV9zZWxmdGVzdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ1MzUyNDQxICswMjAwCi1AQCAtMCww ICsxLDQ0NCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5z c2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuW10gPQotKyJceDAwXHhC Qlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThceDcx IgotKyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYw XHg3NFx4NTRceEY1IgotKyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYx XHhFQVx4NDhceENFXHhFQlx4NkZceENEIgotKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBceEUx XHhFQ1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgotKyJceDdGXHhBRlx4QjhceEUw XHhBM1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgotKyJceDg0 XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4OThc eDM5IgotKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4OUFc eDQxXHhGNlx4QzFceDY4IgotKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4NTlc eDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgotKyJceENCIjsKLSsKLStzdGF0aWMgaW50IGNv cnJ1cHRfcnNhOwotKwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7Ci0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQx XHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0ZceDMx XHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKLSsi XHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4Mzlc eDI2XHg2OSIKLSsiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENc eEI4XHgyRVx4QzlceDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0Zc eEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4Njhc eEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4OTlc eDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIK LSsiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4 NUJceDFDXHhCMyIKLSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHBbXSA9Ci0rIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgw Qlx4MTBceEExXHhCNVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhB NFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2 RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVCXHgy NVx4MjFceDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCi0r Ilx4OTkiOwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJceDAw XHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFc eEQ5IgotKyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBc eDM1XHgwMlx4OEJceDlEIgotKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJc eEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERc eDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsKLSsg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRDXHhB Nlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsiXHhF Qlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIx XHgzRSIKLSsiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3 XHg2OVx4MkVceDlBXHgyRSIKLSsiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0 XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGRtcTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgw M1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3 RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgwXHgz Rlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCi0r Ilx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2 XHhEQVx4M0QiOwotKyAgICAKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtd ID0KLSsiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhE Qlx4QUVceDk0XHgyMyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5 M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1 OFx4ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBGXHg5 Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsiXHhG NyI7Ci0rCi0rICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsK LSsgICAgaWYgKGNvcnJ1cHRfcnNhKQotKwlCTl9zZXRfYml0KGtleS0+biwgMTAyNCk7Ci0rICAg IGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5LT5lKTsKLSsgICAga2V5LT5k ID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOwotKyAgICBrZXktPnAgPSBCTl9i aW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7Ci0rICAgIGtleS0+cSA9IEJOX2JpbjJibihx LCBzaXplb2YocSktMSwga2V5LT5xKTsKLSsgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRtcDEs IHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOwotKyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4o ZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7Ci0rICAgIGtleS0+aXFtcCA9IEJOX2Jp bjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsKLSsgICAgcmV0dXJuIDE7Ci0r ICAgIH0KLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQotKyAgICB7Ci0rICAgIGNvcnJ1cHRf cnNhID0gMTsKLSsgICAgfQotKwotKy8qIEtub3duIEFuc3dlciBUZXN0IChLQVQpIGRhdGEgZm9y IHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZwotKyAqIGthdF90YnMuCi0rICovCi0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9wZW5TU0wgRklQUyAx NDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKLSsgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgs IDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCi0rICAweDAxLCAweDFF LCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAw eEJCLAotKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhFOCwg MHgwQywgMHhCNywgMHhGOCwgMHhEMywKLSsgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4ODAs IDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCi0rICAweDdGLCAweDQ5 LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAw eEE3LAotKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhFMywg MHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKLSsgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4NzQs IDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCi0rICAweDBBLCAweEU5 LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3LCAw eDMxLAotKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhFNiwg MHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKLSsgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4MDgs IDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCi0rICAweDI2LCAweEM2 LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5Ci0rfTsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKLSsgIDB4MzksIDB4NEEs IDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgsIDB4 QTcsCi0rICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgyLCAw eDk4LCAweDA4LCAweDk1LCAweEZBLAotKyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2MSwg MHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKLSsgIDB4MzAsIDB4OUQs IDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMsIDB4 ODksCi0rICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2LCAw eENDLCAweDg2LCAweDA1LCAweEVFLAotKyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgxNiwg MHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKLSsgIDB4MTUsIDB4Nzgs IDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIsIDB4RDEsIDB4 QjUsCi0rICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQyLCAweEJELCAw eEFBLCAweDM4LCAweDI0LCAweDQ5LAotKyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwg MHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKLSsgIDB4QzgsIDB4NTIs IDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUsIDB4QzAsIDB4 MDAsCi0rICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMwCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9 IHsKLSsgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4 RjAsIDB4MzEsIDB4RTMsIDB4ODksCi0rICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcxLCAw eDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAotKyAgMHg3QiwgMHhDNSwg MHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3MywgMHgy OCwKLSsgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4 QTMsIDB4OTYsIDB4NzMsIDB4NEUsCi0rICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4LCAw eDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAotKyAgMHhBQiwgMHhGNSwg MHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhC QSwKLSsgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4 NUEsIDB4RjMsIDB4REEsIDB4QjYsCi0rICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkwLCAw eERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAotKyAgMHgyMSwgMHhCNywg MHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2 RCwKLSsgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4 OUUsIDB4NDksIDB4QjksIDB4RjYsCi0rICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4LCAw eDFFLCAweDJELCAweDFDCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1BTU19TSEEzODRbXSA9IHsKLSsgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQsIDB4 QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCi0rICAweEVDLCAweDFDLCAw eEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVF LAotKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwgMHg3 MSwgMHg0NCwgMHg5QSwgMHhDRCwKLSsgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMsIDB4 RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCi0rICAweDZGLCAweDAyLCAw eEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAweDZD LAotKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwgMHhG MywgMHhBQywgMHg0RiwgMHhGQiwKLSsgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYsIDB4 NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCi0rICAweDNBLCAweEJFLCAw eDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAweDg5 LAotKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywgMHg4 NywgMHgxRiwgMHhDQSwgMHg2RiwKLSsgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUsIDB4 RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCi0rICAweDQ4LCAweDQ0LCAw eEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCi0rfTsKLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKLSsgIDB4MDcsIDB4MUUsIDB4 RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMsIDB4OEMs Ci0rICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAweDhG LCAweDEyLCAweDUzLCAweDlBLAotKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhDMSwgMHgx RCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKLSsgIDB4NEIsIDB4RjMsIDB4 NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4MjMsIDB4Mzks Ci0rICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAweDY3 LCAweDVGLCAweEZFLCAweEQ3LAotKyAgMHg3QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4 NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKLSsgIDB4NTcsIDB4RTMsIDB4 MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4ODUsIDB4MTMs Ci0rICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAweDlB LCAweDZBLCAweDM5LCAweDYzLAotKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4 QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKLSsgIDB4NzYsIDB4RjIsIDB4 MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4QzIsIDB4ODgs Ci0rICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKLSsgIDB4 NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMs IDB4RjIsIDB4NEMsCi0rICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAweEIx LCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAotKyAgMHhFNywgMHhGRCwgMHg2MCwgMHhB MywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKLSsgIDB4 REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0Qs IDB4MUUsIDB4RjgsCi0rICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAweEQ3 LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAotKyAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1 OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKLSsgIDB4 QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0Es IDB4MkUsIDB4NEUsCi0rICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAweDlG LCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAotKyAgMHgzNSwgMHgwNywgMHgxMSwgMHhC QywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKLSsgIDB4 NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIs IDB4MkYsIDB4OTUsCi0rICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAweDQ2 LCAweEI0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTIy NFtdID0gewotKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1RiwgMHg4 QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKLSsgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQsIDB4 M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCi0rICAweDVCLCAw eDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAweEM1 LCAweDg5LAotKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywgMHg3 NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKLSsgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEsIDB4 NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCi0rICAweEVFLCAw eDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAweEE5 LCAweENDLAotKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4 NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKLSsgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYsIDB4 OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCi0rICAweDU4LCAw eDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAweDY2LCAweEU2 LCAweDM1LAotKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3MywgMHgw NCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKLSsgIDB4NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4 MzcsIDB4M0UsIDB4MUUsIDB4OEQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfU0hBMjU2W10gPSB7Ci0rICAweDBELCAweDU1LCAweEUyLCAweEFBLCAweDgxLCAw eERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAotKyAgMHhFNywgMHgzQiwg MHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwgMHgy MywKLSsgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4 QkUsIDB4QUQsIDB4NkYsIDB4MzUsCi0rICAweDk4LCAweDJELCAweDY5LCAweDg0LCAweEJGLCAw eEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAotKyAgMHgyQywgMHg0NCwg MHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwgMHgx OCwKLSsgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4 NTgsIDB4N0EsIDB4OTEsIDB4MzAsCi0rICAweEJFLCAweDIyLCAweEM3LCAweEQzLCAweEVDLCAw eEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAotKyAgMHg3QywgMHg4NSwg MHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwgMHgz OCwKLSsgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4 MkMsIDB4RUUsIDB4RDEsIDB4REEsCi0rICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFCLCAw eEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAotKyAgMHhCRCwgMHg0NCwg MHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQotK307Ci0rCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKLSsgIDB4MUQsIDB4RTMsIDB4NkEs IDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCi0r ICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYzLCAw eDU2LCAweDQ3LCAweEM3LAotKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwg MHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKLSsgIDB4QTcsIDB4NjUsIDB4NTIs IDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCi0r ICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4LCAw eDdGLCAweEI2LCAweENGLAotKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwg MHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKLSsgIDB4MUIsIDB4MkIsIDB4QjAs IDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMsCi0r ICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhGLCAw eDhCLCAweDlDLCAweENELAotKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgxQywg MHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKLSsgIDB4MTYsIDB4MjgsIDB4MjQs IDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQsCi0r ICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCi0rfTsKLSsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0gewotKyAgMHg2 OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1MSwg MHg1RCwgMHhDRiwKLSsgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4NEMs IDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCi0rICAweDE1LCAweEVBLCAweDVDLCAweEU1 LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAotKyAgMHgw NCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1NCwg MHg5RiwgMHhEOCwKLSsgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMsIDB4ODIs IDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCi0rICAweDgwLCAweEUyLCAweEJDLCAweERE LCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAweDZCLAotKyAgMHhB RiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgxRCwg MHg0NywgMHhFNiwKLSsgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4Nzcs IDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCi0rICAweDZGLCAweDBFLCAweDJCLCAweDMx LCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAweDJELAotKyAgMHgz RSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5OCwg MHg2NSwgMHg5MSwKLSsgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIs IDB4ODQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9T SEExW10gPSB7Ci0rICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAweDgwLCAweEI2LCAw eDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAotKyAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4Mywg MHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKLSsgIDB4ODAs IDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4 QjgsIDB4QUMsCi0rICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4LCAw eDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAotKyAgMHg3MCwgMHhGQiwgMHg1RSwgMHhFNywg MHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKLSsgIDB4NTMs IDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4 MTEsIDB4MTksCi0rICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYzLCAw eDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAotKyAgMHg2RiwgMHg0QywgMHgzQywgMHgzNywg MHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKLSsgIDB4NDgs IDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4 RUQsIDB4NzYsCi0rICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJBLCAw eDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAotKyAgMHhBMywgMHgyOSwgMHg4MCwgMHg3MCwg MHg1NCwgMHg2OCwgMHg3RCwgMHg0OQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0gewotKyAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwg MHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKLSsgIDB4RTUs IDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4 MUMsIDB4REQsCi0rICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAwLCAw eDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAotKyAgMHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwg MHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKLSsgIDB4QzYs IDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4 RjAsIDB4NEIsCi0rICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVCLCAw eDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAotKyAgMHhBRCwgMHg0RSwgMHg0OSwgMHgyQywg MHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKLSsgIDB4N0Us IDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQsIDB4 QTAsIDB4OEMsCi0rICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5LCAw eDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAotKyAgMHgyMSwgMHhFRCwgMHg4RCwgMHhCQywg MHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKLSsgIDB4RTMs IDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsKLSsgIDB4NUMs IDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0IsIDB4 RUMsIDB4N0IsCi0rICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVGLCAweEQ4LCAw eEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAotKyAgMHhFNiwgMHg0RiwgMHg1RSwgMHgwQSwg MHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhFMywKLSsgIDB4RUYs IDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEsIDB4 NjMsIDB4RjYsCi0rICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENGLCAw eENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAotKyAgMHhEOCwgMHg2OSwgMHhFOSwgMHhBQiwg MHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwKLSsgIDB4M0Us IDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAsIDB4 NDEsIDB4NzksCi0rICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUzLCAw eEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAotKyAgMHgwRSwgMHgwOSwgMHhFRSwgMHgyRSwg MHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwKLSsgIDB4RUYs IDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4 QzYsIDB4NkQsCi0rICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1LCAw eDI4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hB NTEyW10gPSB7Ci0rICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2LCAw eENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAotKyAgMHhGQywgMHhBMSwgMHhBQSwgMHhDQiwg MHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKLSsgIDB4RTcs IDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4 NzcsIDB4RDcsCi0rICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2LCAw eDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAotKyAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2NCwg MHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKLSsgIDB4NkUs IDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4 RDIsIDB4QUYsCi0rICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0LCAw eDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAotKyAgMHhDRSwgMHg4QSwgMHg2RiwgMHhBMSwg MHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKLSsgIDB4OUYs IDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQsIDB4 RkIsIDB4N0MsCi0rICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDkyLCAw eDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAotKyAgMHg2MCwgMHg4MywgMHgxOCwgMHg4OCwg MHhBMywgMHhGNSwgMHg1OSwgMHhDMwotK307Ci0rCi0rCi0raW50IEZJUFNfc2VsZnRlc3RfcnNh KCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJUlNBICprZXk7Ci0rCUVWUF9QS0VZICpwayA9IE5V TEw7Ci0rCi0rCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlz ZXRyc2FrZXkoa2V5KTsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdv dG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOwotKwotKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK LSsJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKLSsJCQkJRVZQX3NoYTEo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEExIFBLQ1MjMSIpKQot KwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGthdF9S U0FfU0hBMjI0KSwKLSsJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1Mx LAotKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJ CQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCi0rCQkJCUVWUF9zaGEy NTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEyNTYgUEtDUyMx IikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMzg0LCBzaXplb2Yo a2F0X1JTQV9TSEEzODQpLAotKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURf UEtDUzEsCi0rCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICgh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAx LAotKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKLSsJCQkJRVZQ X3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTUxMiBQ S0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hB MSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEExIFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyMjQp LAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNB IFNIQTIyNCBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1Nf U0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEyNTYgUFNTIikpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVv ZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0Ff UFNTX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Ms Ci0rCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlr YXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLAotKwkJCQlFVlBf c2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTUxMiBQU1Mi KSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMSwg c2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKLSsJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEExIFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwkvKiBO QjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KLSsJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JT QV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAotKwkJCUVWUF9zaGEy NTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBMjU2IFg5MzEiKSkK LSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMzg0LCBzaXplb2Yo a2F0X1JTQV9YOTMxX1NIQTM4NCksCi0rCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEzODQgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICgh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAx LAotKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEyKSwK LSsJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNI QTUxMiBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgot KwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsJZWxzZSBpZiAoa2V5KQotKwkJUlNB X2ZyZWUoa2V5KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZiAvKiBkZWYgT1BFTlNT TF9GSVBTICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3JzYV94 OTMxZy5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwot LS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcwkyMDEy LTA3LTEyIDIxOjQ5OjI1LjM0NTM1MjQ0MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0 by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDUzNTI0NDEgKzAy MDAKLUBAIC0wLDAgKzEsMjgyIEBACi0rLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8KLSsvKiBD b3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsg KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBp bXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3Jt IHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3Ig Y29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUg aXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRo ZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhp cyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsg KiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29t KS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNo IGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVt b3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91 bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUg cGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBv ZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVu dGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsg KiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0 cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg Y3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJl IGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1 c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5j bHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikg ZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBt dXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSki Ci0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMg SVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwot KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUg bGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFi bGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFu Z2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0 IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBH TlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNs dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8dGltZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStl eHRlcm4gaW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKTsKLSsjZW5kaWYKLSsKLSsvKiBYOS4z MSBSU0Ega2V5IGRlcml2YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KLSsKLStpbnQgUlNBX1g5MzFf ZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBC SUdOVU0gKnEyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29u c3QgQklHTlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIs IGNvbnN0IEJJR05VTSAqWHEsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCi0r CXsKLSsJQklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOwotKwlCTl9D VFggKmN0eD1OVUxMLCpjdHgyPU5VTEw7Ci0rCi0rCWlmICghcnNhKSAKLSsJCWdvdG8gZXJyOwot KwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KSAKLSsJCWdvdG8gZXJyOwotKwlC Tl9DVFhfc3RhcnQoY3R4KTsKLSsKLSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIxID0gQk5f Q1RYX2dldChjdHgpOwotKwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjMgPSBCTl9DVFhfZ2V0 KGN0eCk7Ci0rCi0rCWlmIChyMyA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghcnNhLT5l KQotKwkJewotKwkJcnNhLT5lID0gQk5fZHVwKGUpOwotKwkJaWYgKCFyc2EtPmUpCi0rCQkJZ290 byBlcnI7Ci0rCQl9Ci0rCWVsc2UKLSsJCWUgPSByc2EtPmU7Ci0rCi0rCS8qIElmIG5vdCBhbGwg cGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgotKwkgKiBUaGlz IGFsbG93cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVycy4KLSsJ ICovCi0rCi0rCWlmIChYcCAmJiAhcnNhLT5wKQotKwkJewotKwkJcnNhLT5wID0gQk5fbmV3KCk7 Ci0rCQlpZiAoIXJzYS0+cCkKLSsJCQlnb3RvIGVycjsKLSsKLSsJCWlmICghQk5fWDkzMV9kZXJp dmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCi0rCQkJCQlYcCwgWHAxLCBYcDIsIGUsIGN0eCwg Y2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoWHEgJiYgIXJzYS0+cSkKLSsJCXsK LSsJCXJzYS0+cSA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnEpCi0rCQkJZ290byBlcnI7Ci0r CQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAotKwkJCQkJWHEs IFhxMSwgWHEyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFy c2EtPnAgfHwgIXJzYS0+cSkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9m cmVlKGN0eCk7Ci0rCQlyZXR1cm4gMjsKLSsJCX0KLSsKLSsJLyogU2luY2UgYm90aCBwcmltZXMg YXJlIHNldCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVtYWluaW5nIAotKwkgKiBjb21wb25l bnRzLgotKwkgKi8KLSsKLSsJLyogY2FsY3VsYXRlIG4gKi8KLSsJcnNhLT5uPUJOX25ldygpOwot KwlpZiAocnNhLT5uID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tdWwocnNhLT5u LHJzYS0+cCxyc2EtPnEsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCAq LwotKwlpZiAoIUJOX3N1YihyMSxyc2EtPnAsQk5fdmFsdWVfb25lKCkpKQotKwkJZ290byBlcnI7 CS8qIHAtMSAqLwotKwlpZiAoIUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKQotKwkJ Z290byBlcnI7CS8qIHEtMSAqLwotKwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQotKwkJZ290 byBlcnI7CS8qIChwLTEpKHEtMSkgKi8KLSsKLSsJaWYgKCFCTl9nY2QocjMsIHIxLCByMiwgY3R4 KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBjdHgp KQotKwkJZ290byBlcnI7CS8qIExDTSgocC0xKShxLTEpKSAqLwotKwotKwljdHgyID0gQk5fQ1RY X25ldygpOwotKwlpZiAoIWN0eDIpCi0rCQlnb3RvIGVycjsKLSsKLSsJcnNhLT5kPUJOX21vZF9p bnZlcnNlKE5VTEwscnNhLT5lLHIwLGN0eDIpOwkvKiBkICovCi0rCWlmIChyc2EtPmQgPT0gTlVM TCkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KLSsJcnNh LT5kbXAxPUJOX25ldygpOwotKwlpZiAocnNhLT5kbXAxID09IE5VTEwpCi0rCQlnb3RvIGVycjsK LSsJaWYgKCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQotKwkJZ290byBlcnI7Ci0r Ci0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLwotKwlyc2EtPmRtcTE9Qk5fbmV3KCk7Ci0r CWlmIChyc2EtPmRtcTEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21vZChyc2Et PmRtcTEscnNhLT5kLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGlu dmVyc2Ugb2YgcSBtb2QgcCAqLwotKwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2Et PnEscnNhLT5wLGN0eDIpOwotKwotKwllcnI6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlCTl9DVFhf ZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQotKwlpZiAoY3R4MikKLSsJCUJO X0NUWF9mcmVlKGN0eDIpOwotKwkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vzc2Z1 bCAqLwotKwlpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxMKQotKwkJcmV0dXJuIDE7Ci0rCi0r CXJldHVybiAwOwotKwotKwl9Ci0rCi0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0Eg KnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWlu dCBvayA9IDA7Ci0rCUJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCTl9DVFggKmN0 eCA9IE5VTEw7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYg IShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmIAotKwkJKGJpdHMgPCBP UEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkgICAgewotKwkgICAgRklQU2Vy cihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsK LSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlpZiAoYml0cyAmIDB4ZmYpCi0rCSAgICB7 Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0lO VkFMSURfS0VZX0xFTkdUSCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAg cmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0rCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSsJ aWYgKCFjdHgpCi0rCQlnb3RvIGVycm9yOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJWHAg PSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCVhxID0gQk5fQ1RYX2dldChjdHgpOwotKwlpZiAoIUJOX1g5 MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0cywgY3R4KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0r CXJzYS0+cCA9IEJOX25ldygpOwotKwlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJaWYgKCFyc2EtPnAg fHwgIXJzYS0+cSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCS8qIEdlbmVyYXRlIHR3byBwcmltZXMg ZnJvbSBYcCwgWHEgKi8KLSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+ cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJCWdv dG8gZXJyb3I7Ci0rCi0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhxLAotKwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVy cm9yOwotKwotKwkvKiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxs IHdpbGwganVzdCBkZXJpdmUKLSsJICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgotKwkgKi8K LSsKLSsJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LAotKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCi0rCQln b3RvIGVycm9yOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoIWZpcHNfY2hlY2tfcnNh KHJzYSkpCi0rCSAgICBnb3RvIGVycm9yOwotKyNlbmRpZgotKwotKwlvayA9IDE7Ci0rCi0rCWVy cm9yOgotKwlpZiAoY3R4KQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2Zy ZWUoY3R4KTsKLSsJCX0KLSsKLSsJaWYgKG9rKQotKwkJcmV0dXJuIDE7Ci0rCi0rCXJldHVybiAw OwotKwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3NoYV9z ZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRl c3QuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMu ZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NTM1MjQ0MSArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4z NDUzNTI0NDEgKzAyMDAKLUBAIC0wLDAgKzEsMTQwIEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RbXVs2MF09Ci0r ICAgIHsKLSsgICAgIiIsCi0rICAgICJhYmMiLAotKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hm Z2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCi0rICAgIH07Ci0rCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hBX0RJR0VTVF9MRU5HVEhdPQotKyAgICB7Ci0r ICAgIHsgMHhkYSwweDM5LDB4YTMsMHhlZSwweDVlLDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1NSwK LSsgICAgICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5MCwweGFmLDB4ZDgsMHgwNywweDA5 IH0sCi0rICAgIHsgMHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4YmEs MHgzZSwKLSsgICAgICAweDI1LDB4NzEsMHg3OCwweDUwLDB4YzIsMHg2YywweDljLDB4ZDAsMHhk OCwweDlkIH0sCi0rICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0NCwweDFjLDB4M2IsMHhkMiwweDZl LDB4YmEsMHhhZSwKLSsgICAgICAweDRhLDB4YTEsMHhmOSwweDUxLDB4MjksMHhlNSwweGU1LDB4 NDYsMHg3MCwweGYxIH0sCi0rICAgIH07Ci0rCi0rc3RhdGljIGludCBjb3JydXB0X3NoYTsKLSsK LSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKLSsgICAgewotKyAgICBjb3JydXB0X3NoYSA9IDE7 Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKLSsgICAgewotKyAgICBpbnQg bjsKLSsKLSsgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsr bikKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQ X0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKStjb3JydXB0X3NoYSxtZCwgTlVMTCwgRVZQ X3NoYTEoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwl9Ci0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTI1NltdID0g eyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAweDFmLCAweDMwLAotKwkJCQkJ ICAgIDB4ZmMgfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhMjU2W10gPSB7 IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEsIDB4NjgsIDB4NWIsCi0rCQkJCQkg ICAgMHg5ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhiYiwgMHg3NSwgMHhiZiwgMHgwMSwKLSsJCQkJ CSAgICAweDE3LCAweDBjLCAweDg0LCAweDAwLCAweDAxLCAweDdhLCAweDk0LCAweDgzLAotKwkJ CQkJICAgIDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4ODgsIDB4OGEgfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhNTEyW10gPSB7IDB4MzcsIDB4 ZDEsIDB4MzUsIDB4OWQsIDB4MTgsIDB4NDEsIDB4ZTksIDB4YjcsCi0rCQkJCQkgICAgMHg2ZCwg MHg5YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZCB9OwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGRpZ19zaGE1MTJbXSA9IHsgMHgxMSwgMHgxMywgMHhjNCwgMHgxOSwgMHhlZCwg MHgyYiwgMHgxZCwgMHgxNiwKLSsJCQkJCSAgICAweDExLCAweGViLCAweDliLCAweGJlLCAweGYw LCAweDdmLCAweGNmLCAweDQ0LAotKwkJCQkJICAgIDB4OGIsIDB4ZDcsIDB4NTcsIDB4YmQsIDB4 OGQsIDB4YTksIDB4MjUsIDB4YjAsCi0rCQkJCQkgICAgMHg0NywgMHgyNSwgMHhkNiwgMHg2Yywg MHg5YSwgMHg1NCwgMHg3ZiwgMHg4ZiwKLSsJCQkJCSAgICAweDBiLCAweDUzLCAweDFhLCAweDEw LCAweDY4LCAweDMyLCAweDAzLCAweDM4LAotKwkJCQkJICAgIDB4ODIsIDB4YzQsIDB4ODcsIDB4 YzQsIDB4ZWEsIDB4MGUsIDB4ZDEsIDB4MDQsCi0rCQkJCQkgICAgMHhhOSwgMHg5OCwgMHhjMSwg MHgwNSwgMHhhMywgMHhmMywgMHhmOCwgMHhiMSwKLSsJCQkJCSAgICAweGFmLCAweGJjLCAweGQ5 LCAweDc4LCAweDdlLCAweGVlLCAweDNkLCAweDQzIH07Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rf c2hhMih2b2lkKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhd OwotKwotKwlFVlBfRGlnZXN0KG1zZ19zaGEyNTYsIHNpemVvZihtc2dfc2hhMjU2KSwgbWQsIE5V TEwsIEVWUF9zaGEyNTYoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChkaWdfc2hhMjU2LCBtZCwgc2l6 ZW9mKGRpZ19zaGEyNTYpKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQs IEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCUVWUF9E aWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBtZCwgTlVMTCwgRVZQX3NoYTUx MigpLCBOVUxMKTsKLSsJaWYobWVtY21wKGRpZ19zaGE1MTIsIG1kLCBzaXplb2YoZGlnX3NoYTUx MikpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRh bG9uZV9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxv bmVfaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25l X2htYWMuYy5maXBzCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ1MzUyNDQxICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwkyMDEyLTA3LTEy IDIxOjQ5OjI1LjM0NTM1MjQ0MSArMDIwMAotQEAgLTAsMCArMSwxODAgQEAKLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGli Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5o PgotKwotKyNpZm5kZWYgRklQU0NBTklTVEVSX08KLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQo KSB7IHJldHVybiAwOyB9Ci0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KLSt2b2lkIE9Q RU5TU0xfY2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9Ci0rI2VuZGlmCi0rCi0rI2lmCWRl ZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2 KSB8fCBcCi0rCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCi0rCWRlZmluZWQoX194ODZfNjQpIHx8 IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9Y NjQpCi0rCi0rdW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKLSsjZW5kaWYKLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1Nl9D VFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkK LSsgICAgewotKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAg dW5zaWduZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBj aGFyIHBhZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9D SykKLSsJewotKwlTSEEyNTZfSW5pdChtZF9jdHgpOwotKwlTSEEyNTZfVXBkYXRlKG1kX2N0eCxr ZXksbGVuKTsKLSsJU0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0rCWxlbj1TSEEyNTZfRElH RVNUX0xFTkdUSDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXltZCxrZXksbGVuKTsKLSsg ICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7Ci0rCi0r ICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHgz Nl5rZXltZFtpXTsKLSsgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0 ZShtZF9jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNf TUFYX01EX0NCTE9DSyA7IGkrKykKLSsJcGFkW2ldPTB4NWNea2V5bWRbaV07Ci0rICAgIFNIQTI1 Nl9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2X0NCTE9D Syk7Ci0rICAgIH0KLSsKLStzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1k LFNIQTI1Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKLSsgICAgewotKyAgICB1bnNp Z25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIFNIQTI1Nl9GaW5h bChidWYsbWRfY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7 Ci0rICAgIFNIQTI1Nl9GaW5hbChtZCxvX2N0eCk7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLSsKLStp bnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsgICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2 YXJQIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2MgPCAyKQotKwl7Ci0r CWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7Ci0r CX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5IikpCi0r CXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8K LSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlGSUxFICpmPWZvcGVu KGFyZ3Zbbl0sInJiIik7Ci0rCVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNpZ25lZCBj aGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkg ICAgewotKwkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsK LSsJaG1hY19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsK LSsJICAgIGNoYXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9m IGJ1ZixmKTsKLSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJ CSAgICB7Ci0rCQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAg fQotKwkJZWxzZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMjU2X1VwZGF0ZSgmbWRf Y3R4LGJ1ZixsKTsKLSsJICAgIH0KLSsJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7Ci0r Ci0rCWlmIChiaW5hcnkpCi0rCSAgICB7Ci0rCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJR0VTVF9M RU5HVEgsMSxzdGRvdXQpOwotKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUg Ki8KLSsJICAgIH0KLSsKLSsvKglwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltuXSk7ICov Ci0rCWZvcihpPTAgOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEggOyArK2kpCi0rCSAgICBwcmlu dGYoIiUwMngiLG1kW2ldKTsKLSsJcHJpbnRmKCJcbiIpOwotKwl9Ci0rI2VuZGlmCi0rICAgIHJl dHVybiAwOwotKyAgICB9Ci0rCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlw cy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNf dGVzdF9zdWl0ZS5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1 aXRlLmMuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NjM1MjQ2NCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFjL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTItMDctMTIgMjE6NDk6 MjUuMzQ2MzUyNDY0ICswMjAwCi1AQCAtMCwwICsxLDU4OCBAQAotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICoKLSsgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0 IGRyaXZlciBmb3IgdGhlIEZJUFMtMTQwIHRlc3RpbmcKLSsgKiBsYWIgcGVyZm9ybWluZyBGSVBT LTE0MCB2YWxpZGF0aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCi0rICogT3Bl blNTTCBsaWJyYXJ5IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhp YwotKyAqIGZ1bmN0aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBi eSBkZWxpYmVyYXRlbHkKLSsgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFz aAotKyAqCi0rICogQ29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCi0rICoKLSsgKi8KLSsj aW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBl Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9kaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsKLSsjaWZuZGVmIE9QRU5T U0xfRklQUwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rICAgIHsKLSsgICAg cHJpbnRmKCJObyBGSVBTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rICAgIH0KLSsj ZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwu aCIKLSsKLSsvKiBBRVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2ZXJp ZnkgcmVzdWx0IG1hdGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0Ci0rKi8KLStzdGF0aWMgaW50IEZJ UFNfYWVzX3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBw bHRtcFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGtl eVsxNl0gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKLSsJdW5z aWduZWQgY2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOwotKwlFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVy SW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDAp Ci0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7 Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBr ZXksIE5VTEwsIDApIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBwbHRt cCwgY2l0bXAsIDE2KTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCi0rCQln b3RvIGVycjsKLSsJcmV0ID0gMTsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2 b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOwotKwl1 bnNpZ25lZCBjaGFyIGNpdG1wWzhdOwotKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsgMSwy LDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCi0rCQkgICAgICAgICAg ICAgIDE5LDIwLDIxLDIyLDIzLDI0fTsKLSsgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10g PSB7ICdlJywgJ3QnLCAnYScsICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07Ci0rCUVWUF9DSVBI RVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJaWYgKEVWUF9DaXBo ZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9 IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4 KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxM LCBrZXksIE5VTEwsIDApIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBw bHRtcCwgY2l0bXAsIDgpOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQotKwkJ Z290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgm Y3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKy8qCi0rICogRFNBOiBnZW5lcmF0ZSBrZXlz IGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQ U19kc2FfdGVzdChpbnQgYmFkKQotKyAgICB7Ci0rICAgIERTQSAqZHNhID0gTlVMTDsKLSsgICAg RVZQX1BLRVkgcGs7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRsYyI7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzYwXTsKLSsgICAgdW5zaWduZWQgaW50IHNsZW47Ci0r ICAgIGludCByID0gMDsKLSsgICAgRVZQX01EX0NUWCBtY3R4OwotKwotKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAgZHNhID0gRFNBX25l dygpOwotKyAgICBpZiAoIWRzYSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCWdvdG8g ZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJZ290byBlbmQ7Ci0rICAg IGlmIChiYWQpCi0rCSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwotKyAgICBw ay50eXBlID0gRVZQX1BLRVlfRFNBOwotKyAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsKLSsgICAg aWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVu ZDsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0g MSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNs ZW4sICZwaykpCi0rCWdvdG8gZW5kOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZt Y3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1Zlcmlm eVVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAg ICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVuZDoK LSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGRzYSkKLSsgIAkgIERT QV9mcmVlKGRzYSk7Ci0rICAgIGlmIChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1cm4g MTsKLSsgICAgfQotKwotKy8qCi0rICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJp ZnkgaW5wdXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQg YmFkKQotKyAgICB7Ci0rICAgIFJTQSAqa2V5OwotKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0 ZXh0W10gPSAiZXRhb25yaXNoZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKLSsg ICAgdW5zaWduZWQgaW50IHNsZW47Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIEVWUF9NRF9DVFgg bWN0eDsKLSsgICAgRVZQX1BLRVkgcGs7Ci0rICAgIGludCByID0gMDsKLSsKLSsgICAgRVJSX2Ns ZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAgIGtleSA9IFJT QV9uZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwly ZXR1cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2Vu ZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2Zy ZWUoYm4pOwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKLSsK LSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsgICAgcGsucGtleS5yc2EgPSBrZXk7Ci0r Ci0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsJ Z290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBz aXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWdu RmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCi0rCWdvdG8gZW5kOwotKwotKyAgICBpZiAo IUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7 Ci0rICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihp bnB1dF9wdGV4dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwo Jm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKLSsgICAgZW5kOgotKyAgICBFVlBfTURfQ1RYX2NsZWFu dXAoJm1jdHgpOwotKyAgICBpZiAoa2V5KQotKyAgCSAgICBSU0FfZnJlZShrZXkpOwotKyAgICBp ZiAociAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBT SEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBr bm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBT X3NoYTFfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VT VF9MRU5HVEhdID0KLSsgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywgMHgx YSwgMHgxZSwgMHg4ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwg MHgyYywgMHhlOCwgMHhiMywgMHhjNSwgMHgxOCB9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltd ID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVO R1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChz dHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJuIDA7 Ci0rICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNo IG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1 dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKLSsg ICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQot Kwl7MHhmNSwgMHg1MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAw eDkzLCAweGM5LCAweDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkxLAotKwkgMHg2LCAweGVjLCAw eDhlLCAweDExLCAweDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2 LCAweDUwLCAweDRmLCAweDQ3LCAweDU3fTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJl dGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdU SF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3Ry LHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJuIDA7 Ci0rICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNo IG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1 dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKLSsg ICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0gPQot Kwl7MHg5OSwgMHhjOSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwg MHg4OCwgMHg1ZiwgMHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKLSsJIDB4MTYsIDB4MWYs IDB4M2QsIDB4ZjQsIDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsIDB4 ZDAsIDB4ZTcsIDB4MGIsIDB4OTQsIDB4NGEsCi0rCSAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAw eDIwLCAweDA2LCAweGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAweGQ5 LCAweDQwLCAweDIyLAotKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgy NywgMHhmZSwgMHhiZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhM307 Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2ln bmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEws IEVWUF9zaGE1MTIoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2Vz dCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIEhNQUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwot K3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTFfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K LSsJezB4NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEs IDB4ZWEsIDB4ZWEsIDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCi0rCSAweGIyLCAweGZi LCAweGVjLCAweGM2fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpF XTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7 Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihp diktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxv dXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0r LyogSE1BQy1TSEEyMjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBj b21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0 aWMgaW50IEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hh ciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBs ZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJ ezB4NzUsIDB4NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4 ZmYsIDB4YmUsIDB4MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCi0rCSAweGU1LCAweDYyLCAw eDQ5LCAweGI2LCAweDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5 fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5z aWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICgh SE1BQyhFVlBfc2hhMjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwm b3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0r ICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNI QTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8g a25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQ U19obWFjX3NoYTI1Nl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0g ImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwot KyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhlOSwgMHgx NywgMHhjMSwgMHg3YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwg MHgwMiwgMHhmNSwgMHg3MiwgMHgzMywgMHg4NywKLSsJIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2Is IDB4N2UsIDB4YTgsIDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYsIDB4 ZGEsIDB4MjQsIDB4ZjR9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJ WkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXpl b2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2 YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotKy8qIEhNQUMtU0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBh bmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0r c3RhdGljIGludCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVk IGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJT YW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9 Ci0rCXsweGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2 LCAweDYzLCAweDA4LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAotKwkgMHhlMiwgMHhk ZiwgMHhmOCwgMHhmZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgxYiwg MHhhYywgMHhiMCwgMHgwNywgMHgzOSwgMHgwOCwKLSsJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEs IDB4NzYsIDB4ZDYsIDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4YjgsIDB4 OWIsIDB4ODgsIDB4MWN9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJ WkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXpl b2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2 YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotKy8qIEhNQUMtU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBh bmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0r c3RhdGljIGludCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVk IGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJT YW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9 Ci0rCXsweGNkLCAweDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIz LCAweGFmLCAweGYzLCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAotKwkgMHhmNywgMHhk MSwgMHg1MSwgMHg5NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwg MHhhZCwgMHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKLSsJIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUs IDB4ZWEsIDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEsIDB4 N2YsIDB4ZWIsIDB4OWMsCi0rCSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAw eGRmLCAweGVlLCAweDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUz fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5z aWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICgh SE1BQyhFVlBfc2hhNTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwm b3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0r ICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsKLSsvKiBESDog Z2VuZXJhdGUgc2hhcmVkIHBhcmFtZXRlcnMKLSsqLwotK3N0YXRpYyBpbnQgZGhfdGVzdCgpCi0r ICAgIHsKLSsgICAgREggKmRoOwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgZGggPSBG SVBTX2RoX25ldygpOwotKyAgICBpZiAoIWRoKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKCFESF9n ZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKLSsJcmV0dXJuIDA7Ci0r ICAgIEZJUFNfZGhfZnJlZShkaCk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogWmVy b2l6ZQotKyovCi0rc3RhdGljIGludCBaZXJvaXplKCkKLSsgICAgewotKyAgICBSU0EgKmtleTsK LSsgICAgQklHTlVNICpibjsKLSsgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAotKwl7 IDB4NDgsIDB4NTAsIDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4 NDcsIDB4N2YsIDB4ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKLSsgICAgaW50IGksIG47 Ci0rCi0rICAgIGtleSA9IEZJUFNfcnNhX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAg ICBpZiAoIWtleSB8fCAhYm4pCi0rCXJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1 MzcpOwotKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQot KwlyZXR1cm4gMDsKLSsgICAgQk5fZnJlZShibik7Ci0rICAgIAotKyAgICBuID0gQk5fbnVtX2J5 dGVzKGtleS0+ZCk7Ci0rICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRl IGtleVxuIiwgbik7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxu Iik7Ci0rICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsgICAgQk5fcmFuZChrZXkt PmQsbio4LC0xLDApOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxu Iik7Ci0rICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsKLSsgICAgcHJpbnRmKCJc dGNoYXIgYnVmZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3Io aSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtp XSk7Ci0rICAgICAgICBwcmludGYoIlxuIik7Ci0rICAgIFJBTkRfYnl0ZXModXNlcmtleSwgc2l6 ZW9mIHVzZXJrZXkpOwotKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92ZXJ3 cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBp KyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwot KwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3N0YXRpYyBpbnQgRXJyb3I7Ci0rY29uc3Qg Y2hhciAqIEZhaWwoY29uc3QgY2hhciAqbXNnKQotKyAgICB7Ci0rICAgIGRvX3ByaW50X2Vycm9y cygpOwotKyAgICBFcnJvcisrOwotKyAgICByZXR1cm4gbXNnOyAKLSsgICAgfQotKwotK2ludCBt YWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rCi0rICAgIGludCBkb19jb3JydXB0 X3JzYV9rZXlnZW4gPSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOwotKyAgICBpbnQgYmFk X3JzYSA9IDAsIGJhZF9kc2EgPSAwOwotKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKLSsgICAg aW50IG5vX2V4aXQgPSAwOwotKwotKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGlj YXRpb25cblxuIik7Ci0rCi0rICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUs IGlmIGFueSAqLwotKyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOwotKwotKyAgICBp ZiAoYXJndlsxXSkgewotKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLwotKyAgICAg ICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgImFlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3Jy dXB0X2FlcygpOwotKyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlv biB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJkZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKLSsg ICAgICAgICAgICBwcmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNv cnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0s ICJkc2EiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKLSsgICAgICAgICAg ICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0 aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAicnNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7Ci0rICAgICAg ICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9u IHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgInJzYWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVy YXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7 Ci0rCSAgICBiYWRfcnNhID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBlbHNl IGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgewotKwkgICAgZG9fY29ycnVwdF9y c2Ffa2V5Z2VuID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50Zigi UlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRl ZCBrZXlnZW4uLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJk c2FrZXkiKSkgewotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAgYmFk X2RzYSA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChhcmd2WzFdLCAiZHNha2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9 IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2Vu ZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4u XG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7Ci0r ICAgICAgICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKLSsgICAgICAgICAgICBwcmludGYoIlNI QS0xIGhhc2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsJfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJybmciKSkgewotKwkgICAgRklQU19jb3JydXB0X3JuZygpOwotKwl9IGVsc2Ug aWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikpIHsKLSsJICAgIGRvX3JuZ19zdGljayA9 IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVj ayBjb250aW51b3VzIHRlc3QuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAg ICBwcmludGYoIkJhZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOwotKyAgICAgICAgICAg IGV4aXQoMSk7Ci0rICAgICAgICB9Ci0rCWlmICghbm9fZXhpdCkgewotKyAgICAgICAgCWlmICgh RklQU19tb2RlX3NldCgxKSkgewotKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgICAg IAkgICAgcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKLSsJCSAgICBleGl0 KDEpOwotKwkJfQotKyAgICAgICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3Nm dWxcbiIpOwotKyAgICAgICAgCWV4aXQoMCk7Ci0rCX0KLSsgICAgfQotKwotKyAgICAvKiBOb24t QXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCIx LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Ci0rICAg IHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsgICAgcHJpbnRm KCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwot KyAgICAvKiBQb3dlci11cCBzZWxmIHRlc3QKLSsgICAgKi8KLSsgICAgRVJSX2NsZWFyX2Vycm9y KCk7Ci0rICAgIHByaW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOwot KyAgICBpZiAoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r ICAgICAgICBwcmludGYoRmFpbCgiRkFJTEVEIVxuIikpOwotKwlleGl0KDEpOwotKwl9Ci0rICAg IHByaW50Zigic3VjY2Vzc2Z1bFxuIik7Ci0rICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4p Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX2Nv cnJ1cHRfcnNhX2tleWdlbikKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigp OwotKyAgICBpZiAoZG9fcm5nX3N0aWNrKQotKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7 Ci0rCi0rICAgIC8qIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJp bnRmKCIzLiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQ U19hZXNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsK LSsgICAgLyogUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsg ICAgKi8KLSsgICAgcHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24v ZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBERVMtQ0JD IGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjUuIERFUy1FQ0Ig ZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19kZXMzX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIERT QSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KLSsgICAgKi8KLSsgICAg cHJpbnRmKCI2LiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4u Iik7Ci0rICAgIHByaW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS0xIGhhc2gKLSsgICAgKi8K LSsgICAgcHJpbnRmKCI3YS4gU0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hh MV90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAg ICAvKiBTSEEtMjU2IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNo Li4uIik7Ci0rICAgIHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTUxMiBoYXNoCi0rICAgICov Ci0rICAgIHByaW50ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNf c2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIEhNQUMtU0hBLTEgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdkLiBITUFD LVNIQS0xIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNI QS0yMjQgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4u LiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3NmdWxc biIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjU2IGhhc2gK LSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKLSsgICAg cHJpbnRmKCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCi0rICAgICovCi0r ICAgIHByaW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQ U19obWFjX3NoYTM4NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4i KSApOwotKwotKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYo IjdoLiBITUFDLVNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGE1 MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsg ICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0rICAg IHByaW50ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5c biIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7Ci0r ICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJICAg IDogRmFpbCgiZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAgLyogWmVyb2l6YXRp b24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOwotKyAgICBw cmludGYoIFplcm9pemUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJICAgIDog RmFpbCgiXHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOwotKwotKyAgICBwcmludGYoIlxuQWxs IHRlc3RzIGNvbXBsZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOwotKyAgICByZXR1cm4g RXJyb3IgPyAxIDogMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZmlwcy9N YWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMJMjAx Mi0wNy0xMiAyMTo0OToyNS4zNDYzNTI0NjQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vZmlwcy9NYWtlZmlsZQkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NjM1MjQ2NCArMDIwMAotQEAg LTAsMCArMSwzNDAgQEAKLSsjCi0rIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0rIwot KwotK0RJUj0JZmlwcwotK1RPUD0JLi4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxBRz0t ZwotK01BS0VGSUxFPQlNYWtlZmlsZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNMVURF UykgJChDRkxBRykKLSsKLStHRU5FUkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3VpdGUu YyBmaXBzX3JhbmR0ZXN0LmMKLStBUFBTPQotKwotK1BST0dSQU09IGZpcHNfc3RhbmRhbG9uZV9o bWFjCi0rRVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQotKwotK0xJQj0kKFRPUCkvbGliY3J5cHRv LmEKLStMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNf aG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ffc2Vs ZnRlc3QuYyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBm aXBzX3JhbmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlwc19wb3N0LmMgZmlwc19kcmJn X2N0ci5jIGZpcHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMuYyBcCi0rICAgIGZpcHNfZHJi Z19saWIuYyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFuZF9s aWIuYyBcCi0rICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCi0r Ci0rTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2ht YWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZpcHNfcnNhX3NlbGZ0 ZXN0Lm8gZmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlw c19yYW5kLm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJiZ19j dHIubyBmaXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAotKyAgICBmaXBzX2RyYmdf bGliLm8gZmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRfbGli Lm8gXAotKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubwotKwot K0xJQkNSWVBUTz0tTC4uIC1sY3J5cHRvCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFs b25lX2htYWMuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFERVI9CSQo RVhIRUFERVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSsKLSt0 b3A6Ci0rCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2Fs bCkKLSsKLSthbGw6CWxpYiBleGUKLSsKLStsaWI6CSQoTElCT0JKKQotKwkkKEFSKSAkKExJQikg JChMSUJPQkopCi0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotKwlAdG91 Y2ggbGliCi0rCi0rZXhlOgkkKEVYRSkKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRp bC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVS TCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVS KQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0r CUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStp bnN0YWxsOgotKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9w IE1ha2VmaWxlLi4uCi0rCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVh ZGVybGlzdCA7IFwKLSsJZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFM TFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJ WCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3Rh Z3M6Ci0rCWN0YWdzICQoU1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5U ICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURF UEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURF UEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJ QlNSQykKLSsKLStkY2xlYW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUg VEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcK LSsJbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICou byAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0r JChFWEUpOiAkKFBST0dSQU0pLm8KLSsJRklQU19TSEFfQVNNPSIiOyBmb3IgaSBpbiAkKFNIQTFf QVNNX09CSikgc2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vc2hh LyQkaSIgOyBkb25lOyBcCi0rCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKFBST0dSQU0pLm8gJCRG SVBTX1NIQV9BU00KLSsKLSsjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5k IGRlcGVuZHMgb24gaXQuCi0rCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlw cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK LStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwcy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzLmMgZmlwc19sb2NsLmgKLStmaXBz X2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK LStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0r Zmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2Zp cHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r Zmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStm aXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2Zp cHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2Zp cHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19hZXNf c2VsZnRlc3QuYwotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19kZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0r Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCBmaXBzX2Rlc19zZWxmdGVzdC5jCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJi Z19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAot K2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStm aXBzX2RyYmdfY3RyLm86IGZpcHNfZHJiZ19jdHIuYyBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2Ry YmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStm aXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJn X2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX2hh c2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVj dHMuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK LStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCBmaXBzX2RyYmdfaGFzaC5jCi0rZmlwc19kcmJnX2hhc2gubzogZmlwc19yYW5k X2xjbC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19k cmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19obWFj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19obWFjLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2htYWMuYwotK2ZpcHNfZHJiZ19o bWFjLm86IGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvaG1hYy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2Ry YmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmgKLStmaXBzX2RyYmdfbGliLm86IGZpcHNfZHJiZ19saWIuYyBmaXBzX2xvY2wu aCBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19yYW5kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2Zp cHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Ry YmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aCBmaXBzX2RyYmdfcmFuZC5jCi0rZmlwc19kcmJnX3JhbmQubzogZmlwc19yYW5kX2xjbC5oCi0r Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz X3JhbmQuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1h Yy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o Ci0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK LStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0r Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAot K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBz X2RyYmdfc2VsZnRlc3QuYwotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiBmaXBzX2RyYmdfc2VsZnRl c3QuaCBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAot K2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfZHNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19kc2Ffc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kc2Ffc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHNhX3NlbGZ0ZXN0LmMKLStmaXBzX2Rz YV9zZWxmdGVzdC5vOiBmaXBzX2xvY2wuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19obWFjX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX2htYWNfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2htYWNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2htYWNfc2VsZnRlc3QuYwotK2Zp cHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfcG9zdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o Ci0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3Bvc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19wb3N0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xv Y2wuaCBmaXBzX3Bvc3QuYwotK2ZpcHNfcmFuZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oCi0rZmlwc19yYW5kLm86IGZpcHNfbG9jbC5oIGZpcHNfcmFuZC5jCi0rZmlw c19yYW5kX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oCi0r Zmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19yYW5kX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o Ci0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcmFu ZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcmFuZF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlw c19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3Jh bmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oCi0rZmlwc19yYW5kX2xpYi5vOiBmaXBzX3JhbmRfbGliLmMKLStmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX3JhbmRfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFu ZC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgK LStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStm aXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2Zp cHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0r Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0r Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9j bC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IGZpcHNfcmFuZF9zZWxmdGVzdC5jCi0rZmlwc19y c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcnNhLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfcnNhX3NlbGZ0ZXN0LmMKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNf cnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK LStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAot K2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlw c19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCBmaXBzX3JzYV94OTMxZy5jCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3NoYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3No YV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3NoYV9z ZWxmdGVzdC5jCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vaG1hYy9obWFjLmMuZmlw cyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vaG1hYy9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDExLTA2LTEyIDE3OjA3OjI2LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9obWFjL2htYWMuYwkyMDEyLTA3LTEyIDIxOjQ5 OjI1LjM0NjM1MjQ2NCArMDIwMAotQEAgLTgxLDExICs4MSw2IEBAIGludCBITUFDX0luaXRfZXgo SE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAJCQlFVlBlcnIoRVZQX0ZfSE1BQ19JTklUX0VYLCBF VlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0gCQkJcmV0dXJuIDA7Ci0gCQkJfQotLQkJLyogT3Ro ZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwKLS0J CSAqIHZpYSBGSVBTX2htYWNfaW5pdF9leCgpLgotLQkJICovCi0tCQlpZiAoIWltcGwgJiYgIWN0 eC0+aV9jdHguZW5naW5lKQotLQkJCXJldHVybiBGSVBTX2htYWNfaW5pdF9leChjdHgsIGtleSwg bGVuLCBtZCwgTlVMTCk7Ci0gCQl9Ci0gI2VuZGlmCi0gCi1AQCAtOTksNiArOTQsMTMgQEAgaW50 IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bwotIAotIAlpZiAoa2V5ICE9IE5V TEwpCi0gCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9kZSgpICYmICEo bWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKLSsJCSYmICghKGN0eC0+bWRfY3R4LmZsYWdz ICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5pX2N0eC5m bGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsJCSB8fCAhKGN0eC0+b19j dHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSkKLSsJCQlnb3RvIGVy cjsKLSsjZW5kaWYKLSAJCXJlc2V0PTE7Ci0gCQlqPUVWUF9NRF9ibG9ja19zaXplKG1kKTsKLSAJ CU9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKLUBAIC0xNTUsMTAg KzE1Nyw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAotIAotIGlu dCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBz aXplX3QgbGVuKQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkg JiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJcmV0dXJuIEZJUFNfaG1hY191cGRhdGUoY3R4LCBk YXRhLCBsZW4pOwotLSNlbmRpZgotIAlyZXR1cm4gRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5tZF9j dHgsZGF0YSxsZW4pOwotIAl9Ci0gCi1AQCAtMTY2LDEwICsxNjQsNiBAQCBpbnQgSE1BQ19GaW5h bChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjCi0gCXsKLSAJdW5zaWduZWQgaW50IGk7Ci0gCXVu c2lnbmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwot LQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJcmV0dXJuIEZJUFNf aG1hY19maW5hbChjdHgsIG1kLCBsZW4pOwotLSNlbmRpZgotIAotIAlpZiAoIUVWUF9EaWdlc3RG aW5hbF9leCgmY3R4LT5tZF9jdHgsYnVmLCZpKSkKLSAJCWdvdG8gZXJyOwotQEAgLTIwOSwxMyAr MjAzLDYgQEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQwotIAotIHZv aWQgSE1BQ19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xf RklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJewotLQkJ RklQU19obWFjX2N0eF9jbGVhbnVwKGN0eCk7Ci0tCQlyZXR1cm47Ci0tCQl9Ci0tI2VuZGlmCi0g CUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7Ci0gCUVWUF9NRF9DVFhfY2xlYW51cCgm Y3R4LT5vX2N0eCk7Ci0gCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5tZF9jdHgpOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21kMi9t ZDJfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4z NDYzNTI0NjQgKzAyMDAKLUBAIC02Miw2ICs2MiwxMSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL21k Mi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAKLSBjb25zdCBjaGFy IE1EMl92ZXJzaW9uW109Ik1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTExNiw3 ICsxMjEsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQotIAkJcmV0dXJuKCJtZDIo aW50KSIpOwotIAl9Ci0gCi0tZmlwc19tZF9pbml0KE1EMikKLStub25maXBzX21kX2luaXQoTUQy KQotIAl7Ci0gCWMtPm51bT0wOwotIAltZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL21kNC9tZDRfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0My4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMJMjAxMi0wNy0xMiAy MTo0OToyNS4zNDYzNTI0NjQgKzAyMDAKLUBAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ0 X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25l ZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykw eDEwMzI1NDc2TAotIAotLWZpcHNfbWRfaW5pdChNRDQpCi0rbm9uZmlwc19tZF9pbml0KE1ENCkK LSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RBVEFfQTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTItMDctMTIgMjE6NDk6 MjUuMzQ3MzUyNDg3ICswMjAwCi1AQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJz aW9uW109Ik1ENSIgT1BFTlNTTF9WCi0gI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9u ZykweDk4YmFkY2ZlTAotICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMy NTQ3NkwKLSAKLS1maXBzX21kX2luaXQoTUQ1KQotK25vbmZpcHNfbWRfaW5pdChNRDUpCi0gCXsK LSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tZGMy L21kYzJkZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMJMjAxMi0wNy0xMiAyMTo0OToy NS4zNDczNTI0ODcgKzAyMDAKLUBAIC03Niw3ICs3Niw3IEBACi0gCQkJKigoYykrKyk9KHVuc2ln bmVkIGNoYXIpKCgobCk+PjI0TCkmMHhmZikpCi0gCi0gc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1E QzJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7Ci0tZmlwc19t ZF9pbml0KE1EQzIpCi0rbm9uZmlwc19tZF9pbml0KE1EQzIpCi0gCXsKLSAJYy0+bnVtPTA7Ci0g CWMtPnBhZF90eXBlPTE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vb19maXBzLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vb19maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9j cnlwdG8vb19maXBzLmMuZmlwcwkyMDEyLTA0LTIwIDE2OjQyOjU0LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9vX2ZpcHMuYwkyMDEyLTA3LTEyIDIwOjM5OjE5LjAw MDAwMDAwMCArMDIwMAotQEAgLTc5LDYgKzc5LDggQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IHIp Ci0gI2lmbmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNTCi0gI2RlZmluZSBGSVBTX0FVVEhfVVNFUl9Q QVNTCSJEZWZhdWx0IEZJUFMgQ3J5cHRvIFVzZXIgUGFzc3dvcmQiCi0gI2VuZGlmCi0rCWlmIChG SVBTX21vZHVsZV9tb2RlKCkpIC8qIGNhbiBiZSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IE9Q RU5TU0xfaW5pdCgpICovCi0rCQlyZXR1cm4gMTsKLSAJaWYgKCFGSVBTX21vZHVsZV9tb2RlX3Nl dChyLCBGSVBTX0FVVEhfVVNFUl9QQVNTKSkKLSAJCXJldHVybiAwOwotIAlpZiAocikKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9vX2luaXQuYy5maXBzCTIw MTEtMDUtMjYgMTY6MTk6MTkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL29faW5pdC5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ3MzUyNDg3ICswMjAwCi1AQCAtNTUs MjggKzU1LDYzIEBACi0gI2luY2x1ZGUgPGVfb3MuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgotKyNpbmNsdWRlIDxmY250bC5oPgotKyNpbmNsdWRlIDx1bmlzdGQu aD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsKLSsjZGVmaW5l IEZJUFNfTU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiCi0r Ci0rc3RhdGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKLSsJewotKwljaGFyIGJ1ZlsyXSA9 ICIwIjsKLSsJaW50IGZkOwotKwkKLSsJaWYgKGdldGVudigiT1BFTlNTTF9GT1JDRV9GSVBTX01P REUiKSAhPSBOVUxMKQotKwkJewotKwkJYnVmWzBdID0gJzEnOwotKwkJfQotKwllbHNlIGlmICgo ZmQgPSBvcGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+PSAwKQotKwkJewot KwkJd2hpbGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCAmJiBlcnJubyA9PSBFSU5U Uik7Ci0rCQljbG9zZShmZCk7Ci0rCQl9Ci0rCS8qIEZhaWx1cmUgcmVhZGluZyB0aGUgZmlwcyBt b2RlIHN3aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90Ci0rCSAqIHN3aXRjaGluZyBpbnRvIEZJUFMg bW9kZS4gV2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCi0rCSAqIG90aGVyd2lzZS4gCi0r CSAqLwotKwkKLSsJaWYgKGJ1ZlswXSA9PSAnMScpCi0rCQl7Ci0rCQlGSVBTX21vZGVfc2V0KDEp OwotKwkJfQotKwl9Ci0gI2VuZGlmCi0gCi0gLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9wZW5T U0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSAgKiBDdXJyZW50bHkgb25seSBzZXRzIEZJ UFMgY2FsbGJhY2tzCi0gICovCi0gCi0tdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKLSt2b2lkIE9Q RU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0gCXsKLSAJc3RhdGljIGludCBkb25lID0gMDsKLSAJ aWYgKGRvbmUpCi0gCQlyZXR1cm47Ci0gCWRvbmUgPSAxOwotICNpZmRlZiBPUEVOU1NMX0ZJUFMK LS0JRklQU19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xvY2ssIENSWVBUT19hZGRfbG9j ayk7Ci0tCUZJUFNfc2V0X2Vycm9yX2NhbGxiYWNrcyhFUlJfcHV0X2Vycm9yLCBFUlJfYWRkX2Vy cm9yX3ZkYXRhKTsKLS0JRklQU19zZXRfbWFsbG9jX2NhbGxiYWNrcyhDUllQVE9fbWFsbG9jLCBD UllQVE9fZnJlZSk7Ci0gCVJBTkRfaW5pdF9maXBzKCk7Ci0rCWluaXRfZmlwc19tb2RlKCk7Ci0g I2VuZGlmCi0gI2lmIDAKLSAJZnByaW50ZihzdGRlcnIsICJDYWxsZWQgT1BFTlNTTF9pbml0XG4i KTsKLSAjZW5kaWYKLSAJfQotIAotK3ZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCi0rCXsKLSsJT1BF TlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vb3BlbnNzbGNvbmYu aC5pbgotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAw NS0xMi0xNiAxMTozNzoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vb3BlbnNzbGNvbmYuaC5pbgkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NzM1MjQ4NyArMDIwMAot QEAgLTEsNSArMSwyMCBAQAotIC8qIGNyeXB0by9vcGVuc3NsY29uZi5oLmluICovCi0gCi0rI2lm ZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAotKwotKy8qIEluY2x1ZGUgYW55IHN5bWJvbHMg aGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQot KyAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVuZC4KLSsgKgotKyAqIFtPdXIg Im1ha2UgZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNlIGFjdHVh bCBidWlsZCBzZXR0aW5ncwotKyAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRv IHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQotKyAqLwot KwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFMKLSsjZW5kaWYK LSsKLSsjZW5kaWYKLSsKLSAvKiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLwotICN1bmRlZiBJMzg2 X09OTFkKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wa2NzMTIvcDEyX2NydC5j LmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMKLS0tLSBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzCTIwMDktMDMtMDkgMTQ6MDg6MDQu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0 LmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDczNTI0ODcgKzAyMDAKLUBAIC01OSw2ICs1OSwxMCBA QAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRl IDxvcGVuc3NsL3BrY3MxMi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gCi0gc3RhdGljIGludCBwa2NzMTJfYWRkX2Jh ZyhTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtDUzEyX1NBRkVCQUcgKmJhZyk7 Ci1AQCAtOTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3JlYXRlKGNoYXIgKnBhc3MsIGNo YXIgKgotIAotIAkvKiBTZXQgZGVmYXVsdHMgKi8KLSAJaWYgKCFuaWRfY2VydCkKLSsJCXsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJbmlkX2NlcnQgPSBO SURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKLSsJCWVsc2UKLSsjZW5kaWYK LSAJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKLSsJCX0KLSAJ aWYgKCFuaWRfa2V5KQotIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9Ucmlw bGVERVNfQ0JDOwotIAlpZiAoIWl0ZXIpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v cmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMK LS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDExLTAxLTI2 IDE1OjU1OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yYW5k L21kX3JhbmQuYwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjM0NzM1MjQ4NyArMDIwMAotQEAgLTM4OSw3 ICszODksMTAgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaAotIAlD UllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotIAljcnlwdG9fbG9ja19yYW5kID0g MTsKLSAKLS0JaWYgKCFpbml0aWFsaXplZCkKLSsJLyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFs IGVudHJvcHkgaW4gRklQUyBtb2RlLCBkcmJnIHByb3ZpZGVzIHRoZSAKLSsJICogZXhwYW5zaW9u Ci0rCSAqLwotKwlpZiAoIWluaXRpYWxpemVkIHx8IEZJUFNfbW9kdWxlX21vZGUoKSkgCi0gCQl7 Ci0gCQlSQU5EX3BvbGwoKTsKLSAJCWluaXRpYWxpemVkID0gMTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFjL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yYW5k L3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzCTIwMTIt MDctMTIgMjE6NDk6MjQuNzY5MzM5NDgzICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L3JhbmQvcmFuZC5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ4MzUyNTA5ICswMjAwCi1AQCAtMTMz LDE1ICsxMzMsMzMgQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7Ci0gLyogRXJy b3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rl cy4gKi8KLSsjZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4Ci0r I2RlZmluZSBSQU5EX0ZfRklQU19SQU5ECQkJCSAxMDMKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JB TkRfQllURVMJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEw NgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfWDkzMV9TRVRfRFQJCQkJIDEwNgotKyNkZWZpbmUgUkFO RF9GX0ZJUFNfU0VUX0RUCQkJCSAxMDQKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NF RUQJCQkgMTA3Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEwNQotICNk ZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwMQotLSNkZWZpbmUgUkFORF9G X1JBTkRfSU5JVF9GSVBTCQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJ CQkgMTA5Ci0gI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCi0gCi0gLyog UmVhc29uIGNvZGVzLiAqLwotLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJH CQkJIDEwMgotLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMDMK LS0jZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTAxCi0rI2RlZmlu ZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTEyCi0rI2RlZmluZSBSQU5EX1Jf RVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDExMwotKyNkZWZpbmUgUkFORF9SX05PTl9GSVBT X01FVEhPRAkJCQkgMTA1Ci0rI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2 Ci0rI2RlZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDExMQotKyNkZWZp bmUgUkFORF9SX05PX0tFWV9TRVQJCQkJIDEwNwotKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5H X0ZPUl9UT09fTVVDSAkJCSAxMDEKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgK LSsjZGVmaW5lIFJBTkRfUl9QUk5HX0tFWUVECQkJCSAxMDkKLSsjZGVmaW5lIFJBTkRfUl9QUk5H X05PVF9SRUtFWUVECQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJ CSAxMDMKLSAjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAotKyNkZWZpbmUg UkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkJCSAxMTAKLSsjZGVmaW5lIFJBTkRf Ul9QUk5HX1NUVUNLCQkJCSAxMDQKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRv L3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NC4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxMi0wNy0x MiAyMTo0OToyNS4zNDgzNTI1MDkgKzAyMDAKLUBAIC03MCw3ICs3MCw3IEBAIGNvbnN0IGNoYXIg Uk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKLSAgICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2Nr KFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7Ci0gIyAgZW5k aWYKLSAKLS1maXBzX21kX2luaXQoUklQRU1EMTYwKQotK25vbmZpcHNfbWRfaW5pdChSSVBFTUQx NjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9UklQRU1EMTYwX0E7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcyBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vcnNhL3JzYV9jcnB0LmMuZmlwcwkyMDExLTA2LTAyIDIwOjIyOjQyLjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2NycHQuYwkyMDEyLTA3LTEyIDIx OjQ5OjI1LjM0ODM1MjUwOSArMDIwMAotQEAgLTkwLDEwICs5MCw5IEBAIGludCBSU0FfcHJpdmF0 ZV9lbmNyeXB0KGludCBmbGVuLCBjb25zdAotIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykK LSAJewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5t ZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotLQkJCSYmICEocnNhLT5mbGFncyAm IFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZs YWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotIAkJewotLQkJUlNBZXJyKFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotKwkJUlNBZXJy KFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9J Tl9GSVBTX01PREUpOwotIAkJcmV0dXJuIC0xOwotIAkJfQotICNlbmRpZgotQEAgLTExOCwxMCAr MTE3LDkgQEAgaW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdQotIAkgICAg IFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSAJewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYg KEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KQotLQkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJaWYo RklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQot IAkJewotLQkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNf UlNBX01FVEhPRCk7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9P UEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSAJCXJldHVybiAtMTsKLSAJCX0K LSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2VheS5jLmZp cHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfZWF5LmMKLS0tLSBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMTEtMTAtMTkgMTY6NTg6NTkuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxMi0wNy0x MiAyMTo0OToyNS4zNDgzNTI1MDkgKzAyMDAKLUBAIC0xMTQsNiArMTE0LDEwIEBACi0gI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAjaW5jbHVkZSA8 b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSAjaWZuZGVm IFJTQV9OVUxMCi0gCi1AQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9w a2NzMV9lYXlfbWV0aD17Ci0gCUJOX21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNo b3VsZCBub3QgdXNlIE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLwotIAlSU0FfZWF5X2luaXQsCi0g CVJTQV9lYXlfZmluaXNoLAotLQkwLCAvKiBmbGFncyAqLwotKwlSU0FfRkxBR19GSVBTX01FVEhP RCwgLyogZmxhZ3MgKi8KLSAJTlVMTCwKLSAJMCwgLyogcnNhX3NpZ24gKi8KLSAJMCwgLyogcnNh X3ZlcmlmeSAqLwotQEAgLTE1OCw2ICsxNjIsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1Ymxp Y19lbmNyeXB0KGludCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKLSAJQk5fQ1RYICpj dHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkJ ewotKwkJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQ U19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsK LSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VB WV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4g LTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+ IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNB X0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTM2MSw2 ICszODMsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgotIAlC SUdOVU0gKnVuYmxpbmQgPSBOVUxMOwotIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VB WV9QUklWQVRFX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlyZXR1 cm4gLTE7Ci0rCQkJfQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBT X0FMTE9XKQotKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFU RV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJ CQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkg Z290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7 Ci1AQCAtNTA0LDYgKzU0NCwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0 KGludCBmCi0gCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gCUJOX0JMSU5ESU5HICpibGluZGlu ZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0r CQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJ UFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NM X1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNB X0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0 dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYoKGN0eCA9IEJOX0NUWF9uZXco KSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlmICAgPSBCTl9D VFhfZ2V0KGN0eCk7Ci1AQCAtNjM5LDYgKzY5NywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVi bGljX2RlY3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFgg KmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQot KwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihG SVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19OT05fRklQU19BTExPVykKLSsJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0Ff RUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVy biAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4p ID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9S U0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtODQ3 LDEyICs5MjMsMTIgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYwot IAlpZiAoIUJOX21vZChyMCxwcjEscnNhLT5wLGN0eCkpIGdvdG8gZXJyOwotIAotIAkvKiBJZiBw IDwgcSBpdCBpcyBvY2Nhc2lvbmFsbHkgcG9zc2libGUgZm9yIHRoZSBjb3JyZWN0aW9uIG9mCi0t ICAgICAgICAgKiBhZGRpbmcgJ3AnIGlmIHIwIGlzIG5lZ2F0aXZlIGFib3ZlIHRvIGxlYXZlIHRo ZSByZXN1bHQgc3RpbGwKLSsJICogYWRkaW5nICdwJyBpZiByMCBpcyBuZWdhdGl2ZSBhYm92ZSB0 byBsZWF2ZSB0aGUgcmVzdWx0IHN0aWxsCi0gCSAqIG5lZ2F0aXZlLiBUaGlzIGNhbiBicmVhayB0 aGUgcHJpdmF0ZSBrZXkgb3BlcmF0aW9uczogdGhlIGZvbGxvd2luZwotIAkgKiBzZWNvbmQgY29y cmVjdGlvbiBzaG91bGQgKmFsd2F5cyogY29ycmVjdCB0aGlzIHJhcmUgb2NjdXJyZW5jZS4KLSAJ ICogVGhpcyB3aWxsICpuZXZlciogaGFwcGVuIHdpdGggT3BlblNTTCBnZW5lcmF0ZWQga2V5cyBi ZWNhdXNlCi0tICAgICAgICAgKiB0aGV5IGVuc3VyZSBwID4gcSBbc3RldmVdCi0tICAgICAgICAg Ki8KLSsJICogdGhleSBlbnN1cmUgcCA+IHEgW3N0ZXZlXQotKwkgKi8KLSAJaWYgKEJOX2lzX25l Z2F0aXZlKHIwKSkKLSAJCWlmICghQk5fYWRkKHIwLHIwLHJzYS0+cCkpIGdvdG8gZXJyOwotIAlp ZiAoIUJOX211bChyMSxyMCxyc2EtPnEsY3R4KSkgZ290byBlcnI7Ci1AQCAtODk3LDYgKzk3Myw5 IEBAIGVycjoKLSAKLSBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKLSAJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAly c2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsK LSAJcmV0dXJuKDEpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3Jz YV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2Vyci5jCi0tLS0gb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDExLTEwLTEwIDAxOjEzOjUw LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2Vyci5j CTIwMTItMDctMTIgMjE6NDk6MjUuMzQ4MzUyNTA5ICswMjAwCi1AQCAtMTIxLDYgKzEyMSw4IEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9wdWJsaWNfZW5jcnlwdCJ9LAotIHtFUlJfRlVO QyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAotIHtFUlJfRlVOQyhS U0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi0re0VSUl9G VU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhv ZCJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9 LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAotIHtFUlJfRlVOQyhS U0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NU UklORyJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0x LjAuMWMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNh L3JzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTU6MTg6MDcuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4z NDkzNTI1MzEgKzAyMDAKLUBAIC02OSw2ICs2OSw3OCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0r c3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsKLSt2b2lkIEZJUFNfY29y cnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7 Ci0rCX0KLSsKLStpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCi0rCXsKLSsJY29uc3QgdW5z aWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rCXVuc2lnbmVk IGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsJaW50IGxlbiwgcmV0ID0gMDsK LSsJRVZQX1BLRVkgKnBrOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOwotKwotKwkvKiBQ ZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCi0rCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVWUF9zaGEx KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCi0rCQl8fCAhZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9N RF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKLSsJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MsIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNl IGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCi0rCWN0YnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCWlmICghY3RidWYpCi0rCQlnb3RvIGVycjsKLSsKLSsJ bGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNh LCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gPD0gMCkKLSsJCWdvdG8gZXJyOwotKwkv KiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCi0rCWlmICgobGVu ID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCi0rCQln b3RvIGVycjsKLSsJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsKLSsJ aWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxl biwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsJaWYgKGxlbiAhPSAo c2l6ZW9mKHRicykgLSAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAobWVtY21wKHB0YnVmLCB0YnMs IGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJaWYgKCFwdGJ1ZikKLSsJ CWdvdG8gZXJyOwotKwkKLSsJZXJyOgotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlmaXBzX3Nl dF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxGSVBT X1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKwkJfQotKwotKwlpZiAoY3RidWYpCi0rCQlPUEVO U1NMX2ZyZWUoY3RidWYpOwotKwlpZiAocHRidWYpCi0rCQlPUEVOU1NMX2ZyZWUocHRidWYpOwot KwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQot ICNlbmRpZgotIAotIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQg Yml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOwotQEAgLTgxLDcgKzE1Myw3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAotIGludCBSU0FfZ2VuZXJh dGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAq Y2IpCi0gCXsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhKHJz YS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKLSsJaWYgKEZJUFNfbW9kdWxl X21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKLSAJ CQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0gCQl7Ci0gCQlS U0FlcnIoUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RCk7Ci1AQCAtOTAsMTAgKzE2Miw2IEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNh LCBpbnQgYmkKLSAjZW5kaWYKLSAJaWYocnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKQotIAkJcmV0dXJu IHJzYS0+bWV0aC0+cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKLS0jaWZkZWYg T1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXJldHVybiBGSVBTX3JzYV9nZW5l cmF0ZV9rZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7Ci0tI2VuZGlmCi0gCXJldHVybiBy c2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7Ci0gCX0KLSAKLUBAIC0x MDUsNiArMTczLDIzIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAot IAlpbnQgYml0c3AsYml0c3Esb2s9IC0xLG49MDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgCXsKLSsJCSAgICBGSVBTZXJyKEZJUFNf Rl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAg IAlyZXR1cm4gMDsKLSsJICAgIAl9Ci0rCi0rCQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykKLSsJCSAgICB7Ci0rCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JV SUxUSU5fS0VZR0VOLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKLSsJCSAgICByZXR1cm4gMDsKLSsJ CSAgICB9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHgg PT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotQEAgLTIxNiw2ICszMDEs MTcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCi0gCQlwID0gcnNh LT5wOwotIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3Rv IGVycjsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZHVsZV9tb2RlKCkp Ci0rCQl7Ci0rCQlpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKLSsJCQlCTl9hZGRfd29yZChy c2EtPm4sIDEpOwotKwotKwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCi0rCQkgICAgZ290byBl cnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCW9rPTE7Ci0gZXJyOgotIAlpZiAob2sgPT0gLTEpCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL3JzYS9yc2EuaAotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhLmgu ZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjA5MzM0Njc3MiArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9yc2EvcnNhLmgJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDkzNTI1MzEgKzAyMDAK LUBAIC0xNjQsNiArMTY0LDggQEAgc3RydWN0IHJzYV9zdAotICMgZGVmaW5lIE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMJMTYzODQKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0gI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFM TF9NT0RVTFVTX0JJVFMKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJ MzA3MgotICNlbmRpZgotQEAgLTI5MCw2ICsyOTIsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tl eShpbnQgYml0cywgdW5zaWduZQotIAotIC8qIE5ldyB2ZXJzaW9uICovCi0gaW50CVJTQV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7 Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpw MiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNv bnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBp bnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotIAotIGludAlSU0FfY2hl Y2tfa2V5KGNvbnN0IFJTQSAqKTsKLSAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwot QEAgLTQ4Nyw3ICs0OTQsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNk ZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX05PTkUJCQkgMTA3Ci0gI2RlZmluZSBSU0FfRl9S U0FfUEFERElOR19BRERfUEtDUzFfT0FFUAkJIDEyMQotICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJ TkdfQUREX1BLQ1MxX1BTUwkJCSAxMjUKLS0jZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9Q S0NTMV9QU1NfTUdGMQkJIDE0OAotKyNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1Mx X1BTU19NR0YxCQkgMTU4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQ RV8xCQkgMTA4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8yCQkg MTA5Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NMVjIzCQkJIDExMAotQEAgLTUw MCwyMCArNTA3LDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmlu ZSBSU0FfRl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAotICNkZWZpbmUgUlNBX0ZfUlNB X1BSSU5UCQkJCQkgMTE1Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJIDExNgotLSNk ZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAKLS0jZGVmaW5lIFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQJCQkgMTUxCi0rI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNS WVBUCQkJIDE1NwotKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNDgKLSAj ZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3Ci0gI2RlZmluZSBSU0FfRl9SU0Ff UFJJVl9FTkNPREUJCQkJIDEzOAotLSNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJ IDE1MgotKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQotICNkZWZpbmUg UlNBX0ZfUlNBX1BVQkxJQ19FTkNSWVBUCQkJIDE1MwotICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9E RUNPREUJCQkJIDEzOQotICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgot KyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKLSsjZGVmaW5lIFJT QV9GX1JTQV9TRVRfTUVUSE9ECQkJCSAxNTEKLSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkg MTE3Ci0gI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAotICNk ZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZ X0FTTjFfT0NURVRfU1RSSU5HCQkgMTIwCi0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1Mx X1BTUwkJCSAxMjYKLS0jZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkg MTQ5Ci0rI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE1MgotIAot IC8qIFJlYXNvbiBjb2Rlcy4gKi8KLSAjZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSAkJ CSAxMDAKLUBAIC01NDIsMjEgKzU1MSwyMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZv aWQpOwotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJCSAxNTYKLSAjZGVmaW5lIFJT QV9SX0lOVkFMSURfUEFERElORwkJCQkgMTM4Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJ TkdfTU9ERQkJCSAxNDEKLS0jZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkg MTQ5Ci0rI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE1NwotICNkZWZp bmUgUlNBX1JfSU5WQUxJRF9QU1NfU0FMVExFTgkJCSAxNDYKLS0jZGVmaW5lIFJTQV9SX0lOVkFM SURfU0FMVF9MRU5HVEgJCQkgMTUwCi0rI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RI CQkJIDE1OAotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVSCQkJCSAxMzkKLSAjZGVmaW5l IFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCi0gI2RlZmluZSBSU0FfUl9JUU1QX05P VF9JTlZFUlNFX09GX1EJCQkgMTI2Ci0gI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJ CQkgMTIwCi0gI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0Ci0gI2RlZmlu ZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1Ci0tI2RlZmluZSBSU0FfUl9OT05fRklQ U19SU0FfTUVUSE9ECQkJIDE1NwotKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJ CSAxNDkKLSsjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTQ5Ci0gI2RlZmluZSBS U0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCi0gI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9S RV9CTE9DS19NSVNTSU5HCQkJIDExMwotICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9Q X1EJCQkgMTI3Ci0gI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQotLSNk ZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTU4Ci0rI2Rl ZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKLSAjZGVm aW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAot ICNkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0Ci0gI2RlZmluZSBSU0Ff Ul9QX05PVF9QUklNRQkJCQkgMTI4Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNh L3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2xpYi5jCi0tLS0g b3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDExLTA2LTIwIDIxOjQx OjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX2xp Yi5jCTIwMTItMDctMTIgMjE6NDk6MjUuMzQ5MzUyNTMxICswMjAwCi1AQCAtODQsNiArODQsMTMg QEAgUlNBICpSU0FfbmV3KHZvaWQpCi0gCi0gdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNv bnN0IFJTQV9NRVRIT0QgKm1ldGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJ ewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBT X01FVEhPRCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rI2VuZGlmCi0gCWRlZmF1bHRfUlNBX21ldGgg PSBtZXRoOwotIAl9Ci0gCi1AQCAtOTEsMTggKzk4LDExIEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJT QV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJewotIAlpZiAoZGVmYXVsdF9SU0FfbWV0aCA9PSBOVUxM KQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkKLS0JCQly ZXR1cm4gRklQU19yc2FfcGtjczFfc3NsZWF5KCk7Ci0tCQllbHNlCi0tCQkJcmV0dXJuIFJTQV9Q S0NTMV9TU0xlYXkoKTsKLS0jZWxzZQotICNpZmRlZiBSU0FfTlVMTAotIAkJZGVmYXVsdF9SU0Ff bWV0aD1SU0FfbnVsbF9tZXRob2QoKTsKLSAjZWxzZQotIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0Ff UEtDUzFfU1NMZWF5KCk7Ci0gI2VuZGlmCi0tI2VuZGlmCi0gCQl9Ci0gCi0gCXJldHVybiBkZWZh dWx0X1JTQV9tZXRoOwotQEAgLTExOCw2ICsxMTgsMTMgQEAgaW50IFJTQV9zZXRfbWV0aG9kKFJT QSAqcnNhLCBjb25zdCBSU0FfTQotIAkvKiBOQjogVGhlIGNhbGxlciBpcyBzcGVjaWZpY2FsbHkg c2V0dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8gdXMKLSAJICogdG8gZGVhbCB3aXRo IHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLwotIAljb25zdCBSU0FfTUVUSE9EICptdG1w OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+Zmxh Z3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NF VF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsj ZW5kaWYKLSAJbXRtcCA9IHJzYS0+bWV0aDsKLSAJaWYgKG10bXAtPmZpbmlzaCkgbXRtcC0+Zmlu aXNoKHJzYSk7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotQEAgLTE3MCw2ICsxNzcsMTgg QEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKLSAJCQl9Ci0gCQl9Ci0gI2Vu ZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1l dGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9G X1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKyNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKLSsJCWlmIChyZXQtPmVuZ2luZSkKLSsJCQlFTkdJTkVfZmluaXNoKHJldC0+ ZW5naW5lKTsKLSsjZW5kaWYKLSsJCU9QRU5TU0xfZnJlZShyZXQpOwotKwkJcmV0dXJuIE5VTEw7 Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCXJldC0+cGFkPTA7Ci0gCXJldC0+dmVyc2lvbj0wOwotQEAg LTE4OCw3ICsyMDcsNyBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQotIAly ZXQtPmJsaW5kaW5nPU5VTEw7Ci0gCXJldC0+bXRfYmxpbmRpbmc9TlVMTDsKLSAJcmV0LT5iaWdu dW1fZGF0YT1OVUxMOwotLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1c7Ci0rCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFnczsKLSAJaWYgKCFD UllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0LCAmcmV0LT5leF9kYXRh KSkKLSAJCXsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Jz YS9yc2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMu ZmlwcwkyMDEyLTAyLTE1IDE1OjE0OjAxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNDkzNTI1MzEg KzAyMDAKLUBAIC0yMDYsMjIgKzIwNiw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2Ffc2lnbihFVlBf UEtFWV9DVFggKmMKLSAJCQkJCVJTQV9SX0lOVkFMSURfRElHRVNUX0xFTkdUSCk7Ci0gCQkJcmV0 dXJuIC0xOwotIAkJCX0KLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAocmV0ID4gMCkKLS0J CQl7Ci0tCQkJdW5zaWduZWQgaW50IHNsZW47Ci0tCQkJcmV0ID0gRklQU19yc2Ffc2lnbl9kaWdl c3QocnNhLCB0YnMsIHRic2xlbiwgcmN0eC0+bWQsCi0tCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAot LQkJCQkJCQlyY3R4LT5zYWx0bGVuLAotLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCi0tCQkJCQkJCXNp ZywgJnNsZW4pOwotLQkJCWlmIChyZXQgPiAwKQotLQkJCQkqc2lnbGVuID0gc2xlbjsKLS0JCQll bHNlCi0tCQkJCSpzaWdsZW4gPSAwOwotLQkJCXJldHVybiByZXQ7Ci0tCQkJfQotLSNlbmRpZgot IAotIAkJaWYgKEVWUF9NRF90eXBlKHJjdHgtPm1kKSA9PSBOSURfbWRjMikKLSAJCQl7Ci1AQCAt MzU0LDE5ICszMzgsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFgK LSAjZW5kaWYKLSAJaWYgKHJjdHgtPm1kKQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0J CWlmIChydiA+IDApCi0tCQkJewotLQkJCXJldHVybiBGSVBTX3JzYV92ZXJpZnlfZGlnZXN0KHJz YSwKLS0JCQkJCQkJdGJzLCB0YnNsZW4sCi0tCQkJCQkJCXJjdHgtPm1kLAotLQkJCQkJCQlyY3R4 LT5wYWRfbW9kZSwKLS0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKLS0JCQkJCQkJcmN0eC0+bWdmMW1k LAotLQkJCQkJCQlzaWcsIHNpZ2xlbik7Ci0tCQkJCQkJCQotLQkJCX0KLS0jZW5kaWYKLSAJCWlm IChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKLSAJCQlyZXR1cm4gUlNBX3Zl cmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAotIAkJCQkJc2lnLCBzaWds ZW4sIHJzYSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9zaWduLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcnNhL3JzYV9zaWduLmMKLS0tLSBvcGVuc3NsLTEu MC4xYy9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDEyLTAyLTE1IDE1OjAwOjA5LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDEy LTA3LTEyIDIxOjQ5OjI1LjM1MDM1MjU1MyArMDIwMAotQEAgLTEzOCw3ICsxMzgsOCBAQCBpbnQg UlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCi0gCQlpMmRfWDUwOV9TSUcoJnNp ZywmcCk7Ci0gCQlzPXRtcHM7Ci0gCX0KLS0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdy ZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRo b2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5y c2FfcHJpdl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0Ff UEtDUzFfUEFERElORykgOiAwOwotIAlpZiAoaSA8PSAwKQotIAkJcmV0PTA7Ci0gCWVsc2UKLUBA IC0xNzgsOCArMTc5LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5z aQotIAotIAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBybSkKLSAJCXsKLS0JCWkgPSBS U0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCi0tCQkJCQlzaWdidWYscm0scnNhLFJTQV9Q S0NTMV9QQURESU5HKTsKLSsJCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRo LT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbiwKLSsJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1Mx X1BBRERJTkcpIDogMDsKLSAJCWlmIChpIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gCQkqcHJtX2xl biA9IGk7Ci1AQCAtMTk2LDcgKzE5Nyw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUs IGNvbnN0IHVuc2kKLSAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJ RF9NRVNTQUdFX0xFTkdUSCk7Ci0gCQkJZ290byBlcnI7Ci0gCX0KLS0JaT1SU0FfcHVibGljX2Rl Y3J5cHQoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyog TkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2lu ZyAqLwotKwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9k ZWMoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCi0g CWlmIChpIDw9IDApIGdvdG8gZXJyOwotIAkvKiBPZGRiYWxsIE1EQzIgY2FzZTogc2lnbmF0dXJl IGNhbiBiZSBPQ1RFVCBTVFJJTkcuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hh L3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3NoYS9zaGEyNTYuYwotLS0tIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhMjU2LmMJ MjAxMi0wNy0xMiAyMTo0OToyNS4zNTAzNTI1NTMgKzAyMDAKLUBAIC0xMiwxMiArMTIsMTkgQEAK LSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9zaGEu aD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNl bmRpZgotKwotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0gCi0gY29uc3QgY2hhciBT SEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0gZmlw c19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2Yo KmMpKTsKLSAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOwotIAlj LT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7Ci1AQCAtMjksNiArMzYs OSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQotIAotIGZpcHNfbWRfaW5pdChT SEEyNTYpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmhbMF09MHg2YTA5 ZTY2N1VMOwljLT5oWzFdPTB4YmI2N2FlODVVTDsKLSAJYy0+aFsyXT0weDNjNmVmMzcyVUw7CWMt PmhbM109MHhhNTRmZjUzYVVMOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3NoYS9z aGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhNTEyLmMKLS0tLSBvcGVu c3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMJMjAxMS0xMS0xNCAyMTo1ODowMS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYTUxMi5jCTIw MTItMDctMTIgMjE6NDk6MjUuMzUwMzUyNTUzICswMjAwCi1AQCAtNSw2ICs1LDEwIEBACi0gICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSAgKi8KLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r Ci0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NI QTUxMikKLSAvKgotICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgotQEAgLTYxLDYgKzY1LDkgQEAg Y29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltdPSJTSEEtNTEyIiBPUAotIAotIGZpcHNfbWRfaW5p dF9jdHgoU0hBMzg0LCBTSEE1MTIpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJYy0+aFswXT1VNjQoMHhjYmJiOWQ1ZGMxMDU5 ZWQ4KTsKLSAJYy0+aFsxXT1VNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsKLSAJYy0+aFsyXT1VNjQo MHg5MTU5MDE1YTMwNzBkZDE3KTsKLUBAIC03Nyw2ICs4NCw5IEBAIGZpcHNfbWRfaW5pdF9jdHgo U0hBMzg0LCBTSEE1MTIpCi0gCi0gZmlwc19tZF9pbml0KFNIQTUxMikKLSAJewotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAljLT5oWzBd PVU2NCgweDZhMDllNjY3ZjNiY2M5MDgpOwotIAljLT5oWzFdPVU2NCgweGJiNjdhZTg1ODRjYWE3 M2IpOwotIAljLT5oWzJdPVU2NCgweDNjNmVmMzcyZmU5NGY4MmIpOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEv c2hhLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAxMi0wNy0x MiAyMTo0OToyNC41ODEzMzUyNTUgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hh L3NoYS5oCTIwMTItMDctMTIgMjE6NDk6MjUuMzUwMzUyNTUzICswMjAwCi1AQCAtMTE2LDkgKzEx Niw2IEBAIHVuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBjaGFyICoKLSB2b2lkIFNI QV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gI2Vu ZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50 IHByaXZhdGVfU0hBMV9Jbml0KFNIQV9DVFggKmMpOwotLSNlbmRpZgotIGludCBTSEExX0luaXQo U0hBX0NUWCAqYyk7Ci0gaW50IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBsZW4pOwotIGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFf Q1RYICpjKTsKLUBAIC0xNDEsMTAgKzEzOCw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRl X3N0Ci0gCX0gU0hBMjU2X0NUWDsKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLWludCBwcml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMp OwotLWludCBwcml2YXRlX1NIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpOwotLSNlbmRpZgotIGlu dCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKLSBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZf Q1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMjI0X0ZpbmFs KHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKLUBAIC0xOTIsMTAgKzE4NSw2IEBA IHR5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0Ci0gI2VuZGlmCi0gCi0gI2lmbmRlZiBPUEVO U1NMX05PX1NIQTUxMgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEEzODRf SW5pdChTSEE1MTJfQ1RYICpjKTsKLS1pbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RY ICpjKTsKLS0jZW5kaWYKLSBpbnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7Ci0gaW50IFNI QTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7 Ci0gaW50IFNIQTM4NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8v c2hhL3NoYV9sb2NsLmguZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI0LjU4NzMzNTM5MCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDEyLTA3LTEyIDIxOjQ5 OjI1LjM1MDM1MjU1MyArMDIwMAotQEAgLTEyMywxMSArMTIzLDE0IEBAIHZvaWQgc2hhMV9ibG9j a19kYXRhX29yZGVyIChTSEFfQ1RYICpjLAotICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUx ZjBVTAotIAotICNpZmRlZiBTSEFfMAotLWZpcHNfbWRfaW5pdChTSEEpCi0rbm9uZmlwc19tZF9p bml0KFNIQSkKLSAjZWxzZQotIGZpcHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hBKQotICNlbmRpZgot IAl7Ci0rI2lmIGRlZmluZWQoU0hBXzEpICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQotKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwot IAljLT5oMD1JTklUX0RBVEFfaDA7Ci0gCWMtPmgxPUlOSVRfREFUQV9oMTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFjL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4x Yy9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3do cmxwb29sL3dwX2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDUuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDEyLTA3LTEy IDIxOjQ5OjI1LjM1MTM1MjU3NSArMDIwMAotQEAgLTU1LDcgKzU1LDcgQEAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gCi0tZmlwc19tZF9pbml0 KFdISVJMUE9PTCkKLStub25maXBzX21kX2luaXQoV0hJUkxQT09MKQotIAl7Ci0gCW1lbXNldCAo YywwLHNpemVvZigqYykpOwotIAlyZXR1cm4oMSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9N YWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4xYy9NYWtlZmlsZS5vcmcKLS0tLSBvcGVuc3Ns LTEuMC4xYy9NYWtlZmlsZS5vcmcuZmlwcwkyMDEyLTA3LTEyIDIxOjQ5OjI1LjI4NTM1MTA5MSAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL01ha2VmaWxlLm9yZwkyMDEyLTA3LTEyIDIxOjQ5OjI1 LjM1MTM1MjU3NSArMDIwMAotQEAgLTEzNiw2ICsxMzYsOSBAQCBGSVBTQ0FOTElCPQotIAotIEJB U0VBRERSPQotIAotKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAotK0ZJUFM9Ci0rCi0gRElS Uz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCi0gRU5HRElSUz0gY2Nnb3N0 Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3NsCi1AQCAtMTQ4LDcgKzE1MSw3IEBAIFNESVJTPSAgXAot IAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCi0gCWJ1ZmZlciBiaW8g c3RhY2sgbGhhc2ggcmFuZCBlcnIgXAotIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0 eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKLS0JY21zIHBxdWV1ZSB0cyBq cGFrZSBzcnAgc3RvcmUgY21hYwotKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFj IGZpcHMKLSAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5 IC4vQ29uZmlndXJlCi0gIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgotIAotQEAg LTIzNyw2ICsyNDAsNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNT Ci0gCQlGSVBTTElCRElSPScke0ZJUFNMSUJESVJ9JwkJCVwKLSAJCUZJUFNESVI9JyR7RklQU0RJ Un0nCQkJCVwKLSAJCUZJUFNDQU5MSUI9IiQke0ZJUFNDQU5MSUI6LSQoRklQU0NBTkxJQil9Iglc Ci0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAotIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFL RUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KLSAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2 ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKLSAjIHdo aWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQg d2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL3NzbC9zc2xfYWxncy5jLmZpcHMgb3Bl bnNzbC0xLjAuMWMvc3NsL3NzbF9hbGdzLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9zc2wvc3NsX2Fs Z3MuYy5maXBzCTIwMTItMDEtMTUgMTQ6NDI6NTAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWMvc3NsL3NzbF9hbGdzLmMJMjAxMi0wNy0xMiAyMTo0OToyNS4zNTEzNTI1NzUgKzAy MDAKLUBAIC02NCw2ICs2NCwxMiBAQAotIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCi0gCXsK LSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rCWlm ICghRklQU19tb2RlKCkpCi0rCQl7Ci0rI2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RF UwotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NiYygpKTsKLSAJRVZQX2FkZF9jaXBoZXIoRVZQ X2Rlc19lZGUzX2NiYygpKTsKLUBAIC0xMzYsNiArMTQyLDUwIEBAIGludCBTU0xfbGlicmFyeV9p bml0KHZvaWQpCi0gCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7Ci0gCUVWUF9hZGRfZGlnZXN0 KEVWUF9kc3MoKSk7Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJfQotKwllbHNl Ci0rCQl7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfY2JjKCkpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5 Ml9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKLSsJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1 Nl9nY20oKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX01ENQotKwkvKiBuZWVkZWQg ZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFDICovCi0rCUVWUF9hZGRfZGlnZXN0KEVW UF9tZDUoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwic3NsMi1tZDUiKTsKLSsJ RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wzLW1kNSIpOwotKyNlbmRpZgotKyNpZm5k ZWYgT1BFTlNTTF9OT19TSEEKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3 aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7 Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGEx V2l0aFJTQSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgotKwlFVlBfYWRk X2RpZ2VzdChFVlBfc2hhMjI0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwot KyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKLSsJRVZQX2FkZF9kaWdlc3QoRVZQ X3NoYTM4NCgpKTsKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKLSsjZW5kaWYKLSsj aWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQot KwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGggc2hhMSAqLwotKwlFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5T U0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOwotKyNlbmRpZgotKwkJ fQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCi0gCS8qIFRoaXMgd2lsbCBpbml0 aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLgotIAkgICBUaGUgdmFs dWUgcmV0dXJuZWQgaXMgYSBTVEFDS19PRihTU0xfQ09NUCksIGJ1dCB0aGF0IGNhbgoKZGlmZiAt LWdpdCBhL29wZW5zc2wtMS4wLjFjLWlzc3Vlci1oYXNoLnBhdGNoIGIvb3BlbnNzbC0xLjAuMWMt aXNzdWVyLWhhc2gucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MTE1MDEu LjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMWMtaXNzdWVyLWhhc2gucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwxMSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDUw OS94NTA5X2NtcC5jLmlzc3Vlci1oYXNoIG9wZW5zc2wtMS4wLjFjL2NyeXB0by94NTA5L3g1MDlf Y21wLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDUwOS94NTA5X2NtcC5jLmlzc3Vlci1o YXNoCTIwMTEtMDYtMjIgMDQ6MTg6MDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL3g1MDkveDUwOV9jbXAuYwkyMDEyLTEyLTIxIDE3OjE4OjM4LjEwMTMwODk5NyAr MDEwMAotQEAgLTg1LDYgKzg1LDcgQEAgdW5zaWduZWQgbG9uZyBYNTA5X2lzc3Vlcl9hbmRfc2Vy aWFsX2hhcwotIAljaGFyICpmOwotIAotIAlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCUVWUF9N RF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0g CWY9WDUwOV9OQU1FX29uZWxpbmUoYS0+Y2VydF9pbmZvLT5pc3N1ZXIsTlVMTCwwKTsKLSAJcmV0 PXN0cmxlbihmKTsKLSAJaWYgKCFFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBFVlBfbWQ1KCksIE5V TEwpKQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFjLW1hbmZpeC5wYXRjaCBiL29wZW5zc2wt MS4wLjFjLW1hbmZpeC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwNTNk OS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xYy1tYW5maXgucGF0Y2gKKysrIC9kZXYvbnVs bApAQCAtMSw0NzQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvZG9jL2FwcHMvdmVy aWZ5LnBvZC5tYW5maXggb3BlbnNzbC0xLjAuMWMvZG9jL2FwcHMvdmVyaWZ5LnBvZAotLS0tIG9w ZW5zc2wtMS4wLjFjL2RvYy9hcHBzL3ZlcmlmeS5wb2QubWFuZml4CTIwMTAtMDItMjMgMTU6MDk6 MjIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWMvZG9jL2FwcHMvdmVyaWZ5LnBv ZAkyMDEzLTAxLTMwIDE3OjM2OjE1LjI3NzI2NDY1MCArMDEwMAotQEAgLTU0LDM1ICs1NCwzNyBA QCBpbiBQRU0gZm9ybWF0IGNvbmNhdGVuYXRlZCB0b2dldGhlci4KLSA9aXRlbSBCPC11bnRydXN0 ZWQgZmlsZT4KLSAKLSBBIGZpbGUgb2YgdW50cnVzdGVkIGNlcnRpZmljYXRlcy4gVGhlIGZpbGUg c2hvdWxkIGNvbnRhaW4gbXVsdGlwbGUgY2VydGlmaWNhdGVzCi0raW4gUEVNIGZvcm1hdCBjb25j YXRlbmF0ZWQgdG9nZXRoZXIuCi0gCi0gPWl0ZW0gQjwtcHVycG9zZSBwdXJwb3NlPgotIAotLXRo ZSBpbnRlbmRlZCB1c2UgZm9yIHRoZSBjZXJ0aWZpY2F0ZS4gV2l0aG91dCB0aGlzIG9wdGlvbiBu byBjaGFpbiB2ZXJpZmljYXRpb24KLS13aWxsIGJlIGRvbmUuIEN1cnJlbnRseSBhY2NlcHRlZCB1 c2VzIGFyZSBCPHNzbGNsaWVudD4sIEI8c3Nsc2VydmVyPiwKLS1CPG5zc3Nsc2VydmVyPiwgQjxz bWltZXNpZ24+LCBCPHNtaW1lZW5jcnlwdD4uIFNlZSB0aGUgQjxWRVJJRlkgT1BFUkFUSU9OPgot LXNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0rVGhlIGludGVuZGVkIHVzZSBmb3IgdGhl IGNlcnRpZmljYXRlLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLAotK0I8dmVyaWZ5 PiB3aWxsIG5vdCBjb25zaWRlciBjZXJ0aWZpY2F0ZSBwdXJwb3NlIGR1cmluZyBjaGFpbiB2ZXJp ZmljYXRpb24uCi0rQ3VycmVudGx5IGFjY2VwdGVkIHVzZXMgYXJlIEI8c3NsY2xpZW50PiwgQjxz c2xzZXJ2ZXI+LCBCPG5zc3Nsc2VydmVyPiwKLStCPHNtaW1lc2lnbj4sIEI8c21pbWVlbmNyeXB0 Pi4gU2VlIHRoZSBCPFZFUklGWSBPUEVSQVRJT04+IHNlY3Rpb24gZm9yIG1vcmUKLStpbmZvcm1h dGlvbi4KLSAKLSA9aXRlbSBCPC1oZWxwPgotIAotLXByaW50cyBvdXQgYSB1c2FnZSBtZXNzYWdl LgotK1ByaW50IG91dCBhIHVzYWdlIG1lc3NhZ2UuCi0gCi0gPWl0ZW0gQjwtdmVyYm9zZT4KLSAK LS1wcmludCBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3BlcmF0aW9ucyBiZWluZyBwZXJm b3JtZWQuCi0rUHJpbnQgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wZXJhdGlvbnMgYmVp bmcgcGVyZm9ybWVkLgotIAotID1pdGVtIEI8LWlzc3Vlcl9jaGVja3M+Ci0gCi0tcHJpbnQgb3V0 IGRpYWdub3N0aWNzIHJlbGF0aW5nIHRvIHNlYXJjaGVzIGZvciB0aGUgaXNzdWVyIGNlcnRpZmlj YXRlCi0tb2YgdGhlIGN1cnJlbnQgY2VydGlmaWNhdGUuIFRoaXMgc2hvd3Mgd2h5IGVhY2ggY2Fu ZGlkYXRlIGlzc3VlcgotLWNlcnRpZmljYXRlIHdhcyByZWplY3RlZC4gSG93ZXZlciB0aGUgcHJl c2VuY2Ugb2YgcmVqZWN0aW9uIG1lc3NhZ2VzCi0tZG9lcyBub3QgaXRzZWxmIGltcGx5IHRoYXQg YW55dGhpbmcgaXMgd3Jvbmc6IGR1cmluZyB0aGUgbm9ybWFsCi0tdmVyaWZ5IHByb2Nlc3Mgc2V2 ZXJhbCByZWplY3Rpb25zIG1heSB0YWtlIHBsYWNlLgotK1ByaW50IG91dCBkaWFnbm9zdGljcyBy ZWxhdGluZyB0byBzZWFyY2hlcyBmb3IgdGhlIGlzc3VlciBjZXJ0aWZpY2F0ZSBvZiB0aGUKLStj dXJyZW50IGNlcnRpZmljYXRlLiBUaGlzIHNob3dzIHdoeSBlYWNoIGNhbmRpZGF0ZSBpc3N1ZXIg Y2VydGlmaWNhdGUgd2FzCi0rcmVqZWN0ZWQuIFRoZSBwcmVzZW5jZSBvZiByZWplY3Rpb24gbWVz c2FnZXMgZG9lcyBub3QgaXRzZWxmIGltcGx5IHRoYXQKLSthbnl0aGluZyBpcyB3cm9uZzsgZHVy aW5nIHRoZSBub3JtYWwgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIHNldmVyYWwKLStyZWplY3Rpb25z IG1heSB0YWtlIHBsYWNlLgotIAotID1pdGVtIEI8LXBvbGljeSBhcmc+Ci0gCi0tRW5hYmxlIHBv bGljeSBwcm9jZXNzaW5nIGFuZCBhZGQgQjxhcmc+IHRvIHRoZSB1c2VyLWluaXRpYWwtcG9saWN5 LXNldAotLShzZWUgUkZDMzI4MCBldCBhbCkuIFRoZSBwb2xpY3kgQjxhcmc+IGNhbiBiZSBhbiBv YmplY3QgbmFtZSBhbiBPSUQgaW4gbnVtZXJpYwotLWZvcm0uIFRoaXMgYXJndW1lbnQgY2FuIGFw cGVhciBtb3JlIHRoYW4gb25jZS4KLStFbmFibGUgcG9saWN5IHByb2Nlc3NpbmcgYW5kIGFkZCBC PGFyZz4gdG8gdGhlIHVzZXItaW5pdGlhbC1wb2xpY3ktc2V0IChzZWUKLStSRkM1MjgwKS4gVGhl IHBvbGljeSBCPGFyZz4gY2FuIGJlIGFuIG9iamVjdCBuYW1lIGFuIE9JRCBpbiBudW1lcmljIGZv cm0uCi0rVGhpcyBhcmd1bWVudCBjYW4gYXBwZWFyIG1vcmUgdGhhbiBvbmNlLgotIAotID1pdGVt IEI8LXBvbGljeV9jaGVjaz4KLSAKLUBAIC05MCw0MSArOTIsNDAgQEAgRW5hYmxlcyBjZXJ0aWZp Y2F0ZSBwb2xpY3kgcHJvY2Vzc2luZy4KLSAKLSA9aXRlbSBCPC1leHBsaWNpdF9wb2xpY3k+Ci0g Ci0tU2V0IHBvbGljeSB2YXJpYWJsZSByZXF1aXJlLWV4cGxpY2l0LXBvbGljeSAoc2VlIFJGQzMy ODAgZXQgYWwpLgotK1NldCBwb2xpY3kgdmFyaWFibGUgcmVxdWlyZS1leHBsaWNpdC1wb2xpY3kg KHNlZSBSRkM1MjgwKS4KLSAKLSA9aXRlbSBCPC1pbmhpYml0X2FueT4KLSAKLS1TZXQgcG9saWN5 IHZhcmlhYmxlIGluaGliaXQtYW55LXBvbGljeSAoc2VlIFJGQzMyODAgZXQgYWwpLgotK1NldCBw b2xpY3kgdmFyaWFibGUgaW5oaWJpdC1hbnktcG9saWN5IChzZWUgUkZDNTI4MCkuCi0gCi0gPWl0 ZW0gQjwtaW5oaWJpdF9tYXA+Ci0gCi0tU2V0IHBvbGljeSB2YXJpYWJsZSBpbmhpYml0LXBvbGlj eS1tYXBwaW5nIChzZWUgUkZDMzI4MCBldCBhbCkuCi0rU2V0IHBvbGljeSB2YXJpYWJsZSBpbmhp Yml0LXBvbGljeS1tYXBwaW5nIChzZWUgUkZDNTI4MCkuCi0gCi0gPWl0ZW0gQjwtcG9saWN5X3By aW50PgotIAotLVByaW50IG91dCBkaWFnbm9zdGljcywgcmVsYXRlZCB0byBwb2xpY3kgY2hlY2tp bmcKLStQcmludCBvdXQgZGlhZ25vc3RpY3MgcmVsYXRlZCB0byBwb2xpY3kgcHJvY2Vzc2luZy4K LSAKLSA9aXRlbSBCPC1jcmxfY2hlY2s+Ci0gCi0tQ2hlY2tzIGVuZCBlbnRpdHkgY2VydGlmaWNh dGUgdmFsaWRpdHkgYnkgYXR0ZW1wdGluZyB0byBsb29rdXAgYSB2YWxpZCBDUkwuCi0rQ2hlY2tz IGVuZCBlbnRpdHkgY2VydGlmaWNhdGUgdmFsaWRpdHkgYnkgYXR0ZW1wdGluZyB0byBsb29rIHVw IGEgdmFsaWQgQ1JMLgotIElmIGEgdmFsaWQgQ1JMIGNhbm5vdCBiZSBmb3VuZCBhbiBlcnJvciBv Y2N1cnMuIAotIAotID1pdGVtIEI8LWNybF9jaGVja19hbGw+Ci0gCi0gQ2hlY2tzIHRoZSB2YWxp ZGl0eSBvZiBCPGFsbD4gY2VydGlmaWNhdGVzIGluIHRoZSBjaGFpbiBieSBhdHRlbXB0aW5nCi0t dG8gbG9va3VwIHZhbGlkIENSTHMuCi0rdG8gbG9vayB1cCB2YWxpZCBDUkxzLgotIAotID1pdGVt IEI8LWlnbm9yZV9jcml0aWNhbD4KLSAKLSBOb3JtYWxseSBpZiBhbiB1bmhhbmRsZWQgY3JpdGlj YWwgZXh0ZW5zaW9uIGlzIHByZXNlbnQgd2hpY2ggaXMgbm90Ci0tc3VwcG9ydGVkIGJ5IE9wZW5T U0wgdGhlIGNlcnRpZmljYXRlIGlzIHJlamVjdGVkIChhcyByZXF1aXJlZCBieQotLVJGQzMyODAg ZXQgYWwpLiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgY3JpdGljYWwgZXh0ZW5zaW9ucyBhcmUKLS1p Z25vcmVkLgotK3N1cHBvcnRlZCBieSBPcGVuU1NMIHRoZSBjZXJ0aWZpY2F0ZSBpcyByZWplY3Rl ZCAoYXMgcmVxdWlyZWQgYnkgUkZDNTI4MCkuCi0rSWYgdGhpcyBvcHRpb24gaXMgc2V0IGNyaXRp Y2FsIGV4dGVuc2lvbnMgYXJlIGlnbm9yZWQuCi0gCi0gPWl0ZW0gQjwteDUwOV9zdHJpY3Q+Ci0g Ci0tRGlzYWJsZSB3b3JrYXJvdW5kcyBmb3IgYnJva2VuIGNlcnRpZmljYXRlcyB3aGljaCBoYXZl IHRvIGJlIGRpc2FibGVkCi0tZm9yIHN0cmljdCBYLjUwOSBjb21wbGlhbmNlLgotK0ZvciBzdHJp Y3QgWC41MDkgY29tcGxpYW5jZSwgZGlzYWJsZSBub24tY29tcGxpYW50IHdvcmthcm91bmRzIGZv ciBicm9rZW4KLStjZXJ0aWZpY2F0ZXMuCi0gCi0gPWl0ZW0gQjwtZXh0ZW5kZWRfY3JsPgotIAot QEAgLTE0MiwxNiArMTQzLDE1IEBAIGJlY2F1c2UgaXQgZG9lc24ndCBhZGQgYW55IHNlY3VyaXR5 LgotIAotID1pdGVtIEI8LT4KLSAKLS1tYXJrcyB0aGUgbGFzdCBvcHRpb24uIEFsbCBhcmd1bWVu dHMgZm9sbG93aW5nIHRoaXMgYXJlIGFzc3VtZWQgdG8gYmUKLStJbmRpY2F0ZXMgdGhlIGxhc3Qg b3B0aW9uLiBBbGwgYXJndW1lbnRzIGZvbGxvd2luZyB0aGlzIGFyZSBhc3N1bWVkIHRvIGJlCi0g Y2VydGlmaWNhdGUgZmlsZXMuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBmaXJzdCBjZXJ0aWZpY2F0 ZSBmaWxlbmFtZSBiZWdpbnMKLSB3aXRoIGEgQjwtPi4KLSAKLSA9aXRlbSBCPGNlcnRpZmljYXRl cz4KLSAKLS1vbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5LiBJZiBubyBjZXJ0aWZp Y2F0ZSBmaWxlbmFtZXMgYXJlIGluY2x1ZGVkCi0tdGhlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8g cmVhZCBhIGNlcnRpZmljYXRlIGZyb20gc3RhbmRhcmQgaW5wdXQuIFRoZXkgc2hvdWxkCi0tYWxs IGJlIGluIFBFTSBmb3JtYXQuCi0tCi0rT25lIG9yIG1vcmUgY2VydGlmaWNhdGVzIHRvIHZlcmlm eS4gSWYgbm8gY2VydGlmaWNhdGVzIGFyZSBnaXZlbiwgQjx2ZXJpZnk+Ci0rd2lsbCBhdHRlbXB0 IHRvIHJlYWQgYSBjZXJ0aWZpY2F0ZSBmcm9tIHN0YW5kYXJkIGlucHV0LiBDZXJ0aWZpY2F0ZXMg bXVzdCBiZQotK2luIFBFTSBmb3JtYXQuCi0gCi0gPWJhY2sKLSAKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFjL2RvYy9hcHBzL3g1MDkucG9kLm1hbmZpeCBvcGVuc3NsLTEuMC4xYy9kb2MvYXBwcy94 NTA5LnBvZAotLS0tIG9wZW5zc2wtMS4wLjFjL2RvYy9hcHBzL3g1MDkucG9kLm1hbmZpeAkyMDEz LTAxLTEwIDEwOjI2OjExLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFjL2RvYy9h cHBzL3g1MDkucG9kCTIwMTMtMDEtMzAgMTc6MzU6MzguOTUyNDU4MTMzICswMTAwCi1AQCAtMjks NiArMjksNyBAQCBCPG9wZW5zc2w+IEI8eDUwOT4KLSBbQjwtcHVycG9zZT5dCi0gW0I8LWRhdGVz Pl0KLSBbQjwtbW9kdWx1cz5dCi0rW0I8LXB1YmtleT5dCi0gW0I8LWZpbmdlcnByaW50Pl0KLSBb QjwtYWxpYXM+XQotIFtCPC1ub291dD5dCi1AQCAtMTM2LDYgKzEzNywxMCBAQCBzZWN0aW9uIGZv ciBtb3JlIGluZm9ybWF0aW9uLgotIAotIHRoaXMgb3B0aW9uIHByZXZlbnRzIG91dHB1dCBvZiB0 aGUgZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSByZXF1ZXN0LgotIAotKz1pdGVtIEI8LXB1YmtleT4K LSsKLStvdXRwdXRzIHRoZSB0aGUgY2VydGlmaWNhdGUncyBTdWJqZWN0UHVibGljS2V5SW5mbyBi bG9jayBpbiBQRU0gZm9ybWF0LgotKwotID1pdGVtIEI8LW1vZHVsdXM+Ci0gCi0gdGhpcyBvcHRp b24gcHJpbnRzIG91dCB0aGUgdmFsdWUgb2YgdGhlIG1vZHVsdXMgb2YgdGhlIHB1YmxpYyBrZXkK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfQ1RYX2N0cmwucG9k Lm1hbmZpeCBvcGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX0NUWF9jdHJsLnBvZAot LS0tIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfQ1RYX2N0cmwucG9kLm1hbmZp eAkyMDA5LTEwLTAxIDAxOjQwOjQ3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFj L2RvYy9jcnlwdG8vRVZQX1BLRVlfQ1RYX2N0cmwucG9kCTIwMTMtMDEtMzAgMTc6MzY6MDUuMzgx MDQ1MTI4ICswMTAwCi1AQCAtMTE3LDcgKzExNyw3IEBAIEw8RVZQX1BLRVlfZW5jcnlwdCgzKXxF VlBfUEtFWV9lbmNyeXB0KDMKLSBMPEVWUF9QS0VZX2RlY3J5cHQoMyl8RVZQX1BLRVlfZGVjcnlw dCgzKT4sCi0gTDxFVlBfUEtFWV9zaWduKDMpfEVWUF9QS0VZX3NpZ24oMyk+LAotIEw8RVZQX1BL RVlfdmVyaWZ5KDMpfEVWUF9QS0VZX3ZlcmlmeSgzKT4sCi0tTDxFVlBfUEtFWV92ZXJpZnlyZWNv dmVyKDMpfEVWUF9QS0VZX3ZlcmlmeXJlY292ZXIoMyk+LAotK0w8RVZQX1BLRVlfdmVyaWZ5X3Jl Y292ZXIoMyl8RVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoMyk+LAotIEw8RVZQX1BLRVlfZGVyaXZl KDMpfEVWUF9QS0VZX2Rlcml2ZSgzKT4gCi0gTDxFVlBfUEtFWV9rZXlnZW4oMyl8RVZQX1BLRVlf a2V5Z2VuKDMpPiAKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BL RVlfZGVjcnlwdC5wb2QubWFuZml4IG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlf ZGVjcnlwdC5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX2RlY3J5 cHQucG9kLm1hbmZpeAkyMDA5LTEwLTAxIDAxOjQwOjQ4LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfZGVjcnlwdC5wb2QJMjAxMy0wMS0zMCAx NzozNjowNS4zODEwNDUxMjggKzAxMDAKLUBAIC04Myw3ICs4Myw3IEBAIEw8RVZQX1BLRVlfQ1RY X25ldygzKXxFVlBfUEtFWV9DVFhfbmV3KDMKLSBMPEVWUF9QS0VZX2VuY3J5cHQoMyl8RVZQX1BL RVlfZW5jcnlwdCgzKT4sCi0gTDxFVlBfUEtFWV9zaWduKDMpfEVWUF9QS0VZX3NpZ24oMyk+LAot IEw8RVZQX1BLRVlfdmVyaWZ5KDMpfEVWUF9QS0VZX3ZlcmlmeSgzKT4sCi0tTDxFVlBfUEtFWV92 ZXJpZnlyZWNvdmVyKDMpfEVWUF9QS0VZX3ZlcmlmeXJlY292ZXIoMyk+LAotK0w8RVZQX1BLRVlf dmVyaWZ5X3JlY292ZXIoMyl8RVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoMyk+LAotIEw8RVZQX1BL RVlfZGVyaXZlKDMpfEVWUF9QS0VZX2Rlcml2ZSgzKT4gCi0gCi0gPWhlYWQxIEhJU1RPUlkKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfZGVyaXZlLnBvZC5tYW5m aXggb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV9kZXJpdmUucG9kCi0tLS0gb3Bl bnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV9kZXJpdmUucG9kLm1hbmZpeAkyMDA5LTEw LTAxIDAxOjQwOjQ4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlw dG8vRVZQX1BLRVlfZGVyaXZlLnBvZAkyMDEzLTAxLTMwIDE3OjM2OjA1LjM4MTA0NTEyOCArMDEw MAotQEAgLTg0LDcgKzg0LDcgQEAgTDxFVlBfUEtFWV9lbmNyeXB0KDMpfEVWUF9QS0VZX2VuY3J5 cHQoMwotIEw8RVZQX1BLRVlfZGVjcnlwdCgzKXxFVlBfUEtFWV9kZWNyeXB0KDMpPiwKLSBMPEVW UF9QS0VZX3NpZ24oMyl8RVZQX1BLRVlfc2lnbigzKT4sCi0gTDxFVlBfUEtFWV92ZXJpZnkoMyl8 RVZQX1BLRVlfdmVyaWZ5KDMpPiwKLS1MPEVWUF9QS0VZX3ZlcmlmeXJlY292ZXIoMyl8RVZQX1BL RVlfdmVyaWZ5cmVjb3ZlcigzKT4sCi0rTDxFVlBfUEtFWV92ZXJpZnlfcmVjb3ZlcigzKXxFVlBf UEtFWV92ZXJpZnlfcmVjb3ZlcigzKT4sCi0gCi0gPWhlYWQxIEhJU1RPUlkKLSAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfZW5jcnlwdC5wb2QubWFuZml4IG9w ZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfZW5jcnlwdC5wb2QKLS0tLSBvcGVuc3Ns LTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX2VuY3J5cHQucG9kLm1hbmZpeAkyMDA5LTEwLTAx IDAxOjQwOjQ4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8v RVZQX1BLRVlfZW5jcnlwdC5wb2QJMjAxMy0wMS0zMCAxNzozNjowNS4zODIwNDUxNDMgKzAxMDAK LUBAIC04Myw3ICs4Myw3IEBAIEw8RVZQX1BLRVlfQ1RYX25ldygzKXxFVlBfUEtFWV9DVFhfbmV3 KDMKLSBMPEVWUF9QS0VZX2RlY3J5cHQoMyl8RVZQX1BLRVlfZGVjcnlwdCgzKT4sCi0gTDxFVlBf UEtFWV9zaWduKDMpfEVWUF9QS0VZX3NpZ24oMyk+LAotIEw8RVZQX1BLRVlfdmVyaWZ5KDMpfEVW UF9QS0VZX3ZlcmlmeSgzKT4sCi0tTDxFVlBfUEtFWV92ZXJpZnlyZWNvdmVyKDMpfEVWUF9QS0VZ X3ZlcmlmeXJlY292ZXIoMyk+LAotK0w8RVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoMyl8RVZQX1BL RVlfdmVyaWZ5X3JlY292ZXIoMyk+LAotIEw8RVZQX1BLRVlfZGVyaXZlKDMpfEVWUF9QS0VZX2Rl cml2ZSgzKT4gCi0gCi0gPWhlYWQxIEhJU1RPUlkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2Rv Yy9jcnlwdG8vRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0LnBvZC5tYW5maXggb3BlbnNzbC0x LjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV9nZXRfZGVmYXVsdF9kaWdlc3QucG9kCi0tLS0gb3Bl bnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV9nZXRfZGVmYXVsdF9kaWdlc3QucG9kLm1h bmZpeAkyMDA5LTEwLTAxIDAxOjQwOjQ4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0LnBvZAkyMDEzLTAxLTMw IDE3OjM2OjA1LjM4MjA0NTE0MyArMDEwMAotQEAgLTMyLDcgKzMyLDcgQEAgcHVibGljIGtleSBh bGdvcml0aG0uCi0gTDxFVlBfUEtFWV9DVFhfbmV3KDMpfEVWUF9QS0VZX0NUWF9uZXcoMyk+LAot IEw8RVZQX1BLRVlfc2lnbigzKXxFVlBfUEtFWV9zaWduKDMpPiwKLSBMPEVWUF9QS0VZX3Zlcmlm eSgzKXxFVlBfUEtFWV92ZXJpZnkoMyk+LAotLUw8RVZQX1BLRVlfdmVyaWZ5cmVjb3ZlcigzKXxF VlBfUEtFWV92ZXJpZnlyZWNvdmVyKDMpPiwKLStMPEVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyKDMp fEVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyKDMpPiwKLSAKLSA9aGVhZDEgSElTVE9SWQotIAotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV9rZXlnZW4ucG9kLm1hbmZp eCBvcGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX2tleWdlbi5wb2QKLS0tLSBvcGVu c3NsLTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX2tleWdlbi5wb2QubWFuZml4CTIwMDktMTAt MDEgMDE6NDA6NDkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0 by9FVlBfUEtFWV9rZXlnZW4ucG9kCTIwMTMtMDEtMzAgMTc6MzY6MDUuMzgyMDQ1MTQzICswMTAw Ci1AQCAtMTUxLDcgKzE1MSw3IEBAIEw8RVZQX1BLRVlfZW5jcnlwdCgzKXxFVlBfUEtFWV9lbmNy eXB0KDMKLSBMPEVWUF9QS0VZX2RlY3J5cHQoMyl8RVZQX1BLRVlfZGVjcnlwdCgzKT4sCi0gTDxF VlBfUEtFWV9zaWduKDMpfEVWUF9QS0VZX3NpZ24oMyk+LAotIEw8RVZQX1BLRVlfdmVyaWZ5KDMp fEVWUF9QS0VZX3ZlcmlmeSgzKT4sCi0tTDxFVlBfUEtFWV92ZXJpZnlyZWNvdmVyKDMpfEVWUF9Q S0VZX3ZlcmlmeXJlY292ZXIoMyk+LAotK0w8RVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoMyl8RVZQ X1BLRVlfdmVyaWZ5X3JlY292ZXIoMyk+LAotIEw8RVZQX1BLRVlfZGVyaXZlKDMpfEVWUF9QS0VZ X2Rlcml2ZSgzKT4gCi0gCi0gPWhlYWQxIEhJU1RPUlkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFj L2RvYy9jcnlwdG8vRVZQX1BLRVlfc2lnbi5wb2QubWFuZml4IG9wZW5zc2wtMS4wLjFjL2RvYy9j cnlwdG8vRVZQX1BLRVlfc2lnbi5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL0VW UF9QS0VZX3NpZ24ucG9kLm1hbmZpeAkyMDA5LTEwLTAxIDAxOjQwOjUwLjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfc2lnbi5wb2QJMjAxMy0w MS0zMCAxNzozNjowNS4zODMwNDUxNDkgKzAxMDAKLUBAIC04Niw3ICs4Niw3IEBAIEw8RVZQX1BL RVlfQ1RYX25ldygzKXxFVlBfUEtFWV9DVFhfbmV3KDMKLSBMPEVWUF9QS0VZX2VuY3J5cHQoMyl8 RVZQX1BLRVlfZW5jcnlwdCgzKT4sCi0gTDxFVlBfUEtFWV9kZWNyeXB0KDMpfEVWUF9QS0VZX2Rl Y3J5cHQoMyk+LAotIEw8RVZQX1BLRVlfdmVyaWZ5KDMpfEVWUF9QS0VZX3ZlcmlmeSgzKT4sCi0t TDxFVlBfUEtFWV92ZXJpZnlyZWNvdmVyKDMpfEVWUF9QS0VZX3ZlcmlmeXJlY292ZXIoMyk+LAot K0w8RVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoMyl8RVZQX1BLRVlfdmVyaWZ5X3JlY292ZXIoMyk+ LAotIEw8RVZQX1BLRVlfZGVyaXZlKDMpfEVWUF9QS0VZX2Rlcml2ZSgzKT4gCi0gCi0gPWhlYWQx IEhJU1RPUlkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfdmVy aWZ5LnBvZC5tYW5maXggb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV92ZXJpZnku cG9kCi0tLS0gb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV92ZXJpZnkucG9kLm1h bmZpeAkyMDEwLTEyLTAyIDE0OjQ1OjI1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfdmVyaWZ5LnBvZAkyMDEzLTAxLTMwIDE3OjM2OjA1LjM4 MzA0NTE0OSArMDEwMAotQEAgLTgxLDcgKzgxLDcgQEAgTDxFVlBfUEtFWV9DVFhfbmV3KDMpfEVW UF9QS0VZX0NUWF9uZXcoMwotIEw8RVZQX1BLRVlfZW5jcnlwdCgzKXxFVlBfUEtFWV9lbmNyeXB0 KDMpPiwKLSBMPEVWUF9QS0VZX2RlY3J5cHQoMyl8RVZQX1BLRVlfZGVjcnlwdCgzKT4sCi0gTDxF VlBfUEtFWV9zaWduKDMpfEVWUF9QS0VZX3NpZ24oMyk+LAotLUw8RVZQX1BLRVlfdmVyaWZ5cmVj b3ZlcigzKXxFVlBfUEtFWV92ZXJpZnlyZWNvdmVyKDMpPiwKLStMPEVWUF9QS0VZX3ZlcmlmeV9y ZWNvdmVyKDMpfEVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyKDMpPiwKLSBMPEVWUF9QS0VZX2Rlcml2 ZSgzKXxFVlBfUEtFWV9kZXJpdmUoMyk+IAotIAotID1oZWFkMSBISVNUT1JZCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyLnBvZC5tYW5m aXggb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV92ZXJpZnlfcmVjb3Zlci5wb2QK LS0tLSBvcGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyLnBv ZC5tYW5maXgJMjAxMy0wMS0zMCAxNzozNjowNS4zODMwNDUxNDkgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4xYy9kb2MvY3J5cHRvL0VWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyLnBvZAkyMDEzLTAxLTMw IDE3OjM2OjA1LjM4MzA0NTE0OSArMDEwMAotQEAgLTAsMCArMSwxMDMgQEAKLSs9cG9kCi0rCi0r PWhlYWQxIE5BTUUKLSsKLStFVlBfUEtFWV92ZXJpZnlfcmVjb3Zlcl9pbml0LCBFVlBfUEtFWV92 ZXJpZnlfcmVjb3ZlciAtIHJlY292ZXIgc2lnbmF0dXJlIHVzaW5nIGEgcHVibGljIGtleSBhbGdv cml0aG0KLSsKLSs9aGVhZDEgU1lOT1BTSVMKLSsKLSsgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rCi0rIGludCBFVlBfUEtFWV92ZXJpZnlfcmVjb3Zlcl9pbml0KEVWUF9QS0VZX0NUWCAqY3R4 KTsKLSsgaW50IEVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyKEVWUF9QS0VZX0NUWCAqY3R4LAotKwkJ CXVuc2lnbmVkIGNoYXIgKnJvdXQsIHNpemVfdCAqcm91dGxlbiwKLSsJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpzaWcsIHNpemVfdCBzaWdsZW4pOwotKwotKz1oZWFkMSBERVNDUklQVElPTgotKwot K1RoZSBFVlBfUEtFWV92ZXJpZnlfcmVjb3Zlcl9pbml0KCkgZnVuY3Rpb24gaW5pdGlhbGl6ZXMg YSBwdWJsaWMga2V5IGFsZ29yaXRobQotK2NvbnRleHQgdXNpbmcga2V5IEI8cGtleT4gZm9yIGEg dmVyaWZ5IHJlY292ZXIgb3BlcmF0aW9uLgotKwotK1RoZSBFVlBfUEtFWV92ZXJpZnlfcmVjb3Zl cigpIGZ1bmN0aW9uIHJlY292ZXJzIHNpZ25lZCBkYXRhCi0rdXNpbmcgQjxjdHg+LiBUaGUgc2ln bmF0dXJlIGlzIHNwZWNpZmllZCB1c2luZyB0aGUgQjxzaWc+IGFuZAotK0I8c2lnbGVuPiBwYXJh bWV0ZXJzLiBJZiBCPHJvdXQ+IGlzIEI8TlVMTD4gdGhlbiB0aGUgbWF4aW11bSBzaXplIG9mIHRo ZSBvdXRwdXQKLStidWZmZXIgaXMgd3JpdHRlbiB0byB0aGUgQjxyb3V0bGVuPiBwYXJhbWV0ZXIu IElmIEI8cm91dD4gaXMgbm90IEI8TlVMTD4gdGhlbgotK2JlZm9yZSB0aGUgY2FsbCB0aGUgQjxy b3V0bGVuPiBwYXJhbWV0ZXIgc2hvdWxkIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKLStCPHJv dXQ+IGJ1ZmZlciwgaWYgdGhlIGNhbGwgaXMgc3VjY2Vzc2Z1bCByZWNvdmVyZWQgZGF0YSBpcyB3 cml0dGVuIHRvCi0rQjxyb3V0PiBhbmQgdGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gQjxy b3V0bGVuPi4KLSsKLSs9aGVhZDEgTk9URVMKLSsKLStOb3JtYWxseSBhbiBhcHBsaWNhdGlvbiBp cyBvbmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KLStv cGVyYXRpb24gaXMgc3VjY2Vzc2Z1bCBpbiB0aG9zZSBjYXNlcyB0aGUgRVZQX3ZlcmlmeSgpIGZ1 bmN0aW9uIHNob3VsZCBiZSAKLSt1c2VkLgotKwotK1NvbWV0aW1lcyBob3dldmVyIGl0IGlzIHVz ZWZ1bCB0byBvYnRhaW4gdGhlIGRhdGEgb3JpZ2luYWxseSBzaWduZWQgdXNpbmcgYQotK3NpZ25p bmcgb3BlcmF0aW9uLiBPbmx5IGNlcnRhaW4gcHVibGljIGtleSBhbGdvcml0aG1zIGNhbiByZWNv dmVyIGEgc2lnbmF0dXJlCi0raW4gdGhpcyB3YXkgKGZvciBleGFtcGxlIFJTQSBpbiBQS0NTIHBh ZGRpbmcgbW9kZSkuCi0rCi0rQWZ0ZXIgdGhlIGNhbGwgdG8gRVZQX1BLRVlfdmVyaWZ5X3JlY292 ZXJfaW5pdCgpIGFsZ29yaXRobSBzcGVjaWZpYyBjb250cm9sCi0rb3BlcmF0aW9ucyBjYW4gYmUg cGVyZm9ybWVkIHRvIHNldCBhbnkgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBmb3IgdGhlCi0rb3Bl cmF0aW9uLgotKwotK1RoZSBmdW5jdGlvbiBFVlBfUEtFWV92ZXJpZnlfcmVjb3ZlcigpIGNhbiBi ZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUKLStjb250ZXh0IGlmIHNldmVyYWwg b3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMuCi0rCi0r PWhlYWQxIFJFVFVSTiBWQUxVRVMKLSsKLStFVlBfUEtFWV92ZXJpZnlfcmVjb3Zlcl9pbml0KCkg YW5kIEVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyKCkgcmV0dXJuIDEgZm9yIHN1Y2Nlc3MKLSthbmQg MCBvciBhIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLiBJbiBwYXJ0aWN1bGFyIGEgcmV0dXJu IHZhbHVlIG9mIC0yCi0raW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBi eSB0aGUgcHVibGljIGtleSBhbGdvcml0aG0uCi0rCi0rPWhlYWQxIEVYQU1QTEUKLSsKLStSZWNv dmVyIGRpZ2VzdCBvcmlnaW5hbGx5IHNpZ25lZCB1c2luZyBQS0NTIzEgYW5kIFNIQTI1NiBkaWdl c3Q6Ci0rCi0rICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyAjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsKLSsgRVZQX1BLRVlfQ1RYICpjdHg7Ci0rIHVuc2lnbmVkIGNoYXIgKnJvdXQsICpz aWc7Ci0rIHNpemVfdCByb3V0bGVuLCBzaWdsZW47IAotKyBFVlBfUEtFWSAqdmVyaWZ5X2tleTsK LSsgLyogTkI6IGFzc3VtZXMgdmVyaWZ5X2tleSwgc2lnIGFuZCBzaWdsZW4gYXJlIGFscmVhZHkg c2V0IHVwCi0rICAqIGFuZCB0aGF0IHZlcmlmeV9rZXkgaXMgYW4gUlNBIHB1YmxpYyBrZXkKLSsg ICovCi0rIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXcodmVyaWZ5X2tleSk7Ci0rIGlmICghY3R4KQot KwkvKiBFcnJvciBvY2N1cnJlZCAqLwotKyBpZiAoRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5p dChjdHgpIDw9IDApCi0rCS8qIEVycm9yICovCi0rIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9w YWRkaW5nKGN0eCwgUlNBX1BLQ1MxX1BBRERJTkcpIDw9IDApCi0rCS8qIEVycm9yICovCi0rIGlm IChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChjdHgsIEVWUF9zaGEyNTYoKSkgPD0gMCkK LSsJLyogRXJyb3IgKi8KLSsKLSsgLyogRGV0ZXJtaW5lIGJ1ZmZlciBsZW5ndGggKi8KLSsgaWYg KEVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyKGN0eCwgTlVMTCwgJnJvdXRsZW4sIHNpZywgc2lnbGVu KSA8PSAwKQotKwkvKiBFcnJvciAqLwotKwotKyByb3V0ID0gT1BFTlNTTF9tYWxsb2Mocm91dGxl bik7Ci0rCi0rIGlmICghcm91dCkKLSsJLyogbWFsbG9jIGZhaWx1cmUgKi8KLSsgCi0rIGlmIChF VlBfUEtFWV92ZXJpZnlfcmVjb3ZlcihjdHgsIHJvdXQsICZyb3V0bGVuLCBzaWcsIHNpZ2xlbikg PD0gMCkKLSsJLyogRXJyb3IgKi8KLSsKLSsgLyogUmVjb3ZlcmVkIGRhdGEgaXMgcm91dGxlbiBi eXRlcyB3cml0dGVuIHRvIGJ1ZmZlciByb3V0ICovCi0rCi0rPWhlYWQxIFNFRSBBTFNPCi0rCi0r TDxFVlBfUEtFWV9DVFhfbmV3KDMpfEVWUF9QS0VZX0NUWF9uZXcoMyk+LAotK0w8RVZQX1BLRVlf ZW5jcnlwdCgzKXxFVlBfUEtFWV9lbmNyeXB0KDMpPiwKLStMPEVWUF9QS0VZX2RlY3J5cHQoMyl8 RVZQX1BLRVlfZGVjcnlwdCgzKT4sCi0rTDxFVlBfUEtFWV9zaWduKDMpfEVWUF9QS0VZX3NpZ24o Myk+LAotK0w8RVZQX1BLRVlfdmVyaWZ5KDMpfEVWUF9QS0VZX3ZlcmlmeSgzKT4sCi0rTDxFVlBf UEtFWV9kZXJpdmUoMyl8RVZQX1BLRVlfZGVyaXZlKDMpPiAKLSsKLSs9aGVhZDEgSElTVE9SWQot KwotK1RoZXNlIGZ1bmN0aW9ucyB3ZXJlIGZpcnN0IGFkZGVkIHRvIE9wZW5TU0wgMS4wLjAuCi0r Ci0rPWN1dAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9YNTA5X1NUT1JFX0NU WF9nZXRfZXJyb3IucG9kLm1hbmZpeCBvcGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL1g1MDlfU1RP UkVfQ1RYX2dldF9lcnJvci5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xYy9kb2MvY3J5cHRvL1g1MDlf U1RPUkVfQ1RYX2dldF9lcnJvci5wb2QubWFuZml4CTIwMDktMTAtMTggMTc6Mjg6NTkuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9YNTA5X1NUT1JFX0NUWF9n ZXRfZXJyb3IucG9kCTIwMTMtMDEtMzAgMTc6MzQ6MTYuMzE1NjMwNzU5ICswMTAwCi1AQCAtMjc4 LDYgKzI3OCw4IEBAIGhhcHBlbiBpZiBleHRlbmRlZCBDUkwgY2hlY2tpbmcgaXMgZW5hYmwKLSBh biBhcHBsaWNhdGlvbiBzcGVjaWZpYyBlcnJvci4gVGhpcyB3aWxsIG5ldmVyIGJlIHJldHVybmVk IHVubGVzcyBleHBsaWNpdGx5Ci0gc2V0IGJ5IGFuIGFwcGxpY2F0aW9uLgotIAotKz1iYWNrCi0r Ci0gPWhlYWQxIE5PVEVTCi0gCi0gVGhlIGFib3ZlIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBp bnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBmaWVsZHMKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFjL2RvYy9jcnlwdG8vRVZQX1BLRVlfdmVyaWZ5cmVjb3Zlci5wb2QgL2Rldi9udWxs Ci0tLS0gb3BlbnNzbC0xLjAuMWMvZG9jL2NyeXB0by9FVlBfUEtFWV92ZXJpZnlyZWNvdmVyLnBv ZAotKysrIC9kZXYvbnVsbAotQEAgLTEsMTAzICswLDAgQEAKLS09cG9kCi0tCi0tPWhlYWQxIE5B TUUKLS0KLS1FVlBfUEtFWV92ZXJpZnlyZWNvdmVyX2luaXQsIEVWUF9QS0VZX3ZlcmlmeXJlY292 ZXIgLSByZWNvdmVyIHNpZ25hdHVyZSB1c2luZyBhIHB1YmxpYyBrZXkgYWxnb3JpdGhtCi0tCi0t PWhlYWQxIFNZTk9QU0lTCi0tCi0tICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotLQotLSBpbnQg RVZQX1BLRVlfdmVyaWZ5cmVjb3Zlcl9pbml0KEVWUF9QS0VZX0NUWCAqY3R4KTsKLS0gaW50IEVW UF9QS0VZX3ZlcmlmeXJlY292ZXIoRVZQX1BLRVlfQ1RYICpjdHgsCi0tCQkJdW5zaWduZWQgY2hh ciAqcm91dCwgc2l6ZV90ICpyb3V0bGVuLAotLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywg c2l6ZV90IHNpZ2xlbik7Ci0tCi0tPWhlYWQxIERFU0NSSVBUSU9OCi0tCi0tVGhlIEVWUF9QS0VZ X3ZlcmlmeXJlY292ZXJfaW5pdCgpIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgcHVibGljIGtleSBh bGdvcml0aG0KLS1jb250ZXh0IHVzaW5nIGtleSBCPHBrZXk+IGZvciBhIHZlcmlmeSByZWNvdmVy IG9wZXJhdGlvbi4KLS0KLS1UaGUgRVZQX1BLRVlfdmVyaWZ5cmVjb3ZlcigpIGZ1bmN0aW9uIHJl Y292ZXJzIHNpZ25lZCBkYXRhCi0tdXNpbmcgQjxjdHg+LiBUaGUgc2lnbmF0dXJlIGlzIHNwZWNp ZmllZCB1c2luZyB0aGUgQjxzaWc+IGFuZAotLUI8c2lnbGVuPiBwYXJhbWV0ZXJzLiBJZiBCPHJv dXQ+IGlzIEI8TlVMTD4gdGhlbiB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBvdXRwdXQKLS1idWZm ZXIgaXMgd3JpdHRlbiB0byB0aGUgQjxyb3V0bGVuPiBwYXJhbWV0ZXIuIElmIEI8cm91dD4gaXMg bm90IEI8TlVMTD4gdGhlbgotLWJlZm9yZSB0aGUgY2FsbCB0aGUgQjxyb3V0bGVuPiBwYXJhbWV0 ZXIgc2hvdWxkIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKLS1CPHJvdXQ+IGJ1ZmZlciwgaWYg dGhlIGNhbGwgaXMgc3VjY2Vzc2Z1bCByZWNvdmVyZWQgZGF0YSBpcyB3cml0dGVuIHRvCi0tQjxy b3V0PiBhbmQgdGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gQjxyb3V0bGVuPi4KLS0KLS09 aGVhZDEgTk9URVMKLS0KLS1Ob3JtYWxseSBhbiBhcHBsaWNhdGlvbiBpcyBvbmx5IGludGVyZXN0 ZWQgaW4gd2hldGhlciBhIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24KLS1vcGVyYXRpb24gaXMgc3Vj Y2Vzc2Z1bCBpbiB0aG9zZSBjYXNlcyB0aGUgRVZQX3ZlcmlmeSgpIGZ1bmN0aW9uIHNob3VsZCBi ZSAKLS11c2VkLgotLQotLVNvbWV0aW1lcyBob3dldmVyIGl0IGlzIHVzZWZ1bCB0byBvYnRhaW4g dGhlIGRhdGEgb3JpZ2luYWxseSBzaWduZWQgdXNpbmcgYQotLXNpZ25pbmcgb3BlcmF0aW9uLiBP bmx5IGNlcnRhaW4gcHVibGljIGtleSBhbGdvcml0aG1zIGNhbiByZWNvdmVyIGEgc2lnbmF0dXJl Ci0taW4gdGhpcyB3YXkgKGZvciBleGFtcGxlIFJTQSBpbiBQS0NTIHBhZGRpbmcgbW9kZSkuCi0t Ci0tQWZ0ZXIgdGhlIGNhbGwgdG8gRVZQX1BLRVlfdmVyaWZ5cmVjb3Zlcl9pbml0KCkgYWxnb3Jp dGhtIHNwZWNpZmljIGNvbnRyb2wKLS1vcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgdG8gc2V0 IGFueSBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzIGZvciB0aGUKLS1vcGVyYXRpb24uCi0tCi0tVGhl IGZ1bmN0aW9uIEVWUF9QS0VZX3ZlcmlmeXJlY292ZXIoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhh biBvbmNlIG9uIHRoZSBzYW1lCi0tY29udGV4dCBpZiBzZXZlcmFsIG9wZXJhdGlvbnMgYXJlIHBl cmZvcm1lZCB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzLgotLQotLT1oZWFkMSBSRVRVUk4gVkFM VUVTCi0tCi0tRVZQX1BLRVlfdmVyaWZ5cmVjb3Zlcl9pbml0KCkgYW5kIEVWUF9QS0VZX3Zlcmlm eXJlY292ZXIoKSByZXR1cm4gMSBmb3Igc3VjY2VzcwotLWFuZCAwIG9yIGEgbmVnYXRpdmUgdmFs dWUgZm9yIGZhaWx1cmUuIEluIHBhcnRpY3VsYXIgYSByZXR1cm4gdmFsdWUgb2YgLTIKLS1pbmRp Y2F0ZXMgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBwdWJsaWMga2V5IGFs Z29yaXRobS4KLS0KLS09aGVhZDEgRVhBTVBMRQotLQotLVJlY292ZXIgZGlnZXN0IG9yaWdpbmFs bHkgc2lnbmVkIHVzaW5nIFBLQ1MjMSBhbmQgU0hBMjU2IGRpZ2VzdDoKLS0KLS0gI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0tICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotLQotLSBFVlBfUEtF WV9DVFggKmN0eDsKLS0gdW5zaWduZWQgY2hhciAqcm91dCwgKnNpZzsKLS0gc2l6ZV90IHJvdXRs ZW4sIHNpZ2xlbjsgCi0tIEVWUF9QS0VZICp2ZXJpZnlfa2V5OwotLSAvKiBOQjogYXNzdW1lcyB2 ZXJpZnlfa2V5LCBzaWcgYW5kIHNpZ2xlbiBhcmUgYWxyZWFkeSBzZXQgdXAKLS0gICogYW5kIHRo YXQgdmVyaWZ5X2tleSBpcyBhbiBSU0EgcHVibGljIGtleQotLSAgKi8KLS0gY3R4ID0gRVZQX1BL RVlfQ1RYX25ldyh2ZXJpZnlfa2V5KTsKLS0gaWYgKCFjdHgpCi0tCS8qIEVycm9yIG9jY3VycmVk ICovCi0tIGlmIChFVlBfUEtFWV92ZXJpZnlyZWNvdmVyX2luaXQoY3R4KSA8PSAwKQotLQkvKiBF cnJvciAqLwotLSBpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhjdHgsIFJTQV9QS0NT MV9QQURESU5HKSA8PSAwKQotLQkvKiBFcnJvciAqLwotLSBpZiAoRVZQX1BLRVlfQ1RYX3NldF9z aWduYXR1cmVfbWQoY3R4LCBFVlBfc2hhMjU2KCkpIDw9IDApCi0tCS8qIEVycm9yICovCi0tCi0t IC8qIERldGVybWluZSBidWZmZXIgbGVuZ3RoICovCi0tIGlmIChFVlBfUEtFWV92ZXJpZnlyZWNv dmVyKGN0eCwgTlVMTCwgJnJvdXRsZW4sIHNpZywgc2lnbGVuKSA8PSAwKQotLQkvKiBFcnJvciAq LwotLQotLSByb3V0ID0gT1BFTlNTTF9tYWxsb2Mocm91dGxlbik7Ci0tCi0tIGlmICghcm91dCkK LS0JLyogbWFsbG9jIGZhaWx1cmUgKi8KLS0gCi0tIGlmIChFVlBfUEtFWV92ZXJpZnlyZWNvdmVy KGN0eCwgcm91dCwgJnJvdXRsZW4sIHNpZywgc2lnbGVuKSA8PSAwKQotLQkvKiBFcnJvciAqLwot LQotLSAvKiBSZWNvdmVyZWQgZGF0YSBpcyByb3V0bGVuIGJ5dGVzIHdyaXR0ZW4gdG8gYnVmZmVy IHJvdXQgKi8KLS0KLS09aGVhZDEgU0VFIEFMU08KLS0KLS1MPEVWUF9QS0VZX0NUWF9uZXcoMyl8 RVZQX1BLRVlfQ1RYX25ldygzKT4sCi0tTDxFVlBfUEtFWV9lbmNyeXB0KDMpfEVWUF9QS0VZX2Vu Y3J5cHQoMyk+LAotLUw8RVZQX1BLRVlfZGVjcnlwdCgzKXxFVlBfUEtFWV9kZWNyeXB0KDMpPiwK LS1MPEVWUF9QS0VZX3NpZ24oMyl8RVZQX1BLRVlfc2lnbigzKT4sCi0tTDxFVlBfUEtFWV92ZXJp ZnkoMyl8RVZQX1BLRVlfdmVyaWZ5KDMpPiwKLS1MPEVWUF9QS0VZX2Rlcml2ZSgzKXxFVlBfUEtF WV9kZXJpdmUoMyk+IAotLQotLT1oZWFkMSBISVNUT1JZCi0tCi0tVGhlc2UgZnVuY3Rpb25zIHdl cmUgZmlyc3QgYWRkZWQgdG8gT3BlblNTTCAxLjAuMC4KLS0KLS09Y3V0Ci0tLSAKLQoKZGlmZiAt LWdpdCBhL29wZW5zc2wtMS4wLjFjLXNlY3VyZS1nZXRlbnYucGF0Y2ggYi9vcGVuc3NsLTEuMC4x Yy1zZWN1cmUtZ2V0ZW52LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzM4 ZmI0Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjFjLXNlY3VyZS1nZXRlbnYucGF0Y2gKKysr IC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5 cHRvL2NvbmYvY29uZl9hcGkuYy5zZWN1cmUtZ2V0ZW52IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9j b25mL2NvbmZfYXBpLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vY29uZi9jb25mX2FwaS5j LnNlY3VyZS1nZXRlbnYJMjAxMS0wOS0wMiAxMzoyMDozMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xYy9jcnlwdG8vY29uZi9jb25mX2FwaS5jCTIwMTItMDktMTAgMjA6MjA6MjQu ODAzOTY4OTYxICswMjAwCi1AQCAtNjMsNiArNjMsOCBAQAotICMgZGVmaW5lIE5ERUJVRwotICNl bmRpZgotIAotKy8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCi0rI2RlZmluZSBfR05VX1NPVVJDRQot ICNpbmNsdWRlIDxhc3NlcnQuaD4KLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0 cmluZy5oPgotQEAgLTE0Miw3ICsxNDQsNyBAQCBjaGFyICpfQ09ORl9nZXRfc3RyaW5nKGNvbnN0 IENPTkYgKmNvbmYsCi0gCQkJaWYgKHYgIT0gTlVMTCkgcmV0dXJuKHYtPnZhbHVlKTsKLSAJCQlp ZiAoc3RyY21wKHNlY3Rpb24sIkVOViIpID09IDApCi0gCQkJCXsKLS0JCQkJcD1nZXRlbnYobmFt ZSk7Ci0rCQkJCXA9c2VjdXJlX2dldGVudihuYW1lKTsKLSAJCQkJaWYgKHAgIT0gTlVMTCkgcmV0 dXJuKHApOwotIAkJCQl9Ci0gCQkJfQotQEAgLTE1NSw3ICsxNTcsNyBAQCBjaGFyICpfQ09ORl9n ZXRfc3RyaW5nKGNvbnN0IENPTkYgKmNvbmYsCi0gCQkJcmV0dXJuKE5VTEwpOwotIAkJfQotIAll bHNlCi0tCQlyZXR1cm4oZ2V0ZW52KG5hbWUpKTsKLSsJCXJldHVybiAoc2VjdXJlX2dldGVudihu YW1lKSk7Ci0gCX0KLSAKLSAjaWYgMCAvKiBUaGVyZSdzIG5vIHdheSB0byBwcm92aWRlIGVycm9y IGNoZWNraW5nIHdpdGggdGhpcyBmdW5jdGlvbiwgc28KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9jb25mL2NvbmZfbW9kLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMC4xYy9jcnlw dG8vY29uZi9jb25mX21vZC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2NvbmYvY29uZl9t b2QuYy5zZWN1cmUtZ2V0ZW52CTIwMDgtMTEtMDUgMTk6Mzg6NTUuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL2NvbmYvY29uZl9tb2QuYwkyMDEyLTA5LTEwIDIwOjIy OjQ2LjIyODk3MDY2MSArMDIwMAotQEAgLTU2LDYgKzU2LDggQEAKLSAgKgotICAqLwotIAotKy8q IGZvciBzZWN1cmVfZ2V0ZW52ICovCi0rI2RlZmluZSBfR05VX1NPVVJDRQotICNpbmNsdWRlIDxz dGRpby5oPgotICNpbmNsdWRlIDxjdHlwZS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgotQEAgLTU0OCw4ICs1NTAsOCBAQCBjaGFyICpDT05GX2dldDFfZGVmYXVsdF9jb25maWdfZmls ZSh2b2lkCi0gCWNoYXIgKmZpbGU7Ci0gCWludCBsZW47Ci0gCi0tCWZpbGUgPSBnZXRlbnYoIk9Q RU5TU0xfQ09ORiIpOwotLQlpZiAoZmlsZSkgCi0rCWZpbGUgPSBzZWN1cmVfZ2V0ZW52KCJPUEVO U1NMX0NPTkYiKTsKLSsJaWYgKGZpbGUpCi0gCQlyZXR1cm4gQlVGX3N0cmR1cChmaWxlKTsKLSAK LSAJbGVuID0gc3RybGVuKFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9hcmVhKCkpOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWMvY3J5cHRvL2VuZ2luZS9lbmdfbGlzdC5jLnNlY3VyZS1nZXRlbnYgb3Bl bnNzbC0xLjAuMWMvY3J5cHRvL2VuZ2luZS9lbmdfbGlzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWMv Y3J5cHRvL2VuZ2luZS9lbmdfbGlzdC5jLnNlY3VyZS1nZXRlbnYJMjAxMC0wMy0yNyAxOToyODox My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZW5naW5lL2VuZ19s aXN0LmMJMjAxMi0wOS0xMCAyMDoyMDo0Ni4xMDY0NTIwMjcgKzAyMDAKLUBAIC02MSw2ICs2MSw4 IEBACi0gICogU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiwgYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBP cGVuU1NMIHByb2plY3QuCi0gICovCi0gCi0rLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KLSsjZGVm aW5lIF9HTlVfU09VUkNFCi0gI2luY2x1ZGUgImVuZ19pbnQuaCIKLSAKLSAvKiBUaGUgbGlua2Vk LWxpc3Qgb2YgcG9pbnRlcnMgdG8gZW5naW5lIHR5cGVzLiBlbmdpbmVfbGlzdF9oZWFkCi1AQCAt Mzk5LDkgKzQwMSw5IEBAIEVOR0lORSAqRU5HSU5FX2J5X2lkKGNvbnN0IGNoYXIgKmlkKQotIAlp ZiAoc3RyY21wKGlkLCAiZHluYW1pYyIpKQotIAkJewotICNpZmRlZiBPUEVOU1NMX1NZU19WTVMK LS0JCWlmKChsb2FkX2RpciA9IGdldGVudigiT1BFTlNTTF9FTkdJTkVTIikpID09IDApIGxvYWRf ZGlyID0gIlNTTFJPT1Q6W0VOR0lORVNdIjsKLSsJCWlmKE9QRU5TU0xfaXNzZXR1Z2lkKCkgfHwg KGxvYWRfZGlyID0gZ2V0ZW52KCJPUEVOU1NMX0VOR0lORVMiKSkgPT0gMCkgbG9hZF9kaXIgPSAi U1NMUk9PVDpbRU5HSU5FU10iOwotICNlbHNlCi0tCQlpZigobG9hZF9kaXIgPSBnZXRlbnYoIk9Q RU5TU0xfRU5HSU5FUyIpKSA9PSAwKSBsb2FkX2RpciA9IEVOR0lORVNESVI7Ci0rCQlpZigobG9h ZF9kaXIgPSBzZWN1cmVfZ2V0ZW52KCJPUEVOU1NMX0VOR0lORVMiKSkgPT0gMCkgbG9hZF9kaXIg PSBFTkdJTkVTRElSOwotICNlbmRpZgotIAkJaXRlcmF0b3IgPSBFTkdJTkVfYnlfaWQoImR5bmFt aWMiKTsKLSAJCWlmKCFpdGVyYXRvciB8fCAhRU5HSU5FX2N0cmxfY21kX3N0cmluZyhpdGVyYXRv ciwgIklEIiwgaWQsIDApIHx8Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vbWQ1L21k NV9kZ3N0LmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vbWQ1L21kNV9kZ3N0 LmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuc2VjdXJlLWdldGVu dgkyMDEyLTA5LTEwIDIwOjEwOjI2LjA3OTM5MTkzMiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFj L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEyLTA5LTEwIDIwOjIwOjMxLjM4MzExODE1MyArMDIw MAotQEAgLTU2LDYgKzU2LDggQEAKLSAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2Vu Y2UuXQotICAqLwotIAotKy8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCi0rI2RlZmluZSBfR05VX1NP VVJDRQotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJtZDVfbG9jbC5oIgotICNpbmNs dWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci1AQCAtNzQsNyArNzYsNyBAQCBjb25zdCBjaGFyIE1E NV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCi0gaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCi0g I2lmZGVmIE9QRU5TU0xfRklQUwotIAl7Ci0tCWlmIChGSVBTX21vZGUoKSAmJiBnZXRlbnYoIk9Q RU5TU0xfRklQU19OT05fQVBQUk9WRURfTUQ1X0FMTE9XIikgPT0gTlVMTCkKLSsJaWYgKEZJUFNf bW9kZSgpICYmIHNlY3VyZV9nZXRlbnYoIk9QRU5TU0xfRklQU19OT05fQVBQUk9WRURfTUQ1X0FM TE9XIikgPT0gTlVMTCkKLSAJCU9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0gICAg ICAgICAgICAgICAgICJEaWdlc3QgTUQ1IGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7Ci0gCXJl dHVybiBwcml2YXRlX01ENV9Jbml0KGMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWMvY3J5cHRv L29faW5pdC5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL29faW5pdC5jCi0t LS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL29faW5pdC5jLnNlY3VyZS1nZXRlbnYJMjAxMi0wOS0x MCAyMDoxMDoyNi4wNjYzOTE2MzggKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vb19p bml0LmMJMjAxMi0wOS0xMCAyMDoyMzoyNy42MzQ5MDg4MjIgKzAyMDAKLUBAIC01Miw2ICs1Miw4 IEBACi0gICoKLSAgKi8KLSAKLSsvKiBmb3Igc2VjdXJlX2dldGVudiAqLwotKyNkZWZpbmUgX0dO VV9TT1VSQ0UKLSAjaW5jbHVkZSA8ZV9vcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot ICNpZmRlZiBPUEVOU1NMX0ZJUFMKLUBAIC03MSw3ICs3Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRf Zmlwc19tb2RlKHZvaWQpCi0gCWNoYXIgYnVmWzJdID0gIjAiOwotIAlpbnQgZmQ7Ci0gCQotLQlp ZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCi0rCWlmIChzZWN1 cmVfZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCi0gCQl7Ci0gCQli dWZbMF0gPSAnMSc7Ci0gCQl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcmFuZC9y YW5kZmlsZS5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3JhbmQvcmFuZGZp bGUuYwotLS0tIG9wZW5zc2wtMS4wLjFjL2NyeXB0by9yYW5kL3JhbmRmaWxlLmMuc2VjdXJlLWdl dGVudgkyMDEyLTAxLTE1IDE0OjQwOjIxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjFjL2NyeXB0by9yYW5kL3JhbmRmaWxlLmMJMjAxMi0wOS0xMCAyMDoyMDo0MC43MDgzMjk2MTcg KzAyMDAKLUBAIC01OCw2ICs1OCw4IEBACi0gCi0gLyogV2UgbmVlZCB0byBkZWZpbmUgdGhpcyB0 byBnZXQgbWFjcm9zIGxpa2UgU19JRkJMSyBhbmQgU19JRkNIUiAqLwotICNkZWZpbmUgX1hPUEVO X1NPVVJDRSA1MDAKLSsvKiBmb3Igc2VjdXJlX2dldGVudiAqLwotKyNkZWZpbmUgX0dOVV9TT1VS Q0UKLSAKLSAjaW5jbHVkZSA8ZXJybm8uaD4KLSAjaW5jbHVkZSA8c3RkaW8uaD4KLUBAIC0yNzUs OCArMjc3LDcgQEAgY29uc3QgY2hhciAqUkFORF9maWxlX25hbWUoY2hhciAqYnVmLCBzaQotIAlz dHJ1Y3Qgc3RhdCBzYjsKLSAjZW5kaWYKLSAKLS0JaWYgKE9QRU5TU0xfaXNzZXR1Z2lkKCkgPT0g MCkKLS0JCXM9Z2V0ZW52KCJSQU5ERklMRSIpOwotKwlzPXNlY3VyZV9nZXRlbnYoIlJBTkRGSUxF Iik7Ci0gCWlmIChzICE9IE5VTEwgJiYgKnMgJiYgc3RybGVuKHMpICsgMSA8IHNpemUpCi0gCQl7 Ci0gCQlpZiAoQlVGX3N0cmxjcHkoYnVmLHMsc2l6ZSkgPj0gc2l6ZSkKLUBAIC0yODQsOCArMjg1 LDcgQEAgY29uc3QgY2hhciAqUkFORF9maWxlX25hbWUoY2hhciAqYnVmLCBzaQotIAkJfQotIAll bHNlCi0gCQl7Ci0tCQlpZiAoT1BFTlNTTF9pc3NldHVnaWQoKSA9PSAwKQotLQkJCXM9Z2V0ZW52 KCJIT01FIik7Ci0rCQlzPXNlY3VyZV9nZXRlbnYoIkhPTUUiKTsKLSAjaWZkZWYgREVGQVVMVF9I T01FCi0gCQlpZiAocyA9PSBOVUxMKQotIAkJCXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2Ny eXB0by94NTA5L2J5X2Rpci5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3g1 MDkvYnlfZGlyLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDUwOS9ieV9kaXIuYy5zZWN1 cmUtZ2V0ZW52CTIwMTAtMDItMTkgMTk6MjY6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWMvY3J5cHRvL3g1MDkvYnlfZGlyLmMJMjAxMi0wOS0xMCAyMDoyMToxNi42NDExNDQ0 NTEgKzAyMDAKLUBAIC01Niw2ICs1Niw4IEBACi0gICogW2luY2x1ZGluZyB0aGUgR05VIFB1Ymxp YyBMaWNlbmNlLl0KLSAgKi8KLSAKLSsvKiBmb3Igc2VjdXJlX2dldGVudiAqLwotKyNkZWZpbmUg X0dOVV9TT1VSQ0UKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8dGltZS5oPgotICNp bmNsdWRlIDxlcnJuby5oPgotQEAgLTEzNSw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IGRpcl9jdHJs KFg1MDlfTE9PS1VQICpjdHgsIGluCi0gCWNhc2UgWDUwOV9MX0FERF9ESVI6Ci0gCQlpZiAoYXJn bCA9PSBYNTA5X0ZJTEVUWVBFX0RFRkFVTFQpCi0gCQkJewotLQkJCWRpcj0oY2hhciAqKWdldGVu dihYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudigpKTsKLSsJCQlkaXI9KGNoYXIgKilzZWN1 cmVfZ2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXJfZW52KCkpOwotIAkJCWlmIChkaXIp Ci0gCQkJCXJldD1hZGRfY2VydF9kaXIobGQsZGlyLFg1MDlfRklMRVRZUEVfUEVNKTsKLSAJCQll bHNlCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDUwOS9ieV9maWxlLmMuc2VjdXJl LWdldGVudiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDUwOS9ieV9maWxlLmMKLS0tLSBvcGVuc3Ns LTEuMC4xYy9jcnlwdG8veDUwOS9ieV9maWxlLmMuc2VjdXJlLWdldGVudgkyMDEyLTA5LTEwIDIw OjEwOjI2LjAxNjM5MDUwMyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by94NTA5L2J5 X2ZpbGUuYwkyMDEyLTA5LTEwIDIwOjIxOjA3Ljc0ODk0MjgwNiArMDIwMAotQEAgLTU2LDYgKzU2 LDggQEAKLSAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotICAqLwotIAot Ky8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCi0rI2RlZmluZSBfR05VX1NPVVJDRQotICNpbmNsdWRl IDxzdGRpby5oPgotICNpbmNsdWRlIDx0aW1lLmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+Ci1AQCAt MTAwLDcgKzEwMiw3IEBAIHN0YXRpYyBpbnQgYnlfZmlsZV9jdHJsKFg1MDlfTE9PS1VQICpjdHgK LSAJY2FzZSBYNTA5X0xfRklMRV9MT0FEOgotIAkJaWYgKGFyZ2wgPT0gWDUwOV9GSUxFVFlQRV9E RUZBVUxUKQotIAkJCXsKLS0JCQlmaWxlID0gKGNoYXIgKilnZXRlbnYoWDUwOV9nZXRfZGVmYXVs dF9jZXJ0X2ZpbGVfZW52KCkpOwotKwkJCWZpbGUgPSAoY2hhciAqKXNlY3VyZV9nZXRlbnYoWDUw OV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52KCkpOwotIAkJCWlmIChmaWxlKQotIAkJCQlvayA9 IChYNTA5X2xvYWRfY2VydF9jcmxfZmlsZShjdHgsZmlsZSwKLSAJCQkJCSAgICAgIFg1MDlfRklM RVRZUEVfUEVNKSAhPSAwKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFjL2NyeXB0by94NTA5L3g1 MDlfdmZ5LmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDUwOS94NTA5X3Zm eS5jCi0tLS0gb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3g1MDkveDUwOV92ZnkuYy5zZWN1cmUtZ2V0 ZW52CTIwMTEtMDktMjMgMTU6Mzk6MzUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWMvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDEyLTA5LTEwIDIwOjIwOjU1Ljk1MTY3NTI4MyAr MDIwMAotQEAgLTU2LDYgKzU2LDggQEAKLSAgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExp Y2VuY2UuXQotICAqLwotIAotKy8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCi0rI2RlZmluZSBfR05V X1NPVVJDRQotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDx0aW1lLmg+Ci0gI2luY2x1 ZGUgPGVycm5vLmg+Ci1AQCAtNDgxLDcgKzQ4Myw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfY2hhaW5f ZXh0ZW5zaW9ucyhYNTA5X1MKLSAJCQkhIShjdHgtPnBhcmFtLT5mbGFncyAmIFg1MDlfVl9GTEFH X0FMTE9XX1BST1hZX0NFUlRTKTsKLSAJCS8qIEEgaGFjayB0byBrZWVwIHBlb3BsZSB3aG8gZG9u J3Qgd2FudCB0byBtb2RpZnkgdGhlaXIKLSAJCSAgIHNvZnR3YXJlIGhhcHB5ICovCi0tCQlpZiAo Z2V0ZW52KCJPUEVOU1NMX0FMTE9XX1BST1hZX0NFUlRTIikpCi0rCQlpZiAoc2VjdXJlX2dldGVu digiT1BFTlNTTF9BTExPV19QUk9YWV9DRVJUUyIpKQotIAkJCWFsbG93X3Byb3h5X2NlcnRzID0g MTsKLSAJCXB1cnBvc2UgPSBjdHgtPnBhcmFtLT5wdXJwb3NlOwotIAkJfQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWMvZW5naW5lcy9jY2dvc3QvZ29zdF9jdGwuYy5zZWN1cmUtZ2V0ZW52IG9wZW5z c2wtMS4wLjFjL2VuZ2luZXMvY2Nnb3N0L2dvc3RfY3RsLmMKLS0tLSBvcGVuc3NsLTEuMC4xYy9l bmdpbmVzL2NjZ29zdC9nb3N0X2N0bC5jLnNlY3VyZS1nZXRlbnYJMjAwOC0wMy0xNiAyMjowNTo0 NC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYy9lbmdpbmVzL2NjZ29zdC9nb3N0 X2N0bC5jCTIwMTItMDktMTAgMjA6MjE6MjYuNzU5MzczODk3ICswMjAwCi1AQCAtNiw2ICs2LDgg QEAKLSAgKiAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgY29udHJvbCBjb21tYW5kcyBmb3IgR09T VCBlbmdpbmUgICAgICAgICAgKgotICAqICAgICAgICAgICAgT3BlblNTTCAwLjkuOSBsaWJyYXJp ZXMgcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICAgICAqCi0gICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAg ICAgICAgICAgCi0rLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KLSsjZGVmaW5lIF9HTlVfU09VUkNF Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KLUBAIC02NSw3ICs2Nyw3IEBAIGNvbnN0IGNoYXIgKmdldF9nb3N0 X2VuZ2luZV9wYXJhbShpbnQgcGEKLSAJCXsKLSAJCXJldHVybiBnb3N0X3BhcmFtc1twYXJhbV07 Ci0gCQl9Ci0tCXRtcCA9IGdldGVudihnb3N0X2Vudm5hbWVzW3BhcmFtXSk7Ci0rCXRtcCA9IHNl Y3VyZV9nZXRlbnYoZ29zdF9lbnZuYW1lc1twYXJhbV0pOwotIAlpZiAodG1wKSAKLSAJCXsKLSAJ CWlmIChnb3N0X3BhcmFtc1twYXJhbV0pIE9QRU5TU0xfZnJlZShnb3N0X3BhcmFtc1twYXJhbV0p OwotQEAgLTc5LDcgKzgxLDcgQEAgaW50IGdvc3Rfc2V0X2RlZmF1bHRfcGFyYW0oaW50IHBhcmFt LCBjbwotIAl7Ci0gCWNvbnN0IGNoYXIgKnRtcDsKLSAJaWYgKHBhcmFtIDwwIHx8IHBhcmFtID5H T1NUX1BBUkFNX01BWCkgcmV0dXJuIDA7Ci0tCXRtcCA9IGdldGVudihnb3N0X2Vudm5hbWVzW3Bh cmFtXSk7Ci0rCXRtcCA9IHNlY3VyZV9nZXRlbnYoZ29zdF9lbnZuYW1lc1twYXJhbV0pOwotIAkv KiBpZiB0aGVyZSBpcyB2YWx1ZSBpbiB0aGUgZW52aXJvbm1lbnQsIHVzZSBpdCwgZWxzZSAtcGFz c2VkIHN0cmluZyAqICovCi0gCWlmICghdG1wKSB0bXA9dmFsdWU7Ci0gCWlmIChnb3N0X3BhcmFt c1twYXJhbV0pIE9QRU5TU0xfZnJlZShnb3N0X3BhcmFtc1twYXJhbV0pOwoKZGlmZiAtLWdpdCBh L29wZW5zc2wtMS4wLjFjLXZlcmlmeS1lcnJvci5wYXRjaCBiL29wZW5zc2wtMS4wLjFjLXZlcmlm eS1lcnJvci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JkY2I0OC4uMDAw MDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xYy12ZXJpZnktZXJyb3IucGF0Y2gKKysrIC9kZXYvbnVs bApAQCAtMSw3NyArMCwwIEBACi1Gcm9tIDViYjZkOTY1NThmZjYwMTM4MjZlMzM2MmY0YzgxNTEz ZTNkZjIzZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBCZW4gTGF1cmllIDxiZW5A b3BlbnNzbC5vcmc+Ci1EYXRlOiBUaHUsIDEzIERlYyAyMDEyIDE1OjQ4OjQyICswMDAwCi1TdWJq ZWN0OiBbUEFUQ0hdIE1ha2UgdmVyaWZ5IHJldHVybiBlcnJvcnMuCi0KLS0tLQotIENIQU5HRVMg ICAgICAgfCAgICAzICsrKwotIE1ha2VmaWxlLm9yZyAgfCAgICAyICstCi0gYXBwcy92ZXJpZnku YyB8ICAgMTYgKysrKysrKysrKysrLS0tLQotIHRlc3QvTWFrZWZpbGUgfCAgICAyICstCi0gNCBm aWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQotCi1kaWZmIC0t Z2l0IGEvTWFrZWZpbGUub3JnIGIvTWFrZWZpbGUub3JnCi1pbmRleCA1NTI3M2VhLi40M2QxNmNi IDEwMDY0NAotLS0tIGEvTWFrZWZpbGUub3JnCi0rKysgYi9NYWtlZmlsZS5vcmcKLUBAIC00NDQs NyArNDQ0LDcgQEAgcmVoYXNoLnRpbWU6IGNlcnRzIGFwcHMKLSAJCVsgLXggImFwcHMvb3BlbnNz bC5leGUiIF0gJiYgT1BFTlNTTD0iYXBwcy9vcGVuc3NsLmV4ZSIgfHwgOjsgXAotIAkJT1BFTlNT TF9ERUJVR19NRU1PUlk9b247IFwKLSAJCWV4cG9ydCBPUEVOU1NMIE9QRU5TU0xfREVCVUdfTUVN T1JZOyBcCi0tCQkkKFBFUkwpIHRvb2xzL2NfcmVoYXNoIGNlcnRzKSAmJiBcCi0rCQkkKFBFUkwp IHRvb2xzL2NfcmVoYXNoIGNlcnRzL2RlbW8pICYmIFwKLSAJCXRvdWNoIHJlaGFzaC50aW1lOyBc Ci0gCWVsc2UgOjsgZmkKLSAKLWRpZmYgLS1naXQgYS9hcHBzL3ZlcmlmeS5jIGIvYXBwcy92ZXJp ZnkuYwotaW5kZXggMGYzNGI4Ni4uODkzNjcwZiAxMDA2NDQKLS0tLSBhL2FwcHMvdmVyaWZ5LmMK LSsrKyBiL2FwcHMvdmVyaWZ5LmMKLUBAIC0yMjIsMTEgKzIyMiwxOSBAQCBpbnQgTUFJTihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi0gCQkJZ290byBlbmQ7Ci0gCQl9Ci0gCi0tCWlmIChhcmdjIDwg MSkgY2hlY2soY2VydF9jdHgsIE5VTEwsIHVudHJ1c3RlZCwgdHJ1c3RlZCwgY3JscywgZSk7Ci0r CXJldCA9IDA7Ci0rCWlmIChhcmdjIDwgMSkKLSsJCXsgCi0rCQlpZiAoMSAhPSBjaGVjayhjZXJ0 X2N0eCwgTlVMTCwgdW50cnVzdGVkLCB0cnVzdGVkLCBjcmxzLCBlKSkKLSsJCQlyZXQgPSAtMTsK LSsJCX0KLSAJZWxzZQotKwkJewotIAkJZm9yIChpPTA7IGk8YXJnYzsgaSsrKQotLQkJCWNoZWNr KGNlcnRfY3R4LGFyZ3ZbaV0sIHVudHJ1c3RlZCwgdHJ1c3RlZCwgY3JscywgZSk7Ci0tCXJldD0w OwotKwkJCWlmICgxICE9IGNoZWNrKGNlcnRfY3R4LGFyZ3ZbaV0sIHVudHJ1c3RlZCwgdHJ1c3Rl ZCwgY3JscywgZSkpCi0rCQkJCXJldCA9IC0xOwotKwkJfQotKwotIGVuZDoKLSAJaWYgKHJldCA9 PSAxKSB7Ci0gCQlCSU9fcHJpbnRmKGJpb19lcnIsInVzYWdlOiB2ZXJpZnkgWy12ZXJib3NlXSBb LUNBcGF0aCBwYXRoXSBbLUNBZmlsZSBmaWxlXSBbLXB1cnBvc2UgcHVycG9zZV0gWy1jcmxfY2hl Y2tdIik7Ci1AQCAtMjUyLDcgKzI2MCw3IEBAIGVuZDoKLSAJc2tfWDUwOV9wb3BfZnJlZSh0cnVz dGVkLCBYNTA5X2ZyZWUpOwotIAlza19YNTA5X0NSTF9wb3BfZnJlZShjcmxzLCBYNTA5X0NSTF9m cmVlKTsKLSAJYXBwc19zaHV0ZG93bigpOwotLQlPUEVOU1NMX0VYSVQocmV0KTsKLSsJT1BFTlNT TF9FWElUKHJldCA8IDAgPyAyIDogcmV0KTsKLSAJfQotIAotIHN0YXRpYyBpbnQgY2hlY2soWDUw OV9TVE9SRSAqY3R4LCBjaGFyICpmaWxlLAotZGlmZiAtLWdpdCBhL3Rlc3QvTWFrZWZpbGUgYi90 ZXN0L01ha2VmaWxlCi1pbmRleCAwOWU2ODQ4Li40YzllYWJjIDEwMDY0NAotLS0tIGEvdGVzdC9N YWtlZmlsZQotKysrIGIvdGVzdC9NYWtlZmlsZQotQEAgLTI0Niw3ICsyNDYsNyBAQCB0ZXN0X2Vj ZGg6Ci0gdGVzdF92ZXJpZnk6Ci0gCUBlY2hvICJUaGUgZm9sbG93aW5nIGNvbW1hbmQgc2hvdWxk IGhhdmUgc29tZSBPSydzIGFuZCBzb21lIGZhaWx1cmVzIgotIAlAZWNobyAiVGhlcmUgYXJlIGRl ZmluaXRseSBhIGZldyBleHBpcmVkIGNlcnRpZmljYXRlcyIKLS0JLi4vdXRpbC9zaGxpYl93cmFw LnNoIC4uL2FwcHMvb3BlbnNzbCB2ZXJpZnkgLUNBcGF0aCAuLi9jZXJ0cyAuLi9jZXJ0cy8qLnBl bQotKwkuLi91dGlsL3NobGliX3dyYXAuc2ggLi4vYXBwcy9vcGVuc3NsIHZlcmlmeSAtQ0FwYXRo IC4uL2NlcnRzL2RlbW8gLi4vY2VydHMvZGVtby8qLnBlbQotIAotIHRlc3RfZGg6Ci0gCUBlY2hv ICJHZW5lcmF0ZSBhIHNldCBvZiBESCBwYXJhbWV0ZXJzIgotLS0gCi0xLjcuNy42Ci0KCmRpZmYg LS1naXQgYS9vcGVuc3NsLTEuMC4xZS1iYWNrcG9ydHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4xZS1i YWNrcG9ydHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiNzIy NAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjFlLWJhY2twb3J0cy5wYXRjaApAQCAt MCwwICsxLDI1NiBAQAorRnJvbSAwOGY4OTMzZmEzNGQyNDIzODNhMWUxMmQ0NzAxYWNiMTg1NTY4 NmJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmljayBBbGNvY2sgPG5peEBlc3Bl cmkub3JnLnVrPgorRGF0ZTogRnJpLCAxNSBGZWIgMjAxMyAxNzo0NDoxMSArMDAwMAorU3ViamVj dDogW1BBVENIXSBGaXggUE9EIGVycm9ycyB0byBzdG9wIG1ha2UgaW5zdGFsbF9kb2NzIGR5aW5n IHdpdGggcG9kMm1hbgorIDIuNS4wKworCitwb2RsYXRvcnMgMi41LjAgaGFzIHN3aXRjaGVkIHRv IGR5aW5nIG9uIFBPRCBzeW50YXggZXJyb3JzLiBUaGlzIG1lYW5zCit0aGF0IGEgYnVuY2ggb2Yg bG9uZy1zdGFuZGluZyBlcnJvbmVvdXMgUE9EIGluIHRoZSBvcGVuc3NsIGRvY3VtZW50YXRpb24K K25vdyBsZWFkcyB0byBmYXRhbCBlcnJvcnMgZnJvbSBwb2QybWFuLCBoYWx0aW5nIGluc3RhbGxh dGlvbi4KKworVW5mb3J0dW5hdGVseSBQT0QgY29uc3RyYWludHMgbWVhbiB0aGF0IHlvdSBoYXZl IHRvIHNvcnQgbnVtZXJpYyBsaXN0cworaW4gYXNjZW5kaW5nIG9yZGVyIGlmIHRoZXkgc3RhcnQg d2l0aCAxOiB5b3UgY2Fubm90IGRvIDEsIDAsIDIgZXZlbiBpZgoreW91IHdhbnQgMSB0byBhcHBl YXIgZmlyc3QuIEkndmUgcmVzaHVmZmxlZCBzdWNoIChhbGFzLCBJIHdpc2ggdGhlcmUKK3dlcmUg YSBiZXR0ZXIgd2F5IGJ1dCBJIGRvbid0IGtub3cgb2Ygb25lKS4KKyhjaGVycnkgcGlja2VkIGZy b20gY29tbWl0IDVjYzI3MDc3NDI1ODE0OTIzNWY2OWUxNzg5YjMzNzBmNTdiMGUyN2IpCistLS0K KyBkb2MvY3J5cHRvL1g1MDlfU1RPUkVfQ1RYX2dldF9lcnJvci5wb2QgICB8ICAgIDIgKysKKyBk b2Mvc3NsL1NTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0LnBvZCAgICB8ICAgIDggKysrKy0tLS0K KyBkb2Mvc3NsL1NTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50LnBvZCB8ICAgIDQgKysrKwor IGRvYy9zc2wvU1NMX2FjY2VwdC5wb2QgICAgICAgICAgICAgICAgICAgIHwgICAxMCArKysrKy0t LS0tCisgZG9jL3NzbC9TU0xfY29ubmVjdC5wb2QgICAgICAgICAgICAgICAgICAgfCAgIDEwICsr KysrLS0tLS0KKyBkb2Mvc3NsL1NTTF9kb19oYW5kc2hha2UucG9kICAgICAgICAgICAgICB8ICAg MTAgKysrKystLS0tLQorIGRvYy9zc2wvU1NMX3NodXRkb3duLnBvZCAgICAgICAgICAgICAgICAg IHwgICAxMCArKysrKy0tLS0tCisgNyBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAy NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9jcnlwdG8vWDUwOV9TVE9SRV9DVFhf Z2V0X2Vycm9yLnBvZCBiL2RvYy9jcnlwdG8vWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yLnBvZAor aW5kZXggYTg4M2Y2Yy4uNjBlODMzMiAxMDA2NDQKKy0tLSBhL2RvYy9jcnlwdG8vWDUwOV9TVE9S RV9DVFhfZ2V0X2Vycm9yLnBvZAorKysrIGIvZG9jL2NyeXB0by9YNTA5X1NUT1JFX0NUWF9nZXRf ZXJyb3IucG9kCitAQCAtMjc4LDYgKzI3OCw4IEBAIGhhcHBlbiBpZiBleHRlbmRlZCBDUkwgY2hl Y2tpbmcgaXMgZW5hYmxlZC4KKyBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBlcnJvci4gVGhpcyB3 aWxsIG5ldmVyIGJlIHJldHVybmVkIHVubGVzcyBleHBsaWNpdGx5Cisgc2V0IGJ5IGFuIGFwcGxp Y2F0aW9uLgorIAorKz1iYWNrCisrCisgPWhlYWQxIE5PVEVTCisgCisgVGhlIGFib3ZlIGZ1bmN0 aW9ucyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBm aWVsZHMKK2RpZmYgLS1naXQgYS9kb2Mvc3NsL1NTTF9DVFhfc2V0X2NsaWVudF9DQV9saXN0LnBv ZCBiL2RvYy9zc2wvU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3QucG9kCitpbmRleCA2MzJiNTU2 Li41ZTY2MTMzIDEwMDY0NAorLS0tIGEvZG9jL3NzbC9TU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlz dC5wb2QKKysrKyBiL2RvYy9zc2wvU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3QucG9kCitAQCAt NjYsMTYgKzY2LDE2IEBAIHZhbHVlczoKKyAKKyA9b3ZlciA0CisgCistPWl0ZW0gMQorLQorLVRo ZSBvcGVyYXRpb24gc3VjY2VlZGVkLgorLQorID1pdGVtIDAKKyAKKyBBIGZhaWx1cmUgd2hpbGUg bWFuaXB1bGF0aW5nIHRoZSBTVEFDS19PRihYNTA5X05BTUUpIG9iamVjdCBvY2N1cnJlZCBvcgor IHRoZSBYNTA5X05BTUUgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIEI8Y2FjZXJ0Pi4gQ2hl Y2sgdGhlIGVycm9yIHN0YWNrCisgdG8gZmluZCBvdXQgdGhlIHJlYXNvbi4KKyAKKys9aXRlbSAx CisrCisrVGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQuCisrCisgPWJhY2sKKyAKKyA9aGVhZDEgRVhB TVBMRVMKK2RpZmYgLS1naXQgYS9kb2Mvc3NsL1NTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50 LnBvZCBiL2RvYy9zc2wvU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hpbnQucG9kCitpbmRleCBi ODBlMjViLi43ZTYwZGY1IDEwMDY0NAorLS0tIGEvZG9jL3NzbC9TU0xfQ1RYX3VzZV9wc2tfaWRl bnRpdHlfaGludC5wb2QKKysrKyBiL2RvYy9zc2wvU1NMX0NUWF91c2VfcHNrX2lkZW50aXR5X2hp bnQucG9kCitAQCAtODEsNiArODEsOCBAQCBTU0xfQ1RYX3VzZV9wc2tfaWRlbnRpdHlfaGludCgp IGFuZCBTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50KCkgcmV0dXJuCisgCisgUmV0dXJuIHZhbHVl cyBmcm9tIHRoZSBzZXJ2ZXIgY2FsbGJhY2sgYXJlIGludGVycHJldGVkIGFzIGZvbGxvd3M6Cisg CisrPW92ZXIgNAorKworID1pdGVtID4gMAorIAorIFBTSyBpZGVudGl0eSB3YXMgZm91bmQgYW5k IHRoZSBzZXJ2ZXIgY2FsbGJhY2sgaGFzIHByb3ZpZGVkIHRoZSBQU0sKK0BAIC05OSw0ICsxMDEs NiBAQCBjb21wbGV0ZWx5LgorIFBTSyBpZGVudGl0eSB3YXMgbm90IGZvdW5kLiBBbiAidW5rbm93 bl9wc2tfaWRlbnRpdHkiIGFsZXJ0IG1lc3NhZ2UKKyB3aWxsIGJlIHNlbnQgYW5kIHRoZSBjb25u ZWN0aW9uIHNldHVwIGZhaWxzLgorIAorKz1iYWNrCisrCisgPWN1dAorZGlmZiAtLWdpdCBhL2Rv Yy9zc2wvU1NMX2FjY2VwdC5wb2QgYi9kb2Mvc3NsL1NTTF9hY2NlcHQucG9kCitpbmRleCBjYzcy NGMwLi5iMWMzNGQxIDEwMDY0NAorLS0tIGEvZG9jL3NzbC9TU0xfYWNjZXB0LnBvZAorKysrIGIv ZG9jL3NzbC9TU0xfYWNjZXB0LnBvZAorQEAgLTQ0LDE3ICs0NCwxNyBAQCBUaGUgZm9sbG93aW5n IHJldHVybiB2YWx1ZXMgY2FuIG9jY3VyOgorIAorID1vdmVyIDQKKyAKKy09aXRlbSAxCistCist VGhlIFRMUy9TU0wgaGFuZHNoYWtlIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLCBhIFRMUy9T U0wgY29ubmVjdGlvbiBoYXMgYmVlbgorLWVzdGFibGlzaGVkLgorLQorID1pdGVtIDAKKyAKKyBU aGUgVExTL1NTTCBoYW5kc2hha2Ugd2FzIG5vdCBzdWNjZXNzZnVsIGJ1dCB3YXMgc2h1dCBkb3du IGNvbnRyb2xsZWQgYW5kCisgYnkgdGhlIHNwZWNpZmljYXRpb25zIG9mIHRoZSBUTFMvU1NMIHBy b3RvY29sLiBDYWxsIFNTTF9nZXRfZXJyb3IoKSB3aXRoIHRoZQorIHJldHVybiB2YWx1ZSBCPHJl dD4gdG8gZmluZCBvdXQgdGhlIHJlYXNvbi4KKyAKKys9aXRlbSAxCisrCisrVGhlIFRMUy9TU0wg aGFuZHNoYWtlIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLCBhIFRMUy9TU0wgY29ubmVjdGlv biBoYXMgYmVlbgorK2VzdGFibGlzaGVkLgorKworID1pdGVtIEU8bHQ+MAorIAorIFRoZSBUTFMv U1NMIGhhbmRzaGFrZSB3YXMgbm90IHN1Y2Nlc3NmdWwgYmVjYXVzZSBhIGZhdGFsIGVycm9yIG9j Y3VycmVkIGVpdGhlcgorZGlmZiAtLWdpdCBhL2RvYy9zc2wvU1NMX2Nvbm5lY3QucG9kIGIvZG9j L3NzbC9TU0xfY29ubmVjdC5wb2QKK2luZGV4IGNjNTZlYmIuLjk0NmNhODkgMTAwNjQ0CistLS0g YS9kb2Mvc3NsL1NTTF9jb25uZWN0LnBvZAorKysrIGIvZG9jL3NzbC9TU0xfY29ubmVjdC5wb2QK K0BAIC00MSwxNyArNDEsMTcgQEAgVGhlIGZvbGxvd2luZyByZXR1cm4gdmFsdWVzIGNhbiBvY2N1 cjoKKyAKKyA9b3ZlciA0CisgCistPWl0ZW0gMQorLQorLVRoZSBUTFMvU1NMIGhhbmRzaGFrZSB3 YXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCwgYSBUTFMvU1NMIGNvbm5lY3Rpb24gaGFzIGJlZW4K Ky1lc3RhYmxpc2hlZC4KKy0KKyA9aXRlbSAwCisgCisgVGhlIFRMUy9TU0wgaGFuZHNoYWtlIHdh cyBub3Qgc3VjY2Vzc2Z1bCBidXQgd2FzIHNodXQgZG93biBjb250cm9sbGVkIGFuZAorIGJ5IHRo ZSBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgVExTL1NTTCBwcm90b2NvbC4gQ2FsbCBTU0xfZ2V0X2Vy cm9yKCkgd2l0aCB0aGUKKyByZXR1cm4gdmFsdWUgQjxyZXQ+IHRvIGZpbmQgb3V0IHRoZSByZWFz b24uCisgCisrPWl0ZW0gMQorKworK1RoZSBUTFMvU1NMIGhhbmRzaGFrZSB3YXMgc3VjY2Vzc2Z1 bGx5IGNvbXBsZXRlZCwgYSBUTFMvU1NMIGNvbm5lY3Rpb24gaGFzIGJlZW4KKytlc3RhYmxpc2hl ZC4KKysKKyA9aXRlbSBFPGx0PjAKKyAKKyBUaGUgVExTL1NTTCBoYW5kc2hha2Ugd2FzIG5vdCBz dWNjZXNzZnVsLCBiZWNhdXNlIGEgZmF0YWwgZXJyb3Igb2NjdXJyZWQgZWl0aGVyCitkaWZmIC0t Z2l0IGEvZG9jL3NzbC9TU0xfZG9faGFuZHNoYWtlLnBvZCBiL2RvYy9zc2wvU1NMX2RvX2hhbmRz aGFrZS5wb2QKK2luZGV4IDI0MzU3NjQuLjdmOGNmMjQgMTAwNjQ0CistLS0gYS9kb2Mvc3NsL1NT TF9kb19oYW5kc2hha2UucG9kCisrKysgYi9kb2Mvc3NsL1NTTF9kb19oYW5kc2hha2UucG9kCitA QCAtNDUsMTcgKzQ1LDE3IEBAIFRoZSBmb2xsb3dpbmcgcmV0dXJuIHZhbHVlcyBjYW4gb2NjdXI6 CisgCisgPW92ZXIgNAorIAorLT1pdGVtIDEKKy0KKy1UaGUgVExTL1NTTCBoYW5kc2hha2Ugd2Fz IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsIGEgVExTL1NTTCBjb25uZWN0aW9uIGhhcyBiZWVuCist ZXN0YWJsaXNoZWQuCistCisgPWl0ZW0gMAorIAorIFRoZSBUTFMvU1NMIGhhbmRzaGFrZSB3YXMg bm90IHN1Y2Nlc3NmdWwgYnV0IHdhcyBzaHV0IGRvd24gY29udHJvbGxlZCBhbmQKKyBieSB0aGUg c3BlY2lmaWNhdGlvbnMgb2YgdGhlIFRMUy9TU0wgcHJvdG9jb2wuIENhbGwgU1NMX2dldF9lcnJv cigpIHdpdGggdGhlCisgcmV0dXJuIHZhbHVlIEI8cmV0PiB0byBmaW5kIG91dCB0aGUgcmVhc29u LgorIAorKz1pdGVtIDEKKysKKytUaGUgVExTL1NTTCBoYW5kc2hha2Ugd2FzIHN1Y2Nlc3NmdWxs eSBjb21wbGV0ZWQsIGEgVExTL1NTTCBjb25uZWN0aW9uIGhhcyBiZWVuCisrZXN0YWJsaXNoZWQu CisrCisgPWl0ZW0gRTxsdD4wCisgCisgVGhlIFRMUy9TU0wgaGFuZHNoYWtlIHdhcyBub3Qgc3Vj Y2Vzc2Z1bCBiZWNhdXNlIGEgZmF0YWwgZXJyb3Igb2NjdXJyZWQgZWl0aGVyCitkaWZmIC0tZ2l0 IGEvZG9jL3NzbC9TU0xfc2h1dGRvd24ucG9kIGIvZG9jL3NzbC9TU0xfc2h1dGRvd24ucG9kCitp bmRleCA4OTkxMWFjLi40MmE4OWI3IDEwMDY0NAorLS0tIGEvZG9jL3NzbC9TU0xfc2h1dGRvd24u cG9kCisrKysgYi9kb2Mvc3NsL1NTTF9zaHV0ZG93bi5wb2QKK0BAIC05MiwxMSArOTIsNiBAQCBU aGUgZm9sbG93aW5nIHJldHVybiB2YWx1ZXMgY2FuIG9jY3VyOgorIAorID1vdmVyIDQKKyAKKy09 aXRlbSAxCistCistVGhlIHNodXRkb3duIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiBUaGUg ImNsb3NlIG5vdGlmeSIgYWxlcnQgd2FzIHNlbnQKKy1hbmQgdGhlIHBlZXIncyAiY2xvc2Ugbm90 aWZ5IiBhbGVydCB3YXMgcmVjZWl2ZWQuCistCisgPWl0ZW0gMAorIAorIFRoZSBzaHV0ZG93biBp cyBub3QgeWV0IGZpbmlzaGVkLiBDYWxsIFNTTF9zaHV0ZG93bigpIGZvciBhIHNlY29uZCB0aW1l LAorQEAgLTEwNCw2ICs5OSwxMSBAQCBpZiBhIGJpZGlyZWN0aW9uYWwgc2h1dGRvd24gc2hhbGwg YmUgcGVyZm9ybWVkLgorIFRoZSBvdXRwdXQgb2YgTDxTU0xfZ2V0X2Vycm9yKDMpfFNTTF9nZXRf ZXJyb3IoMyk+IG1heSBiZSBtaXNsZWFkaW5nLCBhcyBhbgorIGVycm9uZW91cyBTU0xfRVJST1Jf U1lTQ0FMTCBtYXkgYmUgZmxhZ2dlZCBldmVuIHRob3VnaCBubyBlcnJvciBvY2N1cnJlZC4KKyAK Kys9aXRlbSAxCisrCisrVGhlIHNodXRkb3duIHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiBU aGUgImNsb3NlIG5vdGlmeSIgYWxlcnQgd2FzIHNlbnQKKythbmQgdGhlIHBlZXIncyAiY2xvc2Ug bm90aWZ5IiBhbGVydCB3YXMgcmVjZWl2ZWQuCisrCisgPWl0ZW0gLTEKKyAKKyBUaGUgc2h1dGRv d24gd2FzIG5vdCBzdWNjZXNzZnVsIGJlY2F1c2UgYSBmYXRhbCBlcnJvciBvY2N1cnJlZCBlaXRo ZXIKKy0tIAorMS43LjkuNQorCitGcm9tIDE0N2RiYjJmZTNiZWFkN2ExMGUyZjI4MDI2MWI2NjFj ZTdhZjdhZGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiRHIuIFN0ZXBoZW4gSGVu c29uIiA8c3RldmVAb3BlbnNzbC5vcmc+CitEYXRlOiBNb24sIDExIEZlYiAyMDEzIDE4OjI0OjAz ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBmb3IgU1NMX2dldF9jZXJ0aWZpY2F0ZQorCitO b3cgd2Ugc2V0IHRoZSBjdXJyZW50IGNlcnRpZmljYXRlIHRvIHRoZSBvbmUgdXNlZCBieSBhIHNl cnZlcgordGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHNzbF9nZXRfc2VydmVyX3NlbmRfY2VydCB3 aGljaCB3aWxsCitmYWlsIGlmIHdlIGhhdmVuJ3Qgc2VudCBhIGNlcnRpZmljYXRlIHlldC4KKy0t LQorIHNzbC9zc2xfbGliLmMgfCAgICA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRp b24oKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zc2wvc3NsX2xpYi5jIGIvc3Ns L3NzbF9saWIuYworaW5kZXggMTRkMTQzZC4uZmY1YTg1YSAxMDA2NDQKKy0tLSBhL3NzbC9zc2xf bGliLmMKKysrKyBiL3NzbC9zc2xfbGliLmMKK0BAIC0yNzkyLDkgKzI3OTIsNyBAQCB2b2lkIHNz bF9jbGVhcl9jaXBoZXJfY3R4KFNTTCAqcykKKyAvKiBGaXggdGhpcyBmdW5jdGlvbiBzbyB0aGF0 IGl0IHRha2VzIGFuIG9wdGlvbmFsIHR5cGUgcGFyYW1ldGVyICovCisgWDUwOSAqU1NMX2dldF9j ZXJ0aWZpY2F0ZShjb25zdCBTU0wgKnMpCisgCXsKKy0JaWYgKHMtPnNlcnZlcikKKy0JCXJldHVy bihzc2xfZ2V0X3NlcnZlcl9zZW5kX2NlcnQocykpOworLQllbHNlIGlmIChzLT5jZXJ0ICE9IE5V TEwpCisrCWlmIChzLT5jZXJ0ICE9IE5VTEwpCisgCQlyZXR1cm4ocy0+Y2VydC0+a2V5LT54NTA5 KTsKKyAJZWxzZQorIAkJcmV0dXJuKE5VTEwpOworLS0gCisxLjcuOS41CisKK0Zyb20gOWZlNDYw M2I4MjQ1NDI1YTRjNDY5ODZlZDAwMGZjYTA1NDIzMTI1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKK0Zyb206IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KK0RhdGU6IFR1 ZSwgMTIgRmViIDIwMTMgMTQ6NTU6MzIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgRFRM U19CQURfVkVSIGZvciB2ZXJzaW9uIG51bWJlci4KKworVGhlIHZlcnNpb24gY2hlY2sgZm9yIERU TFMxX1ZFUlNJT04gd2FzIHJlZHVuZGFudCBhcworRFRMUzFfVkVSU0lPTiA+IFRMUzFfMV9WRVJT SU9OLCBob3dldmVyIHdlIGRvIG5lZWQgdG8KK2NoZWNrIGZvciBEVExTMV9CQURfVkVSIGZvciBj b21wYXRpYmlsaXR5LgorCitQUjoyOTg0CisoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBkOTgw YWJiMjJlMjI2NjFlOThlNWNlZTMzZDc2MGFiMGM3NTg0ZWNjKQorLS0tCisgc3NsL3MzX2NiYy5j IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigt KQorCitkaWZmIC0tZ2l0IGEvc3NsL3MzX2NiYy5jIGIvc3NsL3MzX2NiYy5jCitpbmRleCAwMmVk ZjNmLi40NDNhMzFlIDEwMDY0NAorLS0tIGEvc3NsL3MzX2NiYy5jCisrKysgYi9zc2wvczNfY2Jj LmMKK0BAIC0xNDgsNyArMTQ4LDcgQEAgaW50IHRsczFfY2JjX3JlbW92ZV9wYWRkaW5nKGNvbnN0 IFNTTCogcywKKyAJdW5zaWduZWQgcGFkZGluZ19sZW5ndGgsIGdvb2QsIHRvX2NoZWNrLCBpOwor IAljb25zdCB1bnNpZ25lZCBvdmVyaGVhZCA9IDEgLyogcGFkZGluZyBsZW5ndGggYnl0ZSAqLyAr IG1hY19zaXplOworIAkvKiBDaGVjayBpZiB2ZXJzaW9uIHJlcXVpcmVzIGV4cGxpY2l0IElWICov CistCWlmIChzLT52ZXJzaW9uID49IFRMUzFfMV9WRVJTSU9OIHx8IHMtPnZlcnNpb24gPT0gRFRM UzFfVkVSU0lPTikKKysJaWYgKHMtPnZlcnNpb24gPj0gVExTMV8xX1ZFUlNJT04gfHwgcy0+dmVy c2lvbiA9PSBEVExTMV9CQURfVkVSKQorIAkJeworIAkJLyogVGhlc2UgbGVuZ3RocyBhcmUgYWxs IHB1YmxpYyBzbyB3ZSBjYW4gdGVzdCB0aGVtIGluCisgCQkgKiBub24tY29uc3RhbnQgdGltZS4K Ky0tIAorMS43LjkuNQorCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWUtZmlwcy5wYXRjaCBi L29wZW5zc2wtMS4wLjFlLWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMDE3NTc1NAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjFlLWZpcHMucGF0 Y2gKQEAgLTAsMCArMSwyMDMxOCBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvYXBwcy9wa2Nz MTIuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2FwcHMvcGtjczEyLmMKKy0tLSBvcGVuc3NsLTEuMC4x ZS9hcHBzL3BrY3MxMi5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4xZS9hcHBzL3BrY3MxMi5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzE0 MTE4MzY0ICswMTAwCitAQCAtNjcsNiArNjcsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisgCisgI2RlZmluZSBQUk9HIHBrY3MxMl9tYWluCisgCitAQCAtMTMwLDYgKzEzMywxMSBA QCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgICAgIGFwcHNfc3RhcnR1cCgp OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpKQorKwljZXJ0 X3BiZSA9IGtleV9wYmU7IC8qIGNhbm5vdCB1c2UgUkMyIGluIHRoZSBGSVBTIG1vZGUgKi8KKysj ZW5kaWYKKysKKyAgICAgZW5jID0gRVZQX2Rlc19lZGUzX2NiYygpOworICAgICBpZiAoYmlvX2Vy ciA9PSBOVUxMICkgYmlvX2VyciA9IEJJT19uZXdfZnAgKHN0ZGVyciwgQklPX05PQ0xPU0UpOwor IAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvYXBwcy9zcGVlZC5jLmZpcHMgb3BlbnNzbC0xLjAu MWUvYXBwcy9zcGVlZC5jCistLS0gb3BlbnNzbC0xLjAuMWUvYXBwcy9zcGVlZC5jLmZpcHMJMjAx My0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9hcHBz L3NwZWVkLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MTUxMTgzODQgKzAxMDAKK0BAIC0xOTUsNyAr MTk1LDYgQEAKKyAjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECisgI3VuZGVmIEFFU19z ZXRfZW5jcnlwdF9rZXkKKyAjdW5kZWYgQUVTX3NldF9kZWNyeXB0X2tleQorLSN1bmRlZiBERVNf c2V0X2tleV91bmNoZWNrZWQKKyAjZW5kaWYKKyAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9C Rl9zZXRfa2V5CisgI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BA IC0yMDMsNyArMjAyLDYgQEAKKyAjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0 X2tleQorICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorICNkZWZpbmUg UkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQorLSNkZWZpbmUgREVTX3NldF9rZXlfdW5j aGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCisgI2RlZmluZSBBRVNfc2V0X2Vu Y3J5cHRfa2V5CXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleQorICNkZWZpbmUgQUVTX3NldF9k ZWNyeXB0X2tleQlwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKyAjZGVmaW5lIENhbWVsbGlh X3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CitAQCAtOTQxLDcgKzkzOSwxMiBAQCBp bnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQor IAkJCWlmIChzdHJjbXAoKmFyZ3YsInJzYSIpID09IDApCisgCQkJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJCQkJaWYgKCFGSVBTX21vZGUoKSkKKysjZW5kaWYKKysJCQkJeworIAkJCXJzYV9k b2l0W1JfUlNBXzUxMl09MTsKKysJCQkJfQorIAkJCXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7Cisg CQkJcnNhX2RvaXRbUl9SU0FfMjA0OF09MTsKKyAJCQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOwor QEAgLTk1MSw3ICs5NTQsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNp Zm5kZWYgT1BFTlNTTF9OT19EU0EKKyAJCQlpZiAoc3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQor IAkJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJCWlmICghRklQU19tb2RlKCkpCisrI2Vu ZGlmCisrCQkJCXsKKyAJCQlkc2FfZG9pdFtSX0RTQV81MTJdPTE7CisrCQkJCX0KKyAJCQlkc2Ff ZG9pdFtSX0RTQV8xMDI0XT0xOworIAkJCWRzYV9kb2l0W1JfRFNBXzIwNDhdPTE7CisgCQkJfQor QEAgLTEyMjYsMzAgKzEyMzQsNTQgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor IAlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleTMyLDI1NiwmYWVzX2tzMyk7CisgI2VuZGlmCisgI2lm bmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCisrCWlmIChkb2l0W0RfQ0JDXzEyOF9DTUxdIHx8IGRv aXRbRF9DQkNfMTkyX0NNTF0gfHwgZG9pdFtEX0NCQ18yNTZfQ01MXSkKKysJICAgIHsKKyAJQ2Ft ZWxsaWFfc2V0X2tleShrZXkxNiwxMjgsJmNhbWVsbGlhX2tzMSk7CisgCUNhbWVsbGlhX3NldF9r ZXkoY2tleTI0LDE5MiwmY2FtZWxsaWFfa3MyKTsKKyAJQ2FtZWxsaWFfc2V0X2tleShja2V5MzIs MjU2LCZjYW1lbGxpYV9rczMpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19JREVBCisrCWlmIChkb2l0W0RfQ0JDX0lERUFdKQorKwkgICAgeworIAlpZGVhX3NldF9lbmNy eXB0X2tleShrZXkxNiwmaWRlYV9rcyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVO U1NMX05PX1NFRUQKKysJaWYgKGRvaXRbRF9DQkNfU0VFRF0pCisrCSAgICB7CisgCVNFRURfc2V0 X2tleShrZXkxNiwmc2VlZF9rcyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NM X05PX1JDNAorKwlpZiAoZG9pdFtEX1JDNF0pCisrCSAgICB7CisgCVJDNF9zZXRfa2V5KCZyYzRf a3MsMTYsa2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzIK KysJaWYgKGRvaXRbRF9DQkNfUkMyXSkKKysJICAgIHsKKyAJUkMyX3NldF9rZXkoJnJjMl9rcywx NixrZXkxNiwxMjgpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzUK KysJaWYgKGRvaXRbRF9DQkNfUkM1XSkKKysJICAgIHsKKyAJUkM1XzMyX3NldF9rZXkoJnJjNV9r cywxNixrZXkxNiwxMik7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0JG CisrCWlmIChkb2l0W0RfQ0JDX0JGXSkKKysJICAgIHsKKyAJQkZfc2V0X2tleSgmYmZfa3MsMTYs a2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DQVNUCisrCWlm IChkb2l0W0RfQ0JDX0NBU1RdKQorKwkgICAgeworIAlDQVNUX3NldF9rZXkoJmNhc3Rfa3MsMTYs a2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAJbWVt c2V0KHJzYV9jLDAsc2l6ZW9mKHJzYV9jKSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9Db25m aWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4xZS9Db25maWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4xZS9D b25maWd1cmUuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjY3MDExNzQ3MCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjFlL0NvbmZpZ3VyZQkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcxNjExODQwNSArMDEw MAorQEAgLTk5NSwxMSArOTk1LDYgQEAgaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwg ZGVmaW5lZAorIAkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOworIAl9CisgCistaWYgKCRm aXBzICYmICRmaXBzbGliZGlyIGVxICIiKQorLQl7CistCSRmaXBzbGliZGlyID0gJGZpcHNkaXIg LiAiL2xpYi8iOworLQl9CistCisgIyBSU0FYIEVOR0lORSBzZXRzIGRlZmF1bHQgbm9uLUZJUFMg UlNBIG1ldGhvZC4KKyBpZiAoJGZpcHMpCisgCXsKK0BAIC0xNDc0LDcgKzE0NjksNiBAQCAkY2Zs YWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fR0YybSIgaWYgKCRiCisgaWYgKCRmaXBzKQorIAl7Cisg CSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsKKy0JJGNm bGFncyAuPSAiIC1JXCQoRklQU0RJUikvaW5jbHVkZSI7CisgCX0KKyAKKyAkY3B1aWRfb2JqPSJt ZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOworQEAgLTE2NjEsOSArMTY1 NSwxMiBAQCB3aGlsZSAoPElOPikKKyAKKyAJcy9eRklQU0RJUj0uKi9GSVBTRElSPSRmaXBzZGly LzsKKyAJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGlyLzsKKy0Jcy9eRklQ U0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmNyeXB0by8gaWYgJGZpcHM7CisgCXMvXkJBU0VBRERS PS4qL0JBU0VBRERSPSRiYXNlYWRkci87CisgCisrCWlmICgkZmlwcykKKysJCXsKKysJCXMvXkZJ UFM9LiovRklQUz15ZXMvOworKwkJfQorIAlzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VU PSRzaGFyZWRfdGFyZ2V0LzsKKyAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRf bWFyay87CisgCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8p IFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Flcy9h ZXNfbWlzYy5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMJ MjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vYWVzL2Flc19taXNjLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MTcxMTg0MjYgKzAxMDAK K0BAIC02OSwxNyArNjksMTEgQEAgY29uc3QgY2hhciAqQUVTX29wdGlvbnModm9pZCkgeworIGlu dCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0 IGludCBiaXRzLAorIAkJCUFFU19LRVkgKmtleSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMK Ky0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKKy0jZW5kaWYKKyAJcmV0dXJuIHByaXZhdGVfQUVT X3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworIAl9CisgCisgaW50IEFFU19z ZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJp dHMsCisgCQkJQUVTX0tFWSAqa2V5KQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlmaXBz X2NpcGhlcl9hYm9ydChBRVMpOworLSNlbmRpZgorIAlyZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2Rl Y3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9jbWFjL2Nt YWMuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzCTIwMTMtMDIt MTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Nt YWMvY21hYy5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzE3MTE4NDI2ICswMTAwCitAQCAtMTA3LDEz ICsxMDcsNiBAQCBDTUFDX0NUWCAqQ01BQ19DVFhfbmV3KHZvaWQpCisgCisgdm9pZCBDTUFDX0NU WF9jbGVhbnVwKENNQUNfQ1RYICpjdHgpCisgCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlm IChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0JCXsKKy0JCUZJUFNfY21hY19j dHhfY2xlYW51cChjdHgpOworLQkJcmV0dXJuOworLQkJfQorLSNlbmRpZgorIAlFVlBfQ0lQSEVS X0NUWF9jbGVhbnVwKCZjdHgtPmNjdHgpOworIAlPUEVOU1NMX2NsZWFuc2UoY3R4LT50YmwsIEVW UF9NQVhfQkxPQ0tfTEVOR1RIKTsKKyAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+azEsIEVWUF9NQVhf QkxPQ0tfTEVOR1RIKTsKK0BAIC0xNjQsMTEgKzE1Nyw2IEBAIGludCBDTUFDX0luaXQoQ01BQ19D VFggKmN0eCwgY29uc3Qgdm9pZAorIAkJCUVWUGVycihFVlBfRl9DTUFDX0lOSVQsIEVWUF9SX0RJ U0FCTEVEX0ZPUl9GSVBTKTsKKyAJCQlyZXR1cm4gMDsKKyAJCQl9CistCQkvKiBPdGhlciBhbGdv cml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAorLQkJICogdmlh IEZJUFNfY2lwaGVyaW5pdCgpLgorLQkJICovCistCQlpZiAoIWltcGwgJiYgIWN0eC0+Y2N0eC5l bmdpbmUpCistCQkJcmV0dXJuIEZJUFNfY21hY19pbml0KGN0eCwga2V5LCBrZXlsZW4sIGNpcGhl ciwgTlVMTCk7CisgCQl9CisgI2VuZGlmCisgCS8qIEFsbCB6ZXJvcyBtZWFucyByZXN0YXJ0ICov CitAQCAtMjE2LDEwICsyMDQsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29u c3Qgdm9pCisgCXsKKyAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGluOworIAlzaXplX3Qg Ymw7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0 eC5lbmdpbmUpCistCQlyZXR1cm4gRklQU19jbWFjX3VwZGF0ZShjdHgsIGluLCBkbGVuKTsKKy0j ZW5kaWYKKyAJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisgCQlyZXR1cm4gMDsKKyAJaWYg KGRsZW4gPT0gMCkKK0BAIC0yNjEsMTAgKzI0NSw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NU WCAqY3R4LCBjb25zdCB2b2kKKyBpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCAqcG91dGxlbikKKyAJeworIAlpbnQgaSwgYmwsIGxiOworLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5l KQorLQkJcmV0dXJuIEZJUFNfY21hY19maW5hbChjdHgsIG91dCwgcG91dGxlbik7CistI2VuZGlm CisgCWlmIChjdHgtPm5sYXN0X2Jsb2NrID09IC0xKQorIAkJcmV0dXJuIDA7CisgCWJsID0gRVZQ X0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9jcnlwdG8uaAor LS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTMtMDItMTkgMTI6NDc6 MzMuNDQ0MTEyODc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2NyeXB0by5oCTIw MTMtMDItMTkgMTI6NDc6MzMuNzE4MTE4NDQ3ICswMTAwCitAQCAtNTUzLDI0ICs1NTMsMjkgQEAg aW50IEZJUFNfbW9kZV9zZXQoaW50IHIpOworIHZvaWQgT1BFTlNTTF9pbml0KHZvaWQpOworIAor ICNkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9pbml0X2N0eChhbGcsIGFsZykKKysj ZGVmaW5lIG5vbmZpcHNfbWRfaW5pdChhbGcpIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcp CisrI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKysJaW50IGFsZyMjX0luaXQo Y3gjI19DVFggKmMpCisgCisgI2lmZGVmIE9QRU5TU0xfRklQUworLSNkZWZpbmUgZmlwc19tZF9p bml0X2N0eChhbGcsIGN4KSBcCisrI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gp IFwKKyAJaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpIFwKKyAJeyBcCisgCWlmIChGSVBTX21v ZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKy0JCSJMb3cgbGV2ZWwgQVBJ IGNhbGwgdG8gZGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKysJ CSJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKTsgXAorIAlyZXR1cm4g cHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKyAJfSBcCisgCWludCBwcml2YXRlXyMjYWxnIyNf SW5pdChjeCMjX0NUWCAqYykKKyAKKyAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgXAor IAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCistCQki TG93IGxldmVsIEFQSSBjYWxsIHRvIGNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBt b2RlISIpCisrCQkiQ2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIikKKysK KysvKiBkaWUgaWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KKyt2b2lkIEZJUFNfc2VsZnRlc3Rf Y2hlY2sodm9pZCk7CisgCisgI2Vsc2UKKy0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBj eCkgXAorLQlpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKysjZGVmaW5lIG5vbmZpcHNfbWRf aW5pdF9jdHgoYWxnLCBjeCkgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KQorICNkZWZpbmUgZmlw c19jaXBoZXJfYWJvcnQoYWxnKSB3aGlsZSgwKQorICNlbmRpZgorIAorQEAgLTU4Nyw2ICs1OTIs OSBAQCBpbnQgQ1JZUFRPX21lbWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2CisgICovCisgdm9p ZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKKyAKKysjZGVmaW5lIE9QRU5TU0xfSEFW RV9JTklUCTEKKyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpOworKworIC8qIEVycm9y IGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5jdGlvbiBjb2Rl cy4gKi8KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kZXMvZGVzLmguZmlwcyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZGVzL2Rlcy5oCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Rl cy9kZXMuaC5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNTE2MTE0MzQwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2Rlcy9kZXMuaAkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcxODExODQ0 NyArMDEwMAorQEAgLTIyNCw5ICsyMjQsNiBAQCBpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2Ni bG9jayAqa2V5LERFCisgaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERF U19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25z dF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworIHZvaWQgREVT X3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxl ICpzY2hlZHVsZSk7CistI2lmZGVmIE9QRU5TU0xfRklQUworLXZvaWQgcHJpdmF0ZV9ERVNfc2V0 X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNj aGVkdWxlKTsKKy0jZW5kaWYKKyB2b2lkIERFU19zdHJpbmdfdG9fa2V5KGNvbnN0IGNoYXIgKnN0 cixERVNfY2Jsb2NrICprZXkpOworIHZvaWQgREVTX3N0cmluZ190b18ya2V5cyhjb25zdCBjaGFy ICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsKKyB2b2lkIERFU19jZmI2 NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxsb25n IGxlbmd0aCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kZXMvc2V0X2tleS5jLmZp cHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Rlcy9zZXRfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Rlcy9zZXRfa2V5LmMJMjAxMy0wMi0x OSAxMjo0NzozMy43MTkxMTg0NjggKzAxMDAKK0BAIC0zMzYsMTMgKzMzNiw2IEBAIGludCBERVNf c2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sKKyAJfQorIAorIHZvaWQgREVTX3NldF9r ZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2No ZWR1bGUpCistI2lmZGVmIE9QRU5TU0xfRklQUworLQl7CistCWZpcHNfY2lwaGVyX2Fib3J0KERF Uyk7CistCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOworLQl9 Cistdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICpr ZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorLSNlbmRpZgorIAl7CisgCXN0YXRpYyBj b25zdCBpbnQgc2hpZnRzMlsxNl09ezAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDB9Owor IAlyZWdpc3RlciBERVNfTE9ORyBjLGQsdCxzLHQyOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoX2dlbi5j CistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAxMy0wMi0xMSAx NjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZGgvZGhf Z2VuLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MTkxMTg0NjggKzAxMDAKK0BAIC04NCwxMSArODQs NiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0LCBpCisgI2VuZGlmCisg CWlmKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQorIAkJcmV0dXJuIHJldC0+bWV0aC0+Z2Vu ZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKKy0jaWZkZWYgT1BF TlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBTX2RoX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sCistCQkJCQkJCWdlbmVyYXRvciwgY2IpOwor LSNlbmRpZgorIAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdl bmVyYXRvciwgY2IpOworIAl9CisgCitAQCAtMTIzLDYgKzExOCwyMCBAQCBzdGF0aWMgaW50IGRo X2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCisgCWludCBnLG9rPSAtMTsKKyAJQk5fQ1RYICpj dHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCWlmIChG SVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpKQorKwkJeworKwkJREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlf U0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisgCWN0eD1C Tl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFy dChjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZGgvZGguaAorLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kaC9k aC5oLmZpcHMJMjAxMy0wMi0xOSAxMjo0NzozMy4zODgxMTE3MzkgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZGgvZGguaAkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcxOTExODQ2OCArMDEw MAorQEAgLTc3LDYgKzc3LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJ VFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxV U19CSVRTIDEwMjQKKysKKyAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAxCisg I2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7 IHRoZSBidWlsdC1pbiBESAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Ro L2RoX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAx My0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZGgvZGhfa2V5LmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MjAxMTg0ODggKzAxMDAKK0BAIC02 MSw2ICs2MSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgZ2Vu ZXJhdGVfa2V5KERIICpkaCk7Cisgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFy ICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKK0BAIC0xMDQsNyArMTA3LDcg QEAgY29tcHV0ZV9rZXksCisgZGhfYm5fbW9kX2V4cCwKKyBkaF9pbml0LAorIGRoX2ZpbmlzaCwK Ky0wLAorK0RIX0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwKKyBOVUxMCisgfTsKK0BAIC0xMjMs NiArMTI2LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCkKKyAJQk5fTU9OVF9D VFggKm1vbnQ9TlVMTDsKKyAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZfa2V5PU5VTEw7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRz KGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURI ZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1 cm4gMDsKKysJCX0KKysjZW5kaWYKKysKKyAJY3R4ID0gQk5fQ1RYX25ldygpOworIAlpZiAoY3R4 ID09IE5VTEwpIGdvdG8gZXJyOworIAorQEAgLTIxMyw2ICsyMjQsMTMgQEAgc3RhdGljIGludCBj b21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQorIAkJREhlcnIoREhfRl9DT01QVVRFX0tFWSxE SF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKKyAJCWdvdG8gZXJyOworIAkJfQorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVO U1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlESGVycihESF9GX0NPTVBV VEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysj ZW5kaWYKKyAKKyAJY3R4ID0gQk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8g ZXJyOworQEAgLTI4MCw2ICsyOTgsOSBAQCBzdGF0aWMgaW50IGRoX2JuX21vZF9leHAoY29uc3Qg REggKmRoLCBCCisgCisgc3RhdGljIGludCBkaF9pbml0KERIICpkaCkKKyAJeworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlkaC0+Zmxh Z3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7CisgCXJldHVybigxKTsKKyAJfQorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2RoL2RoX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RoL2RoX2xpYi5jLmZp cHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZGgvZGhfbGliLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MjAxMTg0ODggKzAxMDAK K0BAIC04MSwxNCArODEsNyBAQCBjb25zdCBESF9NRVRIT0QgKkRIX2dldF9kZWZhdWx0X21ldGhv ZCh2CisgCXsKKyAJaWYoIWRlZmF1bHRfREhfbWV0aG9kKQorIAkJeworLSNpZmRlZiBPUEVOU1NM X0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1cm4gRklQU19kaF9vcGVuc3NsKCk7 CistCQllbHNlCistCQkJcmV0dXJuIERIX09wZW5TU0woKTsKKy0jZWxzZQorIAkJZGVmYXVsdF9E SF9tZXRob2QgPSBESF9PcGVuU1NMKCk7CistI2VuZGlmCisgCQl9CisgCXJldHVybiBkZWZhdWx0 X0RIX21ldGhvZDsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2Ff ZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9lcnIuYworLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9lcnIuYwky MDEzLTAyLTE5IDEyOjQ3OjMzLjcyMDExODQ4OCArMDEwMAorQEAgLTc0LDYgKzc0LDggQEAgc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhEU0FfRl9E T19EU0FfUFJJTlQpLAkiRE9fRFNBX1BSSU5UIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFN U19QUklOVCksCSJEU0FwYXJhbXNfcHJpbnQifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFSQU1T X1BSSU5UX0ZQKSwJIkRTQXBhcmFtc19wcmludF9mcCJ9LAorK3tFUlJfRlVOQyhEU0FfRl9EU0Ff QlVJTFRJTl9LRVlHRU4pLAkiZHNhX2J1aWx0aW5fa2V5Z2VuIn0sCisre0VSUl9GVU5DKERTQV9G X0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJImRzYV9idWlsdGluX3BhcmFtZ2VuIn0sCisge0VSUl9G VU5DKERTQV9GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCisge0VSUl9GVU5DKERTQV9G X0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAorIHtFUlJfRlVOQyhEU0FfRl9EU0Ff R0VORVJBVEVfS0VZKSwJIkRTQV9nZW5lcmF0ZV9rZXkifSwKK0BAIC0xMDYsNiArMTA4LDggQEAg c3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNbXQorIHtFUlJfUkVBU09OKERT QV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSksImRhdGEgdG9vIGxhcmdlIGZvciBrZXkg c2l6ZSJ9LAorIHtFUlJfUkVBU09OKERTQV9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgLCJkZWNv ZGUgZXJyb3IifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFKSAgICwi aW52YWxpZCBkaWdlc3QgdHlwZSJ9LAorK3tFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX0lOVkFM SUQpICAgICAgLCJrZXkgc2l6ZSBpbnZhbGlkIn0sCisre0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAorIHtFUlJfUkVBU09OKERT QV9SX01JU1NJTkdfUEFSQU1FVEVSUykgICAgLCJtaXNzaW5nIHBhcmFtZXRlcnMifSwKKyB7RVJS X1JFQVNPTihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2Ui fSwKKyB7RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMpICwibmVlZCBuZXcg c2V0dXAgdmFsdWVzIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9n ZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIw MTMtMDItMTkgMTI6NDc6MzMuNzIxMTE4NTA4ICswMTAwCitAQCAtODUsNiArODUsMTQgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKKytzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3Qg Yml0cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hh ciAqc2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0 LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOworK3N0YXRpYyBpbnQgRklQU19kc2Ff Z2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCisrCQlCSUdOVU0g KipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisrI2VuZGlmCisr CisgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKKyAJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVkX2xlbiwKKyAJCWludCAqY291 bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCitAQCAtMTAwLDE0 ICsxMDgsNiBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsCisgCWlm KHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQorIAkJcmV0dXJuIHJldC0+bWV0aC0+ZHNhX3BhcmFt Z2VuKHJldCwgYml0cywgc2VlZF9pbiwgc2VlZF9sZW4sCisgCQkJCWNvdW50ZXJfcmV0LCBoX3Jl dCwgY2IpOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZWxzZSBpZiAoRklQU19tb2RlKCkpCist CQl7CistCQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIGJpdHMs IAorLQkJCQkJCQlzZWVkX2luLCBzZWVkX2xlbiwKKy0JCQkJCQkJY291bnRlcl9yZXQsIGhfcmV0 LCBjYik7CistCQl9CistI2VuZGlmCisgCWVsc2UKKyAJCXsKKyAJCWNvbnN0IEVWUF9NRCAqZXZw bWQ7CitAQCAtMTI1LDI3ICsxMjUsMTE5IEBAIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChEU0EgKnJldCwKKyAJCQl9CisgCisgCQlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0 LCBiaXRzLCBxYml0cywgZXZwbWQsCistCQkJc2VlZF9pbiwgc2VlZF9sZW4sIE5VTEwsIGNvdW50 ZXJfcmV0LCBoX3JldCwgY2IpOworKwkJCQlzZWVkX2luLCBzZWVkX2xlbiwgY291bnRlcl9yZXQs IGhfcmV0LCBjYik7CisgCQl9CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IEZJ UFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJp dHMsCisrCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4s IHNpemVfdCBzZWVkX2xlbiwKKysJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9y ZXQsIEJOX0dFTkNCICpjYikKKysJeworKwlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0 LCBiaXRzLCBxYml0cywKKysJCWV2cG1kLCBzZWVkX2luLCBzZWVkX2xlbiwKKysJCWNvdW50ZXJf cmV0LCBoX3JldCwgY2IpOworKwl9CisrI2VuZGlmCisrCisgaW50IGRzYV9idWlsdGluX3BhcmFt Z2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorIAljb25zdCBFVlBfTUQg KmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCist CXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAorIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBs b25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQorIAl7CisgCWludCBvaz0wOworIAl1bnNpZ25lZCBj aGFyIHNlZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKwlCSUdOVU0gKmc9TlVMTCwqcT1OVUxM LCpwPU5VTEw7CisrCXNpemVfdCBxc2l6ZSA9IHFiaXRzID4+IDM7CisrCUJOX0NUWCAqY3R4PU5V TEw7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgp KQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sCisr CQkgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIGdvdG8gZXJyOworKwkg ICAgfQorKworKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmCisrCSAgICAoYml0cyAhPSAxMDI0 IHx8IHFiaXRzICE9IDE2MCkgJiYKKysJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjI0 KSAmJgorKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYpICYmCisrCSAgICAoYml0 cyAhPSAzMDcyIHx8IHFiaXRzICE9IDI1NikpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0JV SUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpOworKwkJZ290byBlcnI7Cisr CQl9CisrI2VuZGlmCisrCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXpl KSkKKysJCXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9y ZSAqLworKwlpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpIAorKwkJc2VlZF9sZW4gPSBzaXpl b2Yoc2VlZCk7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQs CisrCQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDI1 NiBiaXRzKi8KKysJaWYgKHNlZWRfaW4gIT0gTlVMTCkKKysJCW1lbWNweShzZWVkLCBzZWVkX2lu LCBzZWVkX2xlbik7CisrCWVsc2UKKysJCXNlZWRfbGVuID0gMDsKKysKKysJaWYgKChjdHg9Qk5f Q1RYX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUJOX0NUWF9zdGFydChjdHgp OworKworKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0cywgcWJpdHMsIGV2cG1k LAorKwkJc2VlZCwgc2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQsIGNiKSkKKysJCWdvdG8g ZXJyOworKworKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2coY3R4LCBwLCBxLCAmZywgaF9yZXQs IGNiKSkKKysJCWdvdG8gZXJyOworKworKwlvaz0xOworK2VycjoKKysJaWYgKG9rKQorKwkJewor KwkJaWYocmV0LT5wKQorKwkJCXsKKysJCQlCTl9mcmVlKHJldC0+cCk7CisrCQkJcmV0LT5wID0g TlVMTDsKKysJCQl9CisrCQlpZihyZXQtPnEpCisrCQkJeworKwkJCUJOX2ZyZWUocmV0LT5xKTsK KysJCQlyZXQtPnEgPSBOVUxMOworKwkJCX0KKysJCWlmKHJldC0+ZykKKysJCQl7CisrCQkJQk5f ZnJlZShyZXQtPmcpOworKwkJCXJldC0+ZyA9IE5VTEw7CisrCQkJfQorKwkJcmV0LT5wPUJOX2R1 cChwKTsKKysJCXJldC0+cT1CTl9kdXAocSk7CisrCQlyZXQtPmc9Qk5fZHVwKGcpOworKwkJaWYg KHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9PSBOVUxMKQorKwkJ CW9rPTA7CisrCQl9CisrCWlmKGN0eCkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJO X0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCXJldHVybiBvazsKKysJfQorKworKyNpZm5kZWYgT1BF TlNTTF9GSVBTCisrc3RhdGljCisrI2VuZGlmCisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJO X0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpl dnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9y ZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpCisrCXsK KysJaW50IG9rPTA7CisgCXVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwor LQl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF0sYnVmMltTSEEyNTZfRElH RVNUX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsK KyAJQklHTlVNICpyMCwqVywqWCwqYywqdGVzdDsKKy0JQklHTlVNICpnPU5VTEwsKnE9TlVMTCwq cD1OVUxMOworLQlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworLQlpbnQgaSwgaywgbj0wLCBtPTAs IHFzaXplID0gcWJpdHMgPj4gMzsKKysJQklHTlVNICpxPU5VTEwsKnA9TlVMTDsKKysJaW50IGks IGssIGIsIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7CisgCWludCBjb3VudGVyPTA7Cisg CWludCByPTA7CistCUJOX0NUWCAqY3R4PU5VTEw7CistCXVuc2lnbmVkIGludCBoPTI7CisgCisg CWlmIChxc2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNU X0xFTkdUSCAmJgorIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCitAQCAtMTUz LDUxICsyNDUsNDMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwor IAkJcmV0dXJuIDA7CisgCisgCWlmIChldnBtZCA9PSBOVUxMKQorLQkJLyogdXNlIFNIQTEgYXMg ZGVmYXVsdCAqLworLQkJZXZwbWQgPSBFVlBfc2hhMSgpOworKwkgICAgeworKwkJaWYgKHFiaXRz IDw9IDE2MCkKKysJCQlldnBtZCA9IEVWUF9zaGExKCk7CisrCQllbHNlIGlmIChxYml0cyA8PSAy MjQpCisrCQkJZXZwbWQgPSBFVlBfc2hhMjI0KCk7CisrCQllbHNlCisrCQkJZXZwbWQgPSBFVlBf c2hhMjU2KCk7CisrCSAgICB9CisgCisgCWlmIChiaXRzIDwgNTEyKQorIAkJYml0cyA9IDUxMjsK KyAKKyAJYml0cyA9IChiaXRzKzYzKS82NCo2NDsKKyAKKy0JLyogTkI6IHNlZWRfbGVuID09IDAg aXMgc3BlY2lhbCBjYXNlOiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvCistIAkgKiBzZWVkX2luIGlm IGl0IGlzIG5vdCBOVUxMLgorLSAJICovCistCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAo c2l6ZV90KXFzaXplKSkKKy0JCXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9vIHNt YWxsIC0tIGlnbm9yZSAqLworLQlpZiAoc2VlZF9sZW4gPiAoc2l6ZV90KXFzaXplKSAKKy0JCXNl ZWRfbGVuID0gcXNpemU7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2Vy IFNFRUQsCistCQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQg dG8gMTYwIGJpdHMqLworLQlpZiAoc2VlZF9pbiAhPSBOVUxMKQorLQkJbWVtY3B5KHNlZWQsIHNl ZWRfaW4sIHNlZWRfbGVuKTsKKy0KKy0JaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQor LQkJZ290byBlcnI7CistCistCWlmICgobW9udD1CTl9NT05UX0NUWF9uZXcoKSkgPT0gTlVMTCkK Ky0JCWdvdG8gZXJyOworLQorLQlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJcjAgPSBCTl9DVFhfZ2V0 KGN0eCk7CistCWcgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCVcgPSBCTl9DVFhfZ2V0KGN0eCk7Cist CXEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCSpxX3JldCA9IHEgPSBCTl9DVFhfZ2V0KGN0eCk7Cisg CVggPSBCTl9DVFhfZ2V0KGN0eCk7CisgCWMgPSBCTl9DVFhfZ2V0KGN0eCk7CistCXAgPSBCTl9D VFhfZ2V0KGN0eCk7CisrCSpwX3JldCA9IHAgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCXRlc3QgPSBC Tl9DVFhfZ2V0KGN0eCk7CisgCisgCWlmICghQk5fbHNoaWZ0KHRlc3QsQk5fdmFsdWVfb25lKCks Yml0cy0xKSkKKyAJCWdvdG8gZXJyOworIAorKwkvKiBzdGVwIDMgbiA9IFxsY2VpbCBiaXRzIC8g cWJpdHMgXHJjZWlsIC0gMSAqLworKwluID0gKGJpdHMrcWJpdHMtMSkvcWJpdHMgLSAxOworKwkv KiBzdGVwIDQgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzICovCisrCWIgPSBiaXRzIC0gMSAtIG4q cWJpdHM7CisrCisgCWZvciAoOzspCisgCQl7CisgCQlmb3IgKDs7KSAvKiBmaW5kIHEgKi8KKyAJ CQl7CisgCQkJaW50IHNlZWRfaXNfcmFuZG9tOworIAorLQkJCS8qIHN0ZXAgMSAqLworKwkJCS8q IHN0ZXAgNSBnZW5lcmF0ZSBzZWVkICovCisgCQkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDAsIG0r KykpCisgCQkJCWdvdG8gZXJyOworIAorQEAgLTIxMiwzMCArMjk2LDE4IEBAIGludCBkc2FfYnVp bHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJc2VlZF9sZW49MDsgLyogdXNlIHJh bmRvbSBzZWVkIGlmICdzZWVkX2luJyB0dXJucyBvdXQgdG8gYmUgYmFkKi8KKyAJCQkJfQorIAkJ CW1lbWNweShidWYgLCBzZWVkLCBxc2l6ZSk7CistCQkJbWVtY3B5KGJ1ZjIsIHNlZWQsIHFzaXpl KTsKKy0JCQkvKiBwcmVjb21wdXRlICJTRUVEICsgMSIgZm9yIHN0ZXAgNzogKi8KKy0JCQlmb3Ig KGkgPSBxc2l6ZS0xOyBpID49IDA7IGktLSkKKy0JCQkJeworLQkJCQlidWZbaV0rKzsKKy0JCQkJ aWYgKGJ1ZltpXSAhPSAwKQorLQkJCQkJYnJlYWs7CistCQkJCX0KKyAKKy0JCQkvKiBzdGVwIDIg Ki8KKysJCQkvKiBzdGVwIDYgVSA9IGhhc2goc2VlZCkgKi8KKyAJCQlpZiAoIUVWUF9EaWdlc3Qo c2VlZCwgcXNpemUsIG1kLCAgIE5VTEwsIGV2cG1kLCBOVUxMKSkKKyAJCQkJZ290byBlcnI7Cist CQkJaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgIHFzaXplLCBidWYyLCBOVUxMLCBldnBtZCwgTlVMTCkp CistCQkJCWdvdG8gZXJyOworLQkJCWZvciAoaSA9IDA7IGkgPCBxc2l6ZTsgaSsrKQorLQkJCQlt ZFtpXV49YnVmMltpXTsKKyAKKy0JCQkvKiBzdGVwIDMgKi8KKysJCQkvKiBzdGVwIDcgcSA9IDJe KHFiaXRzLTEpICsgVSArIDEgLSAoVSBtb2QgMikgKi8KKyAJCQltZFswXSB8PSAweDgwOworIAkJ CW1kW3FzaXplLTFdIHw9IDB4MDE7CisgCQkJaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCBxKSkK KyAJCQkJZ290byBlcnI7CisgCistCQkJLyogc3RlcCA0ICovCisrCQkJLyogc3RlcCA4IHRlc3Qg Zm9yIHByaW1lICg2NCByb3VuZCBvZiBSYWJpbi1NaWxsZXIpICovCisgCQkJciA9IEJOX2lzX3By aW1lX2Zhc3R0ZXN0X2V4KHEsIERTU19wcmltZV9jaGVja3MsIGN0eCwKKyAJCQkJCXNlZWRfaXNf cmFuZG9tLCBjYik7CisgCQkJaWYgKHIgPiAwKQorQEAgLTI0MywyNyArMzE1LDIyIEBAIGludCBk c2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQlpZiAociAhPSAwKQorIAkJ CQlnb3RvIGVycjsKKyAKKy0JCQkvKiBkbyBhIGNhbGxiYWNrIGNhbGwgKi8KKy0JCQkvKiBzdGVw IDUgKi8KKyAJCQl9CisgCisgCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMiwgMCkpIGdvdG8gZXJy OworIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDMsIDApKSBnb3RvIGVycjsKKyAKKy0JCS8qIHN0 ZXAgNiAqLworKwkJLyogc3RlcCAxMSAqLworIAkJY291bnRlcj0wOworLQkJLyogIm9mZnNldCA9 IDIiICovCistCistCQluPShiaXRzLTEpLzE2MDsKKysJCS8qICJvZmZzZXQgPSAxIiAqLworIAor IAkJZm9yICg7OykKKyAJCQl7CisgCQkJaWYgKChjb3VudGVyICE9IDApICYmICFCTl9HRU5DQl9j YWxsKGNiLCAwLCBjb3VudGVyKSkKKyAJCQkJZ290byBlcnI7CisgCistCQkJLyogc3RlcCA3ICov CisrCQkJLyogc3RlcCAxMS4xLCAxMS4yIG9idGFpbiBXICovCisgCQkJQk5femVybyhXKTsKKy0J CQkvKiBub3cgJ2J1ZicgY29udGFpbnMgIlNFRUQgKyBvZmZzZXQgLSAxIiAqLworIAkJCWZvciAo az0wOyBrPD1uOyBrKyspCisgCQkJCXsKKyAJCQkJLyogb2J0YWluICJTRUVEICsgb2Zmc2V0ICsg ayIgYnkgaW5jcmVtZW50aW5nOiAqLworQEAgLTI3OCwyOCArMzQ1LDMwIEBAIGludCBkc2FfYnVp bHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJCQkJCQlOVUxMKSkKKyAJCQkJCWdv dG8gZXJyOworIAorLQkJCQkvKiBzdGVwIDggKi8KKyAJCQkJaWYgKCFCTl9iaW4yYm4obWQsIHFz aXplLCByMCkpCisgCQkJCQlnb3RvIGVycjsKKy0JCQkJaWYgKCFCTl9sc2hpZnQocjAscjAsKHFz aXplIDw8IDMpKmspKSBnb3RvIGVycjsKKysJCQkJaWYgKGsgPT0gbikKKysJCQkJCUJOX21hc2tf Yml0cyhyMCxiKTsKKysJCQkJaWYgKCFCTl9sc2hpZnQocjAscjAscWJpdHMqaykpIGdvdG8gZXJy OworIAkJCQlpZiAoIUJOX2FkZChXLFcscjApKSBnb3RvIGVycjsKKyAJCQkJfQorIAorLQkJCS8q IG1vcmUgb2Ygc3RlcCA4ICovCistCQkJaWYgKCFCTl9tYXNrX2JpdHMoVyxiaXRzLTEpKSBnb3Rv IGVycjsKKysJCQkvKiBzdGVwIDExLjMgWCA9IFcgKyAyXihMLTEpICovCisgCQkJaWYgKCFCTl9j b3B5KFgsVykpIGdvdG8gZXJyOworIAkJCWlmICghQk5fYWRkKFgsWCx0ZXN0KSkgZ290byBlcnI7 CisgCistCQkJLyogc3RlcCA5ICovCisrCQkJLyogc3RlcCAxMS40IGMgPSBYIG1vZCAyKnEgKi8K KyAJCQlpZiAoIUJOX2xzaGlmdDEocjAscSkpIGdvdG8gZXJyOworIAkJCWlmICghQk5fbW9kKGMs WCxyMCxjdHgpKSBnb3RvIGVycjsKKysKKysJCQkvKiBzdGVwIDExLjUgcCA9IFggLSAoYyAtIDEp ICovCisgCQkJaWYgKCFCTl9zdWIocjAsYyxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOworIAkJ CWlmICghQk5fc3ViKHAsWCxyMCkpIGdvdG8gZXJyOworIAorLQkJCS8qIHN0ZXAgMTAgKi8KKysJ CQkvKiBzdGVwIDExLjYgKi8KKyAJCQlpZiAoQk5fY21wKHAsdGVzdCkgPj0gMCkKKyAJCQkJewor LQkJCQkvKiBzdGVwIDExICovCisrCQkJCS8qIHN0ZXAgMTEuNyAqLworIAkJCQlyID0gQk5faXNf cHJpbWVfZmFzdHRlc3RfZXgocCwgRFNTX3ByaW1lX2NoZWNrcywKKyAJCQkJCQljdHgsIDEsIGNi KTsKKyAJCQkJaWYgKHIgPiAwKQorQEAgLTMwOCwxOSArMzc3LDQ1IEBAIGludCBkc2FfYnVpbHRp bl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJCWdvdG8gZXJyOworIAkJCQl9CisgCist CQkJLyogc3RlcCAxMyAqLworKwkJCS8qIHN0ZXAgMTEuOSAqLworIAkJCWNvdW50ZXIrKzsKKyAJ CQkvKiAib2Zmc2V0ID0gb2Zmc2V0ICsgbiArIDEiICovCisgCistCQkJLyogc3RlcCAxNCAqLwor LQkJCWlmIChjb3VudGVyID49IDQwOTYpIGJyZWFrOworKwkJCS8qIHN0ZXAgMTIgKi8KKysJCQlp ZiAoY291bnRlciA+PSA0KmJpdHMpIGJyZWFrOworIAkJCX0KKyAJCX0KKyBlbmQ6CisgCWlmKCFC Tl9HRU5DQl9jYWxsKGNiLCAyLCAxKSkKKyAJCWdvdG8gZXJyOworIAorLQkvKiBXZSBub3cgbmVl ZCB0byBnZW5lcmF0ZSBnICovCisrCW9rPTE7CisrZXJyOgorKwlpZiAob2spCisrCQl7CisrCQlp ZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50ZXI7CisrCQl9CisrCXJl dHVybiBvazsKKysJfQorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljCisrI2VuZGlm CisraW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVN ICpxLAorKwkJQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAq Y2IpCisrCXsKKysJaW50IG9rPTA7CisrCUJJR05VTSAqcjAsICp0ZXN0LCAqZyA9IE5VTEw7Cisr CUJOX01PTlRfQ1RYICptb250OworKwl1bnNpZ25lZCBpbnQgaD0yOworKworKwlpZiAoKG1vbnQ9 Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJcjAgPSBCTl9D VFhfZ2V0KGN0eCk7CisrCSpnX3JldCA9IGcgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXRlc3QgPSBC Tl9DVFhfZ2V0KGN0eCk7CisrCisgCS8qIFNldCByMD0ocC0xKS9xICovCisgCWlmICghQk5fc3Vi KHRlc3QscCxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOworIAlpZiAoIUJOX2RpdihyMCxOVUxM LHRlc3QscSxjdHgpKSBnb3RvIGVycjsKK0BAIC0zNDQsMjYgKzQzOSw3IEBAIGVuZDoKKyBlcnI6 CisgCWlmIChvaykKKyAJCXsKKy0JCWlmKHJldC0+cCkgQk5fZnJlZShyZXQtPnApOworLQkJaWYo cmV0LT5xKSBCTl9mcmVlKHJldC0+cSk7CistCQlpZihyZXQtPmcpIEJOX2ZyZWUocmV0LT5nKTsK Ky0JCXJldC0+cD1CTl9kdXAocCk7CistCQlyZXQtPnE9Qk5fZHVwKHEpOworLQkJcmV0LT5nPUJO X2R1cChnKTsKKy0JCWlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQt PmcgPT0gTlVMTCkKKy0JCQl7CistCQkJb2s9MDsKKy0JCQlnb3RvIGVycjsKKy0JCQl9CistCQlp ZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50ZXI7CisgCQlpZiAoaF9y ZXQgIT0gTlVMTCkgKmhfcmV0PWg7CistCQlpZiAoc2VlZF9vdXQpCistCQkJbWVtY3B5KHNlZWRf b3V0LCBzZWVkLCBxc2l6ZSk7CistCQl9CistCWlmKGN0eCkKKy0JCXsKKy0JCUJOX0NUWF9lbmQo Y3R4KTsKKy0JCUJOX0NUWF9mcmVlKGN0eCk7CisgCQl9CisgCWlmIChtb250ICE9IE5VTEwpIEJO X01PTlRfQ1RYX2ZyZWUobW9udCk7CisgCXJldHVybiBvazsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYS5o CistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMTMtMDItMTkgMTI6 NDc6MzMuMjA1MTA4MDIwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2Eu aAkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcyMTExODUwOCArMDEwMAorQEAgLTg4LDYgKzg4LDggQEAK KyAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCisgI2VuZGlmCisg CisrI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNk ZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKKyAjZGVmaW5lIERTQV9GTEFHX05PX0VY UF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBE U0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBs ZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtMjY0LDYgKzI2NiwxNyBAQCBp bnQJRFNBX3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCisgREggKkRTQV9kdXBfREgo Y29uc3QgRFNBICpyKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IEZJ UFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJp dHMsCisrCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4s IHNpemVfdCBzZWVkX2xlbiwKKysJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9y ZXQsIEJOX0dFTkNCICpjYik7CisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4 LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5z aWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05V TSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOworK2ludCBGSVBTX2Rz YV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKKysJCUJJR05V TSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKKysjZW5kaWYK KysKKyAjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0 cykgXAorIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1Bf UEFSQU1HRU4sIFwKKyAJCQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUywgbmJpdHMs IE5VTEwpCitAQCAtMjg1LDEwICsyOTgsMTMgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2 b2lkKTsKKyAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0CisgI2RlZmluZSBEU0Ff Rl9EU0FQQVJBTVNfUFJJTlQJCQkJIDEwMAorICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5U X0ZQCQkJIDEwMQorKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOCQkJIDEyNAorKyNk ZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCisgI2RlZmluZSBEU0FfRl9E U0FfRE9fU0lHTgkJCQkgMTEyCisgI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMK Ky0jZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNAorLSNkZWZpbmUgRFNBX0Zf RFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjMKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5F UkFURV9LRVkJCQkJIDEyNgorKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNf RVgJCSAxMjcKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTCS8qIHVudXNl ZCAqLwkgMTI1CisgI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCisgI2RlZmlu ZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKKyAjZGVmaW5lIERTQV9GX0RTQV9QUklO VF9GUAkJCQkgMTA1CitAQCAtMzE0LDExICszMzAsMTUgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3Ry aW5ncyh2b2lkKTsKKyAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRQkJ IDEwMAorICNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9S X0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2CisrI2RlZmluZSBEU0FfUl9LRVlfU0laRV9JTlZB TElECQkJCSAxMTMKKysjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKKyAj ZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKKyAjZGVmaW5lIERTQV9SX01P RFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKKy0jZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZB TFVFUwkJCSAxMTAKKysjZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTIK KyAjZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QJCQkgMTExCisrI2RlZmluZSBEU0Ff Ul9OT05fRklQU19NRVRIT0QJCQkJIDExMQorICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19T RVQJCQkJIDEwNworKyNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNf TU9ERSAvKiB1bnVzZWQgKi8gMTEyCisgI2RlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdf RVJST1IJCQkgMTA1CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNh L2RzYV9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMJ MjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZHNhL2RzYV9rZXkuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcyMjExODUyOCArMDEwMAor QEAgLTY2LDYgKzY2LDM1IEBACisgCisgI2lmZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKytzdGF0aWMgaW50 IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQorKwl7CisrCUVWUF9QS0VZICpwazsKKysJdW5zaWdu ZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCWludCByZXQgPSAw OworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7Cisr CisrCUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOworKworKwlpZiAoZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCB0YnMsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpKQorKwkJcmV0ID0g MTsKKysKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJZmlwc19zZXRf c2VsZnRlc3RfZmFpbCgpOworKwkJfQorKworKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBr KTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKworICNlbmRpZgorIAorIHN0YXRpYyBpbnQgZHNh X2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKK0BAIC04MiwxMCArMTExLDYgQEAgaW50IERTQV9n ZW5lcmF0ZV9rZXkoRFNBICpkc2EpCisgI2VuZGlmCisgCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdl bikKKyAJCXJldHVybiBkc2EtPm1ldGgtPmRzYV9rZXlnZW4oZHNhKTsKKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9r ZXkoZHNhKTsKKy0jZW5kaWYKKyAJcmV0dXJuIGRzYV9idWlsdGluX2tleWdlbihkc2EpOworIAl9 CisgCitAQCAtOTUsNiArMTIwLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERT QSAqZHNhKQorIAlCTl9DVFggKmN0eD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJp dl9rZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAm JiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykKKysJCSYmIChCTl9udW1f Yml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsK KysJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RY X25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAKKyAJaWYgKGRzYS0+cHJpdl9rZXkgPT0gTlVM TCkKK0BAIC0xMzMsNiArMTY3LDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERT QSAqZHNhKQorIAorIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OworIAlkc2EtPnB1Yl9rZXk9cHVi X2tleTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpICYmICFmaXBzX2No ZWNrX2RzYShkc2EpKQorKwkJeworKwkJZHNhLT5wdWJfa2V5ID0gTlVMTDsKKysJCWRzYS0+cHJp dl9rZXkgPSBOVUxMOworKwkgICAgCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAlvaz0xOwor IAorIGVycjoKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZp cHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfbGliLmMJMjAxMy0wMi0x OSAxMjo0NzozMy43MjIxMTg1MjggKzAxMDAKK0BAIC04NywxNCArODcsNyBAQCBjb25zdCBEU0Ff TUVUSE9EICpEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kCisgCXsKKyAJaWYoIWRlZmF1bHRfRFNBX21l dGhvZCkKKyAJCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAoRklQU19tb2RlKCkpCist CQkJcmV0dXJuIEZJUFNfZHNhX29wZW5zc2woKTsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gRFNBX09w ZW5TU0woKTsKKy0jZWxzZQorIAkJZGVmYXVsdF9EU0FfbWV0aG9kID0gRFNBX09wZW5TU0woKTsK Ky0jZW5kaWYKKyAJCX0KKyAJcmV0dXJuIGRlZmF1bHRfRFNBX21ldGhvZDsKKyAJfQorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9k c2FfbG9jbC5oLmZpcHMJMjAxMy0wMi0xOSAxMjo0NzozMy4yMDkxMDgxMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9sb2NsLmgJMjAxMy0wMi0xOSAxMjo0NzozMy43 MjIxMTg1MjggKzAxMDAKK0BAIC01Niw1ICs1Niw0IEBACisgCisgaW50IGRzYV9idWlsdGluX3Bh cmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorIAljb25zdCBFVlBf TUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4s CistCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAorIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25l ZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX29z c2wuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzCTIwMTMt MDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2RzYS9kc2Ffb3NzbC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzIzMTE4NTQ4ICswMTAwCitAQCAt NjUsNiArNjUsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorICNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMgRFNB X1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4sIERT QSAqZHNhKTsKKyBzdGF0aWMgaW50IGRzYV9zaWduX3NldHVwKERTQSAqZHNhLCBCTl9DVFggKmN0 eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJwKTsKK0BAIC04Miw3ICs4NSw3IEBAIE5V TEwsIC8qIGRzYV9tb2RfZXhwLCAqLworIE5VTEwsIC8qIGRzYV9ibl9tb2RfZXhwLCAqLworIGRz YV9pbml0LAorIGRzYV9maW5pc2gsCistMCwKKytEU0FfRkxBR19GSVBTX01FVEhPRCwKKyBOVUxM LAorIE5VTEwsCisgTlVMTAorQEAgLTEzOCw2ICsxNDEsMjEgQEAgc3RhdGljIERTQV9TSUcgKmRz YV9kb19zaWduKGNvbnN0IHVuc2lnbgorIAlEU0FfU0lHICpyZXQ9TlVMTDsKKyAJaW50IG5vcmVk byA9IDA7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxl ZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1NJR04sRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiBOVUxMOworKwkgICAgfQorKworKwlp ZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp IAorKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RV TFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9ET19TSUdOLCBEU0FfUl9LRVlf U0laRV9UT09fU01BTEwpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrI2VuZGlmCisrCisgCUJO X2luaXQoJm0pOworIAlCTl9pbml0KCZ4cik7CisgCitAQCAtMzI1LDYgKzM0MywyMSBAQCBzdGF0 aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKKyAJCXJldHVybiAtMTsKKyAJCX0K KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZLEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCisrCWlmIChGSVBT X21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykgCisrCQkm JiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKKysJCXJldHVybiAtMTsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251 bV9iaXRzKGRzYS0+cCkgPiBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJ RFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksRFNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAg LTM5OSw2ICs0MzIsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQK KyAKKyBzdGF0aWMgaW50IGRzYV9pbml0KERTQSAqZHNhKQorIHsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJZHNhLT5mbGFnc3w9RFNB X0ZMQUdfQ0FDSEVfTU9OVF9QOworIAlyZXR1cm4oMSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2RzYS9kc2FfcG1ldGguYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9k c2EvZHNhX3BtZXRoLmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYV9wbWV0aC5j LmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzIzMTE4NTQ4 ICswMTAwCitAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgcGtleV9kc2FfcGFyYW1nZW4o RVZQX1BLRVlfQ1QKKyAJaWYgKCFkc2EpCisgCQlyZXR1cm4gMDsKKyAJcmV0ID0gZHNhX2J1aWx0 aW5fcGFyYW1nZW4oZHNhLCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMsIGRjdHgtPnBtZCwKKy0J ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgcGNi KTsKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgcGNi KTsKKyAJaWYgKHJldCkKKyAJCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKKyAJZWxz ZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9kc2EvZHNhdGVzdC5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZHNhL2RzYXRlc3QuYwkyMDEzLTAyLTE5IDEyOjQ3 OjMzLjcyMzExODU0OCArMDEwMAorQEAgLTk2LDM2ICs5Niw0MSBAQCBzdGF0aWMgaW50IE1TX0NB TExCQUNLIGRzYV9jYihpbnQgcCwgaW50CisgLyogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBh cmUgdGFrZW4gZnJvbSB0aGUgdXBkYXRlZCBBcHBlbmRpeCA1IHRvCisgICogRklQUyBQVUIgMTg2 IGFuZCBhbHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElCIDE4Ni0xICovCisgc3Rh dGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF09eworLQkweGQ1LDB4MDEsMHg0ZSwweDRiLDB4NjAs MHhlZiwweDJiLDB4YTgsMHhiNiwweDIxLDB4MWIsMHg0MCwKKy0JMHg2MiwweGJhLDB4MzIsMHgy NCwweGUwLDB4NDIsMHg3ZCwweGQzLAorKwkweDAyLDB4NDcsMHgxMSwweDkyLDB4MTEsMHg4OCww eEM4LDB4RkIsMHhBRiwweDQ4LDB4NEMsMHg2MiwKKysJMHhERiwweEE1LDB4QkUsMHhBMCwweEE0 LDB4M0MsMHg1NiwweEUzLAorIAl9OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW109 eworLQkweDhkLDB4ZjIsMHhhNCwweDk0LDB4NDksMHgyMiwweDc2LDB4YWEsCistCTB4M2QsMHgy NSwweDc1LDB4OWIsMHhiMCwweDY4LDB4NjksMHhjYiwKKy0JMHhlYSwweGMwLDB4ZDgsMHgzYSww eGZiLDB4OGQsMHgwYywweGY3LAorLQkweGNiLDB4YjgsMHgzMiwweDRmLDB4MGQsMHg3OCwweDgy LDB4ZTUsCistCTB4ZDAsMHg3NiwweDJmLDB4YzUsMHhiNywweDIxLDB4MGUsMHhhZiwKKy0JMHhj MiwweGU5LDB4YWQsMHhhYywweDMyLDB4YWIsMHg3YSwweGFjLAorLQkweDQ5LDB4NjksMHgzZCww eGZiLDB4ZjgsMHgzNywweDI0LDB4YzIsCistCTB4ZWMsMHgwNywweDM2LDB4ZWUsMHgzMSwweGM4 LDB4MDIsMHg5MSwKKysJMHhBQywweENCLDB4MUUsMHg2MywweDYwLDB4NjksMHgwQywweEZCLDB4 MDYsMHgxOSwweDY4LDB4M0UsCisrCTB4QTUsMHgwMSwweDVBLDB4QTIsMHgxNSwweDVDLDB4RTIs MHg5OSwweDJELDB4RDUsMHgzMCwweDk5LAorKwkweDdFLDB4NUYsMHg4RCwweEUyLDB4RjcsMHhD NiwweDJFLDB4OEQsMHhBMywweDlGLDB4NTgsMHhBRCwKKysJMHhENiwweEE5LDB4N0QsMHgwRSww eDBELDB4OTUsMHg1MywweEE2LDB4NzEsMHgzQSwweERFLDB4QUIsCisrCTB4QUMsMHhFOSwweEY0 LDB4MzYsMHg1NSwweDlFLDB4QjksMHhENiwweDkzLDB4QkYsMHhGMywweDE4LAorKwkweDFDLDB4 MTQsMHg3QiwweEE1LDB4NDIsMHgyRSwweENELDB4MDAsMHhFQiwweDM1LDB4M0IsMHgxQiwKKysJ MHhBOCwweDUxLDB4QkIsMHhFMSwweDU4LDB4NDIsMHg4NSwweDg0LDB4MjIsMHhBNywweDk3LDB4 NUUsCisrCTB4OTksMHg2RiwweDM4LDB4MjAsMHhCRCwweDlELDB4QjYsMHhEOSwweDMzLDB4Mzcs MHgyQSwweEZELAorKwkweEJCLDB4RDQsMHhCQywweDBDLDB4MkEsMHg2NywweENCLDB4OUYsMHhC QiwweERGLDB4RjksMHg5MywKKysJMHhBQSwweEQ2LDB4RjAsMHhENiwweDk1LDB4MEIsMHg1RCww eDY1LDB4MTQsMHhEMCwweDE4LDB4OUQsCisrCTB4QzYsMHhBRiwweEYwLDB4QzYsMHgzNywweDdD LDB4RjMsMHg1RiwKKyAJfTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdPXsKKy0J MHhjNywweDczLDB4MjEsMHg4YywweDczLDB4N2UsMHhjOCwweGVlLAorLQkweDk5LDB4M2IsMHg0 ZiwweDJkLDB4ZWQsMHgzMCwweGY0LDB4OGUsCistCTB4ZGEsMHhjZSwweDkxLDB4NWYsCisrCTB4 RTMsMHg4RSwweDVFLDB4NkQsMHhCRiwweDJCLDB4NzksMHhGOCwweEM1LDB4NEIsMHg4OSwweDhC LAorKwkweEJBLDB4MkQsMHg5MSwweEMzLDB4NkMsMHg4MCwweEFDLDB4ODcsCisgCX07CisgCisg c3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXT17CistCTB4NjIsMHg2ZCwweDAyLDB4NzgsMHgz OSwweGVhLDB4MGEsMHgxMywKKy0JMHg0MSwweDMxLDB4NjMsMHhhNSwweDViLDB4NGMsMHhiNSww eDAwLAorLQkweDI5LDB4OWQsMHg1NSwweDIyLDB4OTUsMHg2YywweGVmLDB4Y2IsCistCTB4M2Is MHhmZiwweDEwLDB4ZjMsMHg5OSwweGNlLDB4MmMsMHgyZSwKKy0JMHg3MSwweGNiLDB4OWQsMHhl NSwweGZhLDB4MjQsMHhiYSwweGJmLAorLQkweDU4LDB4ZTUsMHhiNywweDk1LDB4MjEsMHg5Miww eDVjLDB4OWMsCistCTB4YzQsMHgyZSwweDlmLDB4NmYsMHg0NiwweDRiLDB4MDgsMHg4YywKKy0J MHhjNSwweDcyLDB4YWYsMHg1MywweGU2LDB4ZDcsMHg4OCwweDAyLAorKwkweDQyLDB4NEEsMHgw NCwweDRFLDB4NzksMHhCNCwweDk5LDB4N0YsMHhGRCwweDU4LDB4MzYsMHgyQywKKysJMHgxQiww eDVGLDB4MTgsMHg3RSwweDBELDB4Q0MsMHhBQiwweDgxLDB4QzksMHg1RCwweDEwLDB4Q0UsCisr CTB4NEUsMHg4MCwweDdFLDB4NTgsMHhCNCwweDM0LDB4M0YsMHhBNywweDQ1LDB4QzcsMHhBQSww eDM2LAorKwkweDI0LDB4NDIsMHhBOSwweDNCLDB4RTgsMHgwRSwweDA0LDB4MDIsMHgyRCwweEZC LDB4QTYsMHgxMywKKysJMHhCOSwweEI1LDB4MTUsMHhBNSwweDU2LDB4MDcsMHgzNSwweEU0LDB4 MDMsMHhCNiwweDc5LDB4N0MsCisrCTB4NjIsMHhERCwweERGLDB4M0YsMHg3MSwweDNBLDB4OUQs MHg4QiwweEM0LDB4RjYsMHhFNywweDFELAorKwkweDUyLDB4QTgsMHhBOSwweDQzLDB4MUQsMHgz MywweDUxLDB4ODgsMHgzOSwweEJELDB4NzMsMHhFOSwKKysJMHg1RiwweEJFLDB4ODIsMHg0OSww eDI3LDB4RTYsMHhCNSwweDUzLDB4QzEsMHgzOCwweEFDLDB4MkYsCisrCTB4NkQsMHg5NywweDZD LDB4RUIsMHg2NywweEMxLDB4NUYsMHg2NywweEY4LDB4MzUsMHgwNSwweDVFLAorKwkweEQ1LDB4 NjgsMHg4MCwweEFBLDB4OTYsMHhDQSwweDBCLDB4OEEsMHhFNiwweEYxLDB4QjEsMHg0MSwKKysJ MHhDNiwweDc1LDB4OTQsMHgwQSwweDBBLDB4MkEsMHhGQSwweDI5LAorIAl9OworIAorIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOworQEAg LTE1Nyw3ICsxNjIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCUJJT19w cmludGYoYmlvX2VyciwidGVzdCBnZW5lcmF0aW9uIG9mIERTQSBwYXJhbWV0ZXJzXG4iKTsKKyAK KyAJQk5fR0VOQ0Jfc2V0KCZjYiwgZHNhX2NiLCBiaW9fZXJyKTsKKy0JaWYoKChkc2EgPSBEU0Ff bmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDUxMiwK KysJaWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1l dGVyc19leChkc2EsIDEwMjQsCisgCQkJCXNlZWQsIDIwLCAmY291bnRlciwgJmgsICZjYikpCisg CQlnb3RvIGVuZDsKKyAKK0BAIC0xNzAsOSArMTc1LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorIAlCSU9fcHJpbnRmKGJpb19lcnIsIlxuY291bnRlcj0lZCBoPSVsZFxuIixj b3VudGVyLGgpOworIAkJCisgCURTQV9wcmludChiaW9fZXJyLGRzYSwwKTsKKy0JaWYgKGNvdW50 ZXIgIT0gMTA1KSAKKysJaWYgKGNvdW50ZXIgIT0gMjM5KSAKKyAJCXsKKy0JCUJJT19wcmludGYo YmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMTA1XG4iKTsKKysJCUJJT19wcmludGYoYmlvX2Vy ciwiY291bnRlciBzaG91bGQgYmUgMjM5XG4iKTsKKyAJCWdvdG8gZW5kOworIAkJfQorIAlpZiAo aCAhPSAyKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMu ZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYworLS0tIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZW5naW5lL2VuZ19hbGwu YwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcyNDExODU2OSArMDEwMAorQEAgLTU4LDExICs1OCwyNSBA QAorIAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlICJlbmdfaW50LmgiCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAK KyB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcyh2b2lkKQorIAl7CisgCS8qIFNvbWUg RU5HSU5FcyBuZWVkIHRoaXMgKi8KKyAJT1BFTlNTTF9jcHVpZF9zZXR1cCgpOworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysJaWYgKEZJUFNfbW9kZSgp KSB7CisrCQkvKiBXZSBhbGxvdyBsb2FkaW5nIGR5bmFtaWMgZW5naW5lIGFzIGEgdGhpcmQgcGFy dHkKKysJCSAgIGVuZ2luZSBtaWdodCBiZSBGSVBTIHZhbGlkYXRlZC4KKysJCSAgIFVzZXIgaXMg ZGlzYWxsb3dlZCB0byBsb2FkIG5vbi12YWxpZGF0ZWQgZW5naW5lcworKwkJICAgYnkgc2VjdXJp dHkgcG9saWN5LiAqLworKwkJRU5HSU5FX2xvYWRfZHluYW1pYygpOworKwkJcmV0dXJuOworKwl9 CisrI2VuZGlmCisgI2lmIDAKKyAJLyogVGhlcmUncyBubyBsb25nZXIgYW55IG5lZWQgZm9yIGFu ICJvcGVuc3NsIiBFTkdJTkUgdW5sZXNzLCBvbmUgZGF5LAorIAkgKiBpdCBpcyB0aGUgKm9ubHkq IHdheSBmb3Igc3RhbmRhcmQgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbnMgdG8gYmUgYmUKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcyBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZXZwL2NfYWxsYy5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9jX2Fs bGMuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcyNTExODU4 OSArMDEwMAorQEAgLTY1LDYgKzY1LDExIEBACisgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVy cyh2b2lkKQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGli cmFyeSgpOworKwlpZighRklQU19tb2RlKCkpIAorKwkJeworKyNlbmRpZgorICNpZm5kZWYgT1BF TlNTTF9OT19ERVMKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7CisgCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKK0BAIC0yMjcsNCArMjMyLDYwIEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxs aWFfMjU2X2NiYywiQ0FNRUxMSUEyNTYiKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2Ft ZWxsaWFfMjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGUzX2NmYigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOworKworKwlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZV9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7 CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOworKwlFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRlczMiKTsKKysKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19lZGUoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsK KysjZW5kaWYKKysKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2VjYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2NmYjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfY3RyKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsKKysJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzEyOF9jYmMsIkFFUzEyOCIpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhT Tl9hZXNfMTI4X2NiYywiYWVzMTI4Iik7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Vj YigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Nm YjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y3RyKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7CisrCUVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJBRVMxOTIiKTsKKysJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzE5Ml9jYmMsImFlczE5MiIpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmI4KCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMjU2X2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVz XzI1Nl9jYmMsImFlczI1NiIpOworKyNlbmRpZgorKwkJfQorKyNlbmRpZgorIAl9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2V2cC9jX2FsbGQuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvY19hbGxk LmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9ldnAvY19hbGxkLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MjUxMTg1ODkg KzAxMDAKK0BAIC02NCw2ICs2NCwxMSBAQAorIAorIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2Vz dHModm9pZCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJh cnkoKTsKKysJaWYgKCFGSVBTX21vZGUoKSkKKysJCXsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5T U0xfTk9fTUQ0CisgCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7CisgI2VuZGlmCitAQCAtMTEx LDQgKzExNiwzMiBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCisgI2lmbmRl ZiBPUEVOU1NMX05PX1dISVJMUE9PTAorIAlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkp OworICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCX0KKysJZWxzZQorKwkJeworKyNp ZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQor KwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f c2hhMSwic3NsMy1zaGExIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNB RW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorKwlF VlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNh V2l0aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2Rz YVdpdGhTSEExLCJEU1MxIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEEx LCJkc3MxIik7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCisrCUVWUF9hZGRf ZGlnZXN0KEVWUF9lY2RzYSgpKTsKKysjZW5kaWYKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xf Tk9fU0hBMjU2CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7CisrCUVWUF9hZGRfZGln ZXN0KEVWUF9zaGEyNTYoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgor KwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hh NTEyKCkpOworKyNlbmRpZgorKwkJfQorKyNlbmRpZgorIAl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9k aWdlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDEz LTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9ldnAvZGlnZXN0LmMJMjAxMy0wMi0xOSAxMjo1MTo0MS4yNzY3Nzk4NzcgKzAxMDAKK0BAIC0x NDIsOSArMTQyLDUwIEBAIGludCBFVlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMK KyAJcmV0dXJuIEVWUF9EaWdlc3RJbml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7CisgCX0KKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJh cCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBp biBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0YXRpYyBpbnQg YmFkX2luaXQoRVZQX01EX0NUWCAqY3R4KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0 IGluaXQiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RY ICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxzaXplX3QgY291bnQpCisrCXsgRklQU19FUlJPUl9JR05P UkVEKCJEaWdlc3QgdXBkYXRlIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9maW5h bChFVlBfTURfQ1RYICpjdHgsdW5zaWduZWQgY2hhciAqbWQpCisrCXsgRklQU19FUlJPUl9JR05P UkVEKCJEaWdlc3QgRmluYWwiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25zdCBFVlBfTUQg YmFkX21kID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFk X3VwZGF0ZSwKKysJYmFkX2ZpbmFsLAorKwlOVUxMLAorKwlOVUxMLAorKwlOVUxMLAorKwkwLAor Kwl7MCwwLDAsMH0sCisrCX07CisrCisrI2VuZGlmCisrCisgaW50IEVWUF9EaWdlc3RJbml0X2V4 KEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCisgCXsK KyAJRVZQX01EX0NUWF9jbGVhcl9mbGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0VWUF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNU X0ZBSUxFRCk7CisrCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrCQlyZXR1cm4gMDsKKysJCX0K KysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBu aWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJ ICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZv aWQgcmVsZWFzaW5nCitAQCAtMjAxLDYgKzI0MiwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgo RVZQX01EX0NUWCAqY3R4LCBjCisgI2VuZGlmCisgCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQor IAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQl7Cisr CQkJaWYgKCEodHlwZS0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKSAKKysJCQkgJiYgIShjdHgt PmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQkJeworKwkJCQlF VlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsK KysJCQkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJ CX0KKysjZW5kaWYKKyAJCWlmIChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUp CisgCQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CisgCQljdHgtPmRpZ2VzdD10eXBlOwor QEAgLTIyOSwyNiArMjgyLDE1IEBAIHNraXBfdG9faW5pdDoKKyAJCX0KKyAJaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCkKKyAJCXJldHVybiAxOworLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJeworLQkJaWYgKEZJUFNfZGlnZXN0aW5p dChjdHgsIHR5cGUpKQorLQkJCXJldHVybiAxOworLQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0 YSk7CistCQljdHgtPm1kX2RhdGEgPSBOVUxMOworLQkJcmV0dXJuIDA7CistCQl9CistI2VuZGlm CisgCXJldHVybiBjdHgtPmRpZ2VzdC0+aW5pdChjdHgpOworIAl9CisgCisgaW50IEVWUF9EaWdl c3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQp CisgCXsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistCXJldHVybiBGSVBTX2RpZ2VzdHVwZGF0ZShj dHgsIGRhdGEsIGNvdW50KTsKKy0jZWxzZQorLQlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEs Y291bnQpOworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisgI2VuZGlmCisrCXJldHVybiBjdHgt PnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7CisgCX0KKyAKKyAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1 bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8K K0BAIC0yNjMsMTEgKzMwNSwxMSBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0 eCwgdW5zCisgLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBz ZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCisgaW50IEVWUF9EaWdlc3RGaW5hbF9leChF VlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCisg CXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCXJldHVybiBGSVBTX2RpZ2VzdGZpbmFsKGN0eCwg bWQsIHNpemUpOworLSNlbHNlCisgCWludCByZXQ7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhfTURfU0laRSk7CisgCXJldD1jdHgtPmRpZ2VzdC0+ ZmluYWwoY3R4LG1kKTsKKyAJaWYgKHNpemUgIT0gTlVMTCkKK0BAIC0yNzksNyArMzIxLDYgQEAg aW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsCisgCQl9CisgCW1lbXNldChj dHgtPm1kX2RhdGEsMCxjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpOworIAlyZXR1cm4gcmV0OworLSNl bmRpZgorIAl9CisgCisgaW50IEVWUF9NRF9DVFhfY29weShFVlBfTURfQ1RYICpvdXQsIGNvbnN0 IEVWUF9NRF9DVFggKmluKQorQEAgLTM3Myw3ICs0MTQsNiBAQCB2b2lkIEVWUF9NRF9DVFhfZGVz dHJveShFVlBfTURfQ1RYICpjdHgpCisgLyogVGhpcyBjYWxsIGZyZWVzIHJlc291cmNlcyBhc3Nv Y2lhdGVkIHdpdGggdGhlIGNvbnRleHQgKi8KKyBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9N RF9DVFggKmN0eCkKKyAJeworLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgCS8qIERvbid0IGFzc3Vt ZSBjdHgtPm1kX2RhdGEgd2FzIGNsZWFuZWQgaW4gRVZQX0RpZ2VzdF9GaW5hbCwKKyAJICogYmVj YXVzZSBzb21ldGltZXMgb25seSBjb3BpZXMgb2YgdGhlIGNvbnRleHQgYXJlIGV2ZXIgZmluYWxp c2VkLgorIAkgKi8KK0BAIC0zODYsNyArNDI2LDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChF VlBfTURfQ1RYICpjdHgpCisgCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT5tZF9kYXRhLGN0eC0+ZGln ZXN0LT5jdHhfc2l6ZSk7CisgCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAJCX0KKy0j ZW5kaWYKKyAJaWYgKGN0eC0+cGN0eCkKKyAJCUVWUF9QS0VZX0NUWF9mcmVlKGN0eC0+cGN0eCk7 CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorQEAgLTM5NSw5ICs0MzQsNiBAQCBpbnQgRVZQ X01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKKyAJCSAqIGZ1bmN0aW9uYWwgcmVmZXJl bmNlIHdlIGhlbGQgZm9yIHRoaXMgcmVhc29uLiAqLworIAkJRU5HSU5FX2ZpbmlzaChjdHgtPmVu Z2luZSk7CisgI2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUworLQlGSVBTX21kX2N0eF9jbGVh bnVwKGN0eCk7CistI2VuZGlmCisgCW1lbXNldChjdHgsJ1wwJyxzaXplb2YgKmN0eCk7CisgCisg CXJldHVybiAxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9lX2Flcy5jLmZp cHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMy0wMi0xOSAxMjo0 NzozMy43MjYxMTg2MDkgKzAxMDAKK0BAIC01Niw3ICs1Niw2IEBACisgI2luY2x1ZGUgPGFzc2Vy dC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorICNpbmNsdWRlICJldnBfbG9jbC5oIgor LSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgI2luY2x1ZGUgIm1vZGVzX2xjbC5oIgorICNpbmNsdWRl IDxvcGVuc3NsL3JhbmQuaD4KKyAKK0BAIC03MTYsNyArNzE1LDcgQEAgc3RhdGljIGludCBhZXNf Z2NtX2N0cmwoRVZQX0NJUEhFUl9DVFggKgorIAkJaWYgKGFyZyA8PSAwKQorIAkJCXJldHVybiAw OworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShj LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQlpZiAoRklQU19tb2Rl KCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisgCQkJCQkJ ICYmIGFyZyA8IDEyKQorIAkJCXJldHVybiAwOworICNlbmRpZgorQEAgLTExMjgsNyArMTEyNyw3 IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIoRVZQX0NJUEhFUl9DVFgKKyAJCXJldHVybiAw OworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKyAJLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICov CistCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxB R19OT05fRklQU19BTExPVykgJiYKKysJaWYgKEZJUFNfbW9kZSgpICYmICEoY3R4LT5mbGFncyAm IEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCisgCQkJKGxlbiA+ICgxVUw8PDIwKSox NikpCisgCQl7CisgCQlFVlBlcnIoRVZQX0ZfQUVTX1hUU19DSVBIRVIsIEVWUF9SX1RPT19MQVJH RSk7CitAQCAtMTMxMSw0ICsxMzEwLDMgQEAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDE5 MiwxLDEyLGNjbQorIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20sQ0NN LEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCisgCisgI2VuZGlmCistI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2V2cC9lX2RlczMuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAv ZV9kZXMzLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43Mjcx MTg2MjkgKzAxMDAKK0BAIC02NSw4ICs2NSw2IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIAorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCist Cisgc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50 IGVuYyk7CisgCitAQCAtMjA4LDkgKzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiOF9j aXBoZXIoRVZQX0NJUEgKKyAgICAgfQorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERF U19FREVfS0VZLCBOSURfZGVzX2VkZSwgOCwgMTYsIDgsIDY0LAorLQkJCUVWUF9DSVBIX1JBTkRf S0VZLCBkZXNfZWRlX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2 LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBf Q0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZV9p bml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyAjZGVm aW5lIGRlc19lZGUzX2NmYjY0X2NpcGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgorQEAgLTIxOSwy MSArMjE3LDIxIEBAIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLAorICNk ZWZpbmUgZGVzX2VkZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKKyAKKyBCTE9DS19D SVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgs IDY0LAorLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCist CQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAor KwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xLAorKwkJCWRlc19lZGUzX2luaXRfa2V5LAorKwkJCU5VTEwsIE5VTEwsIE5VTEws CisgCQkJZGVzM19jdHJsKQorIAorIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19F REVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDEsCistCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBk ZXNfZWRlM19pbml0X2tleSxOVUxMLAorLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAor LQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQ X0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICBkZXNf ZWRlM19pbml0X2tleSwKKysJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKKyAJCSAgICAgZGVzM19j dHJsKQorIAorIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9k ZXNfZWRlMywyNCw4LDgsCistCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0 X2tleSxOVUxMLAorLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICBFVlBf Q0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19G SVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICBkZXNfZWRlM19pbml0X2tl eSwKKysJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKKyAJCSAgICAgZGVzM19jdHJsKQorIAorIHN0 YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICprZXksCitAQCAtMzEzLDQgKzMxMSwzIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVW UF9kZXNfZWRlMyh2b2lkKQorIAlyZXR1cm4gJmRlc19lZGUzX2VjYjsKKyB9CisgI2VuZGlmCist I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9lX251bGwuYworLS0tIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9ldnAvZV9udWxsLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZV9udWxsLmMJMjAxMy0wMi0xOSAxMjo0 NzozMy43MjcxMTg2MjkgKzAxMDAKK0BAIC02MSw4ICs2MSw2IEBACisgI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorIAorLSNpZm5kZWYgT1BF TlNTTF9GSVBTCistCisgc3RhdGljIGludCBudWxsX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpj dHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAJY29uc3QgdW5zaWduZWQgY2hhciAqaXYs aW50IGVuYyk7Cisgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICpvdXQsCitAQCAtNzEsNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBuX2NpcGhlcj0KKyAJeworIAlOSURfdW5kZWYsCisgCTEsMCwwLAorLQkwLAorKwlFVlBf Q0lQSF9GTEFHX0ZJUFMsCisgCW51bGxfaW5pdF9rZXksCisgCW51bGxfY2lwaGVyLAorIAlOVUxM LAorQEAgLTEwMSw0ICs5OSwzIEBAIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9D VFggKmMKKyAJCW1lbWNweSgoY2hhciAqKW91dCwoY29uc3QgY2hhciAqKWluLGlubCk7CisgCXJl dHVybiAxOworIAl9CistI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZw L2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZXZwX2VuYy5jCistLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2 OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZXZwX2Vu Yy5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzI4MTE4NjQ5ICswMTAwCitAQCAtNjksMTcgKzY5LDU4 IEBACisgI2VuZGlmCisgI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCistI2lmZGVmIE9QRU5TU0xf RklQUworLSNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIEZJUFNfY2lwaGVy KGN0eCwgb3V0LCBpbiwgaW5sKQorLSNlbHNlCisgI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91 dCwgaW4sIGlubCkgY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKKy0j ZW5kaWYKKyAKKyAKKyBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJT SU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBv ZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMK KysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICov CisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICprZXksCisrCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMp CisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9CisrCisr c3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwKKysJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwp CisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KKysK KysvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGlu aXQgKi8KKysKKytzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBB U04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIp OyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0 eCwgQVNOMV9UWVBFICp0eXApCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2Fz bjEiKTsgcmV0dXJuIDA7fQorK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0 eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBi YWRfY2lwaGVyID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5p dCwKKysJYmFkX2RvX2NpcGhlciwKKysJTlVMTCwKKysJMCwKKysJYmFkX3NldF9hc24xLAorKwli YWRfZ2V0X2FzbjEsCisrCWJhZF9jdHJsLAorKwlOVUxMCisrCX07CisrCisrI2VuZGlmCisrCisg dm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCisgCXsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVt c2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAkvKiBjdHgtPmNpcGhlcj1OVUxM OyAqLworIAl9CitAQCAtMTExLDYgKzE1MiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQ X0NJUEhFUl9DVFggKmN0CisgCQkJZW5jID0gMTsKKyAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKKyAJ CX0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CQl7CisrCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOworKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCXJldHVybiAw OworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyogV2hldGhl ciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250 ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRy eSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0xNjksMTAgKzIxOCw2IEBAIGludCBFVlBfQ2lwaGVy SW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQljdHgtPmVuZ2luZSA9IE5VTEw7CisgI2Vu ZGlmCisgCistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJl dHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CistI2VuZGlm CisgCQljdHgtPmNpcGhlcj1jaXBoZXI7CisgCQlpZiAoY3R4LT5jaXBoZXItPmN0eF9zaXplKQor IAkJCXsKK0BAIC0yMDYsMTAgKzI1MSw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQ SEVSX0NUWCAqY3QKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgc2tpcF90b19pbml0Ogor ICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0 dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKKy0jZW5kaWYK KyAJLyogd2UgYXNzdW1lIGJsb2NrIHNpemUgaXMgYSBwb3dlciBvZiAyIGluICpjcnlwdFVwZGF0 ZSAqLworIAlPUEVOU1NMX2Fzc2VydChjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSAxCisgCSAg ICB8fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSA4CitAQCAtMjQ5LDYgKzI5MCwyMiBAQCBz a2lwX3RvX2luaXQ6CisgCQl9CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCS8qIEFm dGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlz c2libGUuCisrCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMg cG9pbnQuCisrCSAqLworKwlpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKCEo Y3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQorKwkJCSYgIShjdHgtPmZs YWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCisrCQkJeworKwkJCUVWUGVycihF VlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworKwkJCWN0 eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKyNl bmRpZgorKworIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZ U19DQUxMX0lOSVQpKSB7CisgCQlpZighY3R4LT5jaXBoZXItPmluaXQoY3R4LGtleSxpdixlbmMp KSByZXR1cm4gMDsKKyAJfQorQEAgLTU2OCw3ICs2MjUsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RY X2ZyZWUoRVZQX0NJUEhFUl9DVFgKKyAKKyBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBf Q0lQSEVSX0NUWCAqYykKKyAJeworLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgCWlmIChjLT5jaXBo ZXIgIT0gTlVMTCkKKyAJCXsKKyAJCWlmKGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVy LT5jbGVhbnVwKGMpKQorQEAgLTU3OSwxNiArNjM1LDEyIEBAIGludCBFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKEVWUF9DSVBIRVJfQ1QKKyAJCX0KKyAJaWYgKGMtPmNpcGhlcl9kYXRhKQorIAkJT1BF TlNTTF9mcmVlKGMtPmNpcGhlcl9kYXRhKTsKKy0jZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCisgCWlmIChjLT5lbmdpbmUpCisgCQkvKiBUaGUgRVZQX0NJUEhFUiB3ZSB1c2VkIGJl bG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxlYXNlIHRoZQorIAkJICogZnVuY3Rpb25hbCByZWZlcmVu Y2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCisgCQlFTkdJTkVfZmluaXNoKGMtPmVuZ2lu ZSk7CisgI2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUworLQlGSVBTX2NpcGhlcl9jdHhfY2xl YW51cChjKTsKKy0jZW5kaWYKKyAJbWVtc2V0KGMsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsK KyAJcmV0dXJuIDE7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZXZw LmguZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2V2cC5oCistLS0gb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2V2cC9ldnAuaC5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNDc0MTEzNDg3ICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9ldnAuaAkyMDEzLTAyLTE5IDEyOjQ3 OjMzLjcyODExODY0OSArMDEwMAorQEAgLTc1LDYgKzc1LDEwIEBACisgI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+CisgI2VuZGlmCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAvKgorICNkZWZpbmUgRVZQX1JDMl9LRVlfU0la RQkJMTYKKyAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2CitAQCAtMjcyLDEwICsyNzYsNiBA QCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorIAkJCQkJCSogY2xlYW5lZCAqLworICNkZWZpbmUgRVZQ X01EX0NUWF9GTEFHX1JFVVNFCQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2RhdGEK KyAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLworLS8qIEZJUFMgYW5kIHBhZCBvcHRp b25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQorLSAqIHNvIHdl IGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4K Ky0gKi8KKy0KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAwMDgJ LyogQWxsb3cgdXNlIG9mIG5vbiBGSVBTIGRpZ2VzdAorIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAq LworIAorQEAgLTI4Nyw2ICsyODcsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKKyAjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCisg I2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICovCisg I2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLworKyNk ZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisrCQkoKGN0eC0+ZmxhZ3M+ PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KKysjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNv dmVyZWQgKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyog RG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCisgCitAQCAtMzM4LDE1ICszNDIsMTUgQEAgc3Ry dWN0IGV2cF9jaXBoZXJfc3QKKyAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRp b24gKi8KKyAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAKKyAvKiBjaXBoZXIgaGFz IGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCistI2RlZmluZSAJRVZQX0NJUEhf Q1VTVE9NX0NPUFkJCTB4NDAwCisrI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAw MAorIC8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLworICNkZWZpbmUJCUVW UF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAorIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0 cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19M RU5HVEhfQklUUwkweDIwMDAKKyAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBt b2RlICovCistI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMDAKKysjZGVmaW5lCQlF VlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCisgLyogQWxsb3cgbm9uIEZJUFMgY2lwaGVyIGluIEZJ UFMgbW9kZSAqLworLSNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAw CisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAorIC8qIENpcGhl ciBoYW5kbGVzIGFueSBhbmQgYWxsIHBhZGRpbmcgbG9naWMgYXMgd2VsbAorICAqIGFzIGZpbmFs aXNhdGlvbi4KKyAgKi8KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvZXZwX2xp Yi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9ldnBfbGliLmMKKy0tLSBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9ldnBfbGliLmMJMjAx My0wMi0xOSAxMjo0NzozMy43MjkxMTg2NjkgKzAxMDAKK0BAIC0xOTAsNiArMTkwLDkgQEAgaW50 IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgRVZQXworIAorIGludCBFVlBfQ2lwaGVy KEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQg Y2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5k b19jaXBoZXIoY3R4LG91dCxpbixpbmwpOworIAl9CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2V2 cF9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwky MDEzLTAyLTE5IDEyOjQ3OjMzLjQ2NTExMzMwNCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9ldnAvZXZwX2xvY2wuaAkyMDEzLTAyLTE5IDEyOjQ3OjMzLjcyOTExODY2OSArMDEwMAor QEAgLTI1OCwxMCArMjU4LDkgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Io dm9pZAorIAlCTE9DS19DSVBIRVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgs Y2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKKyAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNf IyNrZXlzaXplLGtzdHJ1Y3QsIFwKKyAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwg a2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCistCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tl eSwgTlVMTCwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorLQkJCSAgICAg RVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgTlVMTCkKKysJCQkgICAgIEVWUF9D SVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCisrCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkKKysKKyAKKyBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0CisgCXsK K0BAIC0zNjcsMTEgKzM2Niw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJ UEhFUl8KKyAjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0luaXQKKyAjZGVmaW5lIE1EQzJf SW5pdAlwcml2YXRlX01EQzJfSW5pdAorICNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5p dAorLSNkZWZpbmUgU0hBMV9Jbml0CXByaXZhdGVfU0hBMV9Jbml0CistI2RlZmluZSBTSEEyMjRf SW5pdAlwcml2YXRlX1NIQTIyNF9Jbml0CistI2RlZmluZSBTSEEyNTZfSW5pdAlwcml2YXRlX1NI QTI1Nl9Jbml0CistI2RlZmluZSBTSEEzODRfSW5pdAlwcml2YXRlX1NIQTM4NF9Jbml0CistI2Rl ZmluZSBTSEE1MTJfSW5pdAlwcml2YXRlX1NIQTUxMl9Jbml0CisgCisgI2RlZmluZSBCRl9zZXRf a2V5CXByaXZhdGVfQkZfc2V0X2tleQorICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FT VF9zZXRfa2V5CitAQCAtMzc5LDcgKzM3Myw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZn ZW4oRVZQX0NJUEhFUl8KKyAjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tl eQorICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorICNkZWZpbmUgUkM0 X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQorLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVj a2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCisgI2RlZmluZSBDYW1lbGxpYV9zZXRf a2V5CXByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQorIAorICNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2V2cC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9l dnAvTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMJ MjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZXZwL01ha2VmaWxlCTIwMTMtMDItMTkgMTI6NTM6MjUuNDY4OTE3Mzg2ICswMTAwCitA QCAtMjgsNyArMjgsNyBAQCBMSUJTUkM9IGVuY29kZS5jIGRpZ2VzdC5jIGV2cF9lbmMuYyBldnBf CisgCWJpb19tZC5jIGJpb19iNjQuYyBiaW9fZW5jLmMgZXZwX2Vyci5jIGVfbnVsbC5jIFwKKyAJ Y19hbGwuYyBjX2FsbGMuYyBjX2FsbGQuYyBldnBfbGliLmMgYmlvX29rLmMgXAorIAlldnBfcGtl eS5jIGV2cF9wYmUuYyBwNV9jcnB0LmMgcDVfY3JwdDIuYyBcCistCWVfb2xkLmMgcG1ldGhfbGli LmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMgZXZwX2ZpcHMuYwlcCisrCWVfb2xk LmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMgXAorIAllX2Fl c19jYmNfaG1hY19zaGExLmMgZV9yYzRfaG1hY19tZDUuYworIAorIExJQk9CSj0JZW5jb2RlLm8g ZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF9rZXkubyBldnBfYWNuZi5vIGV2cF9jbmYubyBcCitAQCAt NDEsNyArNDEsNyBAQCBMSUJPQko9CWVuY29kZS5vIGRpZ2VzdC5vIGV2cF9lbmMubyBldnBfCisg CWJpb19tZC5vIGJpb19iNjQubyBiaW9fZW5jLm8gZXZwX2Vyci5vIGVfbnVsbC5vIFwKKyAJY19h bGwubyBjX2FsbGMubyBjX2FsbGQubyBldnBfbGliLm8gYmlvX29rLm8gXAorIAlldnBfcGtleS5v IGV2cF9wYmUubyBwNV9jcnB0Lm8gcDVfY3JwdDIubyBcCistCWVfb2xkLm8gcG1ldGhfbGliLm8g cG1ldGhfZm4ubyBwbWV0aF9nbi5vIG1fc2lndmVyLm8gZXZwX2ZpcHMubyBcCisrCWVfb2xkLm8g cG1ldGhfbGliLm8gcG1ldGhfZm4ubyBwbWV0aF9nbi5vIG1fc2lndmVyLm8gXAorIAllX2Flc19j YmNfaG1hY19zaGExLm8gZV9yYzRfaG1hY19tZDUubworIAorIFNSQz0gJChMSUJTUkMpCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2V2cC9tX2RzczEuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvbV9k c3MxLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9ldnAvbV9kc3MxLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MzAxMTg2 ODkgKzAxMDAKK0BAIC02OCw4ICs2OCw2IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Cisg I2VuZGlmCisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMgCistCisgc3RhdGljIGludCBpbml0KEVW UF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KKyAK K0BAIC04NCw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KKyAJTklEX2Rz YSwKKyAJTklEX2RzYVdpdGhTSEExLAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZM QUdfUEtFWV9ESUdFU1QsCisrCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJ UFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAtMTAwLDQgKzk4LDMgQEAgY29u c3QgRVZQX01EICpFVlBfZHNzMSh2b2lkKQorIAlyZXR1cm4oJmRzczFfbWQpOworIAl9CisgI2Vu ZGlmCistI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fZHNzLmMu ZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fZHNzLmMKKy0tLSBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvbV9kc3MuYwkyMDEzLTAyLTE5IDEy OjQ3OjMzLjczMDExODY4OSArMDEwMAorQEAgLTY2LDcgKzY2LDYgQEAKKyAjZW5kaWYKKyAKKyAj aWZuZGVmIE9QRU5TU0xfTk9fU0hBCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAKKyBzdGF0aWMg aW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9k YXRhKTsgfQorQEAgLTgyLDcgKzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQ9Cisg CU5JRF9kc2FXaXRoU0hBLAorIAlOSURfZHNhV2l0aFNIQSwKKyAJU0hBX0RJR0VTVF9MRU5HVEgs CistCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxF VlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorQEAgLTk4LDQg Kzk3LDMgQEAgY29uc3QgRVZQX01EICpFVlBfZHNzKHZvaWQpCisgCXJldHVybigmZHNhX21kKTsK KyAJfQorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2 cC9tX21kMi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9tX21kMi5jCistLS0gb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL21fbWQyLmMJMjAx My0wMi0xOSAxMjo0NzozMy43MzExMTg3MTAgKzAxMDAKK0BAIC02OCw2ICs2OCw3IEBACisgI2lm bmRlZiBPUEVOU1NMX05PX1JTQQorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNlbmRpZgor KyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpj dHgpCisgCXsgcmV0dXJuIE1EMl9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v ZXZwL21fc2hhMS5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBz CTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2V2cC9tX3NoYTEuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczMTExODcxMCArMDEwMAor QEAgLTU5LDggKzU5LDYgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAiY3J5cHRs aWIuaCIKKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworLQorICNpZm5kZWYgT1BFTlNTTF9OT19T SEEKKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KK0BAIC04NSw3ICs4Myw4IEBAIHN0YXRp YyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KKyAJTklEX3NoYTEsCisgCU5JRF9zaGExV2l0aFJTQUVu Y3J5cHRpb24sCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhP RF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19Q S0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQ X01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMjIsNyAr MTIxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9CisgCU5JRF9zaGEyMjQsCisg CU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMjI0X0RJR0VTVF9MRU5HVEgsCist CUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19E SUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0MjI0LAorIAl1cGRh dGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTE0MSw3ICsxNDEsOCBAQCBzdGF0aWMgY29uc3QgRVZQ X01EIHNoYTI1Nl9tZD0KKyAJTklEX3NoYTI1NiwKKyAJTklEX3NoYTI1NldpdGhSU0FFbmNyeXB0 aW9uLAorIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0Rf U0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtF WV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9N RF9GTEFHX0ZJUFMsCisgCWluaXQyNTYsCisgCXVwZGF0ZTI1NiwKKyAJZmluYWwyNTYsCitAQCAt MTcyLDcgKzE3Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0X21kPQorIAlOSURfc2hh Mzg0LAorIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTM4NF9ESUdFU1RfTEVO R1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01E X0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDM4NCwK KyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0xOTEsNyArMTkzLDggQEAgc3RhdGljIGNv bnN0IEVWUF9NRCBzaGE1MTJfbWQ9CisgCU5JRF9zaGE1MTIsCisgCU5JRF9zaGE1MTJXaXRoUlNB RW5jcnlwdGlvbiwKKyAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Cisr CQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0NTEyLAorIAl1cGRhdGU1MTIsCisgCWZpbmFsNTEy LAorQEAgLTIwNiw0ICsyMDksMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9zaGE1MTIodm9pZCkKKyAJ eyByZXR1cm4oJnNoYTUxMl9tZCk7IH0KKyAjZW5kaWYJLyogaWZuZGVmIE9QRU5TU0xfTk9fU0hB NTEyICovCisgCistI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL3Bf c2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2V2cC9wX3NpZ24uYworLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9ldnAvcF9zaWduLmMJMjAx My0wMi0xOSAxMjo0NzozMy43MzExMTg3MTAgKzAxMDAKK0BAIC02MSw2ICs2MSw3IEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNp bmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyAj aWZkZWYgdW5kZWYKKyB2b2lkIEVWUF9TaWduSW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAq dHlwZSkKK0BAIC0xMDMsNiArMTA0LDIyIEBAIGludCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFgg KmN0eCwgdW5zaWcKKyAJCQlnb3RvIGVycjsKKyAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25h dHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgCQkJZ290byBlcnI7CisrCQlpZiAo Y3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKKysJCQlpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKKysJCQkJ Z290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQor KwkJCXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFk ZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsK KysJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKKysJCQlpZiAo c2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQorKwkJCQlzYWx0bGVuID0gLTE7 CisrCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCisrCQkJ CXNhbHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4o cGtjdHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCX0KKyAJCWlmIChFVlBf UEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9IDApCisgCQkJZ290 byBlcnI7CisgCQkqc2lnbGVuID0gc2x0bXA7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL3BfdmVyaWZ5 LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDEzLTAy LTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9l dnAvcF92ZXJpZnkuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczMjExODczMSArMDEwMAorQEAgLTYx LDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgorIAorIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb25z dCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCisgCSAgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQ X1BLRVkgKnBrZXkpCitAQCAtODgsNiArODksMjIgQEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBf TURfQ1RYICpjdHgsIGNvbgorIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRf c2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJ CWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBf UEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQor KwkJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MpCisrCQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8g ZXJyOworKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJ CWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4g PSAtMTsKKysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykK KysJCQkJc2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2Fs dGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaSA9 IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVuKTsKKyAJCWVy cjoKKyAJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2NhdnMvZmlwc19hZXNhdnMuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzMyMTE4NzMxICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCTIw MTMtMDItMTkgMTI6NDc6MzMuNzMyMTE4NzMxICswMTAwCitAQCAtMCwwICsxLDkzOSBAQAorKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3Qu 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 VUNIIERBTUFHRS4KKysgKgorKyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIEFFUyBBbGdvcml0aG0gVmFsaWRhdGlvbiBTdWl0ZQor KyAgVGVzdCBQcm9ncmFtCisrCisrICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6CisrICBWLU9ORSBD b3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKKysgIEdlcm1hbnRv d24sIE1EIDIwODc0CisrICBVLlMuQS4KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxz dGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2lu Y2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1cHBvcnRcbiIpOworKyAgICByZXR1 cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNp bmNsdWRlICJmaXBzX3V0bC5oIgorKworKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKKysKKysj ZGVmaW5lIFZFUkJPU0UgMAorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLworKworK2ludCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCisr CSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCisrCSAg ICB1bnNpZ25lZCBjaGFyICppVmVjLCAKKysJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwg MSA9IGVuY3J5cHQgKi8KKysJICAgIHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5zaWduZWQg Y2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKKysgICAgeworKyAgICBjb25zdCBFVlBfQ0lQSEVS ICpjaXBoZXIgPSBOVUxMOworKworKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09 IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhl ciA9IEVWUF9hZXNfMTI4X2NiYygpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNp cGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJ CWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOworKwkJYnJlYWs7CisrCQl9CisrCisrCX0KKysg ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCisrCXsKKysJc3dpdGNo IChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2Vj YigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTky X2VjYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNf MjU2X2VjYigpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZiAoc3RyY2FzZWNt cChhbW9kZSwgIkNGQjEyOCIpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7Cisr CQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEyOCgpOworKwkJYnJlYWs7 CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEyOCgpOworKwkJ YnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEyOCgp OworKwkJYnJlYWs7CisrCQl9CisrCisrCX0KKysgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1v ZGUsICJPRkIiLCAzKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2Fz ZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIoKTsKKysJCWJyZWFrOworKworKwkJ Y2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9vZmIoKTsKKysJCWJyZWFrOworKwor KwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9vZmIoKTsKKysJCWJyZWFrOwor KwkJfQorKwl9CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJewor Kwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Fl c18xMjhfY2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVW UF9hZXNfMTkyX2NmYjEoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIg PSBFVlBfYWVzXzI1Nl9jZmIxKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlm KCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7 CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsKKysJCWJyZWFr OworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4KCk7CisrCQli cmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiOCgpOwor KwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZQorKwl7CisrCXByaW50ZigiVW5rbm93biBt b2RlOiAlc1xuIiwgYW1vZGUpOworKwlyZXR1cm4gMDsKKysJfQorKyAgICBpZiAoIWNpcGhlcikK KysJeworKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOworKwlyZXR1 cm4gMDsgCisrCX0KKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxM LCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCisrCXJldHVybiAwOworKyAgICBpZighc3RyY2FzZWNt cChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9D SVBIX0ZMQUdfTEVOR1RIX0JJVFMpOworKyAgICBpZiAoZGlyKQorKwkJRVZQX0NpcGhlcihjdHgs IGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKKysJZWxzZQorKwkJRVZQX0NpcGhlcihjdHgs IHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysK KysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytj aGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKKytjaGFyICp0X21v ZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4In07CisrZW51 bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkIxMjh9OworK2VudW0gWENyeXB0 IHtYREVDUllQVCwgWEVOQ1JZUFR9OworKworKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0qLworKy8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAgICAqLworKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLworKworKy8qI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+ PiAoKGIpJTgpKSYxKSovCisrLyojZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhi KS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIpJTgpKSkqLworKworKyNkZWZpbmUg Z2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYxKQorKyNkZWZpbmUgc2IoYSxiLHYp ICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0oYiklOCkpKXwoISEodikgPDwgKDct KGIpJTgpKSkKKysKKytpbnQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKKysJICAgaW50IGFrZXlzeiwg dW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICppVmVjLAorKwkgICBpbnQgZGlyLCB1 bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAorKwkgICBGSUxFICpyZnApCisrICAgIHsKKysg ICAgaW50IHJldCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMV1bMzJdOworKyAgICB1 bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVdOworKyAgICB1bnNpZ25lZCBjaGFy IHB0ZXh0WzEwMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBjdGV4dFsxMDAxXVszMl07Cisr ICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsKKysgICAgaW50IGksIGosIG4sIG4x LCBuMjsKKysgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0gYWtleXN6Lzg7CisrICAgIEVWUF9D SVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAg aWYgKGxlbiA+IDMyKQorKwl7CisrCXByaW50ZigiXG4+Pj4+IExlbmd0aCBleGNlZWRzIDMyIGZv ciAlcyAlZCA8PDw8XG5cbiIsIAorKwkgICAgICAgYW1vZGUsIGFrZXlzeik7CisrCXJldHVybiAt MTsKKysJfQorKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUgPCA2OyArK2ltb2RlKQorKwlpZiAo c3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQorKwkgICAgYnJlYWs7CisrICAgIGlm IChpbW9kZSA9PSA2KQorKwl7IAorKwlwcmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwg YW1vZGUpOworKwlyZXR1cm4gLTE7CisrCX0KKysKKysgICAgbWVtY3B5KGtleVswXSwgYUtleSwg bmtleXN6KTsKKysgICAgaWYgKGlWZWMpCisrCW1lbWNweShpdlswXSwgaVZlYywgQUVTX0JMT0NL X1NJWkUpOworKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwltZW1jcHkocHRleHRbMF0sIHRl eHQsIGxlbik7CisrICAgIGVsc2UKKysJbWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBsZW4pOworKyAg ICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCisrCXsKKysJLyogcHJpbnRmKCJJdGVyYXRpb24g JWRcbiIsIGkpOyAqLworKwlpZiAoaSA+IDApCisrCSAgICB7CisrCSAgICBmcHJpbnRmKHJmcCwi Q09VTlQgPSAlZFxuIixpKTsKKysJICAgIE91dHB1dFZhbHVlKCJLRVkiLGtleVtpXSxua2V5c3os cmZwLDApOworKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8qIEVDQiAqLworKwkJT3V0cHV0VmFs dWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7CisrCSAgICAvKiBPdXRwdXQgQ2lw aGVydGV4dCB8IFBsYWludGV4dCAqLworKwkgICAgT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLGRp ciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKKysJCQlpbW9kZSA9PSBDRkIxKTsKKysJ ICAgIH0KKysJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikKKysJICAgIHsKKysJICAgIHN3aXRj aCAoaW1vZGUpCisrCQl7CisrCSAgICBjYXNlIEVDQjoKKysJCWlmIChqID09IDApCisrCQkgICAg eyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1v ZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwg MSA9IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAg aWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxl bik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsK KysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQp CisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwor KwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKKysJCQl9CisrCQkgICAgZWxz ZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsK KysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7CisrCQkJfQorKwkJICAgIH0K KysJCWJyZWFrOworKworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjogIAorKwkgICAg Y2FzZSBDRkIxMjg6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsKKysJCSAgICByZXQgPSBBRVNU ZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAorKwkJCQkgIGRpciwgIC8q IDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwg bGVuKTsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCW1lbWNweShwdGV4dFtqKzFd LCBpdltpXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIGl2W2ld LCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBY RU5DUllQVCkKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0s IGxlbik7CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7CisrCQkJfQor KwkJICAgIGVsc2UKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRb al0sIGxlbik7CisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxlbik7CisrCQkJ fQorKwkJICAgIH0KKysJCWJyZWFrOworKworKwkgICAgY2FzZSBDRkI4OgorKwkJaWYgKGogPT0g MCkKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBr ZXlbaV0sIGl2W2ldLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQg Ki8KKysJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQor KwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCUVWUF9DaXBoZXIoJmN0 eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQlFVlBfQ2lwaGVy KCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQlpZiAoZGlyID09 IFhFTkNSWVBUKQorKwkJICAgIHsKKysJCSAgICBpZiAoaiA8IDE2KQorKwkJCW1lbWNweShwdGV4 dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShwdGV4dFtq KzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJ ICAgIGlmIChqIDwgMTYpCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsK KysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZdLCBsZW4pOwor KwkJICAgIH0KKysJCWJyZWFrOworKworKwkgICAgY2FzZSBDRkIxOgorKwkJaWYoaiA9PSAwKQor KwkJICAgIHsKKysjaWYgMAorKwkJICAgIC8qIGNvbXBlbnNhdGUgZm9yIHdyb25nIGVuZGlhbm5l c3Mgb2YgaW5wdXQgZmlsZSAqLworKwkJICAgIGlmKGkgPT0gMCkKKysJCQlwdGV4dFswXVswXTw8 PTc7CisrI2VuZGlmCisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixrZXlb aV0saXZbaV0sZGlyLAorKwkJCQlwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQor KwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCUVWUF9D aXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQlF VlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysKKysJCSAgICB9Cisr CQlpZihkaXIgPT0gWEVOQ1JZUFQpCisrCQkgICAgeworKwkJICAgIGlmKGogPCAxMjgpCisrCQkJ c2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKKysJCSAgICBlbHNlCisrCQkJc2IocHRleHRb aisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsK KysJCSAgICBpZihqIDwgMTI4KQorKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Cisr CQkgICAgZWxzZQorKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihwdGV4dFtqLTEyOF0sMCkpOworKwkJ ICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwktLWo7IC8qIHJlc2V0IHRvIGxhc3Qg b2YgcmFuZ2UgKi8KKysJLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KKysJT3V0 cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxlbixyZnAsCisr CQkgICAgaW1vZGUgPT0gQ0ZCMSk7CisrCWZwcmludGYocmZwLCAiXG4iKTsgIC8qIGFkZCBzZXBh cmF0b3IgKi8KKysKKysJLyogQ29tcHV0ZSBuZXh0IEtFWSAqLworKwlpZiAoZGlyID09IFhFTkNS WVBUKQorKwkgICAgeworKwkgICAgaWYgKGltb2RlID09IENGQjgpCisrCQl7IC8qIGN0ID0gQ1Rb ai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCisrCQlmb3IgKG4xID0gMCwgbjIg PSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCisrCQkgICAgY2lwaGVydGV4dFtu MV0gPSBjdGV4dFtqLW4yXVswXTsKKysJCX0KKysJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkK KysJCXsKKysJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIp CisrCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtqLW4yXSwwKSk7CisrCQl9CisrCSAg ICBlbHNlCisrCQlzd2l0Y2ggKGFrZXlzeikKKysJCSAgICB7CisrCQljYXNlIDEyODoKKysJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNh c2UgMTkyOgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgsIDgpOworKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7Cisr CQljYXNlIDI1NjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSwgMTYpOwor KwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFr OworKwkJICAgIH0KKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgaWYgKGltb2RlID09 IENGQjgpCisrCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pd ICovCisrCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0t bjIpCisrCQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtqLW4yXVswXTsKKysJCX0KKysJICAg IGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKKysJCXsKKysJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsg bjEgPCBha2V5c3ogOyArK24xLC0tbjIpCisrCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihwdGV4 dFtqLW4yXSwwKSk7CisrCQl9CisrCSAgICBlbHNlCisrCQlzd2l0Y2ggKGFrZXlzeikKKysJCSAg ICB7CisrCQljYXNlIDEyODoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbal0sIDE2 KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMTkyOgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0 LCBwdGV4dFtqLTFdKzgsIDgpOworKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIHB0ZXh0W2pd LCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDI1NjoKKysJCSAgICBtZW1jcHkoY2lwaGVy dGV4dCwgcHRleHRbai0xXSwgMTYpOworKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBwdGV4 dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJICAgIH0KKysJLyogQ29tcHV0 ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0ICovCisrCWZvciAobiA9IDA7IG4g PCBua2V5c3o7ICsrbikKKysJICAgIGtleVtpKzFdW25dID0ga2V5W2ldW25dIF4gY2lwaGVydGV4 dFtuXTsKKysJCisrCS8qIENvbXB1dGUgbmV4dCBJViBhbmQgdGV4dCAqLworKwlpZiAoZGlyID09 IFhFTkNSWVBUKQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNh c2UgRUNCOgorKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJYnJlYWs7CisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkgICAgY2FzZSBD RkIxMjg6CisrCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJ CW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7 CisrCSAgICBjYXNlIENGQjg6CisrCQkvKiBJVltpKzFdID0gY3QgKi8KKysJCWZvciAobjEgPSAw LCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQorKwkJICAgIGl2W2krMV1bbjFdID0gY3Rl eHRbai1uMl1bMF07CisrCQlwdGV4dFswXVswXSA9IGN0ZXh0W2otMTZdWzBdOworKwkJYnJlYWs7 CisrCSAgICBjYXNlIENGQjE6CisrCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEs LS1uMikKKysJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKKysJCXB0ZXh0 WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOworKwkJYnJlYWs7CisrCQl9CisrCSAgICB9Cisr CWVsc2UKKysJICAgIHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7CisrCSAgICBjYXNlIEVD QjoKKysJCW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJy ZWFrOworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAgIGNhc2UgQ0ZCMTI4 OgorKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQltZW1j cHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJyZWFrOworKwkg ICAgY2FzZSBDRkI4OgorKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0t bjIpCisrCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4yXVswXTsKKysJCWN0ZXh0WzBdWzBd ID0gcHRleHRbai0xNl1bMF07CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCMToKKysJCWZvcihu MT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGl2W2krMV0sbjEs Z2IocHRleHRbai1uMl0sMCkpOworKwkJY3RleHRbMF1bMF09cHRleHRbai0xMjhdWzBdJjB4ODA7 CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICAKKysgICAgcmV0dXJuIHJldDsK KysgICAgfQorKworKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ki8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgICMgQ29uZmlnIGlu Zm8gZm9yIHYtb25lCisrICAjIEFFU1ZTIE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgorKyAgIyBTdGF0 ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKKysgICMgS2V5IExlbmd0aCA6IDI1NgorKyAgIyBGcmkg QXVnIDMwIDA0OjA3OjIyIFBNCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysK KytpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKKysgICAgeworKyAg ICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKKysgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9 IE5VTEw7CisrICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKKysgICAgY2hhciB0YnVmWzIwNDhdOworKyAg ICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFsZ29bOF0gPSAiIjsKKysgICAg Y2hhciBhbW9kZVs4XSA9ICIiOworKyAgICBjaGFyIGF0ZXN0WzhdID0gIiI7CisrICAgIGludCBh a2V5c3ogPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKKysgICAg aW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBwbGFp bnRleHRbMjA0OF07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKKysgICAg Y2hhciAqcnA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKKysKKysgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKKysJeworKwlw cmludGYoIk5vIHJlcSBmaWxlXG4iKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHN0cmNweShh Zm4sIHJxZmlsZSk7CisrCisrICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxM KQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKKysJICAgICAg IGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGlmICghcnNw ZmlsZSkKKysJeworKwlzdHJjcHkocmZuLGFmbik7CisrCXJwPXN0cnN0cihyZm4sInJlcS8iKTsK KysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJaWYgKCFycCkKKysJICAgIHJwPXN0cnN0cihy Zm4sInJlcVxcIik7CisrI2VuZGlmCisrCWFzc2VydChycCk7CisrCW1lbWNweShycCwicnNwIiwz KTsKKysJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOworKwltZW1jcHkocnAsICIucnNwIiwgNCk7 CisrCXJzcGZpbGUgPSByZm47CisrCX0KKysgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAi dyIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4i LCAKKysJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJZmNsb3NlKGFmcCk7CisrCWFm cCA9IE5VTEw7CisrCXJldHVybiAtMTsKKysJfQorKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMo aWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQorKwl7CisrCXRpZHlfbGluZSh0YnVm LCBpYnVmKTsKKysJaWxlbiA9IHN0cmxlbihpYnVmKTsKKysJLyogICAgICBwcmludGYoInN0ZXA9 JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KKysJc3dpdGNoIChzdGVwKQorKwkgICAgeworKwlj YXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQor KwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KKysJCWlmICgoKmFsZ28gPT0gJ1wwJykgfHwKKysJ CSAgICAoKmFtb2RlID09ICdcMCcpIHx8CisrCQkgICAgKGFrZXlzeiA9PSAwKSkKKysJCSAgICB7 CisrCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwgTW9kZSBvciBLZXlTaXplICglcy8l cy8lZClcbiIsCisrCQkJICAgYWxnbyxhbW9kZSxha2V5c3opOworKwkJICAgIGVyciA9IDE7Cisr CQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkJ ICAgICsrIHN0ZXA7CisrCQkgICAgfQorKwkJfQorKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAn IycpCisrCQl7CisrCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYp OworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsgLyogcHJvY2VzcyBwcmVhbWJs ZSAqLworKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKKysJCWludCBuOworKwkJaWYgKGFrZXlz eikKKysJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCisrCQkgICAgdGlt ZV90IHJ0aW0gPSB0aW1lKDApOworKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZy dGltKSk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0cyhpYnVmLCBy ZnApOworKwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMgIiwgNikgPT0gMCkKKysJCQl7Cisr CQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKKysJCQkvKiBnZXQgdGVzdCB0eXBlICovCisrCQkJcHAg Kz0gNjsKKysJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKKysJCQluID0geHAtcHA7CisrCQkJc3Ry bmNweShhdGVzdCwgcHAsIG4pOworKwkJCWF0ZXN0W25dID0gJ1wwJzsKKysJCQkvKiBnZXQgbW9k ZSAqLworKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCisrCQkJbiA9 IHN0cmxlbih4cCsxKS0xOworKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOworKwkJCWFtb2Rl W25dID0gJ1wwJzsKKysJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCisrCQkJaWYgKFZFUkJPU0Up CisrCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBhbW9kZSk7Cisr CQkJfQorKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0aCA6ICIsIDEz KSA9PSAwKQorKwkJCXsKKysJCQlha2V5c3ogPSBhdG9pKHBwKzEzKTsKKysJCQlpZiAoVkVSQk9T RSkKKysJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBha2V5c3opOworKwkJCX0KKysJCSAg ICB9CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RF Q1JZUFRdICovCisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCisrCQl7CisrCQlmcHV0cyhpYnVm LCByZnApOworKwkJKytzdGVwOworKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0i LCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDE7CisrCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAwOworKwkJZWxzZQorKwkJICAg IHsKKysJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOworKwkJICAg IGVyciA9IDE7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIGlmIChkaXIg PT0gLTEpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVD UllQVCBrZXl3b3JkXG4iKTsKKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSAKKysJCXN0ZXAg PSAyOworKworKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJm cCk7CisrCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQorKwkJYnJlYWs7CisrCSAgICBpZighc3RybmNh c2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQorKwkJYnJlYWs7CisrCisrCSAgICBpZiAoc3RybmNh c2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3Npbmcg S0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBo ZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgewor KwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBi cmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOworKwkJaWYg KHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCisrCQkgICAgeworKwkJICAgIG1lbXNldChpVmVj LCAwLCBzaXplb2YoaVZlYykpOworKwkJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2 ZWMgZm9yIEVDQiAqLworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICArK3N0ZXA7CisrCQl9Cisr CSAgICBicmVhazsKKysKKysJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KKysJICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkK KysJCXsKKysJCXByaW50ZigiTWlzc2luZyBJVlxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkg ICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKKysJ CWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwor KwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJJ ViIsIGlWZWMsIGxlbik7CisrCQlzdGVwID0gKGRpcik/IDQ6IDU7CisrCQl9CisrCSAgICBicmVh azsKKysKKysJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVm LCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikg IT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOworKwkJZXJyID0g MTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsK KysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1Zisx Mixubi0xLHBsYWludGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwg cGxhaW50ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIklu dmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBi cmVhazsKKysJCSAgICB9CisrCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQorKwkJICAg IHsKKysJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7CisrCQkgICAgfQorKwkJUHJp bnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKKysJ CWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwor KwkJICAgIHsKKysJCSAgICBpZihkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisr CQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4sIAorKwkJCSAgICAg IHJmcCkgPCAwKQorKwkJCUVYSVQoMSk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJ CSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJ CQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHBsYWludGV4 dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lw aGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0K KysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNTogLyogQ0lQSEVS VEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNh c2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKKysJCXsKKysJCXByaW50Zigi TWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJ CWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxz dHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW4gPSBoZXgy YmluKGlidWYrMTMsY2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCisrCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVy dGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUg Q2FybG8gVGVzdCAqLworKwkJICAgIHsKKysJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtl eSwgaVZlYywgCisrCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7CisrCQkgICAgfQor KwkJZWxzZQorKwkJICAgIHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLworKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRW YWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAorKwkJ CQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQor KwkgICAgYnJlYWs7CisrCisrCWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCisr CQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOworKwkJ fQorKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKKysJCXsgLyogTUNU IGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGlidWYsIHJmcCk7Cisr CQl9CisrCSAgICBzdGVwID0gMTsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIGlm IChyZnApCisrCWZjbG9zZShyZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xvc2UoYWZwKTsKKysg ICAgcmV0dXJuIGVycjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmls ZSBvciAKKysgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxl LgorKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1mIHh4 eC5yZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3Qg LWQgeHh4eHgueHh4CisrICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAorKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQi LCAqcnNwZmlsZSA9IE5VTEw7CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysgICAgY2hhciBmblsy NTBdID0gIiIsIHJmblsyNTZdID0gIiI7CisrICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsK KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7 CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlFWElUKDEpOworKwl9CisrI2VuZGlmCisrICAgIGlm IChhcmdjID4gMSkKKysJeworKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQor KwkgICAgeworKwkgICAgZF9vcHQgPSAxOworKwkgICAgfQorKwllbHNlIGlmIChzdHJjYXNlY21w KGFyZ3ZbMV0sICItZiIpID09IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9IDE7CisrCSAgICBk X29wdCA9IDA7CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHByaW50ZigiSW52YWxp ZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQor KwlpZiAoYXJnYyA8IDMpCisrCSAgICB7CisrCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVy XG4iKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoZF9vcHQpCisrCSAgICBycWxp c3QgPSBhcmd2WzJdOworKwllbHNlCisrCSAgICB7CisrCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0p OworKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysgICAgaWYgKGRfb3B0 KQorKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYgKCEoZnAgPSBmb3Bl bihycWxpc3QsICJyIikpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEg bGlzdCBmaWxlXG4iKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJd2hpbGUgKGZnZXRz KGZuLCBzaXplb2YoZm4pLCBmcCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2soZm4sICJcclxuIik7 CisrCSAgICBzdHJjcHkocmZuLCBmbik7CisrCSAgICBpZiAoVkVSQk9TRSkKKysJCXByaW50Zigi UHJvY2Vzc2luZzogJXNcbiIsIHJmbik7CisrCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmls ZSkpCisrCQl7CisrCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxu IiwgcmZuKTsKKysJCUVYSVQoMSk7CisrCQl9CisrCSAgICB9CisrCWZjbG9zZShmcCk7CisrCX0K KysgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLworKwl7CisrCWlmIChWRVJCT1NFKQorKwkgICAg cHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOworKwlpZiAocHJvY19maWxlKGZuLCByc3Bm aWxlKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjog JXMgPDw8XG4iLCBmbik7CisrCSAgICB9CisrCX0KKysgICAgRVhJVCgwKTsKKysgICAgcmV0dXJu IDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2NtYWN0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfY21hY3Rlc3QuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzMyMTE4NzMxICswMTAw CisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMJMjAx My0wMi0xOSAxMjo0NzozMy43MzIxMTg3MzEgKzAxMDAKK0BAIC0wLDAgKzEsNTE3IEBACisrLyog Zmlwc19jbWFjdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAq LworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysg KgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3Ry aWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisr ICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysg KiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICog KGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisr CisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5j bHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv YmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY21h Yy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIENNQUMgc3VwcG9ydFxuIik7CisrICAg IHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBjbWFjX3Rlc3QoY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUgKmluLAorKwlpbnQgbW9kZSwgaW50 IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRf Y21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25l ZCBjaGFyICpLZXksIGludCBLbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVu LAorKwkJaW50IFRsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRfY21hY192ZXIoY29uc3QgRVZQX0NJ UEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVu LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hhciAq TWFjLCBpbnQgTWFjbGVuLAorKwkJaW50IFRsZW4pOworKworKyNpZmRlZiBGSVBTX0FMR1ZTCisr aW50IGZpcHNfY21hY3Rlc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrI2Vsc2UKKytp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrI2VuZGlmCisrCXsKKysJRklMRSAqaW4g PSBOVUxMLCAqb3V0ID0gTlVMTDsKKysJaW50IG1vZGUgPSAwOwkJLyogMCA9PiBHZW5lcmF0ZSwg MSA9PiBWZXJpZnkgKi8KKysJaW50IEtsZW5fY291bnRzX2tleXMgPSAwOyAvKiAwID0+IEtsZW4g aXMgc2l6ZSBvZiBvbmUga2V5CisrCQkJCSAgICAgMSA9PiBLbGVuIGlzIGFtb3VudCBvZiBrZXlz CisrCQkJCSAgKi8KKysJaW50IGtub3duX2tleWxlbiA9IDA7CS8qIE9ubHkgc2V0IHdoZW4gS2xl bl9jb3VudHNfa2V5cyA9IDEgKi8KKysJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gMDsKKysJ aW50IHJldCA9IDE7CisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCisrCXdoaWxlIChhcmdjID4g MSAmJiBhcmd2WzFdWzBdID09ICctJykKKysJCXsKKysJCXN3aXRjaCAoYXJndlsxXVsxXSkKKysJ CQl7CisrCQljYXNlICdhJzoKKysJCQl7CisrCQkJY2hhciAqcCA9ICZhcmd2WzFdWzJdOworKwkJ CWlmICgqcCA9PSAnXDAnKQorKwkJCQl7CisrCQkJCWlmIChhcmdjIDw9IDIpCisrCQkJCQl7Cisr CQkJCQlmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbiAlcyBuZWVkcyBhIHZhbHVlXG4iLCBhcmd2WzFd KTsKKysJCQkJCWdvdG8gZW5kOworKwkJCQkJfQorKwkJCQlhcmd2Kys7CisrCQkJCWFyZ2MtLTsK KysJCQkJcCA9ICZhcmd2WzFdWzBdOworKwkJCQl9CisrCQkJaWYgKCFzdHJjbXAocCwgImFlczEy OCIpKQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKKysJCQllbHNlIGlmICghc3Ry Y21wKHAsICJhZXMxOTIiKSkKKysJCQkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7CisrCQkJ ZWxzZSBpZiAoIXN0cmNtcChwLCAiYWVzMjU2IikpCisrCQkJCWNpcGhlciA9IEVWUF9hZXNfMjU2 X2NiYygpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgInRkZWEzIikgfHwgIXN0cmNtcChwLCAi dGRlczMiKSkKKysJCQkJeworKwkJCQljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7CisrCQkJ CUtsZW5fY291bnRzX2tleXMgPSAxOworKwkJCQlrbm93bl9rZXlsZW4gPSA4OworKwkJCQl9Cisr CQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBhbGdvcml0aG0g JXNcbiIsIHApOworKwkJCQlnb3RvIGVuZDsKKysJCQkJfQorKwkJCX0KKysJCQlicmVhazsKKysJ CWNhc2UgJ2cnOgorKwkJCW1vZGUgPSAwOworKwkJCWJyZWFrOworKwkJY2FzZSAndic6CisrCQkJ bW9kZSA9IDE7CisrCQkJYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJCWZwcmludGYoc3RkZXJyLCAi VW5rbm93biBvcHRpb24gJXNcbiIsIGFyZ3ZbMV0pOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJ CWFyZ3YrKzsKKysJCWFyZ2MtLTsKKysJCX0KKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3Rk aW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2Mg PCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAi dyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1 dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXph dGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFjbWFjX3Rlc3Qo Y2lwaGVyLCBvdXQsIGluLCBtb2RlLAorKwkJCUtsZW5fY291bnRzX2tleXMsIGtub3duX2tleWxl bikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGNtYWMgZmlsZSBwcm9jZXNzaW5n IGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKwor KwllbmQ6CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJ aWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJu IHJldDsKKysKKysJfQorKworKyNkZWZpbmUgQ01BQ19URVNUX01BWExJTkVMRU4JMTUwMDAwCisr CisraW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwgRklM RSAqaW4sCisrCWludCBtb2RlLCBpbnQgS2xlbl9jb3VudHNfa2V5cywgaW50IGtub3duX2tleWxl bikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5 d29yZCwgKnZhbHVlOworKwl1bnNpZ25lZCBjaGFyICoqS2V5cyA9IE5VTEwsICpNc2cgPSBOVUxM LCAqTWFjID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqS2V5ID0gTlVMTDsKKysJaW50IENvdW50 LCBLbGVuLCBNbGVuLCBUbGVuOworKwlsb25nIEtleWxlbiwgTXNnbGVuLCBNYWNsZW47CisrCWlu dCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxs b2MoQ01BQ19URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoQ01B Q19URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJ Z290byBlcnJvcjsKKysKKysJQ291bnQgPSAtMTsKKysJS2xlbiA9IC0xOworKwlNbGVuID0gLTE7 CisrCVRsZW4gPSAtMTsKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBDTUFDX1RFU1RfTUFY TElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5l YnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICov CisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29y ZCsrOworKworKwkJLyogU2tpcCBjb21tZW50cyAqLworKwkJaWYgKGtleXdvcmRbMF0gPT0gJyMn KQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVy cm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLwor KwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMg d2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsK KysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJ CWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJ CSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJl bW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsK KysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQor KwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNvdW50IikpCisrCQkJ eworKwkJCWlmIChDb3VudCAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlDb3Vu dCA9IGF0b2kodmFsdWUpOworKwkJCWlmIChDb3VudCA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2xlbiIpKQorKwkJCXsK KysJCQlpZiAoS2xlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlLbGVuID0g YXRvaSh2YWx1ZSk7CisrCQkJaWYgKEtsZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQorKwkJCQl7CisrCQkJCUtleXMgPSBPUEVOU1NMX21h bGxvYyhzaXplb2YoKktleXMpICogS2xlbik7CisrCQkJCW1lbXNldChLZXlzLCAnXDAnLCBzaXpl b2YoKktleXMpICogS2xlbik7CisrCQkJCX0KKysJCQllbHNlCisrCQkJCXsKKysJCQkJS2V5cyA9 IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqS2V5cykpOworKwkJCQltZW1zZXQoS2V5cywgJ1wwJywg c2l6ZW9mKCpLZXlzKSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJNbGVuIikpCisrCQkJeworKwkJCWlmIChNbGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCU1sZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoTWxlbiA8IDApCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi VGxlbiIpKQorKwkJCXsKKysJCQlpZiAoVGxlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlUbGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKFRsZW4gPCAwKQorKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIktleSIp ICYmICFLbGVuX2NvdW50c19rZXlzKQorKwkJCXsKKysJCQlpZiAoS2V5c1swXSkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlLZXlzWzBdID0gaGV4MmJpbl9tKHZhbHVlLCAmS2V5bGVuKTsK KysJCQlpZiAoIUtleXNbMF0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cm5jbXAoa2V5d29yZCwgIktleSIsIDMpICYmIEtsZW5fY291bnRzX2tleXMpCisr CQkJeworKwkJCWludCBrZXludW0gPSBhdG9pKGtleXdvcmQgKyAzKTsKKysJCQlpZiAoIWtleW51 bSB8fCBrZXludW0gPiBLbGVuIHx8IEtleXNba2V5bnVtLTFdKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCUtleXNba2V5bnVtLTFdID0gaGV4MmJpbl9tKHZhbHVlLCAmS2V5bGVuKTsKKysJ CQlpZiAoIUtleXNba2V5bnVtLTFdKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xl bik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTWFjIikpCisrCQkJeworKwkJCWlmIChtb2RlID09IDAp CisrCQkJCWNvbnRpbnVlOworKwkJCWlmIChNYWMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJTWFjID0gaGV4MmJpbl9tKHZhbHVlLCAmTWFjbGVuKTsKKysJCQlpZiAoIU1hYykKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJS ZXN1bHQiKSkKKysJCQl7CisrCQkJaWYgKG1vZGUgPT0gMSkKKysJCQkJY29udGludWU7CisrCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsK KysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKEtleXMgJiYgTXNnICYmICgh bW9kZSB8fCBNYWMpICYmIChUbGVuID4gMCkgJiYgKEtsZW4gPiAwKSkKKysJCQl7CisrCQkJaWYg KEtsZW5fY291bnRzX2tleXMpCisrCQkJCXsKKysJCQkJaW50IHg7CisrCQkJCUtleSA9IE9QRU5T U0xfbWFsbG9jKEtsZW4gKiBrbm93bl9rZXlsZW4pOworKwkJCQlmb3IgKHggPSAwOyB4IDwgS2xl bjsgeCsrKQorKwkJCQkJeworKwkJCQkJbWVtY3B5KEtleSArIHggKiBrbm93bl9rZXlsZW4sCisr CQkJCQkJS2V5c1t4XSwga25vd25fa2V5bGVuKTsKKysJCQkJCU9QRU5TU0xfZnJlZShLZXlzW3hd KTsKKysJCQkJCX0KKysJCQkJS2xlbiAqPSBrbm93bl9rZXlsZW47CisrCQkJCX0KKysJCQllbHNl CisrCQkJCXsKKysJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2MoS2xlbik7CisrCQkJCW1lbWNweShL ZXksIEtleXNbMF0sIEtsZW4pOworKwkJCQlPUEVOU1NMX2ZyZWUoS2V5c1swXSk7CisrCQkJCX0K KysJCQlPUEVOU1NMX2ZyZWUoS2V5cyk7CisrCisrCQkJc3dpdGNoKG1vZGUpCisrCQkJCXsKKysJ CQljYXNlIDA6CisrCQkJCWlmICghcHJpbnRfY21hY19nZW4oY2lwaGVyLCBvdXQsCisrCQkJCQkJ S2V5LCBLbGVuLAorKwkJCQkJCU1zZywgTWxlbiwKKysJCQkJCQlUbGVuKSkKKysJCQkJCWdvdG8g ZXJyb3I7CisrCQkJCWJyZWFrOworKwkJCWNhc2UgMToKKysJCQkJaWYgKCFwcmludF9jbWFjX3Zl cihjaXBoZXIsIG91dCwKKysJCQkJCQlLZXksIEtsZW4sCisrCQkJCQkJTXNnLCBNbGVuLAorKwkJ CQkJCU1hYywgTWFjbGVuLAorKwkJCQkJCVRsZW4pKQorKwkJCQkJZ290byBlcnJvcjsKKysJCQkJ YnJlYWs7CisrCQkJCX0KKysKKysJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJCQlLZXkgPSBOVUxM OworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJT1BFTlNTTF9m cmVlKE1hYyk7CisrCQkJTWFjID0gTlVMTDsKKysJCQlLbGVuID0gLTE7CisrCQkJTWxlbiA9IC0x OworKwkJCVRsZW4gPSAtMTsKKysJCQlDb3VudCA9IC0xOworKwkJCX0KKysJCX0KKysKKysKKysJ cmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xf ZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYp OworKwlpZiAoS2V5KQorKwkJT1BFTlNTTF9mcmVlKEtleSk7CisrCWlmIChNc2cpCisrCQlPUEVO U1NMX2ZyZWUoTXNnKTsKKysJaWYgKE1hYykKKysJCU9QRU5TU0xfZnJlZShNYWMpOworKworKwly ZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRB TCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVy cm9yOworKworKwl9CisrCisrc3RhdGljIGludCBwcmludF9jbWFjX2dlbihjb25zdCBFVlBfQ0lQ SEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4s CisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNbGVuLAorKwkJaW50IFRsZW4pCisrCXsKKysJ aW50IHJjLCBpOworKwlzaXplX3QgcmVzbGVuOworKwl1bnNpZ25lZCBjaGFyIHJlc1sxMjhdOwor KwlDTUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKKysKKysJQ01BQ19Jbml0KGNt YWNfY3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7CisrCUNNQUNfVXBkYXRlKGNtYWNfY3R4LCBN c2csIE1sZW4pOworKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJlc2xlbikpCisr CQl7CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJyKTsKKysJCXJj ID0gMDsKKysJCX0KKysJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQorKwkJeworKwkJZnB1 dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRlcnIpOworKwkJ cmMgPSAwOworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHV0cygiTWFjID0gIiwgb3V0KTsKKysJ CWZvciAoaSA9IDA7IGkgPCBUbGVuOyBpKyspCisrCQkJZnByaW50ZihvdXQsICIlMDJ4IiwgcmVz W2ldKTsKKysJCWZwdXRzKFJFU1BfRU9MLCBvdXQpOworKwkJcmMgPSAxOworKwkJfQorKwlDTUFD X0NUWF9mcmVlKGNtYWNfY3R4KTsKKysJcmV0dXJuIHJjOworKwl9CisrCisrc3RhdGljIGludCBw cmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJCXVu c2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBN bGVuLAorKwkJdW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAorKwkJaW50IFRsZW4pCisr CXsKKysJaW50IHJjID0gMTsKKysJc2l6ZV90IHJlc2xlbjsKKysJdW5zaWduZWQgY2hhciByZXNb MTI4XTsKKysJQ01BQ19DVFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCisrCUNNQUNf SW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDApOworKwlDTUFDX1VwZGF0ZShjbWFj X2N0eCwgTXNnLCBNbGVuKTsKKysJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCByZXMsICZyZXNs ZW4pKQorKwkJeworKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIsIHN0ZGVycik7 CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xlbikKKysJCXsK KysJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxuIiwgc3RkZXJy KTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZSBpZiAoVGxlbiAhPSBNYWNsZW4pCisrCQl7Cisr CQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuICE9IHJlc3VsdGluZyBNYWMgbGVuZ3RoXG4i LCBzdGRlcnIpOworKwkJcmMgPSAwOworKwkJfQorKwllbHNlCisrCQl7CisrCQlpZiAoIW1lbWNt cChNYWMsIHJlcywgTWFjbGVuKSkKKysJCQlmcHV0cygiUmVzdWx0ID0gUCIgUkVTUF9FT0wsIG91 dCk7CisrCQllbHNlCisrCQkJZnB1dHMoIlJlc3VsdCA9IEYiIFJFU1BfRU9MLCBvdXQpOworKwkJ fQorKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKKysJcmV0dXJuIHJjOworKwl9CisrCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92 cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwor LS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcwky MDEzLTAyLTE5IDEyOjQ3OjMzLjczMzExODc1MiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MzMxMTg3 NTIgKzAxMDAKK0BAIC0wLDAgKzEsNzAyIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisr LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIE5JU1Qg REVTIE1vZGVzIG9mIE9wZXJhdGlvbiBWYWxpZGF0aW9uIFN5c3RlbQorKyAgVGVzdCBQcm9ncmFt CisrCisrICBCYXNlZCBvbiB0aGUgQUVTIFZhbGlkYXRpb24gU3VpdGUsIHdoaWNoIHdhczoKKysg IERvbmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYtT05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBD ZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2VybWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5B LgorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisr CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2lu Y2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50Zigi Tm8gRklQUyBERVMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UK KysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisr CisrI2RlZmluZSBERVNfQkxPQ0tfU0laRSA4CisrCisrI2RlZmluZSBWRVJCT1NFIDAKKysKKytp bnQgREVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAorKwkgICAgY2hhciAqYW1vZGUsIGludCBh a2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAorKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywg CisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCSAgICB1 bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbGVuKQorKyAgICB7Cisr ICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CisrCisrICAgIGlmIChha2V5c3og IT0gMTkyKQorKwl7CisrCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7 CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9 PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7CisrICAgIGVsc2UgaWYgKHN0cmNh c2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfZWNiKCk7 CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkI2NCIpID09IDApCisrCWNpcGhl ciA9IEVWUF9kZXNfZWRlM19jZmI2NCgpOworKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9k ZSwgIk9GQiIsIDMpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19vZmIoKTsKKysgICAg ZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwljaXBoZXIgPSBFVlBfZGVzX2Vk ZTNfY2ZiOCgpOworKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCWNp cGhlciA9IEVWUF9kZXNfZWRlM19jZmIxKCk7CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVu a25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJRVhJVCgxKTsKKysJfQorKworKyAgICBpZiAo RVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0g MCkKKysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1f RVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7 CisrICAgIEVWUF9DaXBoZXIoY3R4LCBvdXQsIGluLCBsZW4pOworKworKyAgICByZXR1cm4gMTsK KysgICAgfQorKworK3ZvaWQgRGVidWdWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZh bCwgaW50IGxlbikKKysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrICAgIGludCBvbGVu OworKyAgICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7CisrICAgIHByaW50ZigiJXMg PSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyAgICB9CisrCisrdm9pZCBzaGlmdGluKHVu c2lnbmVkIGNoYXIgKmRzdCx1bnNpZ25lZCBjaGFyICpzcmMsaW50IG5iaXRzKQorKyAgICB7Cisr ICAgIGludCBuOworKworKyAgICAvKiBtb3ZlIHRoZSBieXRlcy4uLiAqLworKyAgICBtZW1tb3Zl KGRzdCxkc3QrbmJpdHMvOCwzKjgtbmJpdHMvOCk7CisrICAgIC8qIGFwcGVuZCBuZXcgZGF0YSAq LworKyAgICBtZW1jcHkoZHN0KzMqOC1uYml0cy84LHNyYywobmJpdHMrNykvOCk7CisrICAgIC8q IGxlZnQgc2hpZnQgdGhlIGJpdHMgKi8KKysgICAgaWYobmJpdHMlOCkKKysJZm9yKG49MCA7IG4g PCAzKjggOyArK24pCisrCSAgICBkc3Rbbl09KGRzdFtuXSA8PCAobmJpdHMlOCkpfChkc3Rbbisx XSA+PiAoOC1uYml0cyU4KSk7CisrICAgIH0JCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVY VCIsICJDSVBIRVJURVhUIn07CisrY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIi LCJDRkIxIiwiQ0ZCOCIsIkNGQjY0In07CisrZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIx LCBDRkI4LCBDRkI2NH07CisraW50IFNpemVzWzZdPXs2NCw2NCw2NCwxLDgsNjR9OworKworK3Zv aWQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKKysJICAgIGludCBha2V5c3osIGludCBudW1rZXlzLCB1 bnNpZ25lZCBjaGFyICpha2V5LHVuc2lnbmVkIGNoYXIgKml2ZWMsCisrCSAgICBpbnQgZGlyLCB1 bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAorKwkgICAgRklMRSAqcmZwKQorKyAgICB7Cisr ICAgIGludCBpLGltb2RlOworKyAgICB1bnNpZ25lZCBjaGFyIG5rWzQqOF07IC8qIGxvbmdlc3Qg a2V5KzggKi8KKysgICAgdW5zaWduZWQgY2hhciB0ZXh0MFs4XTsKKysKKysgICAgZm9yIChpbW9k ZT0wIDsgaW1vZGUgPCA2IDsgKytpbW9kZSkKKysJaWYoIXN0cmNtcChhbW9kZSx0X21vZGVbaW1v ZGVdKSkKKysJICAgIGJyZWFrOworKyAgICBpZiAoaW1vZGUgPT0gNikKKysJeyAKKysJcHJpbnRm KCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJRVhJVCgxKTsKKysJfQorKwor KyAgICBmb3IoaT0wIDsgaSA8IDQwMCA7ICsraSkKKysJeworKwlpbnQgajsKKysJaW50IG47Cisr CWludCBrcD1ha2V5c3ovNjQ7CisrCXVuc2lnbmVkIGNoYXIgb2xkX2l2WzhdOworKwlFVlBfQ0lQ SEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrCWZwcmludGYo cmZwLCJcbkNPVU5UID0gJWRcbiIsaSk7CisrCWlmKGtwID09IDEpCisrCSAgICBPdXRwdXRWYWx1 ZSgiS0VZIixha2V5LDgscmZwLDApOworKwllbHNlCisrCSAgICBmb3Iobj0wIDsgbiA8IGtwIDsg KytuKQorKwkJeworKwkJZnByaW50ZihyZnAsIktFWSVkIixuKzEpOworKwkJT3V0cHV0VmFsdWUo IiIsYWtleStuKjgsOCxyZnAsMCk7CisrCQl9CisrCisrCWlmKGltb2RlICE9IEVDQikKKysJICAg IE91dHB1dFZhbHVlKCJJViIsaXZlYyw4LHJmcCwwKTsKKysJT3V0cHV0VmFsdWUodF90YWdbZGly XjFdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKKysjaWYgMAorKwkvKiBjb21wZW5zYXRl IGZvciBlbmRpYW5uZXNzICovCisrCWlmKGltb2RlID09IENGQjEpCisrCSAgICB0ZXh0WzBdPDw9 NzsKKysjZW5kaWYKKysJbWVtY3B5KHRleHQwLHRleHQsOCk7CisrCisrCWZvcihqPTAgOyBqIDwg MTAwMDAgOyArK2opCisrCSAgICB7CisrCSAgICB1bnNpZ25lZCBjaGFyIG9sZF90ZXh0WzhdOwor KworKwkgICAgbWVtY3B5KG9sZF90ZXh0LHRleHQsOCk7CisrCSAgICBpZihqID09IDApCisrCQl7 CisrCQltZW1jcHkob2xkX2l2LGl2ZWMsOCk7CisrCQlERVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6 LGFrZXksaXZlYyxkaXIsdGV4dCx0ZXh0LGxlbik7CisrCQl9CisrCSAgICBlbHNlCisrCQl7Cisr CQltZW1jcHkob2xkX2l2LGN0eC5pdiw4KTsKKysJCUVWUF9DaXBoZXIoJmN0eCx0ZXh0LHRleHQs bGVuKTsKKysJCX0KKysJICAgIGlmKGogPT0gOTk5OSkKKysJCXsKKysJCU91dHB1dFZhbHVlKHRf dGFnW2Rpcl0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOworKwkJLyoJCW1lbWNweShpdmVj LHRleHQsOCk7ICovCisrCQl9CisrCSAgICAvKgkgICAgRGVidWdWYWx1ZSgiaXYiLGN0eC5pdiw4 KTsgKi8KKysJICAgIC8qIGFjY3VtdWxhdGUgbWF0ZXJpYWwgZm9yIHRoZSBuZXh0IGtleSAqLwor KwkgICAgc2hpZnRpbihuayx0ZXh0LFNpemVzW2ltb2RlXSk7CisrCSAgICAvKgkgICAgRGVidWdW YWx1ZSgibmsiLG5rLDI0KTsqLworKwkgICAgaWYoKGRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBp bW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0CisrCQkJfHwgaW1vZGUgPT0gQ0JDKSkgfHwg aW1vZGUgPT0gT0ZCKQorKwkJbWVtY3B5KHRleHQsb2xkX2l2LDgpOworKworKwkgICAgaWYoIWRp ciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0KSkK KysJCXsKKysJCS8qIHRoZSB0ZXN0IHNwZWNpZmllcyB1c2luZyB0aGUgb3V0cHV0IG9mIHRoZSBy YXcgREVTIG9wZXJhdGlvbgorKwkJICAgd2hpY2ggd2UgZG9uJ3QgaGF2ZSwgc28gcmVjb25zdHJ1 Y3QgaXQuLi4gKi8KKysJCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJCSAgICB0ZXh0W25dXj1v bGRfdGV4dFtuXTsKKysJCX0KKysJICAgIH0KKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkg ICAgYWtleVtuXV49bmtbMTYrbl07CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFr ZXlbOCtuXV49bmtbOCtuXTsKKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVsx NituXV49bmtbbl07CisrCWlmKG51bWtleXMgPCAzKQorKwkgICAgbWVtY3B5KCZha2V5WzIqOF0s YWtleSw4KTsKKysJaWYobnVta2V5cyA8IDIpCisrCSAgICBtZW1jcHkoJmFrZXlbOF0sYWtleSw4 KTsKKysJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopYWtleSk7CisrCURFU19zZXRf b2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzgpKTsKKysJREVTX3NldF9vZGRfcGFyaXR5 KChERVNfY2Jsb2NrICopKGFrZXkrMTYpKTsKKysJbWVtY3B5KGl2ZWMsY3R4Lml2LDgpOworKwor KwkvKiBwb2ludGxlc3MgZXhlcmNpc2UgLSB0aGUgZmluYWwgdGV4dCBkb2Vzbid0IGRlcGVuZCBv biB0aGUKKysJICAgaW5pdGlhbCB0ZXh0IGluIE9GQiBtb2RlLCBzbyB3aG8gY2FyZXMgd2hhdCBp dCBpcz8gKFdobworKwkgICBkZXNpZ25lZCB0aGVzZSB0ZXN0cz8pICovCisrCWlmKGltb2RlID09 IE9GQikKKysJICAgIGZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJCXRleHRbbl09dGV4dDBbbl1e b2xkX2l2W25dOworKwl9CisrICAgIH0KKysgICAgCisraW50IHByb2NfZmlsZShjaGFyICpycWZp bGUsIGNoYXIgKnJzcGZpbGUpCisrICAgIHsKKysgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07 CisrICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOworKyAgICBjaGFyIGlidWZbMjA0 OF0sIHRidWZbMjA0OF07CisrICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIg YW1vZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVzdFsxMDBdID0gIiI7CisrICAgIGludCBha2V5 c3o9MDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07CisrICAgIGludCBk aXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzIwNDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07CisrICAgIGNoYXIg KnJwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIGludCBudW1rZXlzPTE7CisrICAg IEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJx ZmlsZSkpCisrCXsKKysJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJ fQorKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOworKworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFm biwgInIiKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAl c1xuIiwgCisrCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJ fQorKyAgICBpZiAoIXJzcGZpbGUpCisrCXsKKysJc3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJz dHIocmZuLCJyZXEvIik7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCWlmICghcnApCisr CSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOworKyNlbmRpZgorKwlhc3NlcnQocnApOworKwlt ZW1jcHkocnAsInJzcCIsMyk7CisrCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5 KHJwLCAiLnJzcCIsIDQpOworKwlyc3BmaWxlID0gcmZuOworKwl9CisrICAgIGlmICgocmZwID0g Zm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVu IGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZj bG9zZShhZnApOworKwlhZnAgPSBOVUxMOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUg KCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJewor Kwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qCXBy aW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyovCisrCWlmKHN0ZXAgPT0gMyAmJiAh c3RyY21wKGFtb2RlLCJFQ0IiKSkKKysJICAgIHsKKysJICAgIG1lbXNldChpVmVjLCAwLCBzaXpl b2YoaVZlYykpOworKwkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNC ICovCisrCSAgICB9CisrCXN3aXRjaCAoc3RlcCkKKysJICAgIHsKKysJY2FzZSAwOiAgLyogcmVh ZCBwcmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKKysJCXsgLyogZW5kIG9m IHByZWFtYmxlICovCisrCQlpZiAoKmFtb2RlID09ICdcMCcpCisrCQkgICAgeworKwkJICAgIHBy aW50ZigiTWlzc2luZyBNb2RlXG4iKTsKKysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICArKyBzdGVwOwor KwkJICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQorKwkJeworKwkJ cHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKKysJCWVyciA9IDE7 CisrCQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KKysJCWNoYXIg KnhwLCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlmKCphbW9kZSkKKysJCSAgICB7IC8q IGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCisrCQkgICAgdGltZV90IHJ0aW0gPSB0aW1l KDApOworKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7CisrCQkgICAg fQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkJICAgIGlm KCFzdHJuY21wKHBwLCJJTlZFUlNFICIsOCkgfHwgIXN0cm5jbXAocHAsIkRFUyAiLDQpCisrCQkg ICAgICAgfHwgIXN0cm5jbXAocHAsIlRERVMgIiw1KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBw LCJQRVJNVVRBVElPTiAiLDEyKQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJTVUJTVElUVVRJ T04gIiwxMykKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVkFSSUFCTEUgIiw5KSkKKysJCQl7 CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLworKwkJCWlmKCFzdHJuY21wKHBwLCJERVMgIiw0KSkK KysJCQkgICAgcHArPTQ7CisrCQkJZWxzZSBpZighc3RybmNtcChwcCwiVERFUyAiLDUpKQorKwkJ CSAgICBwcCs9NTsKKysJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKKysJCQluID0geHAtcHA7Cisr CQkJc3RybmNweShhdGVzdCwgcHAsIG4pOworKwkJCWF0ZXN0W25dID0gJ1wwJzsKKysJCQkvKiBn ZXQgbW9kZSAqLworKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCisr CQkJbiA9IHN0cmxlbih4cCsxKS0xOworKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOworKwkJ CWFtb2RlW25dID0gJ1wwJzsKKysJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCisrCQkJaWYgKFZF UkJPU0UpCisrCQkJCXByaW50ZigiVGVzdD0lcywgTW9kZT0lc1xuIixhdGVzdCxhbW9kZSk7Cisr CQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5D UllQVF0gfCBbREVDUllQVF0gKi8KKysJICAgIGlmKGlidWZbMF0gPT0gJ1xuJykKKysJCWJyZWFr OworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsK KysJCSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0g MCkKKysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNS WVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKKysJCSAgICBlcnIgPSAx OworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQor KwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5 d29yZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisrCQlzdGVwID0gMjsKKysK KysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQorKwkJ eworKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAg ICAgfQorKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKKysJCXsKKysJ ICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0K KysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVD0iLDYpKQorKwkJeworKwkgICAgICAg IGZwdXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAgICAgfQorKwkgICAg aWYoIXN0cm5jYXNlY21wKGlidWYsIk51bUtleXMgPSAiLDEwKSkKKysJCXsKKysJCW51bWtleXM9 YXRvaShpYnVmKzEwKTsKKysJCWJyZWFrOworKwkJfQorKwkgIAorKwkgICAgZnB1dHMoaWJ1Ziwg cmZwKTsKKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkgPSAiLDYpKQorKwkJeworKwkJ YWtleXN6PTY0OworKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlm IChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJ CSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJLRVki LCBhS2V5LCBsZW4pOworKwkJKytzdGVwOworKwkJfQorKwkgICAgZWxzZSBpZighc3RybmNhc2Vj bXAoaWJ1ZiwiS0VZcyA9ICIsNykpCisrCQl7CisrCQlha2V5c3o9NjQqMzsKKysJCWxlbj1oZXgy YmluKGlidWYrNyxhS2V5KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAgICBwcmlu dGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAg ICB9CisrCQltZW1jcHkoYUtleSs4LGFLZXksOCk7CisrCQltZW1jcHkoYUtleSsxNixhS2V5LDgp OworKwkJaWJ1Zls0XT0nXDAnOworKwkJUHJpbnRWYWx1ZSgiS0VZcyIsYUtleSxsZW4pOworKwkJ KytzdGVwOworKwkJfQorKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZIiwzKSkK KysJCXsKKysJCWludCBuPWlidWZbM10tJzEnOworKworKwkJYWtleXN6PTY0KjM7CisrCQlsZW49 aGV4MmJpbihpYnVmKzcsYUtleStuKjgpOworKwkJaWYobGVuICE9IDgpCisrCQkgICAgeworKwkJ ICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFr OworKwkJICAgIH0KKysJCWlidWZbNF09J1wwJzsKKysJCVByaW50VmFsdWUoaWJ1ZixhS2V5LGxl bik7CisrCQlpZihuID09IDIpCisrCQkgICAgKytzdGVwOworKwkJfQorKwkgICAgZWxzZQorKwkJ eworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAg YnJlYWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCBy ZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCisrCQl7 CisrCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVs c2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7CisrCQlpZiAo bGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKKysJCSAg ICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiSVYiLCBp VmVjLCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkgICAgYnJlYWs7Cisr CisrCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDAp CisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJCWVyciA9IDE7Cisr CQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7CisrCQlp Zighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4t MSxwbGFpbnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWlu dGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlk IFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7 CisrCQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKKysJCSAgICB7Cisr CQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0KKysJCVByaW50VmFs dWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7CisrCQlpZiAo c3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLworKwkJ ICAgIHsKKysJCSAgICBkb19tY3QoYW1vZGUsYWtleXN6LG51bWtleXMsYUtleSxpVmVjLGRpcixw bGFpbnRleHQsbGVuLHJmcCk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBh c3NlcnQoZGlyID09IDEpOworKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlz eiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0 ICovCisrCQkJCSAgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZh bHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUs IkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysK KysJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAw KQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQor KwkgICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxl bj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxz ZQorKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4g PCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7Cisr CQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCQorKwkJUHJpbnRWYWx1 ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAi TW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLworKwkJICAgIHsKKysJCSAgICBk b19tY3QoYW1vZGUsIGFrZXlzeiwgbnVta2V5cywgYUtleSwgaVZlYywgCisrCQkJICAgZGlyLCBj aXBoZXJ0ZXh0LCBsZW4sIHJmcCk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAg ICBhc3NlcnQoZGlyID09IDApOworKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFr ZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNy eXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1 dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCisr CQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9 CisrCSAgICBicmVhazsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykK KysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7Cisr CQl9CisrCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQorKwkJeyAvKiBN Q1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsK KysJCX0KKysJICAgIHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAg aWYgKHJmcCkKKysJZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisrCWZjbG9zZShhZnApOwor KyAgICByZXR1cm4gZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBm aWxlIG9yIAorKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZp bGUuCisrICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWYg eHh4LnJlcQorKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVz dCAtZCB4eHh4eC54eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0CisrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4 dCIsICpyc3BmaWxlID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxMOworKyAgICBjaGFyIGZu WzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAx OworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisr CXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysjZW5kaWYKKysgICAg aWYgKGFyZ2MgPiAxKQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDAp CisrCSAgICB7CisrCSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVsc2UgaWYgKHN0cmNhc2Vj bXAoYXJndlsxXSwgIi1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0ID0gMTsKKysJICAg IGRfb3B0ID0gMDsKKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgcHJpbnRmKCJJbnZh bGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9 CisrCWlmIChhcmdjIDwgMykKKysJICAgIHsKKysJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0 ZXJcbiIpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29wdCkKKysJICAgIHJx bGlzdCA9IGFyZ3ZbMl07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNweShmbiwgYXJndlsy XSk7CisrCSAgICByc3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJfQorKyAgICBpZiAoZF9v cHQpCisrCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlpZiAoIShmcCA9IGZv cGVuKHJxbGlzdCwgInIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJl cSBsaXN0IGZpbGVcbiIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKwl3aGlsZSAoZmdl dHMoZm4sIHNpemVvZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRvayhmbiwgIlxyXG4i KTsKKysJICAgIHN0cmNweShyZm4sIGZuKTsKKysJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNc biIsIHJmbik7CisrCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCisrCQl7CisrCQlw cmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKKysJCUVY SVQoMSk7CisrCQl9CisrCSAgICB9CisrCWZjbG9zZShmcCk7CisrCX0KKysgICAgZWxzZSAvKiBz aW5nbGUgZmlsZSAqLworKwl7CisrCWlmIChWRVJCT1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5n OiAlc1xuIiwgZm4pOworKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKKysJICAgIHsKKysJ ICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Cisr CSAgICB9CisrCX0KKysgICAgRVhJVCgwKTsKKysgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZz LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jCistLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYy5maXBzCTIwMTMtMDIt MTkgMTI6NDc6MzMuNzMzMTE4NzUyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2RodnMuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczMzExODc1MiArMDEwMAor QEAgLTAsMCArMSwyOTIgQEAKKysvKiBmaXBzL2RoL2ZpcHNfZGh2cy5jICovCisrLyogV3JpdHRl 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 Ki8KKysKKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKyNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8u aD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYo Ik5vIEZJUFMgREggc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191 dGwuaCIKKysKKytzdGF0aWMgY29uc3QgRVZQX01EICpwYXJzZV9tZChjaGFyICpsaW5lKQorKwl7 CisrCWNoYXIgKnA7CisrCWlmIChsaW5lWzBdICE9ICdbJyB8fCBsaW5lWzFdICE9ICdGJykKKysJ CXJldHVybiBOVUxMOworKwlwID0gc3RyY2hyKGxpbmUsICctJyk7CisrCWlmICghcCkKKysJCXJl dHVybiBOVUxMOworKwlsaW5lID0gcCArIDE7CisrCXAgPSBzdHJjaHIobGluZSwgJ10nKTsKKysJ aWYgKCFwKQorKwkJcmV0dXJuIE5VTEw7CisrCSpwID0gMDsKKysJcCA9IGxpbmU7CisrCXdoaWxl KGlzc3BhY2UoKnApKQorKwkJcCsrOworKwlpZiAoIXN0cmNtcChwLCAiU0hBMSIpKQorKwkJcmV0 dXJuIEVWUF9zaGExKCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTIyNCIpKQorKwkJcmV0 dXJuIEVWUF9zaGEyMjQoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMjU2IikpCisrCQly ZXR1cm4gRVZQX3NoYTI1NigpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEzODQiKSkKKysJ CXJldHVybiBFVlBfc2hhMzg0KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTUxMiIpKQor KwkJcmV0dXJuIEVWUF9zaGE1MTIoKTsKKysJZWxzZQorKwkJcmV0dXJuIE5VTEw7CisrCX0KKysK KytzdGF0aWMgdm9pZCBvdXRwdXRfWmhhc2goRklMRSAqb3V0LCBpbnQgZXhvdXQsCisrCQkJCURI ICpkaCwgQklHTlVNICpwZWVya2V5LCBjb25zdCBFVlBfTUQgKm1kLAorKwkJCQl1bnNpZ25lZCBj aGFyICpyaGFzaCwgc2l6ZV90IHJoYXNobGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgKlo7Cisr CXVuc2lnbmVkIGNoYXIgY2hhc2hbRVZQX01BWF9NRF9TSVpFXTsKKysJaW50IFpsZW47CisrCWlm IChyaGFzaCA9PSBOVUxMKQorKwkJeworKwkJcmhhc2hsZW4gPSBNX0VWUF9NRF9zaXplKG1kKTsK KysJCWlmICghREhfZ2VuZXJhdGVfa2V5KGRoKSkKKysJCQlleGl0ICgxKTsKKysJCWRvX2JuX3By aW50X25hbWUob3V0LCAiWWVwaGVtSVVUIiwgZGgtPnB1Yl9rZXkpOworKwkJaWYgKGV4b3V0KQor KwkJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiWGVwaGVtSVVUIiwgZGgtPnByaXZfa2V5KTsKKysJ CX0KKysJWiA9IE9QRU5TU0xfbWFsbG9jKEJOX251bV9ieXRlcyhkaC0+cCkpOworKwlpZiAoIVop CisrCQlleGl0KDEpOworKwlabGVuID0gREhfY29tcHV0ZV9rZXlfcGFkZGVkKFosIHBlZXJrZXks IGRoKTsKKysJaWYgKGV4b3V0KQorKwkJT3V0cHV0VmFsdWUoIloiLCBaLCBabGVuLCBvdXQsIDAp OworKwlGSVBTX2RpZ2VzdChaLCBabGVuLCBjaGFzaCwgTlVMTCwgbWQpOworKwlPdXRwdXRWYWx1 ZShyaGFzaCA/ICJJVVRIYXNoWloiIDogIkhhc2haWiIsIGNoYXNoLCByaGFzaGxlbiwgb3V0LCAw KTsKKysJaWYgKHJoYXNoKQorKwkJeworKwkJZnByaW50ZihvdXQsICJSZXN1bHQgPSAlc1xuIiwK KysJCQkJbWVtY21wKGNoYXNoLCByaGFzaCwgcmhhc2hsZW4pID8gIkYiIDogIlAiKTsKKysJCX0K KysJZWxzZQorKwkJeworKwkJQk5fY2xlYXJfZnJlZShkaC0+cHJpdl9rZXkpOworKwkJQk5fY2xl YXJfZnJlZShkaC0+cHViX2tleSk7CisrCQlkaC0+cHJpdl9rZXkgPSBOVUxMOworKwkJZGgtPnB1 Yl9rZXkgPSBOVUxMOworKwkJfQorKwlPUEVOU1NMX2NsZWFuc2UoWiwgWmxlbik7CisrCU9QRU5T U0xfZnJlZShaKTsKKysJfQorKworKyNpZmRlZiBGSVBTX0FMR1ZTCisraW50IGZpcHNfZGh2c19t YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZWxzZQorK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwljaGFyICoqYXJncyA9IGFyZ3YgKyAxOworKwlp bnQgYXJnbiA9IGFyZ2MgLSAxOworKwlGSUxFICppbiwgKm91dDsKKysJY2hhciBidWZbMjA0OF0s IGxidWZbMjA0OF07CisrCXVuc2lnbmVkIGNoYXIgKnJoYXNoOworKwlsb25nIHJoYXNobGVuOwor KwlESCAqZGggPSBOVUxMOworKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKKysJQklHTlVNICpw ZWVya2V5ID0gTlVMTDsKKysJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7Cisr CWludCBkb192ZXJpZnkgPSAtMSwgZXhvdXQgPSAwOworKworKwlmaXBzX2FsZ3Rlc3RfaW5pdCgp OworKworKwlpZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAiZGh2ZXIiKSkKKysJCXsKKysJCWRv X3ZlcmlmeSA9IDE7CisrCQlhcmdzKys7CisrCQlhcmduLS07CisrCQl9CisrCWVsc2UgaWYgKGFy Z24gJiYgIXN0cmNtcCgqYXJncywgImRoZ2VuIikpCisrCQl7CisrCQlkb192ZXJpZnkgPSAwOwor KwkJYXJncysrOworKwkJYXJnbi0tOworKwkJfQorKworKwlpZiAoYXJnbiAmJiAhc3RyY21wKCph cmdzLCAiLWV4b3V0IikpCisrCQl7CisrCQlleG91dCA9IDE7CisrCQlhcmdzKys7CisrCQlhcmdu LS07CisrCQl9CisrCisrCWlmIChkb192ZXJpZnkgPT0gLTEpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwiJXMgW2RodmVyfGRoZ2VufF0gWy1leG91dF0gKGluZmlsZSBvdXRmaWxlKVxuIixhcmd2 WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCisrCWlmIChhcmduID09IDIpCisrCQl7CisrCQlp biA9IGZvcGVuKCphcmdzLCAiciIpOworKwkJaWYgKCFpbikKKysJCQl7CisrCQkJZnByaW50Zihz dGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJ fQorKwkJb3V0ID0gZm9wZW4oYXJnc1sxXSwgInciKTsKKysJCWlmICghb3V0KQorKwkJCXsKKysJ CQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOworKwkJCWV4 aXQoMSk7CisrCQkJfQorKwkJfQorKwllbHNlIGlmIChhcmduID09IDApCisrCQl7CisrCQlpbiA9 IHN0ZGluOworKwkJb3V0ID0gc3Rkb3V0OworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwiJXMgW2RodmVyfGRoZ2VufF0gWy1leG91dF0gKGluZmlsZSBvdXRmaWxlKVxuIixh cmd2WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCisrCWRoID0gRklQU19kaF9uZXcoKTsKKysK KysJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGluKSAhPSBOVUxMKQorKwkJeworKwkJ ZnB1dHMoYnVmLCBvdXQpOworKwkJaWYgKHN0cmxlbihidWYpID4gNiAmJiAhc3RybmNtcChidWYs ICJbRiIsIDIpKQorKwkJCXsKKysJCQltZCA9IHBhcnNlX21kKGJ1Zik7CisrCQkJaWYgKG1kID09 IE5VTEwpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKGRoKQorKwkJCQlGSVBTX2Ro X2ZyZWUoZGgpOworKwkJCWRoID0gRklQU19kaF9uZXcoKTsKKysJCQljb250aW51ZTsKKysJCQl9 CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQlj b250aW51ZTsKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJQIikpCisrCQkJeworKwkJCWlmICgh ZG9faGV4MmJuKCZkaC0+cCwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0K KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlEiKSkKKysJCQl7CisrCQkJaWYgKCFkb19o ZXgyYm4oJmRoLT5xLCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiRyIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJi bigmZGgtPmcsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJYZXBoZW1JVVQiKSkKKysJCQl7CisrCQkJaWYgKCFkb19o ZXgyYm4oJmRoLT5wcml2X2tleSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlllcGhlbUlVVCIpKQorKwkJCXsKKysJ CQlpZiAoIWRvX2hleDJibigmZGgtPnB1Yl9rZXksIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZZXBoZW1DQVZTIikp CisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZwZWVya2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJaWYgKGRvX3ZlcmlmeSA9PSAwKQorKwkJCQlvdXRwdXRfWmhhc2go b3V0LCBleG91dCwgZGgsIHBlZXJrZXksIG1kLAorKwkJCQkJCQlOVUxMLCAwKTsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJDQVZTSGFzaFpaIikpCisrCQkJeworKwkJCWlm ICghbWQpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJcmhhc2ggPSBoZXgyYmluX20odmFs dWUsICZyaGFzaGxlbik7CisrCQkJaWYgKCFyaGFzaCB8fCByaGFzaGxlbiAhPSBNX0VWUF9NRF9z aXplKG1kKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlvdXRwdXRfWmhhc2gob3V0LCBl eG91dCwgZGgsIHBlZXJrZXksIG1kLAorKwkJCQkJCQlyaGFzaCwgcmhhc2hsZW4pOworKwkJCX0K KysJCX0KKysJaWYgKGluICYmIGluICE9IHN0ZGluKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91 dCAmJiBvdXQgIT0gc3Rkb3V0KQorKwkJZmNsb3NlKG91dCk7CisrCXJldHVybiAwOworKwlwYXJz ZV9lcnJvcjoKKysJZnByaW50ZihzdGRlcnIsICJFcnJvciBQYXJzaW5nIHJlcXVlc3QgZmlsZVxu Iik7CisrCWV4aXQoMSk7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9maXBzL2NhdnMvZmlwc19kcmJndnMuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2NhdnMvZmlwc19kcmJndnMuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzMzMTE4NzUyICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jCTIw MTMtMDItMTkgMTI6NDc6MzMuNzMzMTE4NzUyICswMTAwCitAQCAtMCwwICsxLDQxNiBAQAorKy8q IGZpcHMvcmFuZC9maXBzX2RyYmd2cy5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysKKysjZGVmaW5l IE9QRU5TU0xfRklQU0FQSQorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisr I2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5vIEZJUFMgRFJCRyBzdXBw b3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytz dGF0aWMgaW50IGRwYXJzZV9tZChjaGFyICpzdHIpCisrCXsKKysJc3dpdGNoKGF0b2koc3RyICsg NSkpCisrCQl7CisrCQljYXNlIDE6CisrCQlyZXR1cm4gTklEX3NoYTE7CisrCisrCQljYXNlIDIy NDoKKysJCXJldHVybiBOSURfc2hhMjI0OworKworKwkJY2FzZSAyNTY6CisrCQlyZXR1cm4gTklE X3NoYTI1NjsKKysKKysJCWNhc2UgMzg0OgorKwkJcmV0dXJuIE5JRF9zaGEzODQ7CisrCisrCQlj YXNlIDUxMjoKKysJCXJldHVybiBOSURfc2hhNTEyOworKworKwkJfQorKworKwlyZXR1cm4gTklE X3VuZGVmOworKwl9CisrCisrc3RhdGljIGludCBwYXJzZV9lYyhjaGFyICpzdHIpCisrCXsKKysJ aW50IGN1cnZlX25pZCwgbWRfbmlkOworKwljaGFyICptZDsKKysJbWQgPSBzdHJjaHIoc3RyLCAn ICcpOworKwlpZiAoIW1kKQorKwkJcmV0dXJuIE5JRF91bmRlZjsKKysJaWYgKCFzdHJuY21wKHN0 ciwgIltQLTI1NiIsIDYpKQorKwkJY3VydmVfbmlkID0gTklEX1g5XzYyX3ByaW1lMjU2djE7Cisr CWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTM4NCIsIDYpKQorKwkJY3VydmVfbmlkID0gTklE X3NlY3AzODRyMTsKKysJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiW1AtNTIxIiwgNikpCisrCQlj dXJ2ZV9uaWQgPSBOSURfc2VjcDUyMXIxOworKwllbHNlCisrCQlyZXR1cm4gTklEX3VuZGVmOwor KwltZF9uaWQgPSBkcGFyc2VfbWQobWQpOworKwlpZiAobWRfbmlkID09IE5JRF91bmRlZikKKysJ CXJldHVybiBOSURfdW5kZWY7CisrCXJldHVybiAoY3VydmVfbmlkIDw8IDE2KSB8IG1kX25pZDsK KysJfQorKworK3N0YXRpYyBpbnQgcGFyc2VfYWVzKGNoYXIgKnN0ciwgaW50ICpwZGYpCisrCXsK KysKKysJaWYgKCFzdHJuY21wKHN0ciArIDksICJubyIsIDIpKQorKwkJKnBkZiA9IDA7CisrCWVs c2UKKysJCSpwZGYgPSBEUkJHX0ZMQUdfQ1RSX1VTRV9ERjsKKysKKysJc3dpdGNoKGF0b2koc3Ry ICsgNSkpCisrCQl7CisrCQljYXNlIDEyODoKKysJCXJldHVybiBOSURfYWVzXzEyOF9jdHI7Cisr CisrCQljYXNlIDE5MjoKKysJCXJldHVybiBOSURfYWVzXzE5Ml9jdHI7CisrCisrCQljYXNlIDI1 NjoKKysJCXJldHVybiBOSURfYWVzXzI1Nl9jdHI7CisrCisrCQlkZWZhdWx0OgorKwkJcmV0dXJu IE5JRF91bmRlZjsKKysKKysJCX0KKysJfQorKworK3R5cGVkZWYgc3RydWN0IAorKwl7CisrCXVu c2lnbmVkIGNoYXIgKmVudDsKKysJc2l6ZV90IGVudGxlbjsKKysJdW5zaWduZWQgY2hhciAqbm9u Y2U7CisrCXNpemVfdCBub25jZWxlbjsKKysJfSBURVNUX0VOVDsKKysKKytzdGF0aWMgc2l6ZV90 IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4s IHNpemVfdCBtYXhfbGVuKQorKwl7CisrCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBf ZGF0YShkY3R4KTsKKysJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPmVudDsKKysJcmV0dXJu IHQtPmVudGxlbjsKKysJfQorKworK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NUWCAq ZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorKwl7Cisr CVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKKysJKnBvdXQgPSAo dW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOworKwlyZXR1cm4gdC0+bm9uY2VsZW47CisrCX0KKysK KysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2RyYmd2c19tYWluKGludCBhcmdjLGNoYXIg Kiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrI2VuZGlm CisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysJRFJCR19DVFggKmRjdHgg PSBOVUxMOworKwlURVNUX0VOVCB0OworKwlpbnQgciwgbmlkID0gMDsKKysJaW50IHByID0gMDsK KysJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07CisrCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsy MDQ4XTsKKysJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisrCisrCXVuc2ln bmVkIGNoYXIgKmVudCA9IE5VTEwsICpub25jZSA9IE5VTEwsICpwZXJzID0gTlVMTCwgKmFkaW4g PSBOVUxMOworKwlsb25nIGVudGxlbiwgbm9uY2VsZW4sIHBlcnNsZW4sIGFkaW5sZW47CisrCWlu dCBkZiA9IDA7CisrCisrCWVudW0gZHR5cGUgeyBEUkJHX05PTkUsIERSQkdfQ1RSLCBEUkJHX0hB U0gsIERSQkdfSE1BQywgRFJCR19EVUFMX0VDIH0KKysJCWRyYmdfdHlwZSA9IERSQkdfTk9ORTsK KysKKysJaW50IHJhbmRvdXRsZW4gPSAwOworKworKwlpbnQgZ2VuID0gMDsKKysKKysJZmlwc19h bGd0ZXN0X2luaXQoKTsKKysKKysJaWYgKGFyZ2MgPT0gMykKKysJCXsKKysJCWluID0gZm9wZW4o YXJndlsxXSwgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAi RXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysJCW91 dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7CisrCQkJZnByaW50 ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOwor KwkJCX0KKysJCX0KKysJZWxzZSBpZiAoYXJnYyA9PSAxKQorKwkJeworKwkJaW4gPSBzdGRpbjsK KysJCW91dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs IiVzIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7CisrCQlleGl0KDEpOworKwkJfQorKwor Kwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCisrCQl7CisrCQlm cHV0cyhidWYsIG91dCk7CisrCQlpZiAoZHJiZ190eXBlID09IERSQkdfTk9ORSkKKysJCQl7Cisr CQkJaWYgKHN0cnN0cihidWYsICJDVFJfRFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0NU UjsKKysJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSGFzaF9EUkJHIikpCisrCQkJCWRyYmdfdHlw ZSA9IERSQkdfSEFTSDsKKysJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSE1BQ19EUkJHIikpCisr CQkJCWRyYmdfdHlwZSA9IERSQkdfSE1BQzsKKysJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiRHVh bF9FQ19EUkJHIikpCisrCQkJCWRyYmdfdHlwZSA9IERSQkdfRFVBTF9FQzsKKysJCQllbHNlCisr CQkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmIChzdHJsZW4oYnVmKSA+IDQgJiYgIXN0cm5jbXAo YnVmLCAiW1NIQS0iLCA1KSkKKysJCQl7CisrCQkJbmlkID0gZHBhcnNlX21kKGJ1Zik7CisrCQkJ aWYgKG5pZCA9PSBOSURfdW5kZWYpCisrCQkJCWV4aXQoMSk7CisrCQkJaWYgKGRyYmdfdHlwZSA9 PSBEUkJHX0hNQUMpCisrCQkJCXsKKysJCQkJc3dpdGNoIChuaWQpCisrCQkJCQl7CisrCQkJCQlj YXNlIE5JRF9zaGExOgorKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMTsKKysJCQkJCWJyZWFr OworKworKwkJCQkJY2FzZSBOSURfc2hhMjI0OgorKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hB MjI0OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNlIE5JRF9zaGEyNTY6CisrCQkJCQluaWQg PSBOSURfaG1hY1dpdGhTSEEyNTY7CisrCQkJCQlicmVhazsKKysKKysJCQkJCWNhc2UgTklEX3No YTM4NDoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTM4NDsKKysJCQkJCWJyZWFrOworKwor KwkJCQkJY2FzZSBOSURfc2hhNTEyOgorKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBNTEyOwor KwkJCQkJYnJlYWs7CisrCisrCQkJCQlkZWZhdWx0OgorKwkJCQkJZXhpdCgxKTsKKysJCQkJCX0K KysJCQkJfQorKwkJCX0KKysJCWlmIChzdHJsZW4oYnVmKSA+IDEyICYmICFzdHJuY21wKGJ1Ziwg IltBRVMtIiwgNSkpCisrCQkJeworKwkJCW5pZCA9IHBhcnNlX2FlcyhidWYsICZkZik7CisrCQkJ aWYgKG5pZCA9PSBOSURfdW5kZWYpCisrCQkJCWV4aXQoMSk7CisrCQkJfQorKwkJaWYgKHN0cmxl bihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW1AtIiwgMykpCisrCQkJeworKwkJCW5pZCA9 IHBhcnNlX2VjKGJ1Zik7CisrCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCisrCQkJCWV4aXQoMSk7 CisrCQkJfQorKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQkJY29udGludWU7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1ByZWRpY3Rpb25S ZXNpc3RhbmNlIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiVHJ1ZV0iKSkKKysJ CQkJcHIgPSAxOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJGYWxzZV0iKSkKKysJCQkJ cHIgPSAwOworKwkJCWVsc2UKKysJCQkJZXhpdCgxKTsKKysJCQl9CisrCisrCQlpZiAoIXN0cmNt cChrZXl3b3JkLCAiRW50cm9weUlucHV0IikpCisrCQkJeworKwkJCWVudCA9IGhleDJiaW5fbSh2 YWx1ZSwgJmVudGxlbik7CisrCQkJdC5lbnQgPSBlbnQ7CisrCQkJdC5lbnRsZW4gPSBlbnRsZW47 CisrCQkJfQorKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIk5vbmNlIikpCisrCQkJeworKwkJ CW5vbmNlID0gaGV4MmJpbl9tKHZhbHVlLCAmbm9uY2VsZW4pOworKwkJCXQubm9uY2UgPSBub25j ZTsKKysJCQl0Lm5vbmNlbGVuID0gbm9uY2VsZW47CisrCQkJfQorKworKwkJaWYgKCFzdHJjbXAo a2V5d29yZCwgIlBlcnNvbmFsaXphdGlvblN0cmluZyIpKQorKwkJCXsKKysJCQlwZXJzID0gaGV4 MmJpbl9tKHZhbHVlLCAmcGVyc2xlbik7CisrCQkJaWYgKG5pZCA9PSAwKQorKwkJCQl7CisrCQkJ CWZwcmludGYoc3RkZXJyLCAiRFJCRyB0eXBlIG5vdCByZWNvZ25pc2VkIVxuIik7CisrCQkJCWV4 aXQgKDEpOworKwkJCQl9CisrCQkJZGN0eCA9IEZJUFNfZHJiZ19uZXcobmlkLCBkZiB8IERSQkdf RkxBR19URVNUKTsKKysJCQlpZiAoIWRjdHgpCisrCQkJCWV4aXQgKDEpOworKwkJCUZJUFNfZHJi Z19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwKKysJCQkJCQkJdGVzdF9u b25jZSwgMCk7CisrCQkJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7CisrCQkJcmFu ZG91dGxlbiA9IChpbnQpRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChkY3R4KTsKKysJCQlyID0g RklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHBlcnMsIHBlcnNsZW4pOworKwkJCWlmICghcikK KysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluc3RhbnRpYXRpbmcgRFJCR1xu Iik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQlPUEVOU1NMX2ZyZWUocGVycyk7CisrCQkJ T1BFTlNTTF9mcmVlKGVudCk7CisrCQkJT1BFTlNTTF9mcmVlKG5vbmNlKTsKKysJCQllbnQgPSBu b25jZSA9IHBlcnMgPSBOVUxMOworKwkJCWdlbiA9IDA7CisrCQkJfQorKworKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dCIpKQorKwkJCXsKKysJCQlhZGluID0gaGV4MmJp bl9tKHZhbHVlLCAmYWRpbmxlbik7CisrCQkJaWYgKHByKQorKwkJCQljb250aW51ZTsKKysJCQly ID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHJhbmRvdXRsZW4sIDAsCisrCQkJ CQkJCQlhZGluLCBhZGlubGVuKTsKKysJCQlpZiAoIXIpCisrCQkJCXsKKysJCQkJZnByaW50Zihz dGRlcnIsICJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xuIik7CisrCQkJCWV4aXQoMSk7Cisr CQkJCX0KKysJCQlpZiAoIXIpCisrCQkJCWV4aXQoMSk7CisrCQkJT1BFTlNTTF9mcmVlKGFkaW4p OworKwkJCWFkaW4gPSBOVUxMOworKwkJCWdlbisrOworKwkJCX0KKysKKysJCWlmIChwcikKKysJ CQl7CisrCQkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFBSIikpCisrCQkJCXsK KysJCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKKysJCQkJdC5lbnQgPSBlbnQ7 CisrCQkJCXQuZW50bGVuID0gZW50bGVuOworKwkJCQlyID0gRklQU19kcmJnX2dlbmVyYXRlKGRj dHgsCisrCQkJCQkJCXJhbmRvdXQsIHJhbmRvdXRsZW4sCisrCQkJCQkJCTEsIGFkaW4sIGFkaW5s ZW4pOworKwkJCQlpZiAoIXIpCisrCQkJCQl7CisrCQkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJ CQkiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOworKwkJCQkJZXhpdCgxKTsKKysJCQkJ CX0KKysJCQkJT1BFTlNTTF9mcmVlKGFkaW4pOworKwkJCQlPUEVOU1NMX2ZyZWUoZW50KTsKKysJ CQkJYWRpbiA9IGVudCA9IE5VTEw7CisrCQkJCWdlbisrOworKwkJCQl9CisrCQkJfQorKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFJlc2VlZCIpKQorKwkJCXsKKysJCQllbnQg PSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOworKwkJCXQuZW50ID0gZW50OworKwkJCXQuZW50 bGVuID0gZW50bGVuOworKwkJCX0KKysJCWlmICghc3RyY21wKGtleXdvcmQsICJBZGRpdGlvbmFs SW5wdXRSZXNlZWQiKSkKKysJCQl7CisrCQkJYWRpbiA9IGhleDJiaW5fbSh2YWx1ZSwgJmFkaW5s ZW4pOworKwkJCUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbik7CisrCQkJT1BF TlNTTF9mcmVlKGVudCk7CisrCQkJT1BFTlNTTF9mcmVlKGFkaW4pOworKwkJCWVudCA9IGFkaW4g PSBOVUxMOworKwkJCX0KKysJCWlmIChnZW4gPT0gMikKKysJCQl7CisrCQkJT3V0cHV0VmFsdWUo IlJldHVybmVkQml0cyIsIHJhbmRvdXQsIHJhbmRvdXRsZW4sCisrCQkJCQkJCQkJb3V0LCAwKTsK KysJCQlGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysJCQlkY3R4ID0gTlVMTDsKKysJCQlnZW4gPSAw OworKwkJCX0KKysKKysJCX0KKysJaWYgKGluICYmIGluICE9IHN0ZGluKQorKwkJZmNsb3NlKGlu KTsKKysJaWYgKG91dCAmJiBvdXQgIT0gc3Rkb3V0KQorKwkJZmNsb3NlKG91dCk7CisrCXJldHVy biAwOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kc3N2cy5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rz c3ZzLmMuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczMzExODc1MiArMDEwMAorKysrIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCTIwMTMtMDItMTkgMTI6NDc6 MzMuNzMzMTE4NzUyICswMTAwCitAQCAtMCwwICsxLDUzNyBAQAorKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3Rk aW8uaD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmlu dGYoIk5vIEZJUFMgRFNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNl CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyB2b2lkIHBi bihjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVu c2lnbmVkIGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJdG1wID0gT1BF TlNTTF9tYWxsb2MobGVuKTsKKysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg Ik1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJQk5fYm4y YmluKGJuLCB0bXApOworKwlwcmludGYoIiVzID0gIiwgbmFtZSk7CisrCWZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykKKysJCXByaW50ZigiJTAyWCIsIHRtcFtpXSk7CisrCWZwdXRzKCJcbiIsIHN0 ZG91dCk7CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwlyZXR1cm47CisrCX0KKysKKyt2b2lkIHBy aW1lcygpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNDBdOworKyAgICBjaGFyIGxidWZbMTAy NDBdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOwor KwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRp bnVlOworKwlpZighc3RyY21wKGtleXdvcmQsIlByaW1lIikpCisrCSAgICB7CisrCSAgICBCSUdO VU0gKnBwOworKworKwkgICAgcHA9Qk5fbmV3KCk7CisrCSAgICBkb19oZXgyYm4oJnBwLHZhbHVl KTsKKysJICAgIHByaW50ZigicmVzdWx0PSAlY1xuIiwKKysJCSAgIEJOX2lzX3ByaW1lX2V4KHBw LDIwLE5VTEwsTlVMTCkgPyAnUCcgOiAnRicpOworKwkgICAgfQkgICAgCisrCX0KKysgICAgfQor KworK3ZvaWQgcHFnKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBs YnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7 CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7 CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJewor KwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChr ZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiTiIpKQorKwkgICAgeworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisr CSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysKKysJICAgIHdoaWxlKG4tLSkK KysJCXsKKysJCXVuc2lnbmVkIGNoYXIgc2VlZFsyMF07CisrCQlEU0EgKmRzYTsKKysJCWludCBj b3VudGVyOworKwkJdW5zaWduZWQgbG9uZyBoOworKwkJZHNhID0gRklQU19kc2FfbmV3KCk7Cisr CisrCQlpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDAsJmNv dW50ZXIsJmgsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQo MSk7CisrCQkJfQorKwkJcGJuKCJQIixkc2EtPnApOworKwkJcGJuKCJRIixkc2EtPnEpOworKwkJ cGJuKCJHIixkc2EtPmcpOworKwkJcHYoIlNlZWQiLHNlZWQsMjApOworKwkJcHJpbnRmKCJjID0g JWRcbiIsY291bnRlcik7CisrCQlwcmludGYoIkggPSAlbHhcbiIsaCk7CisrCQlwdXRjKCdcbics c3Rkb3V0KTsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgZnB1dHMoYnVmLHN0ZG91dCk7 CisrCX0KKysgICAgfQorKworK3ZvaWQgcHFndmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1Zlsx MDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7 CisrICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMOworKyAgICBpbnQg Y291bnRlciwgY291bnRlcjI7CisrICAgIHVuc2lnbmVkIGxvbmcgaCwgaDI7CisrICAgIERTQSAq ZHNhPU5VTEw7CisrICAgIGludCBubW9kPTA7CisrICAgIHVuc2lnbmVkIGNoYXIgc2VlZFsxMDI0 XTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisr CXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7 CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlmcHV0cyhidWYs IHN0ZG91dCk7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9p KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlNlZWQiKSkKKysJICAgIHsKKysJ ICAgIGludCBzbGVuID0gaGV4MmJpbih2YWx1ZSwgc2VlZCk7CisrCSAgICBpZiAoc2xlbiAhPSAy MCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiU2VlZCBwYXJzZSBsZW5ndGggZXJyb3JcbiIp OworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJjIikpCisrCSAgICBjb3VudGVyID1hdG9pKGJ1Zis0KTsKKysJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIkgiKSkKKysJICAgIHsKKysJICAgIGggPSBhdG9pKHZhbHVlKTsKKysJICAgIGlmICgh cCB8fCAhcSB8fCAhZykKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIp OworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAg IGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMjAgLCZjb3Vu dGVyMiwmaDIsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQo MSk7CisrCQkJfQorKyAgICAgICAgICAgIGlmIChCTl9jbXAoZHNhLT5wLCBwKSB8fCBCTl9jbXAo ZHNhLT5xLCBxKSB8fCBCTl9jbXAoZHNhLT5nLCBnKQorKwkJfHwgKGNvdW50ZXIgIT0gY291bnRl cjIpIHx8IChoICE9IGgyKSkKKysJICAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAg ZWxzZQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCSAgICBCTl9mcmVlKHApOwor KwkgICAgQk5fZnJlZShxKTsKKysJICAgIEJOX2ZyZWUoZyk7CisrCSAgICBwID0gTlVMTDsKKysJ ICAgIHEgPSBOVUxMOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBGSVBTX2RzYV9mcmVlKGRzYSk7 CisrCSAgICBkc2EgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysvKiBLZXlwYWly IHZlcmlmaWNhdGlvbiByb3V0aW5lLiBOQjogdGhpcyBpc24ndCBwYXJ0IG9mIHRoZSBzdGFuZGFy ZCBGSVBTMTQwLTIKKysgKiBhbGdvcml0aG0gdGVzdHMuIEl0IGlzIGFuIGFkZGl0aW9uYWwgdGVz dCB0byBwZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gdGhlCisrICogb3V0cHV0IG9mIHRoZSBLZXlQ YWlyIHRlc3QuCisrICovCisrCisrc3RhdGljIGludCBkc3NfcGFyYW1jaGVjayhpbnQgbm1vZCwg QklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqZywKKysJCQkJCQkJQk5fQ1RYICpjdHgpCisr ICAgIHsKKysgICAgQklHTlVNICpyZW0gPSBOVUxMOworKyAgICBpZiAoQk5fbnVtX2JpdHMocCkg IT0gbm1vZCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9udW1fYml0cyhxKSAhPSAxNjApCisr CXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBj dHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocSwg Qk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICByZW0g PSBCTl9uZXcoKTsKKysgICAgaWYgKCFCTl9tb2QocmVtLCBwLCBxLCBjdHgpIHx8ICFCTl9pc19v bmUocmVtKQorKyAgICAJfHwgKEJOX2NtcChnLCBCTl92YWx1ZV9vbmUoKSkgPD0gMCkKKysJfHwg IUJOX21vZF9leHAocmVtLCBnLCBxLCBwLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKSkKKysJewor KwlCTl9mcmVlKHJlbSk7CisrCXJldHVybiAwOworKwl9CisrICAgIC8qIFRvZG86IGNoZWNrIGcg Ki8KKysgICAgQk5fZnJlZShyZW0pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3ZvaWQg a2V5dmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIEJJR05VTSAqcCA9IE5VTEws ICpxID0gTlVMTCwgKmcgPSBOVUxMLCAqWCA9IE5VTEwsICpZID0gTlVMTDsKKysgICAgQklHTlVN ICpZMjsKKysgICAgQk5fQ1RYICpjdHggPSBOVUxMOworKyAgICBpbnQgbm1vZD0wLCBwYXJhbWNo ZWNrID0gMDsKKysKKysgICAgY3R4ID0gQk5fQ1RYX25ldygpOworKyAgICBZMiA9IEJOX25ldygp OworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJ eworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsK KysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAo a2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgaWYgKHApCisrCQlCTl9mcmVlKHApOwor KwkgICAgcCA9IE5VTEw7CisrCSAgICBpZiAocSkKKysJCUJOX2ZyZWUocSk7CisrCSAgICBxID0g TlVMTDsKKysJICAgIGlmIChnKQorKwkJQk5fZnJlZShnKTsKKysJICAgIGcgPSBOVUxMOworKwkg ICAgcGFyYW1jaGVjayA9IDA7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgfQorKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWCIpKQorKwkgICAgWD1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgeworKwkgICAgWT1oZXgyYm4odmFs dWUpOworKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnIHx8ICFYIHx8ICFZKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAg IHBibigiUCIscCk7CisrCSAgICBwYm4oIlEiLHEpOworKwkgICAgcGJuKCJHIixnKTsKKysJICAg IHBibigiWCIsWCk7CisrCSAgICBwYm4oIlkiLFkpOworKwkgICAgaWYgKCFwYXJhbWNoZWNrKQor KwkJeworKwkJaWYgKGRzc19wYXJhbWNoZWNrKG5tb2QsIHAsIHEsIGcsIGN0eCkpCisrCQkJcGFy YW1jaGVjayA9IDE7CisrCQllbHNlCisrCQkJcGFyYW1jaGVjayA9IC0xOworKwkJfQorKwkgICAg aWYgKHBhcmFtY2hlY2sgIT0gMSkKKysJICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAg ICBlbHNlCisrCQl7CisrCQlpZiAoIUJOX21vZF9leHAoWTIsIGcsIFgsIHAsIGN0eCkgfHwgQk5f Y21wKFkyLCBZKSkKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgICAgICBl bHNlCisrCSAgICAJCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCQl9CisrCSAgICBCTl9mcmVl KFgpOworKwkgICAgQk5fZnJlZShZKTsKKysJICAgIFggPSBOVUxMOworKwkgICAgWSA9IE5VTEw7 CisrCSAgICB9CisrCX0KKysJaWYgKHApCisrCSAgICBCTl9mcmVlKHApOworKwlpZiAocSkKKysJ ICAgIEJOX2ZyZWUocSk7CisrCWlmIChnKQorKwkgICAgQk5fZnJlZShnKTsKKysJaWYgKFkyKQor KwkgICAgQk5fZnJlZShZMik7CisrICAgIH0KKysKKyt2b2lkIGtleXBhaXIoKQorKyAgICB7Cisr ICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVm LHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3 b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJ CWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5t b2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7 CisrCSAgICBEU0EgKmRzYTsKKysJICAgIGludCBuPWF0b2kodmFsdWUpOworKworKwkgICAgcHJp bnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsK KysJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxO VUxMLE5VTEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7 CisrCQl9CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7Cisr CSAgICBwYm4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysKKysJICAg IHdoaWxlKG4tLSkKKysJCXsKKysJCWlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJCXsK KysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysKKysJCXBibigi WCIsZHNhLT5wcml2X2tleSk7CisrCQlwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCQlwdXRjKCdc bicsc3Rkb3V0KTsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBzaWdnZW4o KQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07Cisr ICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgRFNBICpk c2E9TlVMTDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5V TEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZigh c3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7 CisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGlmIChkc2EpCisr CQlGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAg IGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5V TEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9 CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBw Ym4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hh ciBtc2dbMTAyNF07CisrCSAgICB1bnNpZ25lZCBjaGFyIHNidWZbNjBdOworKwkgICAgdW5zaWdu ZWQgaW50IHNsZW47CisrCSAgICBpbnQgbjsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgRVZQ X01EX0NUWCBtY3R4OworKwkgICAgRFNBX1NJRyAqc2lnOworKwkgICAgRVZQX01EX0NUWF9pbml0 KCZtY3R4KTsKKysKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIs bXNnLG4pOworKworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQl7CisrCQlk b19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBway50eXBlID0gRVZQ X1BLRVlfRFNBOworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBwYm4oIlkiLGRzYS0+ cHViX2tleSk7CisrCisrCSAgICBFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5V TEwpOworKwkgICAgRVZQX1NpZ25VcGRhdGUoJm1jdHgsIG1zZywgbik7CisrCSAgICBFVlBfU2ln bkZpbmFsKCZtY3R4LCBzYnVmLCAmc2xlbiwgJnBrKTsKKysKKysJICAgIHNpZyA9IERTQV9TSUdf bmV3KCk7CisrCSAgICBGSVBTX2RzYV9zaWdfZGVjb2RlKHNpZywgc2J1Ziwgc2xlbik7CisrCisr CSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCSAgICBwdXRj KCdcbicsc3Rkb3V0KTsKKysJICAgIERTQV9TSUdfZnJlZShzaWcpOworKwkgICAgRVZQX01EX0NU WF9jbGVhbnVwKCZtY3R4KTsKKysJICAgIH0KKysJfQorKwlpZiAoZHNhKQorKwkJRklQU19kc2Ff ZnJlZShkc2EpOworKyAgICB9CisrCisrdm9pZCBzaWd2ZXIoKQorKyAgICB7CisrICAgIERTQSAq ZHNhPU5VTEw7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07Cisr ICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7 CisrICAgIGludCBubW9kPTAsIG49MDsKKysgICAgRFNBX1NJRyBzZywgKnNpZyA9ICZzZzsKKysK KysgICAgc2lnLT5yID0gTlVMTDsKKysgICAgc2lnLT5zID0gTlVMTDsKKysKKysgICAgd2hpbGUo ZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9s aW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rk b3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkK KysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICBpZihkc2EpCisrCQlGSVBT X2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2E9RklQU19kc2FfbmV3KCk7CisrCSAgICB9CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBkc2EtPnA9aGV4MmJuKHZhbHVlKTsK KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIGRzYS0+cT1oZXgyYm4odmFs dWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgeworKwkgICAgZHNh LT5nPWhleDJibih2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9k KTsKKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAg IHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICBuPWhleDJiaW4o dmFsdWUsbXNnKTsKKysJICAgIHB2KCJNc2ciLG1zZyxuKTsKKysJICAgIH0KKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIlkiKSkKKysJICAgIGRzYS0+cHViX2tleT1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUiIpKQorKwkgICAgc2lnLT5yPWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTIikpCisrCSAgICB7CisrCSAgICBFVlBf TURfQ1RYIG1jdHg7CisrCSAgICBFVlBfUEtFWSBwazsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2ln YnVmWzYwXTsKKysJICAgIHVuc2lnbmVkIGludCBzbGVuOworKwkgICAgaW50IHI7CisrCSAgICBF VlBfTURfQ1RYX2luaXQoJm1jdHgpOworKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysJ ICAgIHBrLnBrZXkuZHNhID0gZHNhOworKwkgICAgc2lnLT5zPWhleDJibih2YWx1ZSk7CisrCQor KwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkgICAgcGJuKCJSIixzaWctPnIpOworKwkg ICAgcGJuKCJTIixzaWctPnMpOworKworKwkgICAgc2xlbiA9IEZJUFNfZHNhX3NpZ19lbmNvZGUo c2lnYnVmLCBzaWcpOworKwkgICAgRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCks IE5VTEwpOworKwkgICAgRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIHIg PSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZ2J1Ziwgc2xlbiwgJnBrKTsKKysJICAgIEVWUF9N RF9DVFhfY2xlYW51cCgmbWN0eCk7CisrCQorKwkgICAgcHJpbnRmKCJSZXN1bHQgPSAlY1xuIiwg ciA9PSAxID8gJ1AnIDogJ0YnKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQor Kwl9CisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgewor KyAgICBpZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFtwcmltZXxwcWd8 cHFndmVyfGtleXBhaXJ8c2lnZ2VufHNpZ3Zlcl1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7Cisr CX0KKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7 CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJwcmltZSIpKQorKwlw cmltZXMoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZyIpKQorKwlwcWcoKTsK KysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZ3ZlciIpKQorKwlwcWd2ZXIoKTsKKysg ICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXBhaXIiKSkKKysJa2V5cGFpcigpOworKyAg ICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5dmVyIikpCisrCWtleXZlcigpOworKyAgICBl bHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lnZ2VuIikpCisrCXNpZ2dlbigpOworKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwic2lndmVyIikpCisrCXNpZ3ZlcigpOworKyAgICBlbHNlCisr CXsKKysJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsK KysJZXhpdCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMKKy0tLSBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jLmZpcHMJMjAxMy0w Mi0xOSAxMjo0NzozMy43MzQxMTg3NzIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM0MTE4NzcyICsw MTAwCitAQCAtMCwwICsxLDU3MSBAQAorKy8qIGZpcHMvYWVzL2ZpcHNfZ2NtdGVzdC5jICovCisr LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisr ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKi8KKysKKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAg ICBwcmludGYoIk5vIEZJUFMgR0NNIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQor KyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9k c2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyB2 b2lkIGdjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCwgaW50IGVuY3J5cHQpCisrCXsKKysJY2hh ciBidWZbMjA0OF07CisrCWNoYXIgbGJ1ZlsyMDQ4XTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVl OworKwlpbnQga2V5bGVuID0gLTEsIGl2bGVuID0gLTEsIGFhZGxlbiA9IC0xLCB0YWdsZW4gPSAt MSwgcHRsZW4gPSAtMTsKKysJaW50IHJ2OworKwlsb25nIGw7CisrCXVuc2lnbmVkIGNoYXIgKmtl eSA9IE5VTEwsICppdiA9IE5VTEwsICphYWQgPSBOVUxMLCAqdGFnID0gTlVMTDsKKysJdW5zaWdu ZWQgY2hhciAqY3QgPSBOVUxMLCAqcHQgPSBOVUxMOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Cisr CWNvbnN0IEVWUF9DSVBIRVIgKmdjbSA9IE5VTEw7CisrCUZJUFNfY2lwaGVyX2N0eF9pbml0KCZj dHgpOworKworKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixpbikgIT0gTlVMTCkKKysJCXsK KysJCWZwdXRzKGJ1ZixvdXQpOworKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUs IGxidWYsIGJ1ZikpCisrCQkJY29udGludWU7CisrCQlpZighc3RyY21wKGtleXdvcmQsIltLZXls ZW4iKSkKKysJCQl7CisrCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKGtleWxlbiA9 PSAxMjgpCisrCQkJCWdjbSA9IEVWUF9hZXNfMTI4X2djbSgpOworKwkJCWVsc2UgaWYgKGtleWxl biA9PSAxOTIpCisrCQkJCWdjbSA9IEVWUF9hZXNfMTkyX2djbSgpOworKwkJCWVsc2UgaWYgKGtl eWxlbiA9PSAyNTYpCisrCQkJCWdjbSA9IEVWUF9hZXNfMjU2X2djbSgpOworKwkJCWVsc2UgCisr CQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJVbnN1cHBvcnRlZCBrZXlsZW4gJWRcbiIsCisr CQkJCQkJCWtleWxlbik7CisrCQkJCX0KKysJCQlrZXlsZW4gPj49IDM7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW0lWbGVuIikpCisrCQkJaXZsZW4gPSBhdG9pKHZhbHVl KSA+PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW0FBRGxlbiIpKQorKwkJCWFh ZGxlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJb VGFnbGVuIikpCisrCQkJdGFnbGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIltQVGxlbiIpKQorKwkJCXB0bGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsK KysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJCQl7CisrCQkJa2V5ID0gaGV4 MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0ga2V5bGVuKQorKwkJCQl7CisrCQkJCWZw cmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEp OworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIklWIikpCisrCQkJ eworKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gaXZsZW4pCisr CQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgSVYgbGVuZ3RoXG4iKTsK KysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJQVCIpKQorKwkJCXsKKysJCQlwdCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChs ICE9IHB0bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBU IGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiQ1QiKSkKKysJCQl7CisrCQkJY3QgPSBoZXgyYmluX20odmFsdWUsICZs KTsKKysJCQlpZiAobCAhPSBwdGxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklu Y29uc2lzdGVudCBDVCBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQor KwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkFBRCIpKQorKwkJCXsKKysJCQlhYWQgPSBoZXgy YmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBhYWRsZW4pCisrCQkJCXsKKysJCQkJZnBy aW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQUFEIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7 CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiVGFnIikpCisrCQkJ eworKwkJCXRhZyA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IHRhZ2xlbikK KysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBUYWcgbGVuZ3RoXG4i KTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWlmIChlbmNyeXB0ICYmIHB0ICYm IGFhZCAmJiAoaXYgfHwgZW5jcnlwdD09MSkpCisrCQkJeworKwkJCXRhZyA9IE9QRU5TU0xfbWFs bG9jKHRhZ2xlbik7CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGdjbSwgTlVMTCwgTlVMTCwg MSk7CisrCQkJLyogUmVsYXggRklQUyBjb25zdHJhaW50cyBmb3IgdGVzdGluZyAqLworKwkJCU1f RVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZM RU4sIGl2bGVuLCAwKTsKKysJCQlpZiAoZW5jcnlwdCA9PSAxKQorKwkJCQl7CisrCQkJCXN0YXRp YyB1bnNpZ25lZCBjaGFyIGl2X2ZpeGVkWzRdID0gezEsMiwzLDR9OworKwkJCQlpZiAoIWl2KQor KwkJCQkJaXYgPSBPUEVOU1NMX21hbGxvYyhpdmxlbik7CisrCQkJCUZJUFNfY2lwaGVyaW5pdCgm Y3R4LCBOVUxMLCBrZXksIE5VTEwsIDEpOworKwkJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4 LAorKwkJCQkJCUVWUF9DVFJMX0dDTV9TRVRfSVZfRklYRUQsCisrCQkJCQkJNCwgaXZfZml4ZWQp OworKwkJCQlpZiAoIUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsCisrCQkJCQlFVlBfQ1RSTF9H Q01fSVZfR0VOLCAwLCBpdikpCisrCQkJCQl7CisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIklWIGdl biBlcnJvclxuIik7CisrCQkJCQlleGl0KDEpOworKwkJCQkJfQorKwkJCQlPdXRwdXRWYWx1ZSgi SVYiLCBpdiwgaXZsZW4sIG91dCwgMCk7CisrCQkJCX0KKysJCQllbHNlCisrCQkJCUZJUFNfY2lw aGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIGl2LCAxKTsKKysKKysKKysJCQlpZiAoYWFkbGVuKQor KwkJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBhYWQsIGFhZGxlbik7CisrCQkJaWYgKHB0bGVu KQorKwkJCQl7CisrCQkJCWN0ID0gT1BFTlNTTF9tYWxsb2MocHRsZW4pOworKwkJCQlydiA9IEZJ UFNfY2lwaGVyKCZjdHgsIGN0LCBwdCwgcHRsZW4pOworKwkJCQl9CisrCQkJRklQU19jaXBoZXIo JmN0eCwgTlVMTCwgTlVMTCwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQ X0NUUkxfR0NNX0dFVF9UQUcsCisrCQkJCQkJCQl0YWdsZW4sIHRhZyk7CQorKwkJCU91dHB1dFZh bHVlKCJDVCIsIGN0LCBwdGxlbiwgb3V0LCAwKTsKKysJCQlPdXRwdXRWYWx1ZSgiVGFnIiwgdGFn LCB0YWdsZW4sIG91dCwgMCk7CisrCQkJaWYgKGl2KQorKwkJCQlPUEVOU1NMX2ZyZWUoaXYpOwor KwkJCWlmIChhYWQpCisrCQkJCU9QRU5TU0xfZnJlZShhYWQpOworKwkJCWlmIChjdCkKKysJCQkJ T1BFTlNTTF9mcmVlKGN0KTsKKysJCQlpZiAocHQpCisrCQkJCU9QRU5TU0xfZnJlZShwdCk7Cisr CQkJaWYgKGtleSkKKysJCQkJT1BFTlNTTF9mcmVlKGtleSk7CisrCQkJaWYgKHRhZykKKysJCQkJ T1BFTlNTTF9mcmVlKHRhZyk7CisrCQkJaXYgPSBhYWQgPSBjdCA9IHB0ID0ga2V5ID0gdGFnID0g TlVMTDsKKysJCQl9CQorKwkJaWYgKCFlbmNyeXB0ICYmIHRhZykKKysJCQl7CisrCQkJRklQU19j aXBoZXJpbml0KCZjdHgsIGdjbSwgTlVMTCwgTlVMTCwgMCk7CisrCQkJLyogUmVsYXggRklQUyBj b25zdHJhaW50cyBmb3IgdGVzdGluZyAqLworKwkJCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdz KCZjdHgsIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworKwkJCUZJUFNfY2lwaGVyX2N0 eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sIGl2bGVuLCAwKTsKKysJCQlGSVBT X2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4 X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIHRhZ2xlbiwgdGFnKTsKKysJCQlpZiAo YWFkbGVuKQorKwkJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBhYWQsIGFhZGxlbik7CisrCQkJ aWYgKHB0bGVuKQorKwkJCQl7CisrCQkJCXB0ID0gT1BFTlNTTF9tYWxsb2MocHRsZW4pOworKwkJ CQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIHB0LCBjdCwgcHRsZW4pOworKwkJCQl9CisrCQkJcnYg PSBGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKTsKKysJCQlpZiAocnYgPCAwKQorKwkJ CQlmcHJpbnRmKG91dCwgIkZBSUwiIFJFU1BfRU9MKTsKKysJCQllbHNlCisrCQkJCU91dHB1dFZh bHVlKCJQVCIsIHB0LCBwdGxlbiwgb3V0LCAwKTsKKysJCQlpZiAoaXYpCisrCQkJCU9QRU5TU0xf ZnJlZShpdik7CisrCQkJaWYgKGFhZCkKKysJCQkJT1BFTlNTTF9mcmVlKGFhZCk7CisrCQkJaWYg KGN0KQorKwkJCQlPUEVOU1NMX2ZyZWUoY3QpOworKwkJCWlmIChwdCkKKysJCQkJT1BFTlNTTF9m cmVlKHB0KTsKKysJCQlpZiAoa2V5KQorKwkJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKKysJCQlpZiAo dGFnKQorKwkJCQlPUEVOU1NMX2ZyZWUodGFnKTsKKysJCQlpdiA9IGFhZCA9IGN0ID0gcHQgPSBr ZXkgPSB0YWcgPSBOVUxMOworKwkJCX0KKysJCX0KKysJRklQU19jaXBoZXJfY3R4X2NsZWFudXAo JmN0eCk7CQorKwl9CisrCisrc3RhdGljIHZvaWQgeHRzdGVzdChGSUxFICppbiwgRklMRSAqb3V0 KQorKwl7CisrCWNoYXIgYnVmWzIwNDgwMF07CisrCWNoYXIgbGJ1ZlsyMDQ4MDBdOworKwljaGFy ICprZXl3b3JkLCAqdmFsdWU7CisrCWludCBpbmxlbiA9IDA7CisrCWludCBlbmNyeXB0ID0gMDsK KysJbG9uZyBsOworKwl1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMLCAqaXYgPSBOVUxMOworKwl1 bnNpZ25lZCBjaGFyICppbmJ1ZiA9IE5VTEwsICpvdXRidWYgPSBOVUxMOworKwlFVlBfQ0lQSEVS X0NUWCBjdHg7CisrCWNvbnN0IEVWUF9DSVBIRVIgKnh0cyA9IE5VTEw7CisrCUZJUFNfY2lwaGVy X2N0eF9pbml0KCZjdHgpOworKworKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixpbikgIT0g TlVMTCkKKysJCXsKKysJCWZwdXRzKGJ1ZixvdXQpOworKwkJaWYgKGJ1ZlswXSA9PSAnWycgJiYg c3RybGVuKGJ1ZikgPj0gOSkKKysJCQl7CisrCQkJaWYoIXN0cm5jbXAoYnVmLCJbRU5DUllQVF0i LCA5KSkKKysJCQkJZW5jcnlwdCA9IDE7CisrCQkJZWxzZSBpZighc3RybmNtcChidWYsIltERUNS WVBUXSIsIDkpKQorKwkJCQllbmNyeXB0ID0gMDsKKysJCQl9CisrCQlpZiAgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWtleSA9IGhleDJiaW5fbSh2YWx1 ZSwgJmwpOworKwkJCWlmIChsID09IDMyKQorKwkJCQl4dHMgPSBFVlBfYWVzXzEyOF94dHMoKTsK KysJCQllbHNlIGlmIChsID09IDY0KQorKwkJCQl4dHMgPSBFVlBfYWVzXzI1Nl94dHMoKTsKKysJ CQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxl bmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiaSIpKQorKwkJCXsKKysJCQlpdiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwor KwkJCWlmIChsICE9IDE2KQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0 ZW50IGkgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2Ug aWYoZW5jcnlwdCAmJiAhc3RyY21wKGtleXdvcmQsIlBUIikpCisrCQkJeworKwkJCWluYnVmID0g aGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaW5sZW4gPSBsOworKwkJCX0KKysJCWVsc2UgaWYo IWVuY3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJDVCIpKQorKwkJCXsKKysJCQlpbmJ1ZiA9IGhl eDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlubGVuID0gbDsKKysJCQl9CisrCQlpZiAoaW5idWYp CisrCQkJeworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCB4dHMsIGtleSwgaXYsIGVuY3J5cHQp OworKwkJCW91dGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKGlubGVuKTsKKysJCQlGSVBTX2NpcGhlcigm Y3R4LCBvdXRidWYsIGluYnVmLCBpbmxlbik7CisrCQkJT3V0cHV0VmFsdWUoZW5jcnlwdCA/ICJD VCI6IlBUIiwgb3V0YnVmLCBpbmxlbiwgb3V0LCAwKTsKKysJCQlPUEVOU1NMX2ZyZWUoaW5idWYp OworKwkJCU9QRU5TU0xfZnJlZShvdXRidWYpOworKwkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJ CU9QRU5TU0xfZnJlZShpdik7CisrCQkJaXYgPSBrZXkgPSBpbmJ1ZiA9IG91dGJ1ZiA9IE5VTEw7 CisrCQkJfQkKKysJCX0KKysJRklQU19jaXBoZXJfY3R4X2NsZWFudXAoJmN0eCk7CQorKwl9Cisr Cisrc3RhdGljIHZvaWQgY2NtdGVzdChGSUxFICppbiwgRklMRSAqb3V0KQorKwl7CisrCWNoYXIg YnVmWzIwMDA0OF07CisrCWNoYXIgbGJ1ZlsyMDAwNDhdOworKwljaGFyICprZXl3b3JkLCAqdmFs dWU7CisrCWxvbmcgbDsKKysJdW5zaWduZWQgY2hhciAqS2V5ID0gTlVMTCwgKk5vbmNlID0gTlVM TDsKKysJdW5zaWduZWQgY2hhciAqQWRhdGEgPSBOVUxMLCAqUGF5bG9hZCA9IE5VTEw7CisrCXVu c2lnbmVkIGNoYXIgKkNUID0gTlVMTDsKKysJaW50IFBsZW4gPSAtMSwgTmxlbiA9IC0xLCBUbGVu ID0gLTEsIEFsZW4gPSAtMTsKKysJaW50IGRlY3IgPSAwOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7 CisrCWNvbnN0IEVWUF9DSVBIRVIgKmNjbSA9IE5VTEw7CisrCUZJUFNfY2lwaGVyX2N0eF9pbml0 KCZjdHgpOworKworKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixpbikgIT0gTlVMTCkKKysJ CXsKKysJCWNoYXIgKnA7CisrCQlmcHV0cyhidWYsb3V0KTsKKysJCXJlZG86CisrCQlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsKKysK KysJCS8qIElmIHN1cnJvdW5kZWQgYnkgc3F1YXJlIGJyYWNrZXRzIHphcCB0aGVtICovCisrCQlp ZiAoa2V5d29yZFswXSA9PSAnWycpCisrCQkJeworKwkJCWtleXdvcmQrKzsKKysJCQlwID0gc3Ry Y2hyKHZhbHVlLCAnXScpOworKwkJCWlmIChwKQorKwkJCQkqcCA9IDA7CisrCQkJfQorKwkJLyog U2VlIGlmIHdlIGhhdmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwYXJhbWV0ZXJzCisrCQkg KiBpZiBzbyBjb3B5IHJlc3Qgb2YgbGluZSBiYWNrIHRvIGJ1ZmZlciBhbmQgcmVkbyBsYXRlci4K KysJCSAqLworKwkJcCA9IHN0cmNocih2YWx1ZSwgJywnKTsKKysJCWlmIChwKQorKwkJCXsKKysJ CQkqcCA9IDA7CisrCQkJc3RyY3B5KGJ1ZiwgcCArIDEpOworKwkJCXN0cmNhdChidWYsICJcbiIp OworKwkJCWRlY3IgPSAxOworKwkJCX0KKysJCWlmICghc3RyY21wKGtleXdvcmQsIlBsZW4iKSkK KysJCQlQbGVuID0gYXRvaSh2YWx1ZSk7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIk5s ZW4iKSkKKysJCQlObGVuID0gYXRvaSh2YWx1ZSk7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsIlRsZW4iKSkKKysJCQlUbGVuID0gYXRvaSh2YWx1ZSk7CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsIkFsZW4iKSkKKysJCQlBbGVuID0gYXRvaSh2YWx1ZSk7CisrCQlpZiAocCkKKysJ CQlnb3RvIHJlZG87CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJCQl7CisrCQkJ aWYgKEtleSkKKysJCQkJT1BFTlNTTF9mcmVlKEtleSk7CisrCQkJS2V5ID0gaGV4MmJpbl9tKHZh bHVlLCAmbCk7CisrCQkJaWYgKGwgPT0gMTYpCisrCQkJCWNjbSA9IEVWUF9hZXNfMTI4X2NjbSgp OworKwkJCWVsc2UgaWYgKGwgPT0gMjQpCisrCQkJCWNjbSA9IEVWUF9hZXNfMTkyX2NjbSgpOwor KwkJCWVsc2UgaWYgKGwgPT0gMzIpCisrCQkJCWNjbSA9IEVWUF9hZXNfMjU2X2NjbSgpOworKwkJ CWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVu Z3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwiTm9uY2UiKSkKKysJCQl7CisrCQkJaWYgKE5vbmNlKQorKwkJCQlPUEVOU1NM X2ZyZWUoTm9uY2UpOworKwkJCU5vbmNlID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYg KGwgIT0gTmxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBu b25jZSBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCJQYXlsb2FkIikgJiYgIWRlY3IpCisrCQkJeworKwkJCVBheWxv YWQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAoUGxlbiAmJiBsICE9IFBsZW4pCisr CQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgUGF5bG9hZCBsZW5ndGhc biIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCJBZGF0YSIpKQorKwkJCXsKKysJCQlpZiAoQWRhdGEpCisrCQkJCU9QRU5TU0xfZnJl ZShBZGF0YSk7CisrCQkJQWRhdGEgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAoQWxl biAmJiBsICE9IEFsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3Rl bnQgUGF5bG9hZCBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJDVCIpICYmIGRlY3IpCisrCQkJeworKwkJCUNUID0g aGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gKFBsZW4gKyBUbGVuKSkKKysJCQkJ eworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBDVCBsZW5ndGhcbiIpOworKwkJ CQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJaWYgKFBheWxvYWQpCisrCQkJeworKwkJCUZJ UFNfY2lwaGVyaW5pdCgmY3R4LCBjY20sIE5VTEwsIE5VTEwsIDEpOworKwkJCUZJUFNfY2lwaGVy X2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sIE5sZW4sIDApOworKwkJCUZJ UFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLCBUbGVuLCAwKTsK KysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5LCBOb25jZSwgMSk7CisrCisrCQkJ RklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0 eCwgTlVMTCwgQWRhdGEsIEFsZW4pOworKwkJCUNUID0gT1BFTlNTTF9tYWxsb2MoUGxlbiArIFRs ZW4pOworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIENULCBQYXlsb2FkLCBQbGVuKTsKKysJCQlGSVBT X2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fR0VUX1RBRywgVGxlbiwKKysJCQkJ CQlDVCArIFBsZW4pOworKwkJCU91dHB1dFZhbHVlKCJDVCIsIENULCBQbGVuICsgVGxlbiwgb3V0 LCAwKTsKKysJCQlPUEVOU1NMX2ZyZWUoQ1QpOworKwkJCU9QRU5TU0xfZnJlZShQYXlsb2FkKTsK KysJCQlDVCA9IFBheWxvYWQgPSBOVUxMOworKwkJCX0KKysJCWlmIChDVCkKKysJCQl7CisrCQkJ aW50IHJ2OworKwkJCWludCBsZW4gPSBQbGVuID09IDAgPyAxOiBQbGVuOworKwkJCUZJUFNfY2lw aGVyaW5pdCgmY3R4LCBjY20sIE5VTEwsIE5VTEwsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9j dHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sIE5sZW4sIDApOworKwkJCUZJUFNfY2lw aGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLAorKwkJCQkJCVRsZW4sIENU ICsgUGxlbik7CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwgTm9uY2UsIDAp OworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOworKwkJCUZJUFNfY2lw aGVyKCZjdHgsIE5VTEwsIEFkYXRhLCBBbGVuKTsKKysJCQlQYXlsb2FkID0gT1BFTlNTTF9tYWxs b2MobGVuKTsKKysJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIFBheWxvYWQsIENULCBQbGVuKTsK KysJCQlpZiAocnYgPj0gMCkKKysJCQkJeworKwkJCQlpZiAocnYgPT0gMCkKKysJCQkJCVBheWxv YWRbMF0gPSAwOworKwkJCQlmcHV0cygiUmVzdWx0ID0gUGFzcyIgUkVTUF9FT0wsIG91dCk7Cisr CQkJCU91dHB1dFZhbHVlKCJQYXlsb2FkIiwgUGF5bG9hZCwgbGVuLCBvdXQsIDApOworKwkJCQl9 CisrCQkJZWxzZQorKwkJCQlmcHV0cygiUmVzdWx0ID0gRmFpbCIgUkVTUF9FT0wsIG91dCk7Cisr CQkJT1BFTlNTTF9mcmVlKENUKTsKKysJCQlPUEVOU1NMX2ZyZWUoUGF5bG9hZCk7CisrCQkJQ1Qg PSBQYXlsb2FkID0gTlVMTDsKKysJCQl9CisrCQl9CisrCWlmIChLZXkpCisrCQlPUEVOU1NMX2Zy ZWUoS2V5KTsKKysJaWYgKE5vbmNlKQorKwkJT1BFTlNTTF9mcmVlKE5vbmNlKTsKKysJaWYgKEFk YXRhKQorKwkJT1BFTlNTTF9mcmVlKEFkYXRhKTsKKysJRklQU19jaXBoZXJfY3R4X2NsZWFudXAo JmN0eCk7CisrCX0KKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2djbXRlc3RfbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrI2Vsc2UKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCisrI2VuZGlmCisrCXsKKysJaW50IGVuY3J5cHQ7CisrCWludCB4dHMgPSAwLCBj Y20gPSAwOworKwlGSUxFICppbiwgKm91dDsKKysJaWYgKGFyZ2MgPT0gNCkKKysJCXsKKysJCWlu ID0gZm9wZW4oYXJndlsyXSwgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYo c3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJ CX0KKysJCW91dCA9IGZvcGVuKGFyZ3ZbM10sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7Cisr CQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQll eGl0KDEpOworKwkJCX0KKysJCX0KKysJZWxzZSBpZiAoYXJnYyA9PSAyKQorKwkJeworKwkJaW4g PSBzdGRpbjsKKysJCW91dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsIiVzIFstZW5jcnlwdHwtZGVjcnlwdF1cbiIsYXJndlswXSk7CisrCQlleGl0KDEp OworKwkJfQorKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOworKwlpZighc3RyY21wKGFyZ3ZbMV0sIi1l bmNyeXB0IikpCisrCQllbmNyeXB0ID0gMTsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1l bmNyeXB0SVZleHQiKSkKKysJCWVuY3J5cHQgPSAyOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsx XSwiLWRlY3J5cHQiKSkKKysJCWVuY3J5cHQgPSAwOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsx XSwiLWNjbSIpKQorKwkJY2NtID0gMTsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi14dHMi KSkKKysJCXh0cyA9IDE7CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCJEb24ndCBr bm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7CisrCQlleGl0KDEpOworKwkJfQorKworKwlpZiAo Y2NtKQorKwkJY2NtdGVzdChpbiwgb3V0KTsKKysJZWxzZSBpZiAoeHRzKQorKwkJeHRzdGVzdChp biwgb3V0KTsKKysJZWxzZQorKwkJZ2NtdGVzdChpbiwgb3V0LCBlbmNyeXB0KTsKKysKKysJaWYg KGFyZ2MgPT0gNCkKKysJCXsKKysJCWZjbG9zZShpbik7CisrCQlmY2xvc2Uob3V0KTsKKysJCX0K KysKKysJcmV0dXJuIDA7CisrfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcm5ndnMuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2Nh dnMvZmlwc19ybmd2cy5jLmZpcHMJMjAxMy0wMi0xOSAxMjo0NzozMy43MzQxMTg3NzIgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwkyMDEzLTAy LTE5IDEyOjQ3OjMzLjczNDExODc3MiArMDEwMAorQEAgLTAsMCArMSwyMzAgQEAKKysvKgorKyAq IENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1DVCB0ZXN0dmVj dG9yIGZpbGVzCisrICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1Y3QuCisrICoK KysgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEgX3ZlcnlfIHNw ZWNpZmljIGZvcm1hdAorKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1bWVudCAiVGhl IFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCisrICogVmFsaWRhdGlvbiBTeXN0ZW0gKFJOR1ZTKSIs IE1heSAyNSwgMjAwNC4KKysgKgorKyAqLworKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5vIEZJUFMg Uk5HIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4gMDsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wveDUwOXYzLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlw ZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3ZvaWQgdnN0KCkKKysgICAgewor KyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICp2ID0g TlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFy IHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07Cisr ICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgbG9uZyBpLCBrZXlsZW47CisrCisrICAg IGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAh PSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZighc3RybmNtcChidWYsIltB RVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAxNjsKKysJZWxzZSBpZighc3RybmNtcChi dWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAyNDsKKysJZWxzZSBpZighc3Ry bmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAzMjsKKysJaWYgKCFw YXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQljb250aW51ZTsKKysJ aWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJICAgIHsKKysJICAgIGtleT1oZXgyYmluX20o dmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5bGVuKQorKwkJeworKwkJZnByaW50ZihzdGRl cnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7CisrCQly ZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQor KwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2 KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7CisrCQly ZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCisr CSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7CisrCQlyZXR1 cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8fCAhZHQpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAg IEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysJICAgIEZJUFNfeDkzMV9zZWVkKHYs MTYpOworKwkgICAgRklQU194OTMxX3NldF9kdChkdCk7CisrCSAgICBpZiAoRklQU194OTMxX2J5 dGVzKHJldCwxNikgPD0gMCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGlu ZyBQUk5HIHZhbHVlXG4iKTsKKysJICAgICAgICByZXR1cm47CisrCSAgICAgICAgfQorKworKwkg ICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKKysJICAgIGtleSA9 IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQpOworKwkgICAgZHQgPSBOVUxMOworKwkgICAg T1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgfQor KworK3ZvaWQgbWN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwor KyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqZHQgPSBO VUxMOworKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEwMjRdOwor KyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAg bG9uZyBpLCBrZXlsZW47CisrICAgIGludCBqOworKworKyAgICBrZXlsZW4gPSAwOworKworKyAg ICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0 cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQor KwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwg MTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1L ZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwi S2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlm IChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVu Z3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOworKwkJfQorKwkgICAg fQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsKKysJICAgIGR0PWhl eDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwkgICAg fQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgeworKwkgICAgdj1oZXgy YmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAg aWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBv ciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3g5MzFfc2V0X2tleShr ZXksIGtleWxlbik7CisrCSAgICBGSVBTX3g5MzFfc2VlZCh2LDE2KTsKKysJICAgIGZvciAoaSA9 IDA7IGkgPCAxMDAwMDsgaSsrKQorKwkJeworKwkJICAgIEZJUFNfeDkzMV9zZXRfZHQoZHQpOwor KwkJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2KSA8PSAwKQorKwkJCXsKKysJCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7CisrCQkgICAgICAgIHJl dHVybjsKKysJCSAgICAgICAgfQorKwkJICAgIC8qIEluY3JlbWVudCBEVCAqLworKwkJICAgIGZv ciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCQl7CisrCQkJZHRbal0rKzsKKysJCQlpZiAoZHRb al0pCisrCQkJCWJyZWFrOworKwkJCX0KKysJCX0KKysKKysJICAgIHB2KCJSIixyZXQsMTYpOwor KwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOworKwkgICAgT1BFTlNT TF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZSh2KTsKKysJ ICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJn YyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBpZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50 ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKyAg ICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhp dCgxKTsKKysJfQorKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKKysgICAgaWYgKCFGSVBTX3g5MzFf dGVzdF9tb2RlKCkpCisrCXsKKysJZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0aW5nIFBSTkcg dGVzdCBtb2RlXG4iKTsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7CisrCX0KKysg ICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKKysJbWN0KCk7CisrICAgIGVsc2UgaWYoIXN0 cmNtcChhcmd2WzFdLCJ2c3QiKSkKKysJdnN0KCk7CisrICAgIGVsc2UKKysJeworKwlmcHJpbnRm KHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwlleGl0KDEpOwor Kwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMz LjczNDExODc3MiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlw c19yc2FndGVzdC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM0MTE4NzcyICswMTAwCitAQCAtMCww ICsxLDM5MCBAQAorKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3Rl cGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHBy b2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw NSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq CisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRl biBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0 eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK Kyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigw KTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQgcnNh X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkxKEZJ TEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05VTSAq WHAsCisrCQlCSUdOVU0gKmUpOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQs IFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKTsKKysK KytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxM LCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0 KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4o YXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwll bHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJewor KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdv dG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChy ZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikp CisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9z ZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9N QVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisr CXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwlCSUdOVU0gKlhwMSA9IE5VTEwsICpYcDIg PSBOVUxMLCAqWHAgPSBOVUxMOworKwlCSUdOVU0gKlhxMSA9IE5VTEwsICpYcTIgPSBOVUxMLCAq WHEgPSBOVUxMOworKwlCSUdOVU0gKmUgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxu dW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVM RU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Cisr CisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGls ZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxu dW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1 ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0g c2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBv ciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisrCQlp ZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBv dXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlx ID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsK KysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZh bHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZh bHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJ cCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8 fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICgh c3RyY21wKGtleXdvcmQsICJ4cDEiKSkKKysJCQl7CisrCQkJaWYgKFhwMSB8fCAhZG9faGV4MmJu KCZYcDEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQorKwkJCXsKKysJCQlpZiAoWHAyIHx8ICFkb19oZXgy Ym4oJlhwMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKKysJCQl7CisrCQkJaWYgKFhwIHx8ICFkb19oZXgy Ym4oJlhwLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKKysJCQl7CisrCQkJaWYgKFhxMSB8fCAhZG9faGV4 MmJuKCZYcTEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQorKwkJCXsKKysJCQlpZiAoWHEyIHx8ICFkb19o ZXgyYm4oJlhxMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKKysJCQl7CisrCQkJaWYgKFhxIHx8ICFkb19o ZXgyYm4oJlhxLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCisrCQkJeworKwkJCWlmIChlIHx8ICFkb19oZXgy Ym4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInAxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJwMiIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAicCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAicTEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEy IikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxIikpCisr CQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJuIikpCisrCQkJY29u dGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJkIikpCisrCQkJY29udGludWU7 CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBv dXQpOworKworKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkKKysJCQl7CisrCQkJcnNhID0g RklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYg KCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAsIGUpKQorKwkJCQlnb3RvIGVy cm9yOworKwkJCUJOX2ZyZWUoWHAxKTsKKysJCQlYcDEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHAy KTsKKysJCQlYcDIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHApOworKwkJCVhwID0gTlVMTDsKKysJ CQlCTl9mcmVlKGUpOworKwkJCWUgPSBOVUxMOworKwkJCX0KKysKKysJCWlmIChyc2EgJiYgWHEx ICYmIFhxMiAmJiBYcSkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkyKG91dCwgcnNhLCBY cTEsIFhxMiwgWHEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHExKTsKKysJCQlY cTEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEyKTsKKysJCQlYcTIgPSBOVUxMOworKwkJCUJOX2Zy ZWUoWHEpOworKwkJCVhxID0gTlVMTDsKKysJCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJcnNh ID0gTlVMTDsKKysJCQl9CisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlp ZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikK KysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysKKysJaWYgKFhwMSkKKysJCUJOX2ZyZWUoWHAx KTsKKysJaWYgKFhwMikKKysJCUJOX2ZyZWUoWHAyKTsKKysJaWYgKFhwKQorKwkJQk5fZnJlZShY cCk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVl KFhxMSk7CisrCWlmIChYcTIpCisrCQlCTl9mcmVlKFhxMik7CisrCWlmIChYcSkKKysJCUJOX2Zy ZWUoWHEpOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCWlmIChyc2EpCisrCQlGSVBTX3Jz YV9mcmVlKHJzYSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwg bG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmlu dGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwg QklHTlVNICpYcCwKKysJCUJJR05VTSAqZSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVN ICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisrCXAxID0gQk5fbmV3KCk7CisrCXAyID0gQk5fbmV3 KCk7CisrCWlmICghcDEgfHwgIXAyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkz MV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhwMSwgWHAyLCBYcCwKKysJCQkJ CQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2Ju X3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDIi LCBwMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJzYS0+cCk7CisrCisrCXJldCA9 IDE7CisrCisrCWVycm9yOgorKwlpZiAocDEpCisrCQlCTl9mcmVlKHAxKTsKKysJaWYgKHAyKQor KwkJQk5fZnJlZShwMik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IHJz YV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0g KlhxMiwgQklHTlVNICpYcSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpxMSA9IE5V TEwsICpxMiA9IE5VTEw7CisrCXExID0gQk5fbmV3KCk7CisrCXEyID0gQk5fbmV3KCk7CisrCWlm ICghcTEgfHwgIXEyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVf ZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCQkJWHEx LCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50 X25hbWUob3V0LCAicTEiLCBxMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTIiLCBxMik7 CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7CisrCWRvX2JuX3ByaW50X25h bWUob3V0LCAibiIsIHJzYS0+bik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAiZCIsIHJzYS0+ ZCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocTEpCisrCQlCTl9mcmVlKHEx KTsKKysJaWYgKHEyKQorKwkJQk5fZnJlZShxMik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysK KysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19y c2FzdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0 ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3Qu Yy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM0MTE4NzcyICswMTAwCisrKysgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMJMjAxMy0wMi0xOSAxMjo0Nzoz My43MzQxMTg3NzIgKzAxMDAKK0BAIC0wLDAgKzEsMzcwIEBACisrLyogZmlwc19yc2FzdGVzdC5j ICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9y ZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgor KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdA T3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAq ICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up CisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dy YXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQu Y29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAq IEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0 ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9y dFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlw c191dGwuaCIKKysKKytzdGF0aWMgaW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBp bnQgU2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJz YSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xl biwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysJ eworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMSwgU2Fs dGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50 X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICgoYXJnYyA+IDIpICYmICFz dHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gYXRvaShhcmd2 WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJG QVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJ YXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQorKwllbHNlIGlmICgoYXJnYyA+IDEpICYm ICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gLTI7CisrCQlh cmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0 ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdj IDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwg InciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5w dXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlm ICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6 YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghcnNhX3N0ZXN0 KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FT VEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCWVs c2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50X2Vy cm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7Cisr CWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVy biByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKKysK KytpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQorKwl7Cisr CWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFs dWU7CisrCVJTQSAqcnNhID0gTlVMTDsKKysJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKKysJ dW5zaWduZWQgY2hhciAqTXNnID0gTlVMTDsKKysJbG9uZyBNc2dsZW4gPSAtMTsKKysJaW50IGtl eWxlbiA9IC0xLCBjdXJyZW50X2tleWxlbiA9IC0xOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxu dW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVM RU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Cisr CisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGls ZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxu dW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1 ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0g c2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBq dXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBv dXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlx ID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsK KysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZh bHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZh bHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJ cCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8 fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCS8qIExv b2sgZm9yIFttb2QgPSBYWFhdIGZvciBrZXkgbGVuZ3RoICovCisrCisrCQlpZiAoIXN0cmNtcChr ZXl3b3JkLCAiW21vZCIpKQorKwkJCXsKKysJCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0g MTsKKysJCQlpZiAoKnAgIT0gJ10nKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCSpwID0g MDsKKysJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoa2V5bGVuIDwgMCkKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJT SEFBbGciKSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCisrCQkJCWRn c3QgPSBFVlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkK KysJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBMjU2IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOworKwkJCWVsc2Ug aWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsK KysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkiRkFUQUw6IHVu c3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJCQl2YWx1ZSk7CisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJ TXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJ CS8qIElmIGtleSBsZW5ndGggaGFzIGNoYW5nZWQsIGdlbmVyYXRlIGFuZCBvdXRwdXQgcHVibGlj CisrCQkgKiBrZXkgY29tcG9uZW50cyBvZiBuZXcgUlNBIHByaXZhdGUga2V5LgorKwkJICovCisr CisrCQlpZiAoa2V5bGVuICE9IGN1cnJlbnRfa2V5bGVuKQorKwkJCXsKKysJCQlCSUdOVU0gKmJu X2U7CisrCQkJaWYgKHJzYSkKKysJCQkJRklQU19yc2FfZnJlZShyc2EpOworKwkJCXJzYSA9IEZJ UFNfcnNhX25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWJuX2Ug PSBCTl9uZXcoKTsKKysJCQlpZiAoIWJuX2UgfHwgIUJOX3NldF93b3JkKGJuX2UsIDB4MTAwMSkp CisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYgKCFSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgocnNh LCBrZXlsZW4sIGJuX2UsIE5VTEwpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoYm5f ZSk7CisrCQkJZnB1dHMoIm4gPSAiLCBvdXQpOworKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5u KTsKKysJCQlmcHV0cygiXG5lID0gIiwgb3V0KTsKKysJCQlkb19ibl9wcmludChvdXQsIHJzYS0+ ZSk7CisrCQkJZnB1dHMoIlxuIiwgb3V0KTsKKysJCQljdXJyZW50X2tleWxlbiA9IGtleWxlbjsK KysJCQl9CisrCisrCQlpZiAoTXNnICYmIGRnc3QpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50 c2lnKG91dCwgcnNhLCBkZ3N0LCBNc2csIE1zZ2xlbiwKKysJCQkJCQkJCVNhbHRsZW4pKQorKwkJ CQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7Cisr CQkJfQorKworKwkJfQorKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5l YnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVO U1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJzYSk7Cisr CisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdv dG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQs IFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxv bmcgTXNnbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQg Y2hhciAqc2lnYnVmID0gTlVMTDsKKysJaW50IGksIHNpZ2xlbjsKKysJLyogRVZQX1BLRVkgc3Ry dWN0dXJlICovCisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RYIGN0eDsKKysJcGsudHlwZSA9 IEVWUF9QS0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2E7CisrCisrCXNpZ2xlbiA9IFJTQV9z aXplKHJzYSk7CisrCXNpZ2J1ZiA9IE9QRU5TU0xfbWFsbG9jKHNpZ2xlbik7CisrCWlmICghc2ln YnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlp ZiAoU2FsdGxlbiA+PSAwKQorKwkJeworKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAor KwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJCX0KKysJ ZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwg RVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKKysJaWYgKCFFVlBfU2lnbkluaXRfZXgoJmN0eCwg ZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduVXBkYXRlKCZjdHgs IE1zZywgTXNnbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmY3R4 LCBzaWdidWYsICh1bnNpZ25lZCBpbnQgKikmc2lnbGVuLCAmcGspKQorKwkJZ290byBlcnJvcjsK KysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlmcHV0cygiUyA9ICIsIG91dCk7 CisrCisrCWZvciAoaSA9IDA7IGkgPCBzaWdsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAy WCIsIHNpZ2J1ZltpXSk7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCXJldCA9IDE7Cisr CisrCWVycm9yOgorKworKwlyZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCistLS0gb3BlbnNzbC0xLjAu MWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3 OjMzLjczNTExODc5MiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2NhdnMv Zmlwc19yc2F2dGVzdC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM1MTE4NzkyICswMTAwCitAQCAt MCwwICsxLDM3NyBAQAorKy8qIGZpcHNfcnNhdnRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAq IHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgor KyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4g YnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlw ZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysKKysjaWZu ZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisr eworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7 CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisraW50IHJzYV90 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKKytzdGF0aWMgaW50IHJzYV9w cmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKKysJCWNvbnN0IEVW UF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCisrCQl1bnNp Z25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKKysKKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsK KysKKysJaW50IHJldCA9IDE7CisrCWludCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFGSVBTX21v ZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkK KysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4gPCAwKQor KwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4i KTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9IDI7Cisr CQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkK KysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJCX0KKysK KysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4o YXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwll bHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJewor KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKKysJCXsKKysJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4i KTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6Cisr CisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAh PSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkK KysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBS U0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklM RSAqaW4sIGludCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAs ICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5V TEw7CisrCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqTXNn ID0gTlVMTCwgKlMgPSBOVUxMOworKwlsb25nIE1zZ2xlbiwgU2xlbjsKKysJaW50IHJldCA9IDA7 CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVT VF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJ TkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsK KysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisr CQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29y ZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBM b29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8q IElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29w eSAqLworKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJCWlmIChmcHV0cyhv bGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJ fQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisr CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisr CQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVl KSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpw ID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7Cisr CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJi bigmbix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmZSx2YWx1 ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiU0hBQWxnIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIp KQorKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBMjI0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOworKwkJCWVsc2Ug aWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsK KysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRnc3QgPSBFVlBf c2hhNTEyKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJ IkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJCQkJdmFsdWUp OworKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0g JzAnOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJaWYgKCFNc2cp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiUyIpKQorKwkJCXsKKysJCQlpZiAoUykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJ CQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJUyA9 IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOworKwkJCWlmICghUykKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQiKSkKKysJ CQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMo b2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAobiAmJiBlICYmIE1zZyAmJiBTICYmIGRnc3QpCisr CQkJeworKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdzdCwKKysJCQkJCU1zZywg TXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NM X2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xfZnJlZShTKTsKKysJCQlT ID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9y OgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAo bGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKG4pCisrCQlCTl9mcmVl KG4pOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBh cnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nl c3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytz dGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05VTSAq ZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBN c2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKQorKwl7 CisrCWludCByZXQgPSAwLCByOworKwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9QS0VZIHN0cnVjdHVy ZXMgKi8KKysJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKKysJRVZQX1BLRVkgcGs7CisrCUVWUF9N RF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworKwlyc2FfcHVia2V5ID0g RklQU19yc2FfbmV3KCk7CisrCWlmICghcnNhX3B1YmtleSkKKysJCWdvdG8gZXJyb3I7CisrCXJz YV9wdWJrZXktPm4gPSBCTl9kdXAobik7CisrCXJzYV9wdWJrZXktPmUgPSBCTl9kdXAoZSk7Cisr CWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKKysJCWdvdG8gZXJyb3I7Cisr CXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhX3B1YmtleTsKKysK KysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoU2FsdGxlbiA+PSAwKQorKwkJewor KwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9NRF9DVFhfRkxBR19QQURf UFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikK KysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMx KTsKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJCWdvdG8g ZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCisrCQln b3RvIGVycm9yOworKworKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMsIFNsZW4sICZwayk7 CisrCisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYgKHIgPCAwKQorKwkJ Z290byBlcnJvcjsKKysJRVJSX2NsZWFyX2Vycm9yKCk7CisrCisrCWlmIChyID09IDApCisrCQlm cHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKKysJZWxzZQorKwkJZnB1dHMoIlJlc3VsdCA9IFBc biIsIG91dCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocnNhX3B1YmtleSkK KysJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7CisrCWlmIChidWYpCisrCQlPUEVOU1NMX2Zy ZWUoYnVmKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJMjAxMy0wMi0xOSAxMjo0NzozMy43 MzUxMTg3OTIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf c2hhdGVzdC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM1MTE4NzkyICswMTAwCitAQCAtMCwwICsx LDM4OCBAQAorKy8qIGZpcHNfc2hhdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVu IE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVj dCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor KyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhp cyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmlj IFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgor KyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysg ICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOwor K30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQg ZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChj b25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBN c2dsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwgRklMRSAq b3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOworKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBO VUxMOworKworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7 CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoYXJn YyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91 dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8g ZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQor KworKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9f cHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3Nl KGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysK KysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgU0hBX1RFU1RfTUFYX0JJVFMJMTAy NDAwCisrI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNUX01BWF9CSVRTID4+ IDMpICogMikgKyAxMDApCisrCisraW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKQor Kwl7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVi dWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwl1bnNpZ25lZCBjaGFyICpN c2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7CisrCWxvbmcgTXNnTGVuID0gLTEsIExlbiA9IC0xLCBT ZWVkTGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5l YnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBP UEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8 ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1 ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5 KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBs ZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29y ZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0g c3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsg KGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWZw dXRzKG9saW5lYnVmLCBvdXQpOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0g MTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFs dWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K KysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsK KysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFs dWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwiW0wiKSAmJiAqcD09J10nKQorKwkJCXsKKysJCQlzd2l0Y2ggKGF0b2kodmFsdWUpKQor KwkJCQl7CisrCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7CisrCQkJCWNhc2Ug Mjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7CisrCQkJCWNhc2UgMzI6IG1kPUVWUF9zaGEyNTYo KTsgYnJlYWs7CisrCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJlYWs7CisrCQkJCWNh c2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7CisrCQkJCWRlZmF1bHQ6IGdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJMZW4i KSkKKysJCQl7CisrCQkJaWYgKExlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJ CQlMZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoTGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRzICovCisrCQkJaWYg KExlbiAmIDB4NykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoTGVuID4gU0hBX1RF U1RfTUFYX0JJVFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnTGVuID0gTGVuID4+ IDM7CisrCQkJfQorKworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJ eworKwkJCWxvbmcgdG1wbGVuOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigt LXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU2Vl ZCIpKQorKwkJCXsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkg PSAnMCc7CisrCQkJaWYgKFNlZWQpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJU2VlZCA9 IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOworKwkJCWlmICghU2VlZCkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNRCIpKQor KwkJCWNvbnRpbnVlOworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0 cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChtZCAmJiBNc2cgJiYgKE1zZ0xlbiA+PSAwKSkK KysJCQl7CisrCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNnTGVuKSkKKysJCQkJ Z290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJ CU1zZ0xlbiA9IC0xOworKwkJCUxlbiA9IC0xOworKwkJCX0KKysJCWVsc2UgaWYgKG1kICYmIFNl ZWQgJiYgKFNlZWRMZW4gPiAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9tb250ZShtZCwgb3V0 LCBTZWVkLCBTZWVkTGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoU2Vl ZCk7CisrCQkJU2VlZCA9IE5VTEw7CisrCQkJU2VlZExlbiA9IC0xOworKwkJCX0KKysJCisrCisr CQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYp CisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xf ZnJlZShsaW5lYnVmKTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xfZnJlZShNc2cpOworKwlpZiAo U2VlZCkKKysJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFy c2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vz c2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0 YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAqb3V0LAorKwkJdW5z aWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQorKwl7CisrCWludCBpLCBtZGxlbjsKKysJdW5z aWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOworKwlpZiAoIUVWUF9EaWdlc3QoTXNnLCBN c2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwpKQorKwkJeworKwkJ ZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7CisrCQlyZXR1cm4gMDsK KysJCX0KKysJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJZm9yIChpID0gMDsgaSA8IG1kbGVuOyBp KyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7CisrCWZwdXRzKCJcbiIsIG91dCk7 CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBf TUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbikK KysJeworKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKKysJaW50IHJldCA9IDA7CisrCUVWUF9NRF9D VFggY3R4OworKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOworKwl1bnNpZ25lZCBp bnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgp OworKworKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKKysJCW1sZW4gPSBTZWVkTGVu OworKwllbHNlCisrCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOworKworKwltMSA9IE9QRU5TU0xf bWFsbG9jKG1sZW4pOworKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKwltMyA9IE9QRU5T U0xfbWFsbG9jKG1sZW4pOworKworKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMpCisrCQlnb3RvIG1j X2Vycm9yOworKworKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVuOworKwltZW1jcHko bTEsIFNlZWQsIFNlZWRMZW4pOworKwltZW1jcHkobTIsIFNlZWQsIFNlZWRMZW4pOworKwltZW1j cHkobTMsIFNlZWQsIFNlZWRMZW4pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKworKwlmb3Ig KGogPSAwOyBqIDwgMTAwOyBqKyspCisrCQl7CisrCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsr KQorKwkJCXsKKysJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVMTCk7CisrCQkJRVZQ X0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOworKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0 eCwgbTIsIG0ybGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0zLCBtM2xlbik7Cisr CQkJcCA9IG0xOworKwkJCW0xID0gbTI7CisrCQkJbTFsZW4gPSBtMmxlbjsKKysJCQltMiA9IG0z OworKwkJCW0ybGVuID0gbTNsZW47CisrCQkJbTMgPSBwOworKwkJCUVWUF9EaWdlc3RGaW5hbF9l eCgmY3R4LCBtMywgJm0zbGVuKTsKKysJCQl9CisrCQlmcHJpbnRmKG91dCwgIkNPVU5UID0gJWRc biIsIGopOworKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJCWZvciAoayA9IDA7IGsgPCBtM2xl bjsgaysrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKKysJCWZwdXRzKCJcblxu Iiwgb3V0KTsKKysJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKKysJCW1lbWNweShtMiwgbTMsIG0z bGVuKTsKKysJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKKysJCX0KKysKKysJcmV0ID0gMTsKKysK KysJbWNfZXJyb3I6CisrCWlmIChtMSkKKysJCU9QRU5TU0xfZnJlZShtMSk7CisrCWlmIChtMikK KysJCU9QRU5TU0xfZnJlZShtMik7CisrCWlmIChtMykKKysJCU9QRU5TU0xfZnJlZShtMyk7Cisr CisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKwor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0 bC5oLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCistLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMJMjAxMy0wMi0x OSAxMjo0NzozMy43MzUxMTg3OTIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfdXRsLmgJMjAxMy0wMi0xOSAxMjo0NzozMy43MzUxMTg3OTIgKzAxMDAKK0BA IC0wLDAgKzEsMzQzIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcg 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 VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrdm9pZCBkb19w cmludF9lcnJvcnModm9pZCkKKysJeworKwljb25zdCBjaGFyICpmaWxlLCAqZGF0YTsKKysJaW50 IGxpbmUsIGZsYWdzOworKwl1bnNpZ25lZCBsb25nIGw7CisrCXdoaWxlICgobCA9IEVSUl9nZXRf ZXJyb3JfbGluZV9kYXRhKCZmaWxlLCAmbGluZSwgJmRhdGEsICZmbGFncykpKQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJFUlJPUjolbHg6bGliPSVkLGZ1bmM9JWQscmVhc29uPSVkIgorKwkJ CQkiOmZpbGU9JXM6bGluZT0lZDolc1xuIiwKKysJCQlsLCBFUlJfR0VUX0xJQihsKSwgRVJSX0dF VF9GVU5DKGwpLCBFUlJfR0VUX1JFQVNPTihsKSwKKysJCQlmaWxlLCBsaW5lLCBmbGFncyAmIEVS Ul9UWFRfU1RSSU5HID8gZGF0YSA6ICIiKTsKKysJCX0KKysJfQorKworK2ludCBoZXgyYmluKGNv bnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG4xLCBu MjsKKysgICAgdW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0wLG4yPTAgOyBpbltu MV0gJiYgaW5bbjFdICE9ICdcbicgOyApCisrCXsgLyogZmlyc3QgYnl0ZSAqLworKwlpZiAoKGlu W24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAn MCc7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCisrCSAg ICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAm JiAoaW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7CisrCWVs c2UKKysJICAgIHJldHVybiAtMTsKKysJaWYoIWluW24xXSkKKysJICAgIHsKKysJICAgIG91dFtu MisrXT1jaDsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwlvdXRbbjJdID0gY2ggPDwgNDsKKysJ Lyogc2Vjb25kIGJ5dGUgKi8KKysJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5 JykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJzAnOworKwllbHNlIGlmICgoaW5bbjFdID49ICdB JykgJiYgKGluW24xXSA8PSAnRicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwor KwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQorKwkgICAgY2gg PSBpbltuMSsrXSAtICdhJyArIDEwOworKwllbHNlCisrCSAgICByZXR1cm4gLTE7CisrCW91dFtu MisrXSB8PSBjaDsKKysJfQorKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt1bnNpZ25lZCBj aGFyICpoZXgyYmluX20oY29uc3QgY2hhciAqaW4sIGxvbmcgKnBsZW4pCisrCXsKKysJdW5zaWdu ZWQgY2hhciAqcDsKKysJcCA9IE9QRU5TU0xfbWFsbG9jKChzdHJsZW4oaW4pICsgMSkvMik7Cisr CSpwbGVuID0gaGV4MmJpbihpbiwgcCk7CisrCXJldHVybiBwOworKwl9CisrCisraW50IGRvX2hl eDJibihCSUdOVU0gKipwciwgY29uc3QgY2hhciAqaW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAq cDsKKysJbG9uZyBwbGVuOworKwlpbnQgciA9IDA7CisrCXAgPSBoZXgyYmluX20oaW4sICZwbGVu KTsKKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCWlmICghKnByKQorKwkJKnByID0gQk5fbmV3 KCk7CisrCWlmICghKnByKQorKwkJcmV0dXJuIDA7CisrCWlmIChCTl9iaW4yYm4ocCwgcGxlbiwg KnByKSkKKysJCXIgPSAxOworKwlPUEVOU1NMX2ZyZWUocCk7CisrCXJldHVybiByOworKwl9Cisr CisraW50IGRvX2JuX3ByaW50KEZJTEUgKm91dCwgQklHTlVNICpibikKKysJeworKwlpbnQgbGVu LCBpOworKwl1bnNpZ25lZCBjaGFyICp0bXA7CisrCWxlbiA9IEJOX251bV9ieXRlcyhibik7Cisr CWlmIChsZW4gPT0gMCkKKysJCXsKKysJCWZwdXRzKCIwMCIsIG91dCk7CisrCQlyZXR1cm4gMTsK KysJCX0KKysKKysJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKKysJaWYgKCF0bXApCisrCQl7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKysJCXJl dHVybiAwOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRtcCk7CisrCWZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAyeCIsIHRtcFtpXSk7CisrCU9QRU5TU0xfZnJl ZSh0bXApOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBkb19ibl9wcmludF9uYW1lKEZJTEUg Km91dCwgY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKKysJeworKwlpbnQgcjsKKysJZnBy aW50ZihvdXQsICIlcyA9ICIsIG5hbWUpOworKwlyID0gZG9fYm5fcHJpbnQob3V0LCBibik7Cisr CWlmICghcikKKysJCXJldHVybiAwOworKwlmcHV0cygiXG4iLCBvdXQpOworKwlyZXR1cm4gMTsK KysJfQorKworK2ludCBwYXJzZV9saW5lKGNoYXIgKipwa3csIGNoYXIgKipwdmFsLCBjaGFyICps aW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKKysJeworKwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpw LCAqcTsKKysJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJa2V5d29yZCA9IGxpbmVidWY7 CisrCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqa2V5d29yZCkpCisrCQlrZXl3b3JkKys7CisrCisrCS8qIExvb2sgZm9yID0gc2lnbiAq LworKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCS8qIElmIG5vICc9JyBleGl0ICov CisrCWlmICghcCkKKysJCXJldHVybiAwOworKworKwlxID0gcCAtIDE7CisrCisrCS8qIFJlbW92 ZSB0cmFpbGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkp CisrCQkqcS0tID0gMDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9IHAgKyAxOworKworKwkvKiBS ZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSp2YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgZnJvbSB2YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysK KysJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkq cC0tID0gMDsKKysKKysJKnBrdyA9IGtleXdvcmQ7CisrCSpwdmFsID0gdmFsdWU7CisrCXJldHVy biAxOworKwl9CisrCisrQklHTlVNICpoZXgyYm4oY29uc3QgY2hhciAqaW4pCisrICAgIHsKKysg ICAgQklHTlVNICpwPU5VTEw7CisrCisrICAgIGlmICghZG9faGV4MmJuKCZwLCBpbikpCisrCXJl dHVybiBOVUxMOworKworKyAgICByZXR1cm4gcDsKKysgICAgfQorKworK2ludCBiaW4yaGV4KGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQorKyAgICB7CisrICAgIGlu dCBuMSwgbjI7CisrICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9MCxuMj0w IDsgbjEgPCBsZW4gOyArK24xKQorKwl7CisrCWNoPWluW24xXSA+PiA0OworKwlpZiAoY2ggPD0g MHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UKKysJICAgIG91dFtuMisrXT1j aC0xMCsnYSc7CisrCWNoPWluW24xXSAmIDB4MGY7CisrCWlmKGNoIDw9IDB4MDkpCisrCSAgICBv dXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRbbjIrK109Y2gtMTArJ2EnOworKwl9 CisrICAgIG91dFtuMl09J1wwJzsKKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisrdm9pZCBw dihjb25zdCBjaGFyICp0YWcsY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLGludCBsZW4pCisrICAg IHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKworKyAgICBiaW4yaGV4KHZhbCxsZW4sb2J1Zik7 CisrICAgIHByaW50ZigiJXMgPSAlc1xuIix0YWcsb2J1Zik7CisrICAgIH0KKysKKysvKiBUbyBh dm9pZCBleHRlbnNpdmUgY2hhbmdlcyB0byB0ZXN0IHByb2dyYW0gYXQgdGhpcyBzdGFnZSBqdXN0 IGNvbnZlcnQKKysgKiB0aGUgaW5wdXQgbGluZSBpbnRvIGFuIGFjY2VwdGFibGUgZm9ybS4gS2V5 d29yZCBsaW5lcyBjb252ZXJ0ZWQgdG8gZm9ybQorKyAqICJrZXl3b3JkID0gdmFsdWVcbiIgbm8g bWF0dGVyIHdoYXQgd2hpdGUgc3BhY2UgcHJlc2VudCwgYWxsIG90aGVyIGxpbmVzCisrICoganVz dCBoYXZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIHJlbW92ZWQuCisrICovCisrCisraW50 IHRpZHlfbGluZShjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKKysJeworKwljaGFyICpr ZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKKysJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJ a2V5d29yZCA9IGxpbmVidWY7CisrCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQlrZXl3b3JkKys7CisrCS8qIExv b2sgZm9yID0gc2lnbiAqLworKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCS8qIElm IG5vICc9JyBqdXN0IGNob3AgbGVhZGluZywgdHJhaWxpbmcgd3MgKi8KKysJaWYgKCFwKQorKwkJ eworKwkJcCA9IGtleXdvcmQgKyBzdHJsZW4oa2V5d29yZCkgLSAxOworKwkJd2hpbGUgKCpwID09 ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCQlz dHJjcHkob2xpbmVidWYsIGtleXdvcmQpOworKwkJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKKysJ CXJldHVybiAxOworKwkJfQorKworKwlxID0gcCAtIDE7CisrCisrCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkqcS0t ID0gMDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9IHAgKyAxOworKworKwkvKiBSZW1vdmUgbGVh ZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSp2YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJv bSB2YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJd2hpbGUg KCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkqcC0tID0gMDsK KysKKysJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJc3RyY2F0KG9saW5lYnVmLCAiID0g Iik7CisrCXN0cmNhdChvbGluZWJ1ZiwgdmFsdWUpOworKwlzdHJjYXQob2xpbmVidWYsICJcbiIp OworKworKwlyZXR1cm4gMTsKKysJfQorKworKy8qIE5COiB0aGlzIHJldHVybiB0aGUgbnVtYmVy IG9mIF9iaXRzXyByZWFkICovCisraW50IGJpbnQyYmluKGNvbnN0IGNoYXIgKmluLCBpbnQgbGVu LCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIG1lbXNl dChvdXQsMCxsZW4pOworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKKysJaWYoaW5bbl0g PT0gJzEnKQorKwkgICAgb3V0W24vOF18PSgweDgwID4+IChuJTgpKTsKKysgICAgcmV0dXJuIGxl bjsKKysgICAgfQorKworK2ludCBiaW4yYmludChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQg bGVuLGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49MCA7IG4g PCBsZW4gOyArK24pCisrCW91dFtuXT0oaW5bbi84XSYoMHg4MCA+PiAobiU4KSkpID8gJzEnIDog JzAnOworKyAgICByZXR1cm4gbjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK3ZvaWQgUHJpbnRWYWx1ZShjaGFyICp0 YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKKyt7CisrI2lmIFZFUkJPU0UKKysgIGNo YXIgb2J1ZlsyMDQ4XTsKKysgIGludCBvbGVuOworKyAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4s IG9idWYpOworKyAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2Vu ZGlmCisrfQorKworK3ZvaWQgT3V0cHV0VmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2 YWwsIGludCBsZW4sIEZJTEUgKnJmcCxpbnQgYml0bW9kZSkKKysgICAgeworKyAgICBjaGFyIG9i dWZbMjA0OF07CisrICAgIGludCBvbGVuOworKworKyAgICBpZihiaXRtb2RlKQorKwlvbGVuPWJp bjJiaW50KHZhbCxsZW4sb2J1Zik7CisrICAgIGVsc2UKKysJb2xlbj1iaW4yaGV4KHZhbCxsZW4s b2J1Zik7CisrCisrICAgIGZwcmludGYocmZwLCAiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9i dWYpOworKyNpZiBWRVJCT1NFCisrICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4s IG9idWYpOworKyNlbmRpZgorKyAgICB9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczNTExODc5MiArMDEw MAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAx My0wMi0xOSAxMjo0NzozMy43MzUxMTg3OTIgKzAxMDAKK0BAIC0wLDAgKzEsMzU5IEBACisrLyog 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+CisrCisrI2lmZGVm IE9QRU5TU0xfRklQUworK3N0YXRpYyBjb25zdCBzdHJ1Y3QKKysgICAgeworKyAgICBjb25zdCB1 bnNpZ25lZCBjaGFyIGtleVsxNl07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzE2XTsKKysgICAgfSB0 ZXN0c1tdPQorKwl7CisrCXsKKysJeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2 LDB4MDcsCisrCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGIH0sCisr CXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LAorKwkgIDB4ODgsMHg5 OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAorKwl7IDB4NjksMHhDNCwweEUwLDB4 RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKKysJICAweEQ4LDB4Q0QsMHhCNywweDgwLDB4NzAsMHhC NCwweEM1LDB4NUEgfSwKKysJfSwKKysJfTsKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRfYWVzOwor KworK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCisrICAgIHsKKysgICAgY29ycnVwdF9hZXMgPSAx OworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzKCkKKysgICAgeworKyAgICBpbnQg bjsKKysgICAgaW50IHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAgZm9yKG49MCA7IG4gPCAxIDsgKytuKQor Kwl7CisrCXVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysKKysJbWVtY3B5KGtleSwgdGVzdHNbbl0u a2V5LCBzaXplb2Yoa2V5KSk7CisrCWlmIChjb3JydXB0X2FlcykKKysJCWtleVswXSsrOworKwlp ZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKKysJCQkJa2V5LCBO VUxMLAorKwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCisrCQkJCXRlc3RzW25dLmNpcGhlcnRleHQs CisrCQkJCTE2KSA8PSAwKQorKwkJZ290byBlcnI7CisrCX0KKysgICAgcmV0ID0gMTsKKysgICAg ZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAgICBpZiAocmV0ID09 IDApCisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyxGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKworKy8qIEFFUy1DQ00gdGVz dCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0geworKwkweGNlLDB4YjAsMHgwOSwweGFlLDB4YTQs MHg0NSwweDQ0LDB4NTEsMHhmZSwweGFkLDB4ZjAsMHhlNiwKKysJMHhiMywweDZmLDB4NDUsMHg1 NSwweDVkLDB4ZDAsMHg0NywweDIzLDB4YmEsMHhhNCwweDQ4LDB4ZTgKKyt9OworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtdID0geworKwkweDc2LDB4NDAsMHg0MywweGM0 LDB4OTQsMHg2MCwweGI3CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fYWRh dGFbXSA9IHsKKysJMHg2ZSwweDgwLDB4ZGQsMHg3ZiwweDFiLDB4YWQsMHhmMywweGExLDB4Yzks MHhhYiwweDI1LDB4YzcsCisrCTB4NWYsMHgxMCwweGJkLDB4ZTcsMHg4YywweDIzLDB4ZmEsMHgw ZSwweGI4LDB4ZjksMHhhYSwweGE1LAorKwkweDNhLDB4ZGUsMHhmYiwweGY0LDB4Y2IsMHhmNyww eDhmLDB4ZTQKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9wdFtdID0gewor KwkweGM4LDB4ZDIsMHg3NSwweGY5LDB4MTksMHhlMSwweDdkLDB4N2YsMHhlNiwweDljLDB4MmEs MHgxZiwKKysJMHg1OCwweDkzLDB4OWQsMHhmZSwweDRkLDB4NDAsMHgzNywweDkxLDB4YjUsMHhk ZiwweDEzLDB4MTAKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9jdFtdID0g eworKwkweDhhLDB4MGYsMHgzZCwweDgyLDB4MjksMHhlNCwweDhlLDB4NzQsMHg4NywweGZkLDB4 OTUsMHhhMiwKKysJMHg4YSwweGQzLDB4OTIsMHhjOCwweDBiLDB4MzYsMHg4MSwweGQ0LDB4ZmIs MHhjNywweGJiLDB4ZmQKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV90YWdb XSA9IHsKKysJMHgyZCwweGQ2LDB4ZWYsMHgxYywweDQ1LDB4ZDQsMHhjYywweGI3LDB4MjMsMHhk YywweDA3LDB4NDQsCisrCTB4MTQsMHhkYiwweDUwLDB4NmQKKyt9OworKworK2ludCBGSVBTX3Nl bGZ0ZXN0X2Flc19jY20odm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hh ciBvdXRbMTI4XSwgdGFnWzE2XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCWlmICgh RVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIDEpKQor KwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9D Q01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKwkJZ290byBl cnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RB RywKKysJCQkJCXNpemVvZihjY21fdGFnKSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFF VlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDEpKQorKwkJZ290 byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fcHQp KSAhPSBzaXplb2YoY2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4 LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisrCQlnb3RvIGVycjsK KysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSAhPSBz aXplb2YoY2NtX2N0KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0 cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQorKwkJZ290byBlcnI7Cisr CWlmIChtZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCisrCQl8fCBtZW1jbXAo b3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKKysJCWdvdG8gZXJyOworKworKwltZW1zZXQo b3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQ X2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIDApKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQ X0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAorKwkJCQkJc2l6 ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9D VFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRhZykpCisrCQlnb3RvIGVy cjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2Us IDApKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNp emVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisr CQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihj Y21fY3QpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21w KG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0g MTsKKysKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAo cmV0ID09IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00s RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZWxzZQorKwkJ cmV0dXJuIHJldDsKKysKKysJfQorKworKy8qIEFFUy1HQ00gdGVzdCBkYXRhIGZyb20gTklTVCBw dWJsaWMgdGVzdCB2ZWN0b3JzICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2Nt X2tleVtdID0geworKwkweGVlLDB4YmMsMHgxZiwweDU3LDB4NDgsMHg3ZiwweDUxLDB4OTIsMHgx YywweDA0LDB4NjUsMHg2NiwKKysJMHg1ZiwweDhhLDB4ZTYsMHhkMSwweDY1LDB4OGIsMHhiMiww eDZkLDB4ZTYsMHhmOCwweGEwLDB4NjksCisrCTB4YTMsMHg1MiwweDAyLDB4OTMsMHhhNSwweDcy LDB4MDcsMHg4ZgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2l2W10gPSB7 CisrCTB4OTksMHhhYSwweDNlLDB4NjgsMHhlZCwweDgxLDB4NzMsMHhhMCwweGVlLDB4ZDAsMHg2 NiwweDg0CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fcHRbXSA9IHsKKysJ MHhmNSwweDZlLDB4ODcsMHgwNSwweDViLDB4YzMsMHgyZCwweDBlLDB4ZWIsMHgzMSwweGIyLDB4 ZWEsCisrCTB4Y2MsMHgyYiwweGYyLDB4YTUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGdjbV9hYWRbXSA9IHsKKysJMHg0ZCwweDIzLDB4YzMsMHhjZSwweGMzLDB4MzQsMHhiNCww eDliLDB4ZGIsMHgzNywweDBjLDB4NDMsCisrCTB4N2YsMHhlYywweDc4LDB4ZGUKKyt9OworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9jdFtdID0geworKwkweGY3LDB4MjYsMHg0NCww eDEzLDB4YTgsMHg0YywweDBlLDB4N2MsMHhkNSwweDM2LDB4ODYsMHg3ZSwKKysJMHhiOSwweGYy LDB4MTcsMHgzNgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3RhZ1tdID0g eworKwkweDY3LDB4YmEsMHgwNSwweDEwLDB4MjYsMHgyYSwweGU0LDB4ODcsMHhkNywweDM3LDB4 ZWUsMHg2MiwKKysJMHg5OCwweGY3LDB4N2UsMHgwYworK307CisrCisraW50IEZJUFNfc2VsZnRl c3RfYWVzX2djbSh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIG91 dFsxMjhdLCB0YWdbMTZdOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RY X2luaXQoJmN0eCk7CisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysJbWVtc2V0KHRh ZywgMCwgc2l6ZW9mKHRhZykpOworKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNf MjU2X2djbSgpLCBOVUxMLCBOVUxMLCAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBI RVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKKysJCQkJCXNpemVvZihn Y21faXYpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgs IE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBo ZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCisrCQlnb3RvIGVy cjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAh PSBzaXplb2YoZ2NtX2N0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBO VUxMLCBOVUxMLCAwKSA8IDApCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFFVlBfQ0lQSEVSX0NU WF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJy OworKworKwlpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1lbWNtcChvdXQsIGdjbV9j dCwgMTYpKQorKwkJZ290byBlcnI7CisrCisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsK KysKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwg TlVMTCwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgs IEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCisr CQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dD TV9TRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJbml0 KCZjdHgsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVW UF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCisrCQln b3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNpemVvZihnY21f Y3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigm Y3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChv dXQsIGdjbV9wdCwgMTYpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrCWVycjoK KysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYgKHJldCA9PSAwKQorKwkJ eworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNLEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWVsc2UKKysJCXJldHVybiByZXQ7Cisr CisrCX0KKysKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2tleVtdID0g eworKwkweGExLDB4YjksMHgwYywweGJhLDB4M2YsMHgwNiwweGFjLDB4MzUsMHgzYiwweDJjLDB4 MzQsMHgzOCwKKysJMHg3NiwweDA4LDB4MTcsMHg2MiwweDA5LDB4MDksMHgyMywweDAyLDB4NmUs MHg5MSwweDc3LDB4MTgsCisrCTB4MTUsMHhmMiwweDlkLDB4YWIsMHgwMSwweDkzLDB4MmYsMHgy ZgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9pW10gPSB7CisrCTB4 NGYsMHhhZSwweGY3LDB4MTEsMHg3YywweGRhLDB4NTksMHhjNiwweDZlLDB4NGIsMHg5MiwweDAx LAorKwkweDNlLDB4NzYsMHg4YSwweGQ1CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBYVFNfMTI4X3B0W10gPSB7CisrCTB4ZWIsMHhhYiwweGNlLDB4OTUsMHhiMSwweDRkLDB4M2Ms MHg4ZCwweDZmLDB4YjMsMHg1MCwweDM5LAorKwkweDA3LDB4OTAsMHgzMSwweDFjCisrfTsKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2N0W10gPSB7CisrCTB4NzcsMHg4YSww eGU4LDB4YjQsMHgzYywweGI5LDB4OGQsMHg1YSwweDgyLDB4NTAsMHg4MSwweGQ1LAorKwkweGJl LDB4NDcsMHgxYywweDYzCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNf MjU2X2tleVtdID0geworKwkweDFlLDB4YTYsMHg2MSwweGM1LDB4OGQsMHg5NCwweDNhLDB4MGUs MHg0OCwweDAxLDB4ZTQsMHgyZiwKKysJMHg0YiwweDA5LDB4NDcsMHgxNCwweDllLDB4N2YsMHg5 ZiwweDhlLDB4M2UsMHg2OCwweGQwLDB4YzcsCisrCTB4NTAsMHg1MiwweDEwLDB4YmQsMHgzMSww eDFhLDB4MGUsMHg3YywweGQ2LDB4ZTEsMHgzZiwweGZkLAorKwkweGYyLDB4NDEsMHg4ZCwweDhk LDB4MTksMHgxMSwweGMwLDB4MDQsMHhjZCwweGE1LDB4OGQsMHhhMywKKysJMHhkNiwweDE5LDB4 YjcsMHhlMiwweGI5LDB4MTQsMHgxZSwweDU4LDB4MzEsMHg4ZSwweGVhLDB4MzksCisrCTB4MmMs MHhmNCwweDFiLDB4MDgKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZf aVtdID0geworKwkweGFkLDB4ZjgsMHhkOSwweDI2LDB4MjcsMHg0NiwweDRhLDB4ZDIsMHhmMCww eDQyLDB4OGUsMHg4NCwKKysJMHhhOSwweGY4LDB4NzUsMHg2NAorK307Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0geworKwkweDJlLDB4ZWQsMHhlYSwweDUyLDB4 Y2QsMHg4MiwweDE1LDB4ZTEsMHhhYywweGM2LDB4NDcsMHhlOCwKKysJMHgxMCwweGJiLDB4YzMs MHg2NCwweDJlLDB4ODcsMHgyOCwweDdmLDB4OGQsMHgyZSwweDU3LDB4ZTMsCisrCTB4NmMsMHgw YSwweDI0LDB4ZmIsMHhjMSwweDJhLDB4MjAsMHgyZQorK307Cisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgWFRTXzI1Nl9jdFtdID0geworKwkweGNiLDB4YWEsMHhkMCwweGUyLDB4ZjYsMHhj ZSwweGEzLDB4ZjUsMHgwYiwweDM3LDB4ZjksMHgzNCwKKysJMHhkNCwweDZhLDB4OWIsMHgxMyww eDBiLDB4OWQsMHg1NCwweGYwLDB4N2UsMHgzNCwweGYzLDB4NmEsCisrCTB4ZjcsMHg5MywweGU4 LDB4NmYsMHg3MywweGM2LDB4ZDcsMHhkYgorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVz X3h0cygpCisrCXsKKysJaW50IHJldCA9IDE7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwg RVZQX2Flc18xMjhfeHRzKCksCisrCQkJCVhUU18xMjhfa2V5LCBYVFNfMTI4X2ksIFhUU18xMjhf cHQsIFhUU18xMjhfY3QsCisrCQkJCXNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkKKysJCXJldCA9 IDA7CisrCisrCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2X3h0cygpLAor KwkJCQlYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBYVFNfMjU2X2N0LAorKwkJ CQlzaXplb2YoWFRTXzI1Nl9wdCkpIDw9IDApCisrCQlyZXQgPSAwOworKworKwlFVlBfQ0lQSEVS X0NUWF9jbGVhbnVwKCZjdHgpOworKwlpZiAocmV0ID09IDApCisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0FFU19YVFMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCXJldHVybiBy ZXQ7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHMuYworLS0tIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM1 MTE4NzkyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMTMt MDItMTkgMTI6NDc6MzMuNzM2MTE4ODEyICswMTAwCitAQCAtMCwwICsxLDQ4OSBAQAorKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGRsZmNuLmg+Cisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJmaXBz X2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKworKyNpZm5kZWYgUEFUSF9NQVgKKysjZGVmaW5lIFBBVEhfTUFYIDEwMjQKKysj ZW5kaWYKKysKKytzdGF0aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Cisrc3RhdGljIGlu dCBmaXBzX21vZGUgPSAwOworK3N0YXRpYyBpbnQgZmlwc19zdGFydGVkID0gMDsKKysKKytzdGF0 aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKKytzdGF0aWMgaW50IGZpcHNfc2V0 X293bmluZ190aHJlYWQodm9pZCk7Cisrc3RhdGljIGludCBmaXBzX2NsZWFyX293bmluZ190aHJl YWQodm9pZCk7CisrCisrI2RlZmluZSBmaXBzX3dfbG9jaygpCUNSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfd191bmxvY2soKQlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfcl9sb2NrKCkJQ1JZUFRPX3JfbG9jayhDUllQ VE9fTE9DS19GSVBTKQorKyNkZWZpbmUgZmlwc19yX3VubG9jaygpCUNSWVBUT19yX3VubG9jayhD UllQVE9fTE9DS19GSVBTKQorKworK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUoaW50IG9ub2Zm KQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Cisr CisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNf d19sb2NrKCk7CisrCQlmaXBzX21vZGUgPSBvbm9mZjsKKysJCWlmICghb3duaW5nX3RocmVhZCkg Zmlwc193X3VubG9jaygpOworKwkJfQorKwl9CisrCisraW50IEZJUFNfbW9kdWxlX21vZGUodm9p ZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293 bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCWlmICghb3du aW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKKysJCXJldCA9IGZpcHNfbW9kZTsKKysJCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9 CisrCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCisrICAgIHsKKysgICAgaW50IHJl dCA9IDA7CisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpCisrCXsKKysJaW50IG93bmluZ190aHJlYWQg PSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBz X3JfbG9jaygpOworKwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7CisrCWlmICghb3duaW5nX3Ro cmVhZCkgZmlwc19yX3VubG9jaygpOworKwl9CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysK KysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNh bGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRo ZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZv cm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKKysg ICAgeworKyAgICBpZiAoZmlwc19zZWxmdGVzdF9mYWlsKQorKwl7CisrCU9wZW5TU0xEaWUoX19G SUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsKKysJfQorKyAg ICB9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisrICAgIHsKKysgICAg Zmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgfQorKworKy8qIHdlIGltcGxlbWVudCB3aGF0 IGxpYmZpcHNjaGVjayBkb2VzIG91cnNlbHZlcyAqLworKworK3N0YXRpYyBpbnQKKytnZXRfbGli cmFyeV9wYXRoKGNvbnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUsIGNo YXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKQorK3sKKysJRGxfaW5mbyBpbmZvOworKwl2b2lkICpk bCwgKnN5bTsKKysJaW50IHJ2ID0gLTE7CisrCisrICAgICAgICBkbCA9IGRsb3BlbihsaWJuYW1l LCBSVExEX0xBWlkpOworKyAgICAgICAgaWYgKGRsID09IE5VTEwpIHsKKysJICAgICAgICByZXR1 cm4gLTE7CisrICAgICAgICB9ICAgICAgIAorKworKwlzeW0gPSBkbHN5bShkbCwgc3ltYm9sbmFt ZSk7CisrCisrCWlmIChzeW0gIT0gTlVMTCAmJiBkbGFkZHIoc3ltLCAmaW5mbykpIHsKKysJCXN0 cm5jcHkocGF0aCwgaW5mby5kbGlfZm5hbWUsIHBhdGhsZW4tMSk7CisrCQlwYXRoW3BhdGhsZW4t MV0gPSAnXDAnOworKwkJcnYgPSAwOworKwl9CisrCisrCWRsY2xvc2UoZGwpOwkKKysJCisrCXJl dHVybiBydjsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgY29udltdID0gIjAxMjM0NTY3ODlh YmNkZWYiOworKworK3N0YXRpYyBjaGFyICoKKytiaW4yaGV4KHZvaWQgKmJ1Ziwgc2l6ZV90IGxl bikKKyt7CisrCWNoYXIgKmhleCwgKnA7CisrCXVuc2lnbmVkIGNoYXIgKnNyYyA9IGJ1ZjsKKysJ CisrCWhleCA9IG1hbGxvYyhsZW4gKiAyICsgMSk7CisrCWlmIChoZXggPT0gTlVMTCkKKysJCXJl dHVybiBOVUxMOworKworKwlwID0gaGV4OworKworKwl3aGlsZSAobGVuID4gMCkgeworKwkJdW5z aWduZWQgYzsKKysKKysJCWMgPSAqc3JjOworKwkJc3JjKys7CisrCisrCQkqcCA9IGNvbnZbYyA+ PiA0XTsKKysJCSsrcDsKKysJCSpwID0gY29udltjICYgMHgwZl07CisrCQkrK3A7CisrCQktLWxl bjsKKysJfQorKwkqcCA9ICdcMCc7CisrCXJldHVybiBoZXg7CisrfQorKworKyNkZWZpbmUgSE1B Q19QUkVGSVggIi4iIAorKyNkZWZpbmUgSE1BQ19TVUZGSVggIi5obWFjIiAKKysjZGVmaW5lIFJF QURfQlVGRkVSX0xFTkdUSCAxNjM4NAorKworK3N0YXRpYyBjaGFyICoKKyttYWtlX2htYWNfcGF0 aChjb25zdCBjaGFyICpvcmlncGF0aCkKKyt7CisrCWNoYXIgKnBhdGgsICpwOworKwljb25zdCBj aGFyICpmbjsKKysKKysJcGF0aCA9IG1hbGxvYyhzaXplb2YoSE1BQ19QUkVGSVgpICsgc2l6ZW9m KEhNQUNfU1VGRklYKSArIHN0cmxlbihvcmlncGF0aCkpOworKwlpZihwYXRoID09IE5VTEwpIHsK KysJCXJldHVybiBOVUxMOworKwl9CisrCisrCWZuID0gc3RycmNocihvcmlncGF0aCwgJy8nKTsK KysJaWYgKGZuID09IE5VTEwpIHsKKysJCWZuID0gb3JpZ3BhdGg7CisrCX0gZWxzZSB7CisrCQkr K2ZuOworKwl9CisrCisrCXN0cm5jcHkocGF0aCwgb3JpZ3BhdGgsIGZuLW9yaWdwYXRoKTsKKysJ cCA9IHBhdGggKyAoZm4gLSBvcmlncGF0aCk7CisrCXAgPSBzdHBjcHkocCwgSE1BQ19QUkVGSVgp OworKwlwID0gc3RwY3B5KHAsIGZuKTsKKysJcCA9IHN0cGNweShwLCBITUFDX1NVRkZJWCk7Cisr CisrCXJldHVybiBwYXRoOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciBobWFja2V5W10gPSAi b3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOworKworK3N0YXRpYyBpbnQKKytjb21w dXRlX2ZpbGVfaG1hYyhjb25zdCBjaGFyICpwYXRoLCB2b2lkICoqYnVmLCBzaXplX3QgKmhtYWNs ZW4pCisreworKwlGSUxFICpmID0gTlVMTDsKKysJaW50IHJ2ID0gLTE7CisrCXVuc2lnbmVkIGNo YXIgcmJ1ZltSRUFEX0JVRkZFUl9MRU5HVEhdOworKwlzaXplX3QgbGVuOworKwl1bnNpZ25lZCBp bnQgaGxlbjsKKysJSE1BQ19DVFggYzsKKysKKysJSE1BQ19DVFhfaW5pdCgmYyk7CisrCisrCWYg PSBmb3BlbihwYXRoLCAiciIpOworKworKwlpZiAoZiA9PSBOVUxMKSB7CisrCQlnb3RvIGVuZDsK KysJfQorKworKwlITUFDX0luaXQoJmMsIGhtYWNrZXksIHNpemVvZihobWFja2V5KS0xLCBFVlBf c2hhMjU2KCkpOworKworKwl3aGlsZSAoKGxlbj1mcmVhZChyYnVmLCAxLCBzaXplb2YocmJ1Ziks IGYpKSAhPSAwKSB7CisrCQlITUFDX1VwZGF0ZSgmYywgcmJ1ZiwgbGVuKTsKKysJfQorKworKwls ZW4gPSBzaXplb2YocmJ1Zik7CisrCS8qIHJldXNlIHJidWYgZm9yIGhtYWMgKi8KKysJSE1BQ19G aW5hbCgmYywgcmJ1ZiwgJmhsZW4pOworKworKwkqYnVmID0gbWFsbG9jKGhsZW4pOworKwlpZiAo KmJ1ZiA9PSBOVUxMKSB7CisrCQlnb3RvIGVuZDsKKysJfQorKworKwkqaG1hY2xlbiA9IGhsZW47 CisrCisrCW1lbWNweSgqYnVmLCByYnVmLCBobGVuKTsKKysKKysJcnYgPSAwOworK2VuZDoKKysJ SE1BQ19DVFhfY2xlYW51cCgmYyk7CisrCisrCWlmIChmKQorKwkJZmNsb3NlKGYpOworKworKwly ZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBpbnQKKytGSVBTQ0hFQ0tfdmVyaWZ5KGNvbnN0IGNo YXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpCisreworKwljaGFyIHBhdGhbUEFU SF9NQVgrMV07CisrCWludCBydjsKKysJRklMRSAqaGY7CisrCWNoYXIgKmhtYWNwYXRoLCAqcDsK KysJY2hhciAqaG1hYyA9IE5VTEw7CisrCXNpemVfdCBuOworKwkKKysJcnYgPSBnZXRfbGlicmFy eV9wYXRoKGxpYm5hbWUsIHN5bWJvbG5hbWUsIHBhdGgsIHNpemVvZihwYXRoKSk7CisrCisrCWlm IChydiA8IDApCisrCQlyZXR1cm4gMDsKKysKKysJaG1hY3BhdGggPSBtYWtlX2htYWNfcGF0aChw YXRoKTsKKysJaWYgKGhtYWNwYXRoID09IE5VTEwpCisrCQlyZXR1cm4gMDsKKysKKysJaGYgPSBm b3BlbihobWFjcGF0aCwgInIiKTsKKysJaWYgKGhmID09IE5VTEwpIHsKKysJCWZyZWUoaG1hY3Bh dGgpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJaWYgKGdldGxpbmUoJmhtYWMsICZuLCBoZikg PiAwKSB7CisrCQl2b2lkICpidWY7CisrCQlzaXplX3QgaG1hY2xlbjsKKysJCWNoYXIgKmhleDsK KysKKysJCWlmICgocD1zdHJjaHIoaG1hYywgJ1xuJykpICE9IE5VTEwpCisrCQkJKnAgPSAnXDAn OworKworKwkJaWYgKGNvbXB1dGVfZmlsZV9obWFjKHBhdGgsICZidWYsICZobWFjbGVuKSA8IDAp IHsKKysJCQlydiA9IC00OworKwkJCWdvdG8gZW5kOworKwkJfQorKworKwkJaWYgKChoZXg9Ymlu MmhleChidWYsIGhtYWNsZW4pKSA9PSBOVUxMKSB7CisrCQkJZnJlZShidWYpOworKwkJCXJ2ID0g LTU7CisrCQkJZ290byBlbmQ7CisrCQl9CisrCisrCQlpZiAoc3RyY21wKGhleCwgaG1hYykgIT0g MCkgeworKwkJCXJ2ID0gLTE7CisrCQl9CisrCQlmcmVlKGJ1Zik7CisrCQlmcmVlKGhleCk7Cisr CX0KKysKKytlbmQ6CisrCWZyZWUoaG1hYyk7CisrCWZyZWUoaG1hY3BhdGgpOworKwlmY2xvc2Uo aGYpOworKworKwlpZiAocnYgPCAwKQorKwkJcmV0dXJuIDA7CisrCisrCS8qIGNoZWNrIHN1Y2Nl c3NmdWwgKi8KKysJcmV0dXJuIDE7CQorK30KKysKKytpbnQgRklQU19tb2R1bGVfbW9kZV9zZXQo aW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKQorKyAgICB7CisrICAgIGludCByZXQgPSAwOwor KworKyAgICBmaXBzX3dfbG9jaygpOworKyAgICBmaXBzX3N0YXJ0ZWQgPSAxOworKyAgICBmaXBz X3NldF9vd25pbmdfdGhyZWFkKCk7CisrCisrICAgIGlmKG9ub2ZmKQorKwl7CisrCisrCWZpcHNf c2VsZnRlc3RfZmFpbCA9IDA7CisrCisrCS8qIERvbid0IGdvIGludG8gRklQUyBtb2RlIHR3aWNl LCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKKysJICAgc2VlZGluZyAqLworKwlpZihGSVBT X21vZHVsZV9tb2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVM RV9NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKKysJICAgIGZpcHNfc2Vs ZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9 CisrCisrI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCisrCXsKKysJZXh0ZXJuIHVuc2lnbmVkIGlu dCBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKKysJaWYgKChPUEVOU1NMX2lhMzJjYXBfUFswXSAmICgx PDwyNXwxPDwyNikpICE9ICgxPDwyNXwxPDwyNikpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pOwor KwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3Rv IGVuZDsKKysJICAgIH0KKysJT1BFTlNTTF9pYTMyY2FwX1BbMF0gfD0gKDE8PDI4KTsJLyogc2V0 ICJzaGFyZWQgY2FjaGUiCSovCisrCU9QRU5TU0xfaWEzMmNhcF9QWzFdICY9IH4oMTw8KDYwLTMy KSk7CS8qIGNsZWFyIEFWWAkJKi8KKysJfQorKyNlbmRpZgorKworKwlpZighRklQU0NIRUNLX3Zl cmlmeSgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsIkZJUFNfbW9kZV9zZXQi KSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJ UFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKworKwlp ZighRklQU0NIRUNLX3ZlcmlmeSgibGlic3NsLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsIlNT TF9DVFhfbmV3IikpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9N T0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOworKwkgICAgZmlwc19z ZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAg IH0KKysKKysJaWYoRklQU19zZWxmdGVzdCgpKQorKwkgICAgZmlwc19zZXRfbW9kZShvbm9mZik7 CisrCWVsc2UKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICBy ZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCXJldCA9IDE7CisrCWdvdG8gZW5k OworKwl9CisrICAgIGZpcHNfc2V0X21vZGUoMCk7CisrICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9 IDA7CisrICAgIHJldCA9IDE7CisrZW5kOgorKyAgICBmaXBzX2NsZWFyX293bmluZ190aHJlYWQo KTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisr c3RhdGljIENSWVBUT19USFJFQURJRCBmaXBzX3RocmVhZDsKKytzdGF0aWMgaW50IGZpcHNfdGhy ZWFkX3NldCA9IDA7CisrCisrc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCkK KysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCUNS WVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhyZWFkX3NldCkK KysJCQl7CisrCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKKysJCQlDUllQVE9fVEhSRUFESURfY3Vy cmVudCgmY3VyKTsKKysJCQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhy ZWFkKSkKKysJCQkJcmV0ID0gMTsKKysJCQl9CisrCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xP Q0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfc2V0X293 bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfc3Rh cnRlZCkKKysJCXsKKysJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYg KCFmaXBzX3RocmVhZF9zZXQpCisrCQkJeworKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZm aXBzX3RocmVhZCk7CisrCQkJcmV0ID0gMTsKKysJCQlmaXBzX3RocmVhZF9zZXQgPSAxOworKwkJ CX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVy biByZXQ7CisrCX0KKysKKytpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsK KysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlDUllQVE9f d19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVhZF9zZXQpCisrCQkJ eworKwkJCUNSWVBUT19USFJFQURJRCBjdXI7CisrCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQo JmN1cik7CisrCQkJaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVhZCkp CisrCQkJCWZpcHNfdGhyZWFkX3NldCA9IDA7CisrCQkJfQorKwkJQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKworKworKyNpZiAw CisrLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNvZGUgZXhp c3RzIGFuZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9yIGNoZWNr aW5nIHNjcmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQorKwl7CisrCUZJ UFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCX0KKysj ZW5kaWYKKysKKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlw c19jbWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2Nt YWNfc2VsZnRlc3QuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM2MTE4ODEyICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMJMjAxMy0w Mi0xOSAxMjo0NzozMy43MzYxMTg4MTIgKzAxMDAKK0BAIC0wLDAgKzEsMTYxIEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9jbWFjLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrCWludCBuaWQ7CisrCWNvbnN0IHVuc2lnbmVkIGNo YXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07IHNpemVfdCBrZXlzaXplOworKwljb25zdCB1bnNp Z25lZCBjaGFyIG1zZ1s2NF07IHNpemVfdCBtc2dzaXplOworKwljb25zdCB1bnNpZ25lZCBjaGFy IG1hY1szMl07IHNpemVfdCBtYWNzaXplOworK30gQ01BQ19LQVQ7CisrCisrLyogZnJvbSBodHRw Oi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4Qi9TUF84MDAtMzhC LnBkZiAqLworK3N0YXRpYyBjb25zdCBDTUFDX0tBVCB2ZWN0b3JbXSA9IHsKKysgICAgewlOSURf YWVzXzEyOF9jYmMsCS8qIENvdW50ID0gMzIgZnJvbSBDTUFDR2VuQUVTMTI4LnR4dCAqLworKwl7 IDB4NzcsMHhhNywweDdmLDB4YWYsIDB4MjksMHgwYywweDFmLDB4YTMsCisrCSAgMHgwYywweDY4 LDB4M2QsMHhmMSwgMHg2YiwweGE3LDB4YTcsMHg3YiwgfSwgMTI4LAorKwl7IDB4MDIsMHgwNiww eDgzLDB4ZTEsIDB4ZjAsMHgzOSwweDJmLDB4NGMsCisrCSAgMHhhYywweDU0LDB4MzEsMHg4Yiwg MHg2MCwweDI5LDB4MjUsMHg5ZSwKKysJICAweDljLDB4NTUsMHgzZCwweGJjLCAweDRiLDB4NmEs MHhkOSwweDk4LAorKwkgIDB4ZTYsMHg0ZCwweDU4LDB4ZTQsIDB4ZTcsMHhkYywweDJlLDB4MTMs IH0sIDI1NiwKKysJeyAweGZiLDB4ZmUsMHhhNCwweDFiLCB9LCAzMgorKyAgICB9LAorKyAgICB7 CU5JRF9hZXNfMTkyX2NiYywJLyogQ291bnQgPSAyMyBmcm9tIENNQUNHZW5BRVMxOTIudHh0ICov CisrCXsgMHg3YiwweDMyLDB4MzksMHgxMywgMHg2OSwweGFhLDB4NGMsMHhhOSwKKysJICAweDc1 LDB4NTgsMHgwOSwweDViLCAweGUzLDB4YzMsMHhlYywweDg2LAorKwkgIDB4MmIsMHhkMCwweDU3 LDB4Y2UsIDB4ZjEsMHhlMywweDJkLDB4NjIsIH0sIDE5MiwKKysJeyAweDAgfSwgMCwKKysJeyAw eGU0LDB4ZDksMHgzNCwweDBiLCAweDAzLDB4ZTYsMHg3ZCwweGVmLAorKwkgIDB4ZDQsMHg5Niww eDljLDB4YzEsIDB4ZWQsMHgzNywweDM1LDB4ZTYsIH0sIDEyOCwKKysgICAgfSwKKysgICAgewlO SURfYWVzXzI1Nl9jYmMsCS8qIENvdW50ID0gMzMgZnJvbSBDTUFDR2VuQUVTMjU2LnR4dCAqLwor Kwl7IDB4MGIsMHgxMiwweDJhLDB4YzgsIDB4ZjMsMHg0ZSwweGQxLDB4ZmUsCisrCSAgMHgwOCww eDJhLDB4MzYsMHgyNSwgMHhkMSwweDU3LDB4NTYsMHgxNCwKKysJICAweDU0LDB4MTYsMHg3YSww eGMxLCAweDQ1LDB4YTEsMHgwYiwweGJmLAorKwkgIDB4NzcsMHhjNiwweGE3LDB4MDUsIDB4OTYs MHhkNSwweDc0LDB4ZjEsIH0sIDI1NiwKKysJeyAweDQ5LDB4OGIsMHg1MywweGZkLCAweGVjLDB4 ODcsMHhlZCwweGNiLAorKwkgIDB4ZjAsMHg3MCwweDk3LDB4ZGMsIDB4Y2QsMHhlOSwweDNhLDB4 MDgsCisrCSAgMHg0YiwweGFkLDB4NzUsMHgwMSwgMHhhMiwweDI0LDB4ZTMsMHg4OCwKKysJICAw eGRmLDB4MzQsMHg5YywweGUxLCAweDg5LDB4NTksMHhmZSwweDg0LAorKwkgIDB4ODUsMHhmOCww eGFkLDB4MTUsIDB4MzcsMHhmMCwweGQ4LDB4OTYsCisrCSAgMHhlYSwweDczLDB4YmUsMHhkYywg MHg3MiwweDE0LDB4NzEsMHgzZiwgfSwgMzg0LAorKwl7IDB4ZjYsMHgyYywweDQ2LDB4MzIsIDB4 OWIsIH0sIDQwLAorKyAgICB9LAorKyAgICB7CU5JRF9kZXNfZWRlM19jYmMsCS8qIENvdW50ID0g NDEgZnJvbSBDTUFDR2VuVERFUzMucmVxICovCisrCXsgMHg4OSwweGJjLDB4ZDksMHg1MiwgMHhh OCwweGM4LDB4YWIsMHgzNywKKysJICAweDFhLDB4ZjQsMHg4YSwweGM3LCAweGQwLDB4NzAsMHg4 NSwweGQ1LAorKwkgIDB4ZWYsMHhmNywweDAyLDB4ZTYsIDB4ZDYsMHgyYywweGRjLDB4MjMsIH0s IDE5MiwKKysJeyAweGZhLDB4NjIsMHgwYywweDFiLCAweGJlLDB4OTcsMHgzMSwweDllLAorKwkg IDB4OWEsMHgwYywweGYwLDB4NDksIDB4MjEsMHgyMSwweGY3LDB4YTIsCisrCSAgMHgwZSwweGIw LDB4OGEsMHg2YSwgMHg3MCwweDlkLDB4Y2IsMHhkMCwKKysJICAweDBhLDB4YWYsMHgzOCwweGU0 LCAweGY5LDB4OWUsMHg3NSwweDRlLCB9LCAyNTYsCisrCXsgMHg4ZiwweDQ5LDB4YTEsMHhiNywg MHhkNiwweGFhLDB4MjIsMHg1OCwgfSwgNjQsCisrICAgIH0sCisrfTsKKysKKytpbnQgRklQU19z ZWxmdGVzdF9jbWFjKCkKKysJeworKwlzaXplX3Qgbiwgb3V0bGVuOworKwl1bnNpZ25lZCBjaGFy ICAgIG91dFszMl07CisrCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKKysJQ01BQ19DVFggKmN0 eCA9IENNQUNfQ1RYX25ldygpOworKwljb25zdCBDTUFDX0tBVCAqdDsKKysJaW50IHJ2ID0gMTsK KysKKysJZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBd KTsgbisrLHQrKykKKysJCXsKKysJCWNpcGhlciA9IEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKHQtPm5p ZCk7CisrCQlpZiAoIWNpcGhlcikKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJCQlnb3RvIGVycjsK KysJCQl9CisrCQlpZiAoIUNNQUNfSW5pdChjdHgsIHQtPmtleSwgdC0+a2V5c2l6ZS84LCBjaXBo ZXIsIDApKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCWlm ICghQ01BQ19VcGRhdGUoY3R4LCB0LT5tc2csIHQtPm1zZ3NpemUvOCkpCisrCQkJeworKwkJCXJ2 ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJCQorKwkJaWYgKCFDTUFDX0ZpbmFsKGN0 eCwgb3V0LCAmb3V0bGVuKSkKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJCQlnb3RvIGVycjsKKysJ CQl9CisrCQlDTUFDX0NUWF9jbGVhbnVwKGN0eCk7CisrCisrCQlpZihvdXRsZW4gPCB0LT5tYWNz aXplLzggfHwgbWVtY21wKG91dCx0LT5tYWMsdC0+bWFjc2l6ZS84KSkKKysJCQl7CisrCQkgICAg CXJ2ID0gMDsKKysJCSAgICAJfQorKwkJfQorKworKwllcnI6CisrCUNNQUNfQ1RYX2ZyZWUoY3R4 KTsKKysKKysJaWYgKHJ2ID09IC0xKQorKwkJeworKwkJcnYgPSAwOworKwkJfQorKwlpZiAoIXJ2 KQorKwkJICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9DTUFDLEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOworKworKwlyZXR1cm4gcnY7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMu NzM2MTE4ODEyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kZXNf c2VsZnRlc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczNjExODgxMiArMDEwMAorQEAgLTAsMCAr MSwxNDcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciBrZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsK KysgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzMltd PQorKwl7CisrCXsKKysJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4ZWMs CisrCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCisrCXsgMHgw NiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCisrCXsgMHg0YywweDExLDB4 MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KKysJfSwKKysJeworKwl7IDB4NWQsMHg5ZSww eDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKKysJICAweDAxLDB4MTYsMHg3YywweDg1LDB4 MjMsMHhkZiwweGUwLDB4NjggfSwKKysJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3ZCww eDY5LDB4N2UgfSwKKysJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4ZmYg fSwKKysJfQorKwl9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QKKysgICAgeworKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyIGtleVsyNF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50 ZXh0WzhdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrICAgIH0g dGVzdHMzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwKKysJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsCisr CSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCisrCXsgMHg4Ziww eDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCisrCXsgMHg1OSwweDhjLDB4ZTUs MHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCisrCX0sCisrCXsKKysJeyAweERDLDB4QkEsMHg5 OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCisrCSAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5 LDB4QUIsMHhDRCwweEVGLAorKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4QkMs MHhDNCB9LAorKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9LAor Kwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAorKwl9LAorKwl9 OworKworKworK3N0YXRpYyBpbnQgY29ycnVwdF9kZXM7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRf ZGVzKCkKKysgICAgeworKyAgICBjb3JydXB0X2RlcyA9IDE7CisrICAgIH0KKysKKytpbnQgRklQ U19zZWxmdGVzdF9kZXMoKQorKyAgICB7CisrICAgIGludCBuLCByZXQgPSAwOworKyAgICBFVlBf Q0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAgIC8q IEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5z d2VycyAqLworKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCisrCXsKKysJdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbOF07CisrCisrCW1lbWNweShwbGFpbnRleHQsIHRlc3RzMltuXS5wbGFpbnRl eHQsIHNpemVvZihwbGFpbnRleHQpKTsKKysJaWYgKGNvcnJ1cHRfZGVzKQorKwkJcGxhaW50ZXh0 WzBdKys7CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwK KysJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKKysJCQkJcGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lw aGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKworKyAgICAvKiBFbmNyeXB0L2RlY3J5 cHQgd2l0aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49 MCA7IG4gPCAyIDsgKytuKQorKwl7CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBf ZGVzX2VkZTNfZWNiKCksCisrCQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCisrCQkJCXRlc3RzM1tu XS5wbGFpbnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKKysJCWdvdG8gZXJyOworKwl9 CisrICAgIHJldCA9IDE7CisrICAgIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgm Y3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxG VEVTVF9ERVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCisrICAgIHJldHVybiByZXQ7Cisr ICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19jdHIuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIu YworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBzCTIw MTMtMDItMTkgMTI6NDc6MzMuNzM2MTE4ODEyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM2MTE4ODEyICsw MTAwCitAQCAtMCwwICsxLDQzNiBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfY3RyLmMgKi8K KysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBm b3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICog Q29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3Jh bmRfbGNsLmgiCisrCisrc3RhdGljIHZvaWQgaW5jXzEyOChEUkJHX0NUUl9DVFggKmNjdHgpCisr CXsKKysJaW50IGk7CisrCXVuc2lnbmVkIGNoYXIgYzsKKysJdW5zaWduZWQgY2hhciAqcCA9IGNj dHgtPlYgKyAxNTsKKysJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrCQl7CisrCQljID0gKnA7 CisrCQljKys7CisrCQkqcCA9IGM7CisrCQlpZiAoYykKKysJCQlyZXR1cm47CisrCQlwLS07Cisr CQl9CisrCX0KKysKKytzdGF0aWMgdm9pZCBjdHJfWE9SKERSQkdfQ1RSX0NUWCAqY2N0eCwgY29u c3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKysJeworKwlzaXplX3QgaSwgbjsK KysJLyogQW55IHplcm8gcGFkZGluZyB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSByZXN1bHQg YXMgd2UKKysJICogYXJlIFhPUmluZy4gU28ganVzdCBwcm9jZXNzIGhvd2V2ZXIgbXVjaCBpbnB1 dCB3ZSBoYXZlLgorKwkgKi8KKysKKysJaWYgKCFpbiB8fCAhaW5sZW4pCisrCQlyZXR1cm47Cisr CisrCWlmIChpbmxlbiA8IGNjdHgtPmtleWxlbikKKysJCW4gPSBpbmxlbjsKKysJZWxzZQorKwkJ biA9IGNjdHgtPmtleWxlbjsKKysKKysJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKysJCWNjdHgt PktbaV0gXj0gaW5baV07CisrCWlmIChpbmxlbiA8PSBjY3R4LT5rZXlsZW4pCisrCQlyZXR1cm47 CisrCisrCW4gPSBpbmxlbiAtIGNjdHgtPmtleWxlbjsKKysJLyogU2hvdWxkIG5ldmVyIGhhcHBl biAqLworKwlpZiAobiA+IDE2KQorKwkJbiA9IDE2OworKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkr KykKKysJCWNjdHgtPlZbaV0gXj0gaW5baSArIGNjdHgtPmtleWxlbl07CisrCX0KKysKKysvKiBQ cm9jZXNzIGEgY29tcGxldGUgYmxvY2sgdXNpbmcgQkNDIGFsZ29yaXRobSBvZiBTUFAgODAwLTkw IDEwLjQuMyAqLworKworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2soRFJCR19DVFJfQ1RYICpj Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKQor Kwl7CisrCWludCBpOworKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysJCW91dFtpXSBePSBp bltpXTsKKysJQUVTX2VuY3J5cHQob3V0LCBvdXQsICZjY3R4LT5kZl9rcyk7CisrI2lmIDAKKytm cHJpbnRmKHN0ZGVyciwgIkJDQyBpbitvdXRcbiIpOworK0JJT19kdW1wX2ZwKHN0ZGVyciwgaW4s IDE2KTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIG91dCwgMTYpOworKyNlbmRpZgorKwl9CisrCisr LyogSGFuZGxlIHNldmVyYWwgQkNDIG9wZXJhdGlvbnMgZm9yIGFzIG11Y2ggZGF0YSBhcyB3ZSBu ZWVkIGZvciBLIGFuZCBYICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9ja3MoRFJCR19DVFJf Q1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbikKKysJeworKwljdHJfQkNDX2Jsb2Nr KGNjdHgsIGNjdHgtPktYLCBpbik7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAx NiwgaW4pOworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJY3RyX0JDQ19ibG9jayhjY3R4 LCBjY3R4LT5LWCArIDMyLCBpbik7CisrCX0KKysvKiBJbml0aWFsaXNlIEJDQyBibG9ja3M6IHRo ZXNlIGhhdmUgdGhlIHZhbHVlIDAsMSwyIGluIGxlZnRtb3N0IHBvc2l0aW9uczoKKysgKiBzZWUg MTAuNC4yIHN0YWdlIDcuCisrICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ19pbml0KERSQkdfQ1RS X0NUWCAqY2N0eCkKKysJeworKwltZW1zZXQoY2N0eC0+S1gsIDAsIDQ4KTsKKysJbWVtc2V0KGNj dHgtPmJsdG1wLCAwLCAxNik7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGNjdHgt PmJsdG1wKTsKKysJY2N0eC0+Ymx0bXBbM10gPSAxOworKwljdHJfQkNDX2Jsb2NrKGNjdHgsIGNj dHgtPktYICsgMTYsIGNjdHgtPmJsdG1wKTsKKysJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKKysJ CXsKKysJCWNjdHgtPmJsdG1wWzNdID0gMjsKKysJCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+ S1ggKyAzMiwgY2N0eC0+Ymx0bXApOworKwkJfQorKwl9CisrCisrLyogUHJvY2VzcyBzZXZlcmFs IGJsb2NrcyBpbnRvIEJDQyBhbGdvcml0aG0sIHNvbWUgcG9zc2libHkgcGFydGlhbCAqLworK3N0 YXRpYyB2b2lkIGN0cl9CQ0NfdXBkYXRlKERSQkdfQ1RSX0NUWCAqY2N0eCwKKysJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKysJeworKwlpZiAoIWluIHx8ICFpbmxl bikKKysJCXJldHVybjsKKysJLyogSWYgd2UgaGF2ZSBwYXJ0aWFsIGJsb2NrIGhhbmRsZSBpdCBm aXJzdCAqLworKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQorKwkJeworKwkJc2l6ZV90IGxlZnQgPSAx NiAtIGNjdHgtPmJsdG1wX3BvczsKKysJCS8qIElmIHdlIG5vdyBoYXZlIGEgY29tcGxldGUgYmxv Y2sgcHJvY2VzcyBpdCAqLworKwkJaWYgKGlubGVuID49IGxlZnQpCisrCQkJeworKwkJCW1lbWNw eShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGxlZnQpOworKwkJCWN0cl9CQ0Nf YmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKKysJCQljY3R4LT5ibHRtcF9wb3MgPSAwOworKwkJ CWlubGVuIC09IGxlZnQ7CisrCQkJaW4gKz0gbGVmdDsKKysJCQl9CisrCQl9CisrCS8qIFByb2Nl c3MgemVybyBvciBtb3JlIGNvbXBsZXRlIGJsb2NrcyAqLworKwl3aGlsZSAoaW5sZW4gPj0gMTYp CisrCQl7CisrCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBpbik7CisrCQlpbiArPSAxNjsKKysJCWlu bGVuIC09IDE2OworKwkJfQorKwkvKiBDb3B5IGFueSByZW1haW5pbmcgcGFydGlhbCBibG9jayB0 byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLworKwlpZiAoaW5sZW4gPiAwKQorKwkJeworKwkJbWVt Y3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgaW5sZW4pOworKwkJY2N0eC0+ Ymx0bXBfcG9zICs9IGlubGVuOworKwkJfQorKwl9CisrCisrc3RhdGljIHZvaWQgY3RyX0JDQ19m aW5hbChEUkJHX0NUUl9DVFggKmNjdHgpCisrCXsKKysJaWYgKGNjdHgtPmJsdG1wX3BvcykKKysJ CXsKKysJCW1lbXNldChjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgMCwgMTYgLSBjY3R4 LT5ibHRtcF9wb3MpOworKwkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOworKwkJ fQorKwl9CisrCisrc3RhdGljIHZvaWQgY3RyX2RmKERSQkdfQ1RSX0NUWCAqY2N0eCwKKysJCQlj b25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu Mywgc2l6ZV90IGluM2xlbikKKysJeworKwlzaXplX3QgaW5sZW47CisrCXVuc2lnbmVkIGNoYXIg KnAgPSBjY3R4LT5ibHRtcDsKKysJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzgwID0gMHg4MDsKKysK KysJY3RyX0JDQ19pbml0KGNjdHgpOworKwlpZiAoIWluMSkKKysJCWluMWxlbiA9IDA7CisrCWlm ICghaW4yKQorKwkJaW4ybGVuID0gMDsKKysJaWYgKCFpbjMpCisrCQlpbjNsZW4gPSAwOworKwlp bmxlbiA9IGluMWxlbiArIGluMmxlbiArIGluM2xlbjsKKysJLyogSW5pdGlhbGlzZSBMfHxOIGlu IHRlbXBvcmFyeSBibG9jayAqLworKwkqcCsrID0gKGlubGVuID4+IDI0KSAmIDB4ZmY7CisrCSpw KysgPSAoaW5sZW4gPj4gMTYpICYgMHhmZjsKKysJKnArKyA9IChpbmxlbiA+PiA4KSAmIDB4ZmY7 CisrCSpwKysgPSBpbmxlbiAmIDB4ZmY7CisrCS8qIE5CIGtleWxlbiBpcyBhdCBtb3N0IDMyIGJ5 dGVzICovCisrCSpwKysgPSAwOworKwkqcCsrID0gMDsKKysJKnArKyA9IDA7CisrCSpwID0gKHVu c2lnbmVkIGNoYXIpKChjY3R4LT5rZXlsZW4gKyAxNikgJiAweGZmKTsKKysJY2N0eC0+Ymx0bXBf cG9zID0gODsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4xLCBpbjFsZW4pOworKwljdHJfQkND X3VwZGF0ZShjY3R4LCBpbjIsIGluMmxlbik7CisrCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMywg aW4zbGVuKTsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgJmM4MCwgMSk7CisrCWN0cl9CQ0NfZmlu YWwoY2N0eCk7CisrCS8qIFNldCB1cCBrZXkgSyAqLworKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNj dHgtPktYLCBjY3R4LT5rZXlsZW4gKiA4LCAmY2N0eC0+ZGZfa3hrcyk7CisrCS8qIFggZm9sbG93 cyBrZXkgSyAqLworKwlBRVNfZW5jcnlwdChjY3R4LT5LWCArIGNjdHgtPmtleWxlbiwgY2N0eC0+ S1gsICZjY3R4LT5kZl9reGtzKTsKKysJQUVTX2VuY3J5cHQoY2N0eC0+S1gsIGNjdHgtPktYICsg MTYsICZjY3R4LT5kZl9reGtzKTsKKysJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKKysJCUFFU19l bmNyeXB0KGNjdHgtPktYICsgMTYsIGNjdHgtPktYICsgMzIsICZjY3R4LT5kZl9reGtzKTsKKysj aWYgMAorK2ZwcmludGYoc3RkZXJyLCAiT3V0cHV0IG9mIGN0cl9kZjpcbiIpOworK0JJT19kdW1w X2ZwKHN0ZGVyciwgY2N0eC0+S1gsIGNjdHgtPmtleWxlbiArIDE2KTsKKysjZW5kaWYKKysJfQor KworKy8qIE5CIHRoZSBuby1kZiAgVXBkYXRlIGluIFNQODAwLTkwIHNwZWNpZmllcyBhIGNvbnN0 YW50IGlucHV0IGxlbmd0aAorKyAqIG9mIHNlZWRsZW4sIGhvd2V2ZXIgb3RoZXIgdXNlcyBvZiB0 aGlzIGFsZ29yaXRobSBwYWQgdGhlIGlucHV0IHdpdGgKKysgKiB6ZXJvZXMgaWYgbmVjZXNzYXJ5 IGFuZCBoYXZlIHVwIHRvIHR3byBwYXJhbWV0ZXJzIFhPUmVkIHRvZ2V0aGVyLAorKyAqIGhhbmRs ZSBib3RoIGNhc2VzIGluIHRoaXMgZnVuY3Rpb24gaW5zdGVhZC4KKysgKi8KKysKKytzdGF0aWMg dm9pZCBjdHJfVXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAq aW4xLCBzaXplX3QgaW4xbGVuLAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3Qg aW4ybGVuLAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbikK KysJeworKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCS8qIGtzIGlzIGFs cmVhZHkgc2V0dXAgZm9yIGNvcnJlY3Qga2V5ICovCisrCWluY18xMjgoY2N0eCk7CisrCUFFU19l bmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7CisrCS8qIElmIGtleWxlbiBsb25n ZXIgdGhhbiAxMjggYml0cyBuZWVkIGV4dHJhIGVuY3J5cHQgKi8KKysJaWYgKGNjdHgtPmtleWxl biAhPSAxNikKKysJCXsKKysJCWluY18xMjgoY2N0eCk7CisrCQlBRVNfZW5jcnlwdChjY3R4LT5W LCBjY3R4LT5LICsgMTYsICZjY3R4LT5rcyk7CisrCQl9CisrCWluY18xMjgoY2N0eCk7CisrCUFF U19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPlYsICZjY3R4LT5rcyk7CisrCS8qIElmIDE5MiBiaXQg a2V5IHBhcnQgb2YgViBpcyBvbiBlbmQgb2YgSyAqLworKwlpZiAoY2N0eC0+a2V5bGVuID09IDI0 KQorKwkJeworKwkJbWVtY3B5KGNjdHgtPlYgKyA4LCBjY3R4LT5WLCA4KTsKKysJCW1lbWNweShj Y3R4LT5WLCBjY3R4LT5LICsgMjQsIDgpOworKwkJfQorKworKwlpZiAoZGN0eC0+eGZsYWdzICYg RFJCR19GTEFHX0NUUl9VU0VfREYpCisrCQl7CisrCQkvKiBJZiBubyBpbnB1dCByZXVzZSBleGlz dGluZyBkZXJpdmVkIHZhbHVlICovCisrCQlpZiAoaW4xIHx8IG5vbmNlIHx8IGluMikKKysJCQlj dHJfZGYoY2N0eCwgaW4xLCBpbjFsZW4sIG5vbmNlLCBub25jZWxlbiwgaW4yLCBpbjJsZW4pOwor KwkJLyogSWYgdGhpcyBhIHJldXNlIGlucHV0IGluMWxlbiAhPSAwICovCisrCQlpZiAoaW4xbGVu KQorKwkJCWN0cl9YT1IoY2N0eCwgY2N0eC0+S1gsIGRjdHgtPnNlZWRsZW4pOworKwkJfQorKwll bHNlCisrCQl7CisrCQljdHJfWE9SKGNjdHgsIGluMSwgaW4xbGVuKTsKKysJCWN0cl9YT1IoY2N0 eCwgaW4yLCBpbjJsZW4pOworKwkJfQorKworKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkss IGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKyNpZiAwCisrZnByaW50ZihzdGRlcnIsICJL K1YgYWZ0ZXIgdXBkYXRlIGlzOlxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LLCBj Y3R4LT5rZXlsZW4pOworK0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+ViwgMTYpOworKyNlbmRp ZgorKwl9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0 eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKKysJeworKwlEUkJHX0NUUl9DVFggKmNj dHggPSAmZGN0eC0+ZC5jdHI7CisrCW1lbXNldChjY3R4LT5LLCAwLCBzaXplb2YoY2N0eC0+Sykp OworKwltZW1zZXQoY2N0eC0+ViwgMCwgc2l6ZW9mKGNjdHgtPlYpKTsKKysJQUVTX3NldF9lbmNy eXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKKysJY3RyX1VwZGF0 ZShkY3R4LCBlbnQsIGVudGxlbiwgcGVycywgcGVyc2xlbiwgbm9uY2UsIG5vbmNlbGVuKTsKKysJ cmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX3Jlc2VlZChEUkJHX0NUWCAq ZGN0eCwgCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorKwl7CisrCWN0cl9V cGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDApOworKwlyZXR1 cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfZ2VuZXJhdGUoRFJCR19DVFggKmRj dHgsCisrCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorKwl7CisrCURSQkdfQ1RSX0NUWCAq Y2N0eCA9ICZkY3R4LT5kLmN0cjsKKysJaWYgKGFkaW4gJiYgYWRpbmxlbikKKysJCXsKKysJCWN0 cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisrCQkvKiBU aGlzIG1lYW5zIHdlIHJldXNlIGRlcml2ZWQgdmFsdWUgKi8KKysJCWlmIChkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKKysJCQl7CisrCQkJYWRpbiA9IE5VTEw7CisrCQkJYWRp bmxlbiA9IDE7CisrCQkJfQorKwkJfQorKwllbHNlCisrCQlhZGlubGVuID0gMDsKKysKKysJZm9y ICg7OykKKysJCXsKKysJCWluY18xMjgoY2N0eCk7CisrCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBE UkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQorKwkJCXsKKysJCQlBRVNfZW5jcnlw dChjY3R4LT5WLCBkY3R4LT5sYiwgJmNjdHgtPmtzKTsKKysJCQlkY3R4LT5sYl92YWxpZCA9IDE7 CisrCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKG91dGxlbiA8IDE2KQorKwkJCXsKKysJCQkv KiBVc2UgSyBhcyB0ZW1wIHNwYWNlIGFzIGl0IHdpbGwgYmUgdXBkYXRlZCAqLworKwkJCUFFU19l bmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7CisrCQkJaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBjY3R4LT5LKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91 dCwgY2N0eC0+Sywgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9CisrCQlBRVNfZW5jcnlwdChj Y3R4LT5WLCBvdXQsICZjY3R4LT5rcyk7CisrCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRj dHgsIG91dCkpCisrCQkJcmV0dXJuIDA7CisrCQlvdXQgKz0gMTY7CisrCQlvdXRsZW4gLT0gMTY7 CisrCQlpZiAob3V0bGVuID09IDApCisrCQkJYnJlYWs7CisrCQl9CisrCisrCWN0cl9VcGRhdGUo ZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisrCisrCXJldHVybiAxOwor KworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl91bmluc3RhbnRpYXRlKERSQkdfQ1RYICpk Y3R4KQorKwl7CisrCW1lbXNldCgmZGN0eC0+ZC5jdHIsIDAsIHNpemVvZihEUkJHX0NUUl9DVFgp KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RY ICpkY3R4KQorKwl7CisrCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysKKysJ c2l6ZV90IGtleWxlbjsKKysKKysJc3dpdGNoIChkY3R4LT50eXBlKQorKwkJeworKwkJY2FzZSBO SURfYWVzXzEyOF9jdHI6CisrCQlrZXlsZW4gPSAxNjsKKysJCWJyZWFrOworKworKwkJY2FzZSBO SURfYWVzXzE5Ml9jdHI6CisrCQlrZXlsZW4gPSAyNDsKKysJCWJyZWFrOworKworKwkJY2FzZSBO SURfYWVzXzI1Nl9jdHI6CisrCQlrZXlsZW4gPSAzMjsKKysJCWJyZWFrOworKworKwkJZGVmYXVs dDoKKysJCXJldHVybiAtMjsKKysJCX0KKysKKysJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2N0 cl9pbnN0YW50aWF0ZTsKKysJZGN0eC0+cmVzZWVkID0gZHJiZ19jdHJfcmVzZWVkOworKwlkY3R4 LT5nZW5lcmF0ZSA9IGRyYmdfY3RyX2dlbmVyYXRlOworKwlkY3R4LT51bmluc3RhbnRpYXRlID0g ZHJiZ19jdHJfdW5pbnN0YW50aWF0ZTsKKysKKysJY2N0eC0+a2V5bGVuID0ga2V5bGVuOworKwlk Y3R4LT5zdHJlbmd0aCA9IGtleWxlbiAqIDg7CisrCWRjdHgtPmJsb2NrbGVuZ3RoID0gMTY7Cisr CWRjdHgtPnNlZWRsZW4gPSBrZXlsZW4gKyAxNjsKKysKKysJaWYgKGRjdHgtPnhmbGFncyAmIERS QkdfRkxBR19DVFJfVVNFX0RGKQorKwkJeworKwkJLyogZGYgaW5pdGlhbGlzYXRpb24gKi8KKysJ CXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRmX2tleVszMl0gPQorKwkJCXsKKysJCQkweDAwLDB4MDEs MHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCisrCQkJMHgwOCwweDA5LDB4MGEsMHgwYiww eDBjLDB4MGQsMHgwZSwweDBmLAorKwkJCTB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4 MTYsMHgxNywKKysJCQkweDE4LDB4MTksMHgxYSwweDFiLDB4MWMsMHgxZCwweDFlLDB4MWYgCisr CQkJfTsKKysJCS8qIFNldCBrZXkgc2NoZWR1bGUgZm9yIGRmX2tleSAqLworKwkJQUVTX3NldF9l bmNyeXB0X2tleShkZl9rZXksIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+ZGZfa3MpOworKworKwkJ ZGN0eC0+bWluX2VudHJvcHkgPSBjY3R4LT5rZXlsZW47CisrCQlkY3R4LT5tYXhfZW50cm9weSA9 IERSQkdfTUFYX0xFTkdUSDsKKysJCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5 IC8gMjsKKysJCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKKysJCWRjdHgtPm1h eF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOworKwkJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9M RU5HVEg7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+ c2VlZGxlbjsKKysJCWRjdHgtPm1heF9lbnRyb3B5ID0gZGN0eC0+c2VlZGxlbjsKKysJCS8qIE5v bmNlIG5vdCB1c2VkICovCisrCQlkY3R4LT5taW5fbm9uY2UgPSAwOworKwkJZGN0eC0+bWF4X25v bmNlID0gMDsKKysJCWRjdHgtPm1heF9wZXJzID0gZGN0eC0+c2VlZGxlbjsKKysJCWRjdHgtPm1h eF9hZGluID0gZGN0eC0+c2VlZGxlbjsKKysJCX0KKysKKysJZGN0eC0+bWF4X3JlcXVlc3QgPSAx PDwxNjsKKysJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7CisrCisrCXJldHVybiAxOwor Kwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5j LmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYworLS0tIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcwkyMDEzLTAyLTE5 IDEyOjQ3OjMzLjczNjExODgxMiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19oYXNoLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MzYxMTg4MTIgKzAxMDAKK0BA IC0wLDAgKzEsMzc4IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19oYXNoLmMgKi8KKysvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0ZGxp Yi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKysvKiBUaGlzIGlzIEhhc2hfZGYg ZnJvbSBTUCA4MDAtOTAgMTAuNC4xICovCisrCisrc3RhdGljIGludCBoYXNoX2RmKERSQkdfQ1RY ICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4x LCBzaXplX3QgaW4xbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGlu MmxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4sCisrCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqaW40LCBzaXplX3QgaW40bGVuKQorKwl7CisrCUVWUF9NRF9D VFggKm1jdHggPSAmZGN0eC0+ZC5oYXNoLm1jdHg7CisrCXVuc2lnbmVkIGNoYXIgKnZ0bXAgPSBk Y3R4LT5kLmhhc2gudnRtcDsKKysJdW5zaWduZWQgY2hhciB0bXBbNl07CisrCS8qIFN0YW5kYXJk IG9ubHkgZXZlciBuZWVkcyBzZWVkbGVuIGJ5dGVzIHdoaWNoIGlzIGFsd2F5cyBsZXNzIHRoYW4K KysJICogbWF4aW11bSBwZXJtaXR0ZWQgc28gbm8gbmVlZCB0byBjaGVjayBsZW5ndGguCisrCSAq LworKwlzaXplX3Qgb3V0bGVuID0gZGN0eC0+c2VlZGxlbjsKKysJdG1wWzBdID0gMTsKKysJdG1w WzFdID0gKChvdXRsZW4gKiA4KSA+PiAyNCkgJiAweGZmOworKwl0bXBbMl0gPSAoKG91dGxlbiAq IDgpID4+IDE2KSAmIDB4ZmY7CisrCXRtcFszXSA9ICgob3V0bGVuICogOCkgPj4gOCkgJiAweGZm OworKwl0bXBbNF0gPSAob3V0bGVuICogOCkgJiAweGZmOworKwlpZiAoIWluMSkKKysJCXsKKysJ CXRtcFs1XSA9ICh1bnNpZ25lZCBjaGFyKWluMWxlbjsKKysJCWluMSA9IHRtcCArIDU7CisrCQlp bjFsZW4gPSAxOworKwkJfQorKwlmb3IgKDs7KQorKwkJeworKwkJaWYgKCFGSVBTX2RpZ2VzdGlu aXQobWN0eCwgZGN0eC0+ZC5oYXNoLm1kKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghRklQU19k aWdlc3R1cGRhdGUobWN0eCwgdG1wLCA1KSkKKysJCQlyZXR1cm4gMDsKKysJCWlmIChpbjEgJiYg IUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMSwgaW4xbGVuKSkKKysJCQlyZXR1cm4gMDsKKysJ CWlmIChpbjIgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMiwgaW4ybGVuKSkKKysJCQly ZXR1cm4gMDsKKysJCWlmIChpbjMgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMywgaW4z bGVuKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmIChpbjQgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1j dHgsIGluNCwgaW40bGVuKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmIChvdXRsZW4gPCBkY3R4LT5i bG9ja2xlbmd0aCkKKysJCQl7CisrCQkJaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKG1jdHgsIHZ0bXAs IE5VTEwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1jcHkob3V0LCB2dG1wLCBvdXRsZW4pOwor KwkJCU9QRU5TU0xfY2xlYW5zZSh2dG1wLCBkY3R4LT5ibG9ja2xlbmd0aCk7CisrCQkJcmV0dXJu IDE7CisrCQkJfQorKwkJZWxzZSBpZighRklQU19kaWdlc3RmaW5hbChtY3R4LCBvdXQsIE5VTEwp KQorKwkJCXJldHVybiAwOworKworKwkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJ aWYgKG91dGxlbiA9PSAwKQorKwkJCXJldHVybiAxOworKwkJdG1wWzBdKys7CisrCQlvdXQgKz0g ZGN0eC0+YmxvY2tsZW5ndGg7CisrCQl9CisrCX0KKysKKysKKysvKiBBZGQgYW4gdW5zaWduZWQg YnVmZmVyIHRvIHRoZSBidWYgdmFsdWUsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBidWYuIEZvcgor KyAqIHRoaXMgYWxnb3JpdGhtIHRoZSBsZW5ndGggb2YgaW5wdXQgbmV2ZXIgZXhjZWVkcyB0aGUg c2VlZCBsZW5ndGguCisrICovCisrCisrc3RhdGljIHZvaWQgY3R4X2FkZF9idWYoRFJCR19DVFgg KmRjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKysJCQkJdW5zaWduZWQgY2hhciAqaW4sIHNpemVf dCBpbmxlbikKKysJeworKwlzaXplX3QgaSA9IGlubGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFy ICpxOworKwl1bnNpZ25lZCBjaGFyIGMsICpwOworKwlwID0gYnVmICsgZGN0eC0+c2VlZGxlbjsK KysJcSA9IGluICsgaW5sZW47CisrCisrCU9QRU5TU0xfYXNzZXJ0KGkgPD0gZGN0eC0+c2VlZGxl bik7CisrCisrCS8qIFNwZWNpYWwgY2FzZTogemVybyBsZW5ndGgsIGp1c3QgaW5jcmVtZW50IGJ1 ZmZlciAqLworKwlpZiAoaSkKKysJCWMgPSAwOworKwllbHNlIAorKwkJYyA9IDE7CisrCisrCXdo aWxlIChpKQorKwkJeworKwkJaW50IHI7CisrCQlwLS07CisrCQlxLS07CisrCQlyID0gKnAgKyAq cSArIGM7CisrCQkvKiBDYXJyeSAqLworKwkJaWYgKHIgPiAweGZmKQorKwkJCWMgPSAxOworKwkJ ZWxzZQorKwkJCWMgPSAwOworKwkJKnAgPSByICYgMHhmZjsKKysJCWktLTsKKysJCX0KKysKKysJ aSA9IGRjdHgtPnNlZWRsZW4gLSBpbmxlbjsKKysKKysJLyogSWYgbm90IGFkZGluZyB3aG9sZSBi dWZmZXIgaGFuZGxlIGZpbmFsIGNhcnJpZXMgKi8KKysJaWYgKGMgJiYgaSkKKysJCXsKKysJCWRv CisrCQkJeworKwkJCXAtLTsKKysJCQljID0gKnA7CisrCQkJYysrOworKwkJCSpwID0gYzsKKysJ CQlpZihjKQorKwkJCQlyZXR1cm47CisrCQkJfSB3aGlsZShpLS0pOworKwkJfQorKwl9CisrCisr LyogRmluYWxpc2UgYW5kIGFkZCBoYXNoIHRvIFYgKi8KKysJCisrc3RhdGljIGludCBjdHhfYWRk X21kKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWlmICghRklQU19kaWdlc3RmaW5hbCgmZGN0eC0+ ZC5oYXNoLm1jdHgsIGRjdHgtPmQuaGFzaC52dG1wLCBOVUxMKSkKKysJCQlyZXR1cm4gMDsKKysJ Y3R4X2FkZF9idWYoZGN0eCwgZGN0eC0+ZC5oYXNoLlYsIGRjdHgtPmQuaGFzaC52dG1wLCBkY3R4 LT5ibG9ja2xlbmd0aCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBoYXNoX2dl bihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuKQorKwl7 CisrCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwlpZiAob3V0bGVuID09 IDApCisrCQlyZXR1cm4gMTsKKysJbWVtY3B5KGhjdHgtPnZ0bXAsIGhjdHgtPlYsIGRjdHgtPnNl ZWRsZW4pOworKwlmb3IoOzspCisrCQl7CisrCQlGSVBTX2RpZ2VzdGluaXQoJmhjdHgtPm1jdHgs IGhjdHgtPm1kKTsKKysJCUZJUFNfZGlnZXN0dXBkYXRlKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1w LCBkY3R4LT5zZWVkbGVuKTsKKysJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNU KSAmJiAhZGN0eC0+bGJfdmFsaWQpCisrCQkJeworKwkJCUZJUFNfZGlnZXN0ZmluYWwoJmhjdHgt Pm1jdHgsIGRjdHgtPmxiLCBOVUxMKTsKKysJCQlkY3R4LT5sYl92YWxpZCA9IDE7CisrCQkJfQor KwkJZWxzZSBpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCisrCQkJeworKwkJCUZJUFNf ZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIE5VTEwpOworKwkJCWlmICghZmlw c19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaGN0eC0+dnRtcCkpCisrCQkJCXJldHVybiAwOworKwkJ CW1lbWNweShvdXQsIGhjdHgtPnZ0bXAsIG91dGxlbik7CisrCQkJcmV0dXJuIDE7CisrCQkJfQor KwkJZWxzZQorKwkJCXsKKysJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBvdXQsIE5V TEwpOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKKysJCQkJcmV0 dXJuIDA7CisrCQkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJCWlmIChvdXRsZW4g PT0gMCkKKysJCQkJcmV0dXJuIDE7CisrCQkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJ CX0KKysJCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPnZ0bXAsIE5VTEwsIDApOworKwkJfQorKwl9 CisrCisrc3RhdGljIGludCBkcmJnX2hhc2hfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisr CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrCQkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAorKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAq aGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5WLCAKKysJ CQllbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuLAorKwkJCU5V TEwsIDApKQorKwkJcmV0dXJuIDA7CisrCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLCAKKysJ CQlOVUxMLCAwLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAorKwkJCU5VTEwsIDAsIE5VTEwsIDAp KQorKwkJcmV0dXJuIDA7CisrCisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQorKwlmcHJpbnRmKHN0 ZGVyciwgIlYrQyBhZnRlciBpbnN0YW50aWF0ZTpcbiIpOworKwloZXhwcmludChzdGRlcnIsIGhj dHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgt PnNlZWRsZW4pOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworKwkKKytzdGF0aWMgaW50 IGRyYmdfaGFzaF9yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4s IHNpemVfdCBhZGluX2xlbikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQu aGFzaDsKKysJLyogViBhYm91dCB0byBiZSB1cGRhdGVkIHNvIHVzZSBDIGFzIG91dHB1dCBpbnN0 ZWFkICovCisrCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLAorKwkJCU5VTEwsIDEsIGhjdHgt PlYsIGRjdHgtPnNlZWRsZW4sCisrCQkJZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xlbikpCisr CQlyZXR1cm4gMDsKKysJbWVtY3B5KGhjdHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwor KwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgTlVMTCwgMCwKKysJCQloY3R4LT5WLCBkY3R4 LT5zZWVkbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKKysJCXJldHVybiAwOworKyNpZmRlZiBIQVNI X0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgcmVzZWVkOlxuIik7Cisr CWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7CisrCWhleHByaW50KHN0 ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrI2VuZGlmCisrCXJldHVybiAxOworKwl9 CisrCisrc3RhdGljIGludCBkcmJnX2hhc2hfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJ CXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCURSQkdfSEFTSF9DVFggKmhjdHgg PSAmZGN0eC0+ZC5oYXNoOworKwlFVlBfTURfQ1RYICptY3R4ID0gJmhjdHgtPm1jdHg7CisrCXVu c2lnbmVkIGNoYXIgdG1wWzRdOworKwlpZiAoYWRpbiAmJiBhZGluX2xlbikKKysJCXsKKysJCXRt cFswXSA9IDI7CisrCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCisrCQkJ cmV0dXJuIDA7CisrCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgdG1wLCAxKSkKKysJCQly ZXR1cm4gMDsKKysJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5z ZWVkbGVuKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBh ZGluLCBhZGluX2xlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIWN0eF9hZGRfbWQoZGN0eCkp CisrCQkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghaGFzaF9nZW4oZGN0eCwgb3V0LCBvdXRsZW4p KQorKwkJcmV0dXJuIDA7CisrCisrCXRtcFswXSA9IDM7CisrCWlmICghRklQU19kaWdlc3Rpbml0 KG1jdHgsIGhjdHgtPm1kKSkKKysJCXJldHVybiAwOworKwlpZiAoIUVWUF9EaWdlc3RVcGRhdGUo bWN0eCwgdG1wLCAxKSkKKysJCXJldHVybiAwOworKwlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0 eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFjdHhf YWRkX21kKGRjdHgpKQorKwkJcmV0dXJuIDA7CisrCisrCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgt PlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKworKwl0bXBbMF0gPSAoZGN0eC0+cmVzZWVk X2NvdW50ZXIgPj4gMjQpICYgMHhmZjsKKysJdG1wWzFdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVy ID4+IDE2KSAmIDB4ZmY7CisrCXRtcFsyXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiA4KSAm IDB4ZmY7CisrCXRtcFszXSA9IGRjdHgtPnJlc2VlZF9jb3VudGVyICYgMHhmZjsKKysJY3R4X2Fk ZF9idWYoZGN0eCwgaGN0eC0+ViwgdG1wLCA0KTsKKysjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCisr CWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGdlbmVyYXRlOlxuIik7CisrCWhleHByaW50KHN0 ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7CisrCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ QywgZGN0eC0+c2VlZGxlbik7CisrI2VuZGlmCisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGlj IGludCBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlFVlBf TURfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaGFzaC5tY3R4KTsKKysJT1BFTlNTTF9jbGVhbnNlKCZk Y3R4LT5kLmhhc2gsIHNpemVvZihEUkJHX0hBU0hfQ1RYKSk7CisrCXJldHVybiAxOworKwl9Cisr CisraW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgpCisrCXsKKysJY29uc3Qg RVZQX01EICptZDsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCW1k ID0gRklQU19nZXRfZGlnZXN0YnluaWQoZGN0eC0+dHlwZSk7CisrCWlmICghbWQpCisrCQlyZXR1 cm4gLTI7CisrCXN3aXRjaCAoZGN0eC0+dHlwZSkKKysJCXsKKysJCWNhc2UgTklEX3NoYTE6Cisr CQlkY3R4LT5zdHJlbmd0aCA9IDEyODsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfc2hhMjI0 OgorKwkJZGN0eC0+c3RyZW5ndGggPSAxOTI7CisrCQlicmVhazsKKysKKysJCWRlZmF1bHQ6Cisr CQlkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysJCWJyZWFrOworKwkJfQorKworKwlkY3R4LT5pbnN0 YW50aWF0ZSA9IGRyYmdfaGFzaF9pbnN0YW50aWF0ZTsKKysJZGN0eC0+cmVzZWVkID0gZHJiZ19o YXNoX3Jlc2VlZDsKKysJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2hhc2hfZ2VuZXJhdGU7CisrCWRj dHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZTsKKysKKysJZGN0eC0+ ZC5oYXNoLm1kID0gbWQ7CisrCUVWUF9NRF9DVFhfaW5pdCgmaGN0eC0+bWN0eCk7CisrCisrCS8q IFRoZXNlIGFyZSB0YWtlbiBmcm9tIFNQIDgwMC05MCAxMC4xIHRhYmxlIDIgKi8KKysKKysJZGN0 eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKKysJaWYgKGRjdHgtPmJsb2NrbGVu Z3RoID4gMzIpCisrCQlkY3R4LT5zZWVkbGVuID0gMTExOworKwllbHNlCisrCQlkY3R4LT5zZWVk bGVuID0gNTU7CisrCisrCisrCWRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c3RyZW5ndGggLyA4 OworKwlkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysJZGN0eC0+bWlu X25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOworKwlkY3R4LT5tYXhfbm9uY2UgPSBEUkJH X01BWF9MRU5HVEg7CisrCisrCWRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOworKwlk Y3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysJZGN0eC0+bWF4X3JlcXVlc3Qg PSAxPDwxNjsKKysJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7CisrCisrCXJldHVybiAx OworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1h Yy5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYworLS0t IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcwkyMDEzLTAy LTE5IDEyOjQ3OjMzLjczNzExODgzMiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19obWFjLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MzcxMTg4MzIgKzAxMDAK K0BAIC0wLDAgKzEsMjgxIEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19obWFjLmMgKi8KKysv KiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3Ig dGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworK3N0YXRpYyBpbnQgZHJiZ19obWFj X3VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBz aXplX3QgaW4xbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJs ZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbgorKwkJCSkK KysJeworKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjMCA9IDAsIGMxID0gMTsKKysJRFJCR19ITUFD X0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCUhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhj dHg7CisrCisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVu Z3RoLCBobWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZSho Y3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFI TUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEpKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjFsZW4gJiYg IUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4y bGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCisrCQlyZXR1cm4gMDsKKysJ aWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQorKwkJcmV0dXJu IDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKKysJCXJldHVy biAwOworKworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xl bmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUo aGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCisrCWlm ICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysJCXJldHVybiAwOworKworKwlp ZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4pCisrCQlyZXR1cm4gMTsKKysKKysJaWYg KCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1k LCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYs IGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhj dHgsICZjMSwgMSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUo aGN0eCwgaW4xLCBpbjFsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjJsZW4gJiYgIUhNQUNf VXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4zbGVuICYm ICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCisrCQlyZXR1cm4gMDsKKysKKysJaWYg KCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCisrCWlm ICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5t ZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5W LCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0ZpbmFs KGhjdHgsIGhtYWMtPlYsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCisrCXJldHVybiAxOworKwor Kwl9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgs CisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAorKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCisrCXsKKysJRFJCR19ITUFDX0NU WCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCW1lbXNldChobWFjLT5LLCAwLCBkY3R4LT5ibG9j a2xlbmd0aCk7CisrCW1lbXNldChobWFjLT5WLCAxLCBkY3R4LT5ibG9ja2xlbmd0aCk7CisrCWlm ICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAorKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNl X2xlbiwgcHN0ciwgcHN0cl9sZW4pKQorKwkJcmV0dXJuIDA7CisrCisrI2lmZGVmIEhNQUNfRFJC R19UUkFDRQorKwlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBpbnN0YW50aWF0ZTpcbiIpOwor KwloZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysJaGV4cHJp bnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7CisrI2VuZGlmCisrCXJldHVy biAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfcmVzZWVkKERSQkdfQ1RYICpkY3R4 LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJaWYgKCFk cmJnX2htYWNfdXBkYXRlKGRjdHgsCisrCQkJZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xlbiwg TlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCisrCXsK KysJCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOworKwkJZnByaW50ZihzdGRl cnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxuIik7CisrCQloZXhwcmludChzdGRlcnIsIGhtYWMtPkss IGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysJCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+ YmxvY2tsZW5ndGgpOworKwl9CisrI2VuZGlmCisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGlj IGludCBkcmJnX2htYWNfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJCXVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5o bWFjOworKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OworKwljb25zdCB1bnNpZ25lZCBj aGFyICpWdG1wID0gaG1hYy0+VjsKKysJaWYgKGFkaW5fbGVuICYmICFkcmJnX2htYWNfdXBkYXRl KGRjdHgsIGFkaW4sIGFkaW5fbGVuLAorKwkJCQkJCU5VTEwsIDAsIE5VTEwsIDApKQorKwkJcmV0 dXJuIDA7CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFj LT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwKKysJCQkJCQkJaG1hYy0+bWQsIE5VTEwpKQorKwkJCXJl dHVybiAwOworKwkJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBWdG1wLCBkY3R4LT5ibG9ja2xlbmd0 aCkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVT VCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQorKwkJCXsKKysJCQlpZiAoIUhNQUNfRmluYWwoaGN0eCwg ZGN0eC0+bGIsIE5VTEwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlkY3R4LT5sYl92YWxpZCA9IDE7 CisrCQkJVnRtcCA9IGRjdHgtPmxiOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWVsc2UgaWYg KG91dGxlbiA+IGRjdHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJCQlpZiAoIUhNQUNfRmluYWwo aGN0eCwgb3V0LCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3By bmdfdGVzdChkY3R4LCBvdXQpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlWdG1wID0gb3V0OworKwkJ CX0KKysJCWVsc2UKKysJCQl7CisrCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5V TEwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgs IGhtYWMtPlYpKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1jcHkob3V0LCBobWFjLT5WLCBvdXRs ZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJ CW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCX0KKysJaWYgKCFkcmJnX2htYWNfdXBk YXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKKysJCXJldHVybiAw OworKworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19obWFjX3VuaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJSE1BQ19DVFhfY2xlYW51cCgmZGN0eC0+ZC5o bWFjLmhjdHgpOworKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6ZW9mKERSQkdf SE1BQ19DVFgpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlwc19kcmJnX2htYWNfaW5p dChEUkJHX0NUWCAqZGN0eCkKKysJeworKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKKysJRFJC R19ITUFDX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhtYWM7CisrCWRjdHgtPnN0cmVuZ3RoID0gMjU2 OworKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCisrCQl7CisrCQljYXNlIE5JRF9obWFjV2l0aFNIQTE6 CisrCQltZCA9IEVWUF9zaGExKCk7CisrCQlkY3R4LT5zdHJlbmd0aCA9IDEyODsKKysJCWJyZWFr OworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyMjQ6CisrCQltZCA9IEVWUF9zaGEyMjQoKTsK KysJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9obWFj V2l0aFNIQTI1NjoKKysJCW1kID0gRVZQX3NoYTI1NigpOworKwkJYnJlYWs7CisrCisrCQljYXNl IE5JRF9obWFjV2l0aFNIQTM4NDoKKysJCW1kID0gRVZQX3NoYTM4NCgpOworKwkJYnJlYWs7Cisr CisrCQljYXNlIE5JRF9obWFjV2l0aFNIQTUxMjoKKysJCW1kID0gRVZQX3NoYTUxMigpOworKwkJ YnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJZGN0eC0+c3RyZW5ndGggPSAwOworKwkJcmV0dXJu IC0yOworKwkJfQorKyAgICAgICAgZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2htYWNfaW5zdGFu dGlhdGU7CisrICAgICAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2htYWNfcmVzZWVkOworKyAgICAg ICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2htYWNfZ2VuZXJhdGU7CisrICAgICAgICBkY3R4LT51 bmluc3RhbnRpYXRlID0gZHJiZ19obWFjX3VuaW5zdGFudGlhdGU7CisrCUhNQUNfQ1RYX2luaXQo JmhjdHgtPmhjdHgpOworKwloY3R4LT5tZCA9IG1kOworKwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1f RVZQX01EX3NpemUobWQpOworKwlkY3R4LT5zZWVkbGVuID0gTV9FVlBfTURfc2l6ZShtZCk7Cisr CisrICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKKysgICAg ICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICAgICAgZGN0 eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOworKyAgICAgICAgZGN0eC0+bWF4 X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBE UkJHX01BWF9MRU5HVEg7CisrICAgICAgICBkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdU SDsKKysKKysgICAgICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7CisrICAgICAgICBkY3R4 LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYworLS0tIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM3MTE4 ODMyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5j CTIwMTMtMDItMTkgMTI6NDc6MzMuNzM3MTE4ODMyICswMTAwCitAQCAtMCwwICsxLDU3OCBAQAor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysjaW5jbHVkZSAiZmlwc19y YW5kX2xjbC5oIgorKworKy8qIFN1cHBvcnQgZnJhbWV3b3JrIGZvciBTUDgwMC05MCBEUkJHcyAq LworKworK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5cGUsIHVuc2ln bmVkIGludCBmbGFncykKKysJeworKwlpbnQgcnY7CisrCW1lbXNldChkY3R4LCAwLCBzaXplb2Yo RFJCR19DVFgpKTsKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsK KysJZGN0eC0+eGZsYWdzID0gZmxhZ3M7CisrCWRjdHgtPnR5cGUgPSB0eXBlOworKworKwlkY3R4 LT5pZmxhZ3MgPSAwOworKwlkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gMDsKKysJZGN0eC0+aGVh bHRoX2NoZWNrX2NudCA9IDA7CisrCWRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IERSQkdf SEVBTFRIX0lOVEVSVkFMOworKworKwlydiA9IGZpcHNfZHJiZ19oYXNoX2luaXQoZGN0eCk7Cisr CisrCWlmIChydiA9PSAtMikKKysJCXJ2ID0gZmlwc19kcmJnX2N0cl9pbml0KGRjdHgpOworKwlp ZiAocnYgPT0gLTIpCisrCQlydiA9IGZpcHNfZHJiZ19obWFjX2luaXQoZGN0eCk7CisrCisrCWlm IChydiA8PSAwKQorKwkJeworKwkJaWYgKHJ2ID09IC0yKQorKwkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19JTklULCBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFKTsKKysJCWVsc2UKKysJ CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX0VSUk9SX0lOSVRJQUxJU0lO R19EUkJHKTsKKysJCX0KKysKKysJLyogSWYgbm90IGluIHRlc3QgbW9kZSBydW4gc2VsZnRlc3Rz IG9uIERSQkcgb2YgdGhlIHNhbWUgdHlwZSAqLworKworKwlpZiAoIShkY3R4LT54ZmxhZ3MgJiBE UkJHX0ZMQUdfVEVTVCkpCisrCQl7CisrCQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0 eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfU0VM RlRFU1RfRkFJTFVSRSk7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKworKwlyZXR1cm4g cnY7CisrCX0KKysKKytEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwgdW5zaWduZWQg aW50IGZsYWdzKQorKwl7CisrCURSQkdfQ1RYICpkY3R4OworKwlkY3R4ID0gT1BFTlNTTF9tYWxs b2Moc2l6ZW9mKERSQkdfQ1RYKSk7CisrCWlmICghZGN0eCkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysJCXJldHVybiBOVUxM OworKwkJfQorKworKwlpZiAodHlwZSA9PSAwKQorKwkJeworKwkJbWVtc2V0KGRjdHgsIDAsIHNp emVvZihEUkJHX0NUWCkpOworKwkJZGN0eC0+dHlwZSA9IDA7CisrCQlkY3R4LT5zdGF0dXMgPSBE UkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOworKwkJcmV0dXJuIGRjdHg7CisrCQl9CisrCisrCWlm IChGSVBTX2RyYmdfaW5pdChkY3R4LCB0eXBlLCBmbGFncykgPD0gMCkKKysJCXsKKysJCU9QRU5T U0xfZnJlZShkY3R4KTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKwkJCisrCXJldHVybiBkY3R4 OworKwl9CisrCisrdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlp ZiAoZGN0eC0+dW5pbnN0YW50aWF0ZSkKKysJCWRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7Cisr CS8qIERvbid0IGZyZWUgdXAgZGVmYXVsdCBEUkJHICovCisrCWlmIChkY3R4ID09IEZJUFNfZ2V0 X2RlZmF1bHRfZHJiZygpKQorKwkJeworKwkJbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NU WCkpOworKwkJZGN0eC0+dHlwZSA9IDA7CisrCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19V TklOSVRJQUxJU0VEOworKwkJfQorKwllbHNlCisrCQl7CisrCQlPUEVOU1NMX2NsZWFuc2UoJmRj dHgtPmQsIHNpemVvZihkY3R4LT5kKSk7CisrCQlPUEVOU1NMX2ZyZWUoZGN0eCk7CisrCQl9Cisr CX0KKysKKytzdGF0aWMgc2l6ZV90IGZpcHNfZ2V0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVu c2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNp emVfdCBtYXhfbGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgKnRvdXQsICpwOworKwlzaXplX3Qg YmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuLCBydjsKKysJaWYgKCFkY3R4LT5nZXRfZW50cm9w eSkKKysJCXJldHVybiAwOworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QgfHwg IWJsKQorKwkJcmV0dXJuIGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsIHBvdXQsIGVudHJvcHksIG1p bl9sZW4sIG1heF9sZW4pOworKwlydiA9IGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsICZ0b3V0LCBl bnRyb3B5ICsgYmwsCisrCQkJCW1pbl9sZW4gKyBibCwgbWF4X2xlbiArIGJsKTsKKysJaWYgKHRv dXQgPT0gTlVMTCkKKysJCXJldHVybiAwOworKwkqcG91dCA9IHRvdXQgKyBibDsKKysJaWYgKHJ2 IDwgKG1pbl9sZW4gKyBibCkgfHwgKHJ2ICUgYmwpKQorKwkJcmV0dXJuIDA7CisrCS8qIENvbXBh cmUgY29uc2VjdXRpdmUgYmxvY2tzIGZvciBjb250aW51b3VzIFBSTkcgdGVzdCAqLworKwlmb3Ig KHAgPSB0b3V0OyBwIDwgdG91dCArIHJ2IC0gYmw7IHAgKz0gYmwpCisrCQl7CisrCQlpZiAoIW1l bWNtcChwLCBwICsgYmwsIGJsKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19HRVRf RU5UUk9QWSwgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLKTsKKysJCQlyZXR1cm4gMDsKKysJ CQl9CisrCQl9CisrCXJ2IC09IGJsOworKwlpZiAocnYgPiBtYXhfbGVuKQorKwkJcmV0dXJuIG1h eF9sZW47CisrCXJldHVybiBydjsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfY2xlYW51cF9l bnRyb3B5KERSQkdfQ1RYICpkY3R4LAorKwkJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qg b2xlbikKKysJeworKwlzaXplX3QgYmw7CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf VEVTVCkKKysJCWJsID0gMDsKKysJZWxzZQorKwkJYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVu OworKwkvKiBDYWxsIGNsZWFudXAgd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgKi8KKysJZGN0eC0+ Y2xlYW51cF9lbnRyb3B5KGRjdHgsIG91dCAtIGJsLCBvbGVuICsgYmwpOworKwl9CisrCisrCisr aW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCisrCXsKKysJc2l6ZV90IGVudGxlbiA9 IDAsIG5vbmNlbGVuID0gMDsKKysJdW5zaWduZWQgY2hhciAqbm9uY2UgPSBOVUxMLCAqZW50cm9w eSA9IE5VTEw7CisrCisrI2lmIDAKKysJLyogUHV0IGhlcmUgc28gZXJyb3Igc2NyaXB0IHBpY2tz IHRoZW0gdXAgKi8KKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLAorKwkJ CQlGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORyk7CisrCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOX0VSUk9SX1NUQVRFKTsKKysJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfQUxSRUFEWV9JTlNUQU5U SUFURUQpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9F UlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5T VEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFKTsKKysJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IpOworKwlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9EUkJHX05PVF9JTklU SUFMSVNFRCk7CisrI2VuZGlmCisrCisrCWludCByID0gMDsKKysKKysJaWYgKHBlcnNsZW4gPiBk Y3R4LT5tYXhfcGVycykKKysJCXsKKysJCXIgPSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklO R19UT09fTE9ORzsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWRjdHgtPmluc3RhbnRp YXRlKQorKwkJeworKwkJciA9IEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRDsKKysJCWdvdG8g ZW5kOworKwkJfQorKworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQpCisrCQl7CisrCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQor KwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7CisrCQllbHNlCisrCQkJciA9IEZJUFNfUl9B TFJFQURZX0lOU1RBTlRJQVRFRDsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlkY3R4LT5zdGF0 dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysKKysJZW50bGVuID0gZmlwc19nZXRfZW50cm9weShk Y3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCisrCQkJCWRjdHgtPm1pbl9lbnRyb3B5LCBk Y3R4LT5tYXhfZW50cm9weSk7CisrCisrCWlmIChlbnRsZW4gPCBkY3R4LT5taW5fZW50cm9weSB8 fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkKKysJCXsKKysJCXIgPSBGSVBTX1JfRVJST1Jf UkVUUklFVklOR19FTlRST1BZOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChkY3R4LT5t YXhfbm9uY2UgPiAwICYmIGRjdHgtPmdldF9ub25jZSkKKysJCXsKKysJCW5vbmNlbGVuID0gZGN0 eC0+Z2V0X25vbmNlKGRjdHgsICZub25jZSwKKysJCQkJCWRjdHgtPnN0cmVuZ3RoIC8gMiwKKysJ CQkJCWRjdHgtPm1pbl9ub25jZSwgZGN0eC0+bWF4X25vbmNlKTsKKysKKysJCWlmIChub25jZWxl biA8IGRjdHgtPm1pbl9ub25jZSB8fCBub25jZWxlbiA+IGRjdHgtPm1heF9ub25jZSkKKysJCQl7 CisrCQkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFOworKwkJCWdvdG8gZW5kOwor KwkJCX0KKysKKysJCX0KKysKKysJaWYgKCFkY3R4LT5pbnN0YW50aWF0ZShkY3R4LCAKKysJCQkJ ZW50cm9weSwgZW50bGVuLAorKwkJCQlub25jZSwgbm9uY2VsZW4sCisrCQkJCXBlcnMsIHBlcnNs ZW4pKQorKwkJeworKwkJciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkc7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVBRFk7 CisrCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrCQlkY3R4LT5y ZXNlZWRfY291bnRlciA9IDE7CisrCisrCWVuZDoKKysKKysJaWYgKGVudHJvcHkgJiYgZGN0eC0+ Y2xlYW51cF9lbnRyb3B5KQorKwkJZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50cm9weSwg ZW50bGVuKTsKKysKKysJaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFudXBfbm9uY2UpCisrCQlkY3R4 LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7CisrCisrCWlmIChkY3R4LT5z dGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCisrCQlyZXR1cm4gMTsKKysKKysJaWYgKHIgJiYg IShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKwkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0lOU1RBTlRJQVRFLCByKTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KKysKKytzdGF0 aWMgaW50IGRyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4sIHNpemVfdCBhZGlubGVuLCBpbnQgaGNoZWNrKQorKwl7CisrCXVuc2lnbmVkIGNo YXIgKmVudHJvcHkgPSBOVUxMOworKwlzaXplX3QgZW50bGVuID0gMDsKKysJaW50IHIgPSAwOwor KworKyNpZiAwCisrCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfTk9UX0lOU1RB TlRJQVRFRCk7CisrCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfQURESVRJT05B TF9JTlBVVF9UT09fTE9ORyk7CisrI2VuZGlmCisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19T VEFUVVNfUkVBRFkKKysJCSYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpCisr CQl7CisrCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQorKwkJCXIgPSBG SVBTX1JfSU5fRVJST1JfU1RBVEU7CisrCQllbHNlIGlmKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NU QVRVU19VTklOSVRJQUxJU0VEKQorKwkJCXIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKKysJ CWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWFkaW4pCisrCQlhZGlubGVuID0gMDsKKysJZWxz ZSBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQorKwkJeworKwkJciA9IEZJUFNfUl9BRERJ VElPTkFMX0lOUFVUX1RPT19MT05HOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWRjdHgtPnN0 YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKwkvKiBQZWZvcm0gaGVhbHRoIGNoZWNrIG9uIGFs bCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBwcmVkaWN0aW9uCisrCSAqIHJlc2lzdGFuY2Ug cmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9kZS4KKysJICovCisrCWlmIChoY2hlY2sgJiYgIShk Y3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpCisrCQl7CisrCQlpZiAoIUZJUFNfZHJiZ19o ZWFsdGhfY2hlY2soZGN0eCkpCisrCQkJeworKwkJCXIgPSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVS RTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQl9CisrCisrCWVudGxlbiA9IGZpcHNfZ2V0X2Vu dHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAorKwkJCQlkY3R4LT5taW5fZW50 cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOworKworKwlpZiAoZW50bGVuIDwgZGN0eC0+bWluX2Vu dHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCisrCQl7CisrCQlyID0gRklQU19S X0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAo IWRjdHgtPnJlc2VlZChkY3R4LCBlbnRyb3B5LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4pKQorKwkJ Z290byBlbmQ7CisrCisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOworKwlpZiAo IShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJZGN0eC0+cmVzZWVkX2Nv dW50ZXIgPSAxOworKwllbmQ6CisrCisrCWlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50 cm9weSkKKysJCWZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7Cisr CisrCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCisrCQlyZXR1cm4gMTsK KysKKysJaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKwkJRklQ U2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIHIpOworKworKwlyZXR1cm4gMDsKKysJfQorKworK2lu dCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorKwl7CisrCXJldHVybiBkcmJnX3Jlc2VlZChkY3R4 LCBhZGluLCBhZGlubGVuLCAxKTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2NoZWNr KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVT VCkKKysJCXJldHVybiAxOworKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250Kys7CisrCWlmIChkY3R4 LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCkKKysJCXsK KysJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKKysJCQl7CisrCQkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7CisrCQkJ cmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX2Ry YmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91 dGxlbiwKKysJCQlpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlLAorKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorKwl7CisrCWludCByID0gMDsKKysKKysJaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfR0VORVJBVEUsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9 CisrCisrCWlmICghZmlwc19kcmJnX2NoZWNrKGRjdHgpKQorKwkJcmV0dXJuIDA7CisrCisrCWlm IChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKKysJCSYmIGRjdHgtPnN0YXR1cyAh PSBEUkJHX1NUQVRVU19SRVNFRUQpCisrCQl7CisrCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdf U1RBVFVTX0VSUk9SKQorKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7CisrCQllbHNlIGlm KGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJCXIgPSBGSVBT X1JfTk9UX0lOU1RBTlRJQVRFRDsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAob3V0bGVu ID4gZGN0eC0+bWF4X3JlcXVlc3QpCisrCQl7CisrCQlyID0gRklQU19SX1JFUVVFU1RfVE9PX0xB UkdFX0ZPUl9EUkJHOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCWlmIChhZGlubGVuID4gZGN0 eC0+bWF4X2FkaW4pCisrCQl7CisrCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xP Tkc7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VT VE9NX1JFU0VFRCkKKysJCWRjdHgtPmdlbmVyYXRlKGRjdHgsIE5VTEwsIG91dGxlbiwgTlVMTCwg MCk7CisrCWVsc2UgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9pbnRl cnZhbCkKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKKysKKysJaWYgKGRj dHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRVNFRUQgfHwgcHJlZGljdGlvbl9yZXNpc3RhbmNl KQorKwkJeworKwkJLyogSWYgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZG9uJ3QgZG8g aGVhbHRoIGNoZWNrICovCisrCQlpbnQgaGNoZWNrID0gcHJlZGljdGlvbl9yZXNpc3RhbmNlID8g MCA6IDE7CisrCQkKKysJCWlmICghZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgaGNo ZWNrKSkKKysJCQl7CisrCQkJciA9IEZJUFNfUl9SRVNFRURfRVJST1I7CisrCQkJZ290byBlbmQ7 CisrCQkJfQorKwkJYWRpbiA9IE5VTEw7CisrCQlhZGlubGVuID0gMDsKKysJCX0KKysKKysJaWYg KCFkY3R4LT5nZW5lcmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRpbiwgYWRpbmxlbikpCisrCQl7 CisrCQlyID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOworKwkJZGN0eC0+c3RhdHVzID0gRFJCR19T VEFUVVNfRVJST1I7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJaWYgKCEoZGN0eC0+aWZsYWdzICYg RFJCR19DVVNUT01fUkVTRUVEKSkKKysJCXsKKysJCWlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+ PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCisrCQkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNf UkVTRUVEOworKwkJZWxzZQorKwkJCWRjdHgtPnJlc2VlZF9jb3VudGVyKys7CisrCQl9CisrCisr CWVuZDoKKysJaWYgKHIpCisrCQl7CisrCQlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdf Tk9FUlIpKQorKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgcik7CisrCQly ZXR1cm4gMDsKKysJCX0KKysKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJaW50IHJ2OworKwlpZiAoIWRjdHgt PnVuaW5zdGFudGlhdGUpCisrCQlydiA9IDE7CisrCWVsc2UKKysJCXJ2ID0gZGN0eC0+dW5pbnN0 YW50aWF0ZShkY3R4KTsKKysJLyogQWx0aG91Z2ggd2UnZCBsaWtlIHRvIGNsZWFuc2UgaGVyZSB3 ZSBjYW4ndCBiZWNhdXNlIHdlIGhhdmUgdG8KKysJICogdGVzdCB0aGUgdW5pbnN0YW50aWF0ZSBy ZWFsbHkgemVyb2VzIHRoZSBkYXRhLgorKwkgKi8KKysJbWVtc2V0KCZkY3R4LT5kLCAwLCBzaXpl b2YoZGN0eC0+ZCkpOworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VE OworKwkvKiBJZiBtZXRob2QgaGFzIHByb2JsZW1zIHVuaW5zdGFudGlhdGluZywgcmV0dXJuIGVy cm9yICovCisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBTX2RyYmdfc2V0X2NhbGxiYWNr cyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6ZV90ICgqZ2V0X2VudHJvcHkpKERSQkdfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4s IHNpemVfdCBtYXhfbGVuKSwKKysJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19DVFggKmN0 eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCisrCXNpemVfdCBlbnRyb3B5X2Js b2NrbGVuLAorKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhf bGVuKSwKKysJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG9sZW4pKQorKwl7CisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19T VEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCXJldHVybiAwOworKwlkY3R4LT5lbnRyb3B5X2Jsb2Nr bGVuID0gZW50cm9weV9ibG9ja2xlbjsKKysJZGN0eC0+Z2V0X2VudHJvcHkgPSBnZXRfZW50cm9w eTsKKysJZGN0eC0+Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9lbnRyb3B5OworKwlkY3R4LT5n ZXRfbm9uY2UgPSBnZXRfbm9uY2U7CisrCWRjdHgtPmNsZWFudXBfbm9uY2UgPSBjbGVhbnVwX25v bmNlOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJh Y2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqKnBvdXQpLAorKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJaW50ICgqcmFuZF9zZWVk X2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pLAorKwlpbnQgKCpy YW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVt LCBkb3VibGUgZW50cm9weSkpCisrCXsKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRV U19VTklOSVRJQUxJU0VEKQorKwkJcmV0dXJuIDA7CisrCWRjdHgtPmdldF9hZGluID0gZ2V0X2Fk aW47CisrCWRjdHgtPmNsZWFudXBfYWRpbiA9IGNsZWFudXBfYWRpbjsKKysJZGN0eC0+cmFuZF9z ZWVkX2NiID0gcmFuZF9zZWVkX2NiOworKwlkY3R4LT5yYW5kX2FkZF9jYiA9IHJhbmRfYWRkX2Ni OworKwlyZXR1cm4gMTsKKysJfQorKworK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJC R19DVFggKmRjdHgpCisrCXsKKysJcmV0dXJuIGRjdHgtPmFwcF9kYXRhOworKwl9CisrCisrdm9p ZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4LCB2b2lkICphcHBfZGF0YSkK KysJeworKwlkY3R4LT5hcHBfZGF0YSA9IGFwcF9kYXRhOworKwl9CisrCisrc2l6ZV90IEZJUFNf ZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpCisrCXsKKysJcmV0dXJuIGRjdHgt PmJsb2NrbGVuZ3RoOworKwl9CisrCisraW50IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19D VFggKmRjdHgpCisrCXsKKysJcmV0dXJuIGRjdHgtPnN0cmVuZ3RoOworKwl9CisrCisrdm9pZCBG SVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwp CisrCXsKKysJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gaW50ZXJ2YWw7CisrCX0KKysK Kyt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQg aW50ZXJ2YWwpCisrCXsKKysJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gaW50ZXJ2YWw7CisrCX0K KysKKytzdGF0aWMgaW50IGRyYmdfc3RpY2sgPSAwOworKworK3ZvaWQgRklQU19kcmJnX3N0aWNr KGludCBvbm9mZikKKysJeworKwlkcmJnX3N0aWNrID0gb25vZmY7CisrCX0KKysKKysvKiBDb250 aW51b3VzIERSQkcgdXRpbGl0eSBmdW5jdGlvbiAqLworK2ludCBmaXBzX2RyYmdfY3BybmdfdGVz dChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KQorKwl7CisrCS8qIE5v IENQUk5HIGluIHRlc3QgbW9kZSAqLworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RF U1QpCisrCQlyZXR1cm4gMTsKKysJLyogQ2hlY2sgYmxvY2sgaXMgdmFsaWQ6IHNob3VsZCBuZXZl ciBoYXBwZW4gKi8KKysJaWYgKGRjdHgtPmxiX3ZhbGlkID09IDApCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lOVEVSTkFMX0VSUk9SKTsKKysJ CWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZHJi Z19zdGljaykKKysJCW1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCk7Cisr CS8qIENoZWNrIGFnYWluc3QgbGFzdCBibG9jazogZmFpbCBpZiBtYXRjaCAqLworKwlpZiAoIW1l bWNtcChkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0RSQkdfU1RVQ0spOworKwkJZmlw c19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCS8qIFNhdmUgbGFz dCBibG9jayBmb3IgbmV4dCBjb21wYXJpc29uICovCisrCW1lbWNweShkY3R4LT5sYiwgb3V0LCBk Y3R4LT5ibG9ja2xlbmd0aCk7CisrCXJldHVybiAxOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19yYW5kLmMuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczNzExODgzMiArMDEw MAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMJMjAxMy0w Mi0xOSAxMjo0NzozMy43MzcxMTg4MzIgKzAxMDAKK0BAIC0wLDAgKzEsMTcyIEBACisrLyogZmlw cy9yYW5kL2ZpcHNfZHJiZ19yYW5kLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBI ZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0Lgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKysvKiBNYXBwaW5n IG9mIFNQODAwLTkwIERSQkdzIHRvIE9wZW5TU0wgUkFORF9NRVRIT0QgKi8KKysKKysvKiBTaW5j ZSB3ZSBvbmx5IGhhdmUgb25lIGdsb2JhbCBQUk5HIHVzZWQgYXQgYW55IHRpbWUgaW4gT3BlblNT TCB1c2UgYSBnbG9iYWwKKysgKiB2YXJpYWJsZSB0byBzdG9yZSBjb250ZXh0LgorKyAqLworKwor K3N0YXRpYyBEUkJHX0NUWCBvc3NsX2RjdHg7CisrCisrRFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1 bHRfZHJiZyh2b2lkKQorKwl7CisrCXJldHVybiAmb3NzbF9kY3R4OworKwl9CisrCisrc3RhdGlj IGludCBmaXBzX2RyYmdfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisrCXsK KysJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKwlpbnQgcnYgPSAwOworKwl1bnNpZ25l ZCBjaGFyICphZGluID0gTlVMTDsKKysJc2l6ZV90IGFkaW5sZW4gPSAwOworKwlDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlkbyAKKysJCXsKKysJCXNpemVfdCByY250OworKwkJ aWYgKGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkKKysJCQlyY250ID0gZGN0eC0+bWF4 X3JlcXVlc3Q7CisrCQllbHNlCisrCQkJcmNudCA9IGNvdW50OworKwkJaWYgKGRjdHgtPmdldF9h ZGluKQorKwkJCXsKKysJCQlhZGlubGVuID0gZGN0eC0+Z2V0X2FkaW4oZGN0eCwgJmFkaW4pOwor KwkJCWlmIChhZGlubGVuICYmICFhZGluKQorKwkJCQl7CisrCQkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19CWVRFUywgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVCk7 CisrCQkJCWdvdG8gZXJyOworKwkJCQl9CisrCQkJfQorKwkJcnYgPSBGSVBTX2RyYmdfZ2VuZXJh dGUoZGN0eCwgb3V0LCByY250LCAwLCBhZGluLCBhZGlubGVuKTsKKysJCWlmIChhZGluKQorKwkJ CXsKKysJCQlpZiAoZGN0eC0+Y2xlYW51cF9hZGluKQorKwkJCQlkY3R4LT5jbGVhbnVwX2FkaW4o ZGN0eCwgYWRpbiwgYWRpbmxlbik7CisrCQkJYWRpbiA9IE5VTEw7CisrCQkJfQorKwkJaWYgKCFy dikKKysJCQlnb3RvIGVycjsKKysJCW91dCArPSByY250OworKwkJY291bnQgLT0gcmNudDsKKysJ CX0KKysJd2hpbGUgKGNvdW50KTsKKysJcnYgPSAxOworKwllcnI6CisrCUNSWVBUT193X3VubG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3RhdGljIGludCBm aXBzX2RyYmdfcHNldWRvKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQorKwl7CisrCWlm IChmaXBzX2RyYmdfYnl0ZXMob3V0LCBjb3VudCkgPD0gMCkKKysJCXJldHVybiAtMTsKKysJcmV0 dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKKysJewor KwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWludCBydjsKKysJQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJcnYgPSBkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNf UkVBRFkgPyAxIDogMDsKKysJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwly ZXR1cm4gcnY7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51cCh2b2lkKQor Kwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19SQU5EKTsKKysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19k cmJnX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJRFJCR19DVFgg KmRjdHggPSAmb3NzbF9kY3R4OworKwlpZiAoZGN0eC0+cmFuZF9zZWVkX2NiKQorKwkJcmV0dXJu IGRjdHgtPnJhbmRfc2VlZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuKTsKKysJcmV0dXJuIDE7Cisr CX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNl ZWRsZW4sCisrCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCisrCXsKKysJRFJCR19DVFggKmRjdHgg PSAmb3NzbF9kY3R4OworKwlpZiAoZGN0eC0+cmFuZF9hZGRfY2IpCisrCQlyZXR1cm4gZGN0eC0+ cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbiwgYWRkX2VudHJvcHkpOworKwlyZXR1cm4g MTsKKysJfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2RyYmdfbWV0aCA9Cisr CXsKKysJZmlwc19kcmJnX3NlZWQsCisrCWZpcHNfZHJiZ19ieXRlcywKKysJZmlwc19kcmJnX2Ns ZWFudXAsCisrCWZpcHNfZHJiZ19hZGQsCisrCWZpcHNfZHJiZ19wc2V1ZG8sCisrCWZpcHNfZHJi Z19zdGF0dXMKKysJfTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2 b2lkKQorKwl7CisrCXJldHVybiAmcmFuZF9kcmJnX21ldGg7CisrCX0KKysKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYy5maXBzCTIwMTMtMDItMTkgMTI6 NDc6MzMuNzM3MTE4ODMyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX3NlbGZ0ZXN0LmMJMjAxMy0wMi0xOSAxMjo0NzozMy43MzcxMTg4MzIgKzAxMDAKK0BA IC0wLDAgKzEsODYyIEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19zZWxmdGVzdC5jICovCisr LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisr ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysjaW5jbHVkZSAiZmlw c19sb2NsLmgiCisrCisrI2luY2x1ZGUgImZpcHNfZHJiZ19zZWxmdGVzdC5oIgorKworK3R5cGVk ZWYgc3RydWN0IHsKKysJaW50IHBvc3Q7CisrCWludCBuaWQ7CisrCXVuc2lnbmVkIGludCBmbGFn czsKKysKKysJLyogS0FUIGRhdGEgZm9yIG5vIFBSICovCisrCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmVudDsKKysJc2l6ZV90IGVudGxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7Cisr CXNpemVfdCBub25jZWxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyczsKKysJc2l6ZV90 IHBlcnNsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW47CisrCXNpemVfdCBhZGlubGVu OworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRyZXNlZWQ7CisrCXNpemVfdCBlbnRyZXNlZWRs ZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5yZXNlZWQ7CisrCXNpemVfdCBhZGlucmVz ZWVkbGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluMjsKKysJc2l6ZV90IGFkaW4ybGVu OworKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQ7CisrCXNpemVfdCBrYXRsZW47CisrCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmthdDI7CisrCXNpemVfdCBrYXQybGVuOworKworKwkvKiBLQVQgZGF0 YSBmb3IgUFIgKi8KKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50X3ByOworKwlzaXplX3QgZW50 bGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZV9wcjsKKysJc2l6ZV90IG5vbmNl bGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzX3ByOworKwlzaXplX3QgcGVyc2xl bl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbl9wcjsKKysJc2l6ZV90IGFkaW5sZW5f cHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHByX3ByOworKwlzaXplX3QgZW50cHJsZW5f cHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5nX3ByOworKwlzaXplX3QgYWRpbmdsZW5f cHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudGdfcHI7CisrCXNpemVfdCBlbnRnbGVuX3By OworKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXRfcHI7CisrCXNpemVfdCBrYXRsZW5fcHI7Cisr CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDJfcHI7CisrCXNpemVfdCBrYXQybGVuX3ByOworKwor Kwl9IERSQkdfU0VMRlRFU1RfREFUQTsKKysKKysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGEo bmlkLCBmbGFnLCBwciwgcCkge3AsIG5pZCwgZmxhZyB8IERSQkdfRkxBR19URVNULCBcCisrCXBy IyNfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXQpLCBcCisrCXByIyNfbm9u Y2UsIHNpemVvZihwciMjX25vbmNlKSwgXAorKwlwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZywg c2l6ZW9mKHByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAorKwlwciMjX2FkZGl0aW9uYWxp bnB1dCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0KSwgXAorKwlwciMjX2VudHJvcHlpbnB1 dHJlc2VlZCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0cmVzZWVkKSwgXAorKwlwciMjX2FkZGl0 aW9uYWxpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkKSwgXAor KwlwciMjX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dDIpLCBc CisrCXByIyNfaW50X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfaW50X3JldHVybmVkYml0cyks IFwKKysJcHIjI19yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3JldHVybmVkYml0cyksIFwKKysJ cHIjI19wcl9lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dCksIFwKKysJ cHIjI19wcl9ub25jZSwgc2l6ZW9mKHByIyNfcHJfbm9uY2UpLCBcCisrCXByIyNfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBc CisrCXByIyNfcHJfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFsaW5w dXQpLCBcCisrCXByIyNfcHJfZW50cm9weWlucHV0cHIsIHNpemVvZihwciMjX3ByX2VudHJvcHlp bnB1dHByKSwgXAorKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX3ByX2Fk ZGl0aW9uYWxpbnB1dDIpLCBcCisrCXByIyNfcHJfZW50cm9weWlucHV0cHIyLCBzaXplb2YocHIj I19wcl9lbnRyb3B5aW5wdXRwcjIpLCBcCisrCXByIyNfcHJfaW50X3JldHVybmVkYml0cywgc2l6 ZW9mKHByIyNfcHJfaW50X3JldHVybmVkYml0cyksIFwKKysJcHIjI19wcl9yZXR1cm5lZGJpdHMs IHNpemVvZihwciMjX3ByX3JldHVybmVkYml0cyksIFwKKysJfQorKworKyNkZWZpbmUgbWFrZV9k cmJnX3Rlc3RfZGF0YV9kZihuaWQsIHByLCBwKSBcCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEobmlk LCBEUkJHX0ZMQUdfQ1RSX1VTRV9ERiwgcHIsIHApCisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVz dF9kYXRhX2VjKGN1cnZlLCBtZCwgcHIsIHApIFwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YSgoY3Vy dmUgPDwgMTYpIHwgbWQgLCAwLCBwciwgcCkKKysKKytzdGF0aWMgRFJCR19TRUxGVEVTVF9EQVRB IGRyYmdfdGVzdFtdID0geworKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMTI4X2N0 ciwgYWVzXzEyOF91c2VfZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNf MTkyX2N0ciwgYWVzXzE5Ml91c2VfZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5J RF9hZXNfMjU2X2N0ciwgYWVzXzI1Nl91c2VfZGYsIDEpLAorKwltYWtlX2RyYmdfdGVzdF9kYXRh KE5JRF9hZXNfMTI4X2N0ciwgMCwgYWVzXzEyOF9ub19kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0 X2RhdGEoTklEX2Flc18xOTJfY3RyLCAwLCBhZXNfMTkyX25vX2RmLCAwKSwKKysJbWFrZV9kcmJn X3Rlc3RfZGF0YShOSURfYWVzXzI1Nl9jdHIsIDAsIGFlc18yNTZfbm9fZGYsIDEpLAorKwltYWtl X2RyYmdfdGVzdF9kYXRhKE5JRF9zaGExLCAwLCBzaGExLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3Rf ZGF0YShOSURfc2hhMjI0LCAwLCBzaGEyMjQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5J RF9zaGEyNTYsIDAsIHNoYTI1NiwgMSksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTM4 NCwgMCwgc2hhMzg0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhNTEyLCAwLCBz aGE1MTIsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTEsIDAsIGht YWNfc2hhMSwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMjI0LCAw LCBobWFjX3NoYTIyNCwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hB MjU2LCAwLCBobWFjX3NoYTI1NiwgMSksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNX aXRoU0hBMzg0LCAwLCBobWFjX3NoYTM4NCwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklE X2htYWNXaXRoU0hBNTEyLCAwLCBobWFjX3NoYTUxMiwgMCksCisrCXswLDAsMH0KKysJfTsKKysK Kyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7CisrCXNp emVfdCBlbnRsZW47CisrCWludCBlbnRjbnQ7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNl OworKwlzaXplX3Qgbm9uY2VsZW47CisrCWludCBub25jZWNudDsKKysJfSBURVNUX0VOVDsKKysK KytzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hh ciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwg c2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorKwl7CisrCVRFU1RfRU5UICp0ID0gRklQ U19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKKysJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQt PmVudDsKKysJdC0+ZW50Y250Kys7CisrCXJldHVybiB0LT5lbnRsZW47CisrCX0KKysKKytzdGF0 aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBt aW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19n ZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5ub25jZTsK KysJdC0+bm9uY2VjbnQrKzsKKysJcmV0dXJuIHQtPm5vbmNlbGVuOworKwl9CisrCisrc3RhdGlj IGludCBmaXBzX2RyYmdfc2luZ2xlX2thdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9E QVRBICp0ZCwKKysJCQkJCQkJCWludCBxdWljaykKKysJeworKwlURVNUX0VOVCB0OworKwlpbnQg cnYgPSAwOworKwlzaXplX3QgYWRpbmxlbjsKKysJdW5zaWduZWQgY2hhciByYW5kb3V0WzEwMjRd OworKworKwkvKiBJbml0aWFsIHRlc3Qgd2l0aG91dCBQUiAqLworKworKwkvKiBJbnN0YW50aWF0 ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9uCisrCSAq IHN0cmluZy4KKysJICovCisrCisrCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwg dGQtPmZsYWdzKSkKKysJCXJldHVybiAwOworKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tz KGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrCQlyZXR1cm4gMDsK KysKKysJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7CisrCisrCXQuZW50ID0gdGQt PmVudDsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuOworKwl0Lm5vbmNlID0gdGQtPm5vbmNlOwor Kwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOworKwl0LmVudGNudCA9IDA7CisrCXQubm9uY2Vj bnQgPSAwOworKworKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywg dGQtPnBlcnNsZW4pKQorKwkJZ290byBlcnI7CisrCisrCS8qIE5vdGUgZm9yIENUUiB3aXRob3V0 IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKKysJICogaWdub3JlIGJ5dGVzIGFmdGVy IHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCisrCSAqIHRvIGhhbGYgdG8gZW5zdXJl IGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCisrCSAqLworKwlpZiAoIWZpcHNfcG9zdF9jb3JydXB0 KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKKysJCWFkaW5sZW4g PSB0ZC0+YWRpbmxlbiAvIDI7CisrCWVsc2UKKysJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbjsKKysK KysJLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVj dGVkIGRhdGEgKi8KKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQt PmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIGFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCisr CWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdCwgdGQtPmthdGxlbikpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDFfRkFJTFVS RSk7CisrCQlnb3RvIGVycjI7CisrCQl9CisrCS8qIElmIGFiYnJldmlhdGVkIFBPU1QgZW5kIG9m IHRlc3QgKi8KKysJaWYgKHF1aWNrKQorKwkJeworKwkJcnYgPSAxOworKwkJZ290byBlcnI7Cisr CQl9CisrCS8qIFJlc2VlZCBEUkJHIHdpdGggdGVzdCBlbnRyb3B5IGFuZCBhZGRpdGlvbmFsIGlu cHV0ICovCisrCXQuZW50ID0gdGQtPmVudHJlc2VlZDsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50cmVz ZWVkbGVuOworKworKwlpZiAoIUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW5yZXNlZWQs IHRkLT5hZGlucmVzZWVkbGVuKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBHZW5lcmF0ZSB3aXRo IG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLworKwlpZiAo IUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0MmxlbiwgMCwKKysJCQkJ dGQtPmFkaW4yLCB0ZC0+YWRpbjJsZW4pKQorKwkJZ290byBlcnI7CisrCisrCWlmIChtZW1jbXAo cmFuZG91dCwgdGQtPmthdDIsIHRkLT5rYXQybGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJFKTsKKysJCWdv dG8gZXJyMjsKKysJCX0KKysKKysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCisr CS8qIE5vdyB0ZXN0IHdpdGggUFIgKi8KKysKKysJLyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRl c3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgorKwkgKiBzdHJpbmcuCisrCSAq LworKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCisrCQly ZXR1cm4gMDsKKysJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJv cHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCUZJUFNfZHJiZ19z ZXRfYXBwX2RhdGEoZGN0eCwgJnQpOworKworKwl0LmVudCA9IHRkLT5lbnRfcHI7CisrCXQuZW50 bGVuID0gdGQtPmVudGxlbl9wcjsKKysJdC5ub25jZSA9IHRkLT5ub25jZV9wcjsKKysJdC5ub25j ZWxlbiA9IHRkLT5ub25jZWxlbl9wcjsKKysJdC5lbnRjbnQgPSAwOworKwl0Lm5vbmNlY250ID0g MDsKKysKKysJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnNfcHIsIHRk LT5wZXJzbGVuX3ByKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBOb3cgZ2VuZXJhdGUgd2l0aCBQ Ujogd2UgbmVlZCB0byBzdXBwbHkgZW50cm9weSBhcyB0aGlzIHdpbGwKKysJICogcGVyZm9ybSBh IHJlc2VlZCBvcGVyYXRpb24uIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgor KwkgKi8KKysKKysJdC5lbnQgPSB0ZC0+ZW50cHJfcHI7CisrCXQuZW50bGVuID0gdGQtPmVudHBy bGVuX3ByOworKworKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwg aW5wdXQgdmFsdWVzCisrCSAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyBy ZWR1Y2UgYWRpbmxlbgorKwkgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVk IGluLgorKwkgKi8KKysJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0 eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCisrCQlhZGlubGVuID0gdGQtPmFkaW5sZW5fcHIgLyAy OworKwllbHNlCisrCQlhZGlubGVuID0gdGQtPmFkaW5sZW5fcHI7CisrCWlmICghRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW5fcHIsIDEsCisrCQkJCXRkLT5hZGlu X3ByLCBhZGlubGVuKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRk LT5rYXRfcHIsIHRkLT5rYXRsZW5fcHIpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMV9GQUlMVVJFKTsKKysJCWdvdG8gZXJyMjsK KysJCX0KKysKKysJLyogTm93IGdlbmVyYXRlIGFnYWluIHdpdGggUFI6IHN1cHBseSBuZXcgZW50 cm9weSBhZ2Fpbi4KKysJICogQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuCisr CSAqLworKworKwl0LmVudCA9IHRkLT5lbnRnX3ByOworKwl0LmVudGxlbiA9IHRkLT5lbnRnbGVu X3ByOworKworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0 Mmxlbl9wciwgMSwKKysJCQkJdGQtPmFkaW5nX3ByLCB0ZC0+YWRpbmdsZW5fcHIpKQorKwkJZ290 byBlcnI7CisrCisrCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdDJfcHIsIHRkLT5rYXQybGVu X3ByKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBT X1JfUFJfVEVTVDJfRkFJTFVSRSk7CisrCQlnb3RvIGVycjI7CisrCQl9CisrCS8qIEFsbCBPSywg dGVzdCBjb21wbGV0ZSAqLworKwlydiA9IDE7CisrCisrCWVycjoKKysJaWYgKHJ2ID09IDApCisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrCWVycjI6CisrCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOworKwkKKysJ cmV0dXJuIHJ2OworKworKwl9CisrCisrLyogSW5pdGlhbGlzZSBhIERSQkcgYmFzZWQgb24gc2Vs ZnRlc3QgZGF0YSAqLworKworK3N0YXRpYyBpbnQgZG9fZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4 LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLCBURVNUX0VOVCAqdCkKKysJeworKworKwlpZiAoIUZJ UFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCisrCQlyZXR1cm4gMDsKKysK KysJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAs IHRlc3Rfbm9uY2UsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCUZJUFNfZHJiZ19zZXRfYXBwX2Rh dGEoZGN0eCwgdCk7CisrCisrCXQtPmVudCA9IHRkLT5lbnQ7CisrCXQtPmVudGxlbiA9IHRkLT5l bnRsZW47CisrCXQtPm5vbmNlID0gdGQtPm5vbmNlOworKwl0LT5ub25jZWxlbiA9IHRkLT5ub25j ZWxlbjsKKysJdC0+ZW50Y250ID0gMDsKKysJdC0+bm9uY2VjbnQgPSAwOworKwlyZXR1cm4gMTsK KysJfQorKworKy8qIEluaXRpYWxpc2UgYW5kIGluc3RhbnRpYXRlIERSQkcgYmFzZWQgb24gc2Vs ZnRlc3QgZGF0YSAqLworK3N0YXRpYyBpbnQgZG9fZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAq ZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwKKysJCQkJCQkJCVRFU1RfRU5UICp0KQorKwl7 CisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCB0KSkKKysJCXJldHVybiAwOworKwlpZiAo IUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pKQorKwkJ cmV0dXJuIDA7CisrCisrCXJldHVybiAxOworKwl9CisrCisrLyogVGhpcyBmdW5jdGlvbiBwZXJm b3JtcyBleHRlbnNpdmUgZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgU1A4MDAtOTAuCisr ICogSW5kdWNlIHNldmVyYWwgZmFpbHVyZSBtb2RlcyBhbmQgY2hlY2sgYW4gZXJyb3IgY29uZGl0 aW9uIGlzIHNldC4KKysgKiBUaGlzIGZ1bmN0aW9uIGFsb25nIHdpdGggZmlwc19kcmJnX3Npbmds ZV9rYXQgcGVmb3JtcyB0aGUgaGVhbHRoIGNoZWNraW5nCisrICogb3BlcmF0aW9uLgorKyAqLwor KworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Vycm9yX2NoZWNrKERSQkdfQ1RYICpkY3R4LCBEUkJH X1NFTEZURVNUX0RBVEEgKnRkKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsK KysJVEVTVF9FTlQgdDsKKysJc2l6ZV90IGk7CisrCXVuc2lnbmVkIGludCByZXNlZWRfY291bnRl cl90bXA7CisrCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWRjdHg7CisrCisr CS8qIEluaXRpYWxpc2UgRFJCRyAqLworKworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwg JnQpKQorKwkJZ290byBlcnI7CisrCisrCS8qIERvbid0IHJlcG9ydCBpbmR1Y2VkIGVycm9ycyAq LworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkvKiBQZXJzb25hbGlz YXRpb24gc3RyaW5nIHRlc3RzICovCisrCisrCS8qIFRlc3QgZGV0ZWN0aW9uIG9mIHRvbyBsYXJn ZSBwZXJzb25saXNhdGlvbiBzdHJpbmcgKi8KKysKKysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0 ZShkY3R4LCB0ZC0+cGVycywgZGN0eC0+bWF4X3BlcnMgKyAxKSA+IDApCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9QRVJTT05BTElTQVRJT05f RVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogRW50cm9weSBz b3VyY2UgdGVzdHMgKi8KKysKKysJLyogVGVzdCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlIGRldGVj aW9uOiBpLmUuIHJldHVybnMgbm8gZGF0YSAqLworKworKwl0LmVudGxlbiA9IDA7CisrCisrCWlm IChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDAp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9F TlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIFRy eSB0byBnZW5lcmF0ZSBvdXRwdXQgZnJvbSB1bmluc3RhbnRpYXRlZCBEUkJHICovCisrCWlmIChG SVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQt PmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBl cnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwlpZiAo IUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQln b3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJ CWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkv KiBUZXN0IGluc3VmZmljaWVudCBlbnRyb3B5ICovCisrCisrCXQuZW50bGVuID0gZGN0eC0+bWlu X2VudHJvcHkgLSAxOworKworKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5w ZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8g ZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYg KCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJ Z290byBlcnI7CisrCQl9CisrCisrCS8qIFRlc3QgdG9vIG11Y2ggZW50cm9weSAqLworKworKwlp ZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCXQuZW50bGVuID0gZGN0eC0+bWF4X2Vu dHJvcHkgKyAxOworKworKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJz LCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJy OworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290 byBlcnI7CisrCQl9CisrCisrCS8qIE5vbmNlIHRlc3RzICovCisrCisrCS8qIFRlc3QgdG9vIHNt YWxsIG5vbmNlICovCisrCisrCWlmIChkY3R4LT5taW5fbm9uY2UpCisrCQl7CisrCisrCQlpZiAo IWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOworKworKwkJZGN0eC0+ aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJCXQubm9uY2VsZW4gPSBkY3R4LT5taW5f bm9uY2UgLSAxOworKworKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVy cywgdGQtPnBlcnNsZW4pID4gMCkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQkJZ290byBl cnI7CisrCQkJfQorKworKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCQlp ZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQl9CisrCisrCS8qIFRlc3QgdG9vIGxhcmdlIG5v bmNlICovCisrCisrCWlmIChkY3R4LT5tYXhfbm9uY2UpCisrCQl7CisrCisrCQlpZiAoIWRvX2Ry YmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOworKworKwkJZGN0eC0+aWZsYWdz IHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJCXQubm9uY2VsZW4gPSBkY3R4LT5tYXhfbm9uY2Ug KyAxOworKworKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQt PnBlcnNsZW4pID4gMCkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQkJZ290byBlcnI7Cisr CQkJfQorKworKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCQlpZiAoIUZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCQln b3RvIGVycjsKKysJCQl9CisrCisrCQl9CisrCisrCS8qIEluc3RhbnRpYXRlIHdpdGggdmFsaWQg ZGF0YS4gKi8KKysJaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCisrCQkJ Z290byBlcnI7CisrCisrCS8qIENoZWNrIGdlbmVyYXRpb24gaXMgbm93IE9LICovCisrCWlmICgh RklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRk LT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9 IERSQkdfRkxBR19OT0VSUjsKKysKKysJLyogUmVxdWVzdCB0b28gbXVjaCBkYXRhIGZvciBvbmUg cmVxdWVzdCAqLworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIGRjdHgt Pm1heF9yZXF1ZXN0ICsgMSwgMCwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFUVVFU1Rf TEVOR1RIX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIFRy eSB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRl KGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCBkY3R4LT5tYXhf YWRpbiArIDEpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJy OworKwkJfQorKworKwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWls cyBpZiBlbnRyb3B5IHNvdXJjZQorKwkgKiBmYWlsdXJlLgorKwkgKi8KKysKKysJdC5lbnRsZW4g PSAwOworKworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRs ZW4sIDEsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNU RUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCQkKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZM QUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJ QVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKworKwkvKiBJbnN0YW50aWF0ZSBh Z2FpbiB3aXRoIHZhbGlkIGRhdGEgKi8KKysKKysJaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRj dHgsIHRkLCAmdCkpCisrCQkJZ290byBlcnI7CisrCS8qIFRlc3QgcmVzZWVkIGNvdW50ZXIgd29y a3MgKi8KKysJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICovCisrCXJlc2VlZF9jb3Vu dGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOworKwkvKiBTZXQgcmVzZWVkIGNvdW50ZXIg dG8gYmV5b25kIGludGVydmFsICovCisrCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gZGN0eC0+cmVz ZWVkX2ludGVydmFsOworKworKwkvKiBHZW5lcmF0ZSBvdXRwdXQgYW5kIGNoZWNrIGVudHJvcHkg aGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KKysJdC5lbnRjbnQgPSAwOworKwlpZiAo IUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0 ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCWlmICh0LmVudGNudCAhPSAx KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf RU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOworKwkJZ290byBlcnI7CisrCQl9Cisr CS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICovCisrCWlmIChkY3R4LT5y ZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVEX0NPVU5URVJfRVJS T1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFH X05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFU RV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogQ2hlY2sgcHJlZGljdGlvbiBy ZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKKysJICogZmFpbHVyZS4K KysJICovCisrCisrCXQuZW50bGVuID0gMDsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxB R19OT0VSUjsKKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0 bGVuLCAxLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVD VEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkJCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOworKworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJ eworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNU QU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysKKysJaWYgKCFkb19kcmJn X2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCisrCQkJZ290byBlcnI7CisrCS8qIFRlc3QgcmVz ZWVkIGNvdW50ZXIgd29ya3MgKi8KKysJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICov CisrCXJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOworKwkvKiBTZXQg cmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCisrCWRjdHgtPnJlc2VlZF9jb3Vu dGVyID0gZGN0eC0+cmVzZWVkX2ludGVydmFsOworKworKwkvKiBHZW5lcmF0ZSBvdXRwdXQgYW5k IGNoZWNrIGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KKysJdC5lbnRj bnQgPSAwOworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0 bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCWlm ICh0LmVudGNudCAhPSAxKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOworKwkJZ290 byBlcnI7CisrCQl9CisrCS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICov CisrCWlmIChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVT RUVEX0NPVU5URVJfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFn cyAmPSB+RFJCR19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogRXhw bGljaXQgcmVzZWVkIHRlc3RzICovCisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGgg dG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwg dGQsICZ0KSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05P RVJSOworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgZGN0eC0+bWF4 X2FkaW4gKyAxKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1Jf Q0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290 byBlcnI7CisrCQl9CisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggZW50cm9weSBz b3VyY2UgZmFpbHVyZSAqLworKworKwl0LmVudGxlbiA9IDA7CisrCisrCWlmIChGSVBTX2RyYmdf cmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRF VEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIUZJUFNfZHJiZ191bmluc3Rh bnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysK KysJLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbXVjaCBlbnRyb3B5ICovCisrCisr CWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJZGN0 eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJdC5lbnRsZW4gPSBkY3R4LT5tYXhf ZW50cm9weSArIDE7CisrCisrCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0 ZC0+YWRpbmxlbikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOwor KwkJfQorKworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFU RV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVGVzdCBleHBsaWNpdCByZXNl ZWQgd2l0aCB0b28gbGl0dGxlIGVudHJvcHkgKi8KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFH X05PRVJSOworKworKwl0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKKysKKysJaWYg KEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZ X0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghRklQU19k cmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJy OworKwkJfQorKworKwlwID0gKHVuc2lnbmVkIGNoYXIgKikmZGN0eC0+ZDsKKysJLyogU3RhbmRh cmQgc2F5cyB3ZSBoYXZlIHRvIGNoZWNrIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcworKwkg KiB0aGUgZGF0YS4uLgorKwkgKi8KKysJZm9yIChpID0gMDsgaSA8IHNpemVvZihkY3R4LT5kKTsg aSsrKQorKwkJeworKwkJaWYgKCpwICE9IDApCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUik7 CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJcCsrOworKwkJfQorKworKwlyZXR1cm4gMTsKKysK KysJZXJyOgorKwkvKiBBIHJlYWwgZXJyb3IgYXMgb3Bwb3NlZCB0byBhbiBpbmR1Y2VkIG9uZTog dW5kZXJseWluZyBmdW5jdGlvbiB3aWxsCisrCSAqIGluZGljYXRlIHRoZSBlcnJvci4KKysJICov CisrCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9GVU5DVElPTl9FUlJPUik7CisrCUZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOworKwlyZXR1cm4gMDsKKysKKysJfQorKworK2lu dCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZmxh Z3MpCisrCXsKKysJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysJZmxhZ3MgfD0gRFJCR19GTEFH X1RFU1Q7CisrCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKKysJCXsK KysJCWlmICh0ZC0+bmlkID09IG5pZCAmJiB0ZC0+ZmxhZ3MgPT0gZmxhZ3MpCisrCQkJeworKwkJ CWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQorKwkJCQlyZXR1cm4gMDsK KysJCQlyZXR1cm4gZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKTsKKysJCQl9CisrCQl9 CisrCXJldHVybiAwOworKwl9CisrCisraW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19D VFggKmRjdHgpCisrCXsKKysJaW50IHJ2OworKwlEUkJHX0NUWCAqdGN0eCA9IE5VTEw7CisrCXRj dHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOworKwlmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1Rf RFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrCWlmICghdGN0eCkKKysJCXJldHVy biAwOworKwlydiA9IGZpcHNfZHJiZ19rYXQodGN0eCwgZGN0eC0+dHlwZSwgZGN0eC0+eGZsYWdz KTsKKysJaWYgKHRjdHgpCisrCQlGSVBTX2RyYmdfZnJlZSh0Y3R4KTsKKysJaWYgKHJ2KQorKwkJ Zmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54Zmxh Z3MpOworKwllbHNlCisrCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50 eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysJaWYgKCFydikKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdf U1RBVFVTX0VSUk9SOworKwllbHNlCisrCQlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKKysJ cmV0dXJuIHJ2OworKwl9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2b2lkKQorKwl7Cisr CURSQkdfQ1RYICpkY3R4OworKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKwlpbnQgcnYgPSAx OworKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKKysJaWYgKCFkY3R4KQorKwkJcmV0dXJu IDA7CisrCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKKysJCXsKKysJ CWlmICh0ZC0+cG9zdCAhPSAxKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKCFmaXBzX3Bvc3Rfc3Rh cnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCisrCQkJcmV0dXJuIDE7 CisrCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAxKSkKKysJCQl7CisrCQkJ Zmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7Cisr CQkJcnYgPSAwOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmICghZmlwc19wb3N0X3N1Y2Nl c3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJldHVybiAwOwor KwkJfQorKwlGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrCisr aW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCkKKysJeworKwlEUkJHX0NUWCAqZGN0eDsK KysJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysJaW50IHJ2ID0gMTsKKysJZGN0eCA9IEZJUFNf ZHJiZ19uZXcoMCwgMCk7CisrCWlmICghZGN0eCkKKysJCXJldHVybiAwOworKwlmb3IgKHRkID0g ZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCisrCQl7CisrCQlpZiAoIWZpcHNfcG9zdF9z dGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4g MTsKKysJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQorKwkJCXsKKysJ CQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsK KysJCQlydiA9IDA7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKCFmaXBzX2RyYmdfZXJy b3JfY2hlY2soZGN0eCwgdGQpKQorKwkJCXsKKysJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVT VF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKKysJCQlydiA9IDA7CisrCQkJY29udGludWU7 CisrCQkJfQorKwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5p ZCwgJnRkLT5mbGFncykpCisrCQkJcmV0dXJuIDA7CisrCQl9CisrCUZJUFNfZHJiZ19mcmVlKGRj dHgpOworKwlyZXR1cm4gcnY7CisrCX0KKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmgKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM4MTE4ODUyICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmgJ MjAxMy0wMi0xOSAxMjo0NzozMy43MzgxMTg4NTIgKzAxMDAKK0BAIC0wLDAgKzEsMjMzNSBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmUub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysKKysvKiBTZWxmdGVzdCBhbmQgaGVhbHRoIGNoZWNrIGRhdGEg Zm9yIHRoZSBTUDgwMC05MCBEUkJHICovCisrCisrI2RlZmluZSBfX2ZpcHNfY29uc3RzZWcKKysK KysvKiBBRVMtMTI4IHVzZSBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsK KysJMHg2MSwweDUyLDB4N2MsMHhlMywweDIzLDB4N2QsMHgwYSwweDA3LDB4MTAsMHgwYywweDUw LDB4MzMsCisrCTB4YzgsMHhkYiwweGZmLDB4MTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9ub25jZVtdID0K KysJeworKwkweDUxLDB4MGQsMHg4NSwweDc3LDB4ZWQsMHgyMiwweDk3LDB4MjgKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3Vz ZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg1OSwweDlmLDB4YmIs MHhjZCwweGQ1LDB4MjUsMHg2OSwweGI1LDB4Y2IsMHhiNSwweDAzLDB4ZmUsCisrCTB4ZDcsMHhk NywweDAxLDB4NjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHhlZiwweDg4LDB4NzYsMHgwMSwweGFmLDB4M2MsMHhmZSwweDhiLDB4YWYsMHgyNiwweDA2LDB4 OWUsCisrCTB4OWEsMHg0NywweDA4LDB4NzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRw cltdID0KKysJeworKwkweGUyLDB4NzYsMHhmOSwweGY2LDB4M2EsMHhiYSwweDEwLDB4OWYsMHhi ZiwweDQ3LDB4MGUsMHg1MSwKKysJMHgwOSwweGZiLDB4YTMsMHhiNgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3By X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkNCwweDk4LDB4OGEsMHg0NiwweDgwLDB4 NGMsMHhkYiwweGEzLDB4NTksMHgwMiwweDU3LDB4NTIsCisrCTB4NjYsMHgxYywweGVhLDB4NWIK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ODgsMHg4Yyww eDkxLDB4ZDYsMHhiZSwweDU2LDB4NmUsMHgwOCwweDlhLDB4NjIsMHgyYiwweDExLAorKwkweDNm LDB4NWUsMHgzMSwweDA2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7 CisrCTB4YzAsMHg1YywweDZiLDB4OTgsMHgwMSwweDBkLDB4NTgsMHgxOCwweDUxLDB4MTgsMHg5 NiwweGFlLAorKwkweGE3LDB4ZTMsMHhhOCwweDY3CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4Y2YsMHgwMSwweGFjLDB4MjIsMHgzMSwweDA2LDB4OGUsMHhmYyww eGNlLDB4NTYsMHhlYSwweDI0LAorKwkweDBmLDB4MzgsMHg0MywweGM2CisrCX07CisrCisrCisr LyogQUVTLTEyOCB1c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0W10gPQorKwl7Cisr CTB4MWYsMHg4ZSwweDM0LDB4ODIsMHgwYywweGI3LDB4YmUsMHhjNSwweDAxLDB4M2UsMHhkMCww eGEzLAorKwkweDlkLDB4N2QsMHgxYywweDliCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfbm9uY2VbXSA9CisrCXsK KysJMHhkNSwweDRkLDB4YmQsMHg0YSwweDkzLDB4N2YsMHhiOCwweDk2CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4YWIsMHhkNiwweDNmLDB4MDQsMHhm ZSwweDI3LDB4NmIsMHgyZCwweGQ3LDB4YzMsMHgxYywweGYzLAorKwkweDM4LDB4NjYsMHhiYSww eDFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZmUsMHhmNCww eDA5LDB4YTgsMHhiNywweDczLDB4MjcsMHg5YywweDVmLDB4YTcsMHhlYSwweDQ2LAorKwkweGI1 LDB4ZTIsMHhiMiwweDQxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweDQyLDB4ZTQsMHg0ZSwweDdiLDB4MjcsMHhkZCwweGNiLDB4YmMsMHgwYSwweGNmLDB4YTYs MHg2NywKKysJMHhlNywweDU3LDB4MTEsMHhiNAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KKysJeworKwkweDE0LDB4MjYsMHg2OSwweGQ5LDB4ZjMsMHg2NSwweDAzLDB4ZDYs MHg2YiwweGI5LDB4NDQsMHgwYiwKKysJMHhjNywweGM0LDB4OWUsMHgzOQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDU1LDB4MmUsMHg2MCwweDlhLDB4 MDUsMHg3MiwweDhhLDB4YTgsMHhlZiwweDIyLDB4ODEsMHg1YSwKKysJMHhjOCwweDkzLDB4ZmEs MHg4NAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgzYywweDQw LDB4YzgsMHhjNCwweDE2LDB4MGMsMHgyMSwweGE0LDB4MzcsMHgyYywweDhmLDB4YTUsCisrCTB4 MDYsMHgwYywweDE1LDB4MmMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHhlMSwweDNlLDB4OTksMHg5OCwweDg2LDB4NjcsMHgwYiwweDYzLDB4N2IsMHhiZSwweDNmLDB4 ODgsCisrCTB4NDYsMHg4MSwweGM3LDB4MTkKKysJfTsKKysKKysKKysvKiBBRVMtMTkyIHVzZSBk ZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgyYiwweDRlLDB4OGIs MHhlMSwweGYxLDB4MzQsMHg4MCwweDU2LDB4ODEsMHhmOSwweDc0LDB4ZWMsCisrCTB4MTcsMHg0 NCwweDJhLDB4ZjEsMHgxNCwweGIwLDB4YmYsMHg5NywweDM5LDB4YjcsMHgwNCwweDdkCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhkNiwweDlkLDB4ZWIsMHgxNCwweDRlLDB4 NmMsMHgzMCwweDFlLDB4MzksMHg1NSwweDczLDB4ZDAsCisrCTB4ZDEsMHg4MCwweDc4LDB4ZmEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhmYyww eDQzLDB4NGEsMHhmOCwweDlhLDB4NTUsMHhiMywweDUzLDB4ODMsMHhlMiwweDE4LDB4MTYsCisr CTB4MGMsMHhkYywweGNkLDB4NWUsMHg0ZiwweGEwLDB4MDMsMHgwMSwweDJiLDB4OWYsMHhlNCww eGQ1LAorKwkweDdkLDB4NDksMHhmMCwweDQxLDB4OWUsMHgzZCwweDk5LDB4MDQKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3Vz ZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg1ZSwweDlmLDB4NDksMHg2Ziww eDIxLDB4OGIsMHgxZCwweDMyLDB4ZDUsMHg4NCwweDVjLDB4YWMsCisrCTB4YWYsMHhkZiwweGU0 LDB4NzksMHg5ZSwweGFmLDB4YTksMHg4MiwweGQwLDB4ZjgsMHg0ZiwweGNiLAorKwkweDY5LDB4 MTAsMHgwYSwweDdlLDB4ODEsMHg1NywweGI1LDB4MzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5 aW5wdXRwcltdID0KKysJeworKwkweGQ0LDB4ODEsMHgwYywweGQ3LDB4NjYsMHgzOSwweGVjLDB4 NDIsMHg1MywweDg3LDB4NDEsMHhhNSwKKysJMHgxZSwweDdkLDB4ODAsMHg5MSwweDhlLDB4YmIs MHhlZCwweGFjLDB4MTQsMHgwMiwweDFhLDB4ZDUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4ZGYsMHgxZCwweDM5LDB4NDUsMHg3YywweDliLDB4YzYsMHgy YiwweDdkLDB4OGMsMHg5MywweGU5LAorKwkweDE5LDB4MzAsMHg2YiwweDY3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDAwLDB4NzEsMHgyNywweDRlLDB4 ZDMsMHgxNCwweGYxLDB4MjAsMHg3ZiwweDRhLDB4NDEsMHgzMiwKKysJMHgyYSwweDk3LDB4MTEs MHg0MywweDhmLDB4NGEsMHgxNSwweDdiLDB4OWIsMHg1MSwweDc5LDB4ZGEsCisrCTB4NDksMHgz ZCwweGRlLDB4ZTgsMHhiYywweDkzLDB4OTEsMHg5OQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlp bnB1dHByMltdID0KKysJeworKwkweDkwLDB4ZWUsMHg3NiwweGExLDB4NDUsMHg4ZCwweGI3LDB4 NDAsMHhiMCwweDExLDB4YmYsMHhkMCwKKysJMHg2NSwweGQ3LDB4M2MsMHg3YywweDRmLDB4MjAs MHgzZiwweDRlLDB4MTEsMHg5ZCwweGIzLDB4NWUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHgyNCwweDNiLDB4MjAsMHhhNCwweDM3LDB4NjYsMHhiYSwweDcyLDB4 MzksMHgzZiwweGNmLDB4M2MsCisrCTB4N2UsMHgxYSwweDJiLDB4ODMKKysJfTsKKysKKysKKysv KiBBRVMtMTkyIHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJ MHg4ZCwweDc0LDB4YTQsMHg1MCwweDFhLDB4MDIsMHg2OCwweDBjLDB4MmEsMHg2OSwweGM0LDB4 ODIsCisrCTB4M2IsMHhiYiwweGRhLDB4MGUsMHg3ZiwweDc3LDB4YTMsMHgxNywweDc4LDB4NTcs MHhiMiwweDdiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfbm9uY2VbXSA9CisrCXsKKysJMHg3NSwweGQ1LDB4MWYs MHhhYywweGE0LDB4OGQsMHg0MiwweDc4LDB4ZDcsMHg2OSwweDg2LDB4OWQsCisrCTB4NzcsMHhk NywweDQxLDB4MGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHg0ZSwweDMzLDB4NDEsMHgzYywweDljLDB4YzIsMHhkMiwweDUzLDB4YWYsMHg5MCwweGVh LDB4Y2YsCisrCTB4MTksMHg1MCwweDFlLDB4ZTYsMHg2ZiwweDYzLDB4YzgsMHgzMiwweDIyLDB4 ZGMsMHgwNywweDY1LAorKwkweDljLDB4ZDMsMHhmOCwweDMwLDB4OWUsMHhlZCwweDM1LDB4NzAK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg1ZCwweDhiLDB4OGMs MHhjMSwweGRmLDB4MGUsMHgwMiwweDc4LDB4ZmIsMHgxOSwweGI4LDB4NjksCisrCTB4NzgsMHg0 ZSwweDljLDB4NTIsMHhiYywweGM3LDB4MjAsMHhjOSwweGU2LDB4NWUsMHg3NywweDIyLAorKwkw eDI4LDB4M2QsMHgwYywweDllLDB4NjgsMHhhOCwweDQ1LDB4ZDcKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZDUsMHhlNywweDA4LDB4YzUsMHgxOSwweDk5LDB4 ZDUsMHgzMSwweDAzLDB4MGEsMHg3NCwweGI2LAorKwkweGI3LDB4ZWQsMHhlOSwweGVhCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OWMsMHgyNiwweGRhLDB4 ZjEsMHhhYywweGQ5LDB4NWEsMHhkNiwweGE4LDB4NjUsMHhmNSwweDAyLAorKwkweDhmLDB4ZGMs MHhhMiwweDA5LDB4NTQsMHhhNiwweGUyLDB4YTQsMHhkZSwweDMyLDB4ZTAsMHgwMQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf dXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDliLDB4OTAsMHhiMCww eDNhLDB4MGUsMHgzYSwweDgwLDB4MDcsMHg0YSwweGY0LDB4ZGEsMHg3NiwKKysJMHgyOCwweDMw LDB4M2MsMHhlZSwweDU0LDB4MWIsMHg5NCwweDU5LDB4NTEsMHg0MywweDU2LDB4NzcsCisrCTB4 YWYsMHg4OCwweGRkLDB4NjMsMHg4OSwweDQ3LDB4MDYsMHg2NQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgzYywweDExLDB4NjQsMHg3YSwweDk2LDB4ZjUsMHhk OCwweGI4LDB4YWUsMHhkNiwweDcwLDB4NGUsCisrCTB4MTYsMHg5NiwweGRlLDB4ZTksMHg2Miww eGJjLDB4ZWUsMHgyOCwweDJmLDB4MjYsMHhhNiwweGYwLAorKwkweDU2LDB4ZWYsMHhhMywweGYx LDB4NmIsMHhhMSwweGIxLDB4NzcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHgwYiwweGUyLDB4NTYsMHgwMywweDFlLDB4ZGIsMHgyYywweDZkLDB4N2YsMHgxYiwweDE1 LDB4NTgsCisrCTB4MWEsMHhmOSwweDEzLDB4MjgKKysJfTsKKysKKysKKysvKiBBRVMtMjU2IHVz ZSBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2MSwweDY4LDB4 ZmMsMHgxYSwweGYwLDB4YjUsMHg5NSwweDZiLDB4ODUsMHgwOSwweDliLDB4NzQsCisrCTB4M2Ys MHgxMywweDc4LDB4NDksMHgzYiwweDg1LDB4ZWMsMHg5MywweDEzLDB4M2IsMHhhOSwweDRmLAor KwkweDk2LDB4YWIsMHgyYywweGU0LDB4YzgsMHg4ZiwweGRkLDB4NmEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9w cl9ub25jZVtdID0KKysJeworKwkweGFkLDB4ZDIsMHhiYiwweGJhLDB4YjcsMHg2NSwweDg5LDB4 YzMsMHgyMSwweDZjLDB4NTUsMHgzMywKKysJMHgyYiwweDM2LDB4ZmYsMHhhNAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDZlLDB4Y2EsMHhlNyww eDIwLDB4NzIsMHhkMywweDg0LDB4NWEsMHgzMiwweGQzLDB4NGIsMHgyNCwKKysJMHg3MiwweGM0 LDB4NjMsMHgyYiwweDlkLDB4MTIsMHgyNCwweDBjLDB4MjMsMHgyNiwweDhlLDB4ODMsCisrCTB4 MTYsMHgzNywweDBiLDB4ZDEsMHgwNiwweDRmLDB4NjgsMHg2ZAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDdlLDB4MDgsMHg0YSwweGJiLDB4ZTMsMHgyMSww eDdjLDB4YzksMHgyMywweGQyLDB4ZjgsMHhiMCwKKysJMHg3MywweDk4LDB4YmEsMHg4NCwweDc0 LDB4MjMsMHhhYiwweDA2LDB4OGEsMHhlMiwweDIyLDB4ZDMsCisrCTB4N2IsMHhjZSwweDliLDB4 ZDIsMHg0YSwweDc2LDB4YjgsMHhkZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10g PQorKwl7CisrCTB4MGIsMHgyMywweGFmLDB4ZGYsMHhmMSwweDYyLDB4ZDcsMHhkMywweDQzLDB4 OTcsMHhmOCwweDc3LAorKwkweDA0LDB4YTgsMHg0MiwweDIwLDB4YmQsMHhmNiwweDBmLDB4YzEs MHgxNywweDJmLDB4OWYsMHg1NCwKKysJMHhiYiwweDU2LDB4MTcsMHg4NiwweDY4LDB4MGUsMHhi YSwweGE5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDMx LDB4OGUsMHhhZCwweGFmLDB4NDAsMHhlYiwweDZiLDB4NzQsMHgzMSwweDQ2LDB4ODAsMHhjNywK KysJMHgxNywweGFiLDB4M2MsMHg3YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9CisrCXsKKysJMHg5NCwweDZiLDB4YzksMHg5ZiwweGFiLDB4OGQsMHhjNSwweGVjLDB4NzEs MHg4OCwweDFkLDB4MDAsCisrCTB4OGMsMHg4OSwweDY4LDB4ZTQsMHhjOCwweDA3LDB4NzcsMHgz NiwweDE3LDB4NmQsMHg3OSwweDc4LAorKwkweGM3LDB4MDYsMHg0ZSwweDk5LDB4MDQsMHgyOCww eDI5LDB4YzMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhi ZiwweDZjLDB4NTksMHgyYSwweDBkLDB4NDQsMHgwZiwweGFlLDB4OWEsMHg1ZSwweDAzLDB4NzMs CisrCTB4ZDgsMHhhNiwweGUxLDB4Y2YsMHgyNSwweDYxLDB4MzgsMHgyNCwweDg2LDB4OWUsMHg1 MywweGU4LAorKwkweGE0LDB4ZGYsMHg1NiwweGY0LDB4MDYsMHgwNywweDljLDB4MGYKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyMiwweDRhLDB4YjQsMHhiOCww eGI2LDB4ZWUsMHg3ZCwweGIxLDB4OWUsMHhjOSwweGY5LDB4YTAsCisrCTB4ZDksMHhlMiwweDk3 LDB4MDAKKysJfTsKKysKKysKKysvKiBBRVMtMjU2IHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9lbnRy b3B5aW5wdXRbXSA9CisrCXsKKysJMHhhNSwweDNlLDB4MzcsMHgxMCwweDE3LDB4NDMsMHg5MSww eDkzLDB4NTksMHgxZSwweDQ3LDB4NTAsCisrCTB4ODcsMHhhYSwweGRkLDB4ZDUsMHhjMSwweGMz LDB4ODYsMHhjZCwweGNhLDB4MGQsMHhkYiwweDY4LAorKwkweGUwLDB4MDIsMHhkOCwweDBmLDB4 ZGMsMHg0MCwweDFhLDB4NDcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25jZVtdID0KKysJeworKwkweGE5LDB4 NGQsMHhhNSwweDVhLDB4ZmQsMHhjNSwweDBjLDB4ZTUsMHgxYywweDlhLDB4M2IsMHg4YSwKKysJ MHg0YywweDQ0LDB4ODQsMHg0MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KKysJeworKwkweDhiLDB4NTIsMHhhMiwweDRhLDB4OTMsMHhjMywweDRlLDB4YTcsMHgxZSww eDFjLDB4YTcsMHgwNSwKKysJMHhlYiwweDgyLDB4OWIsMHhhNiwweDVkLDB4ZTQsMHhkNCwweGUw LDB4N2YsMHhhMywweGQ4LDB4NmIsCisrCTB4MzcsMHg4NCwweDVmLDB4ZjEsMHhjNywweGQ1LDB4 ZjYsMHhkMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDIwLDB4 ZjQsMHgyMiwweGVkLDB4ZjgsMHg1YywweGExLDB4NmEsMHgwMSwweGNmLDB4YmUsMHg1ZiwKKysJ MHg4ZCwweDZjLDB4OTQsMHg3ZiwweGFlLDB4MTIsMHhhOCwweDU3LDB4ZGIsMHgyYSwweGE5LDB4 YmYsCisrCTB4YzcsMHhiMywweDY1LDB4ODEsMHg4MCwweDhkLDB4MGQsMHg0NgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0ZSwweDQ0LDB4ZmQsMHhmMywweDll LDB4MjksMHhhMiwweGI4LDB4MGYsMHg1ZCwweDZjLDB4ZTEsCisrCTB4MjgsMHgwYywweDNiLDB4 YzEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhkZCwweDQw LDB4ZTUsMHg5OCwweDdiLDB4MjcsMHgxNiwweDczLDB4MTUsMHg2OCwweGQyLDB4NzYsCisrCTB4 YmYsMHgwYywweDY3LDB4MTUsMHg3NSwweDc5LDB4MDMsMHhkMywweGRlLDB4ZGUsMHg5MSwweDQ2 LAorKwkweDQyLDB4ZGQsMHhkNCwweDY3LDB4YzgsMHg3OSwweGM4LDB4MWUKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9k Zl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg3ZiwweGQ4LDB4MWYsMHhiZCww eDJhLDB4YjUsMHgxYywweDExLDB4NWQsMHg4MywweDRlLDB4OTksCisrCTB4ZjYsMHg1YywweGE1 LDB4NDAsMHgyMCwweGVkLDB4MzgsMHg4ZSwweGQ1LDB4OWUsMHhlMCwweDc1LAorKwkweDkzLDB4 ZmUsMHgxMiwweDVlLDB4NWQsMHg3MywweGZiLDB4NzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4Y2QsMHgyYywweGZmLDB4MTQsMHg2OSwweDNlLDB4NGMsMHg5 ZSwweGZkLDB4ZmUsMHgyNiwweDBkLAorKwkweGU5LDB4ODYsMHgwMCwweDQ5LDB4MzAsMHhiYSww eGIxLDB4YzYsMHg1MCwweDU3LDB4NzcsMHgyYSwKKysJMHg2MiwweDM5LDB4MmMsMHgzYiwweDc0 LDB4ZWIsMHhjOSwweDBkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 NGYsMHg3OCwweGJlLDB4YjksMHg0ZCwweDk3LDB4OGMsMHhlOSwweGQwLDB4OTcsMHhmZSwweGFk LAorKwkweGZhLDB4ZmQsMHgzNSwweDVlCisrCX07CisrCisrCisrLyogQUVTLTEyOCBubyBkZiBQ UiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDlhLDB4MjUsMHg2NSwweDEw LDB4NjcsMHhkNSwweGI2LDB4NmIsMHg3MCwweGExLDB4YjMsMHhhNCwKKysJMHg0MywweDk1LDB4 ODAsMHhjMCwweDg0LDB4MGEsMHg3OSwweGIwLDB4ODgsMHg3NCwweGYyLDB4YmYsCisrCTB4MzEs MHg2YywweDMzLDB4MzgsMHgwYiwweDAwLDB4YjIsMHg1YQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfbm9uY2Vb XSA9CisrCXsKKysJMHg3OCwweDQ3LDB4NmIsMHhmNywweDkwLDB4OGUsMHg4NywweGYxCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhmNywweDIyLDB4 MWQsMHgzYSwweGJlLDB4MWQsMHhjYSwweDMyLDB4MWIsMHhiZCwweDg3LDB4MGMsCisrCTB4NTEs MHgyNCwweDE5LDB4ZWUsMHhhMywweDIzLDB4MDksMHg2MywweDMzLDB4M2QsMHhhOCwweDBjLAor KwkweDFjLDB4ZmEsMHg0MiwweDg5LDB4Y2MsMHg2ZiwweGEwLDB4YTgKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3By X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGM5LDB4ZTAsMHg4MCwweGJmLDB4OGMsMHg0 NSwweDU4LDB4MzksMHhmZiwweDAwLDB4YWIsMHgwMiwKKysJMHg0YywweDNlLDB4M2EsMHg5NSww eDliLDB4ODAsMHhhOCwweDIxLDB4MmEsMHhlZSwweGJhLDB4NzMsCisrCTB4YjEsMHhkOSwweGNm LDB4MjgsMHhmNiwweDhmLDB4OWIsMHgxMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0cHJb XSA9CisrCXsKKysJMHg0YywweGE4LDB4YzUsMHhmMCwweDU5LDB4OWUsMHhhNiwweDhkLDB4MjYs MHg1MywweGQ3LDB4OGEsCisrCTB4YTksMHhkOCwweGY3LDB4ZWQsMHhiMiwweGY5LDB4MTIsMHg0 MiwweGUxLDB4ZTUsMHhiZCwweGU3LAorKwkweGU3LDB4MWQsMHg3NCwweDk5LDB4MDAsMHg5ZCww eDMxLDB4M2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhl MiwweGFjLDB4MjAsMHhmMCwweDgwLDB4ZTcsMHhiYywweDdlLDB4OWMsMHg3YiwweDY1LDB4NzEs CisrCTB4YWYsMHgxOSwweDMyLDB4MTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9CisrCXsKKysJMHgzMiwweDdmLDB4MzgsMHg4YiwweDczLDB4MGEsMHg3OCwweDgzLDB4ZGMs MHgzMCwweGJlLDB4OWYsCisrCTB4MTAsMHgxZiwweGY1LDB4MWYsMHhjYSwweDAwLDB4YjUsMHgw ZCwweGQ2LDB4OWQsMHg2MCwweDgzLAorKwkweDUxLDB4NTQsMHg3ZCwweDM4LDB4MjMsMHgzYSww eDUyLDB4NTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDE4 LDB4NjEsMHg1MywweDU2LDB4ZWQsMHhlZCwweGQ3LDB4MjAsMHhmYiwweDcxLDB4MDQsMHg3YSwK KysJMHhiMiwweGFjLDB4YzEsMHgyOCwweGNkLDB4ZjIsMHhjMiwweGZjLDB4YWEsMHhiMSwweDA2 LDB4MDcsCisrCTB4ZTksMHg0NiwweDk1LDB4MDIsMHg0OCwweDAxLDB4NzgsMHhmOQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf bm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MjksMHhjOCwweDFiLDB4MTUsMHhi MSwweGQxLDB4YzIsMHhmNiwweDcxLDB4ODYsMHg2OCwweDMzLAorKwkweDU3LDB4ODIsMHgzMyww eGFmCisrCX07CisrCisrCisrLyogQUVTLTEyOCBubyBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJvcHlp bnB1dFtdID0KKysJeworKwkweGM5LDB4YzUsMHg3OSwweGJjLDB4ZTgsMHhjNSwweDE5LDB4ZDgs MHhiYywweDY2LDB4NzMsMHg2NywKKysJMHhmNiwweGQzLDB4NzIsMHhhYSwweGE2LDB4MTYsMHhi OCwweDUwLDB4YjcsMHg0NywweDNhLDB4NDIsCisrCTB4YWIsMHhmNCwweDE2LDB4YjIsMHg5Niww eGQyLDB4YjYsMHg2MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfbm9uY2VbXSA9CisrCXsKKysJMHg1ZiwweGJmLDB4 OTcsMHgwYywweDRiLDB4YTQsMHg4NywweDEzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9CisrCXsKKysJMHhjZSwweGZiLDB4N2IsMHgzZiwweGQ0LDB4NmIsMHgyOSwweDBk LDB4NjksMHgwNiwweGZmLDB4YmIsCisrCTB4ZjIsMHhlNSwweGM2LDB4NmMsMHgwYSwweDEwLDB4 YTAsMHhjZiwweDFhLDB4NDgsMHhjNywweDhiLAorKwkweDNjLDB4MTYsMHg4OCwweGVkLDB4NTAs MHgxMywweDgxLDB4Y2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkw eDRiLDB4MjIsMHg0NiwweDE4LDB4MDIsMHg3YiwweGQyLDB4MWIsMHgyMiwweDQyLDB4N2MsMHgz NywKKysJMHhkOSwweGY2LDB4ZTgsMHg5YiwweDEyLDB4MzAsMHg1ZiwweGU5LDB4OTAsMHhlOCww eDA4LDB4MjQsCisrCTB4NGYsMHgwNiwweDY2LDB4ZGIsMHgxOSwweDJiLDB4MTMsMHg5NQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x Mjhfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDJlLDB4OTYsMHg3MCwweDY0 LDB4ZmEsMHhkZiwweGRmLDB4NTcsMHhiNSwweDgyLDB4ZWUsMHhkNiwKKysJMHhlZCwweDNlLDB4 NjUsMHhjMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4MjYs MHhjMCwweDcyLDB4MTYsMHgzYSwweDRiLDB4YjcsMHg5OSwweGQ0LDB4MDcsMHhhZiwweDY2LAor KwkweDYyLDB4MzYsMHg5NiwweGE0LDB4NTEsMHgxNywweGZhLDB4MDcsMHg4YiwweDE3LDB4NWUs MHhhMSwKKysJMHgyZiwweDNjLDB4MTAsMHhlNywweDkwLDB4ZDAsMHg0NiwweDAwCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg4MywweDM5LDB4MzcsMHg3 YiwweDAyLDB4MDYsMHhkMiwweDEyLDB4MTMsMHg4ZCwweDhiLDB4ZjIsCisrCTB4ZjAsMHhmNiww eDI2LDB4ZWIsMHhhNCwweDIyLDB4N2IsMHhjMiwweGU3LDB4YmEsMHg3OSwweGU0LAorKwkweDNi LDB4NzcsMHg1ZCwweDRkLDB4NDcsMHhiMiwweDJkLDB4YjQKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9u YWxpbnB1dDJbXSA9CisrCXsKKysJMHgwYiwweGI5LDB4NjcsMHgzNywweGRiLDB4ODMsMHhkZiww eGNhLDB4ODEsMHg4YiwweGY5LDB4M2YsCisrCTB4ZjEsMHgxMSwweDFiLDB4MmYsMHhmMCwweDYx LDB4YTYsMHhkZiwweGJhLDB4YTMsMHhiMSwweGFjLAorKwkweGQzLDB4ZTYsMHgwOSwweGI4LDB4 MmMsMHg2YSwweDY3LDB4ZDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkw eDFlLDB4YTcsMHhhNCwweGU0LDB4ZTEsMHhhNiwweDdjLDB4NjksMHg5YSwweDQ0LDB4NmMsMHgz NiwKKysJMHg4MSwweDM3LDB4MTksMHhkNAorKwl9OworKworKworKy8qIEFFUy0xOTIgbm8gZGYg UFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg5ZCwweDJjLDB4ZDIsMHg1 NSwweDY2LDB4ZWEsMHhlMCwweGJlLDB4MTgsMHhiNywweDc2LDB4ZTcsCisrCTB4NzMsMHgzNSww eGQ4LDB4MWYsMHhhZCwweDNhLDB4ZTMsMHg4MSwweDBlLDB4OTIsMHhkMCwweDYxLAorKwkweGM5 LDB4MTIsMHgyNiwweGY2LDB4MWMsMHhkZiwweGZlLDB4NDcsMHhhYSwweGZlLDB4N2QsMHg1YSwK KysJMHgxNywweDFmLDB4OGQsMHg5YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJ MHg0NCwweDgyLDB4ZWQsMHhlOCwweDRjLDB4MjgsMHg1YSwweDE0LDB4ZmYsMHg4OCwweDhkLDB4 MTksCisrCTB4NjEsMHg1YywweGVlLDB4MGYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KKysJeworKwkweDQ3LDB4ZDcsMHg5YiwweDk5LDB4YWEsMHhjYiwweGU3LDB4 ZDIsMHg1NywweDY2LDB4MmMsMHhlMSwKKysJMHg3OCwweGQ2LDB4MmMsMHhlYSwweGEzLDB4MjMs MHg1ZiwweDJhLDB4YzEsMHgzYSwweGYwLDB4YTQsCisrCTB4MjAsMHgzYiwweGZhLDB4MDcsMHhk NSwweDA1LDB4MDIsMHhlNCwweDU3LDB4MDEsMHhiNiwweDEwLAorKwkweDU3LDB4MmUsMHhlNyww eDU1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg0YiwweDc0 LDB4MGIsMHg0MCwweGNlLDB4NmIsMHhjMiwweDZhLDB4MjQsMHhiNCwweGYzLDB4YWQsCisrCTB4 N2EsMHhhNSwweDdhLDB4YTIsMHgxNSwweGUyLDB4YzgsMHg2MSwweDE1LDB4YzYsMHhiNywweDg1 LAorKwkweDY5LDB4MTEsMHhhZCwweDdiLDB4MTQsMHhkMiwweGY2LDB4MTIsMHhhMSwweDk1LDB4 NWQsMHgzZiwKKysJMHhlMiwweGQwLDB4MGMsMHgyZgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlu cHV0cHJbXSA9CisrCXsKKysJMHgwYywweDljLDB4YWQsMHgwNSwweGVlLDB4YWUsMHg0OCwweDIz LDB4ODksMHg1OSwweGExLDB4OTQsCisrCTB4ZDcsMHhkOCwweDc1LDB4ZDUsMHg1NCwweDkzLDB4 YzcsMHg0YSwweGQ5LDB4MjYsMHhkZSwweGViLAorKwkweGJhLDB4YjAsMHg3ZSwweDMwLDB4MWQs MHg1ZiwweDY5LDB4NDAsMHg5YywweDNiLDB4MTcsMHg1OCwKKysJMHgxZCwweDMwLDB4YjMsMHg3 OAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGY3LDB4OTMs MHhiMCwweDZkLDB4NzcsMHg4MywweGQ1LDB4MzgsMHgwMSwweGUxLDB4NTIsMHg0MCwKKysJMHg3 ZSwweDNlLDB4MGMsMHgyNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJ eworKwkweGJjLDB4NGIsMHgzNywweDQ0LDB4MWMsMHhjNSwweDQ1LDB4NWYsMHg4ZiwweDUxLDB4 NjIsMHg4YSwKKysJMHg4NSwweDMwLDB4MWQsMHg3YywweGU0LDB4Y2YsMHhmNywweDQ0LDB4Y2Us MHgzMiwweDNlLDB4NTcsCisrCTB4OTUsMHhhNCwweDJhLDB4ZGYsMHhmZCwweDllLDB4MzgsMHg0 MSwweGIzLDB4ZjYsMHhjNSwweGVlLAorKwkweDBjLDB4NGIsMHhlZSwweDZlCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhlYywweGFmLDB4ZjYsMHg0ZiwweGIx LDB4YTAsMHg1NCwweGI1LDB4NWIsMHhlMywweDQ2LDB4YjAsCisrCTB4NzYsMHg1YSwweDdjLDB4 M2YsMHg3YiwweDk0LDB4NjksMHgyMSwweDUxLDB4MDIsMHhlNSwweDlmLAorKwkweDA0LDB4NTks MHgwMiwweDk4LDB4YzYsMHg0MywweDJjLDB4Y2MsMHgyNiwweDRjLDB4ODcsMHg2YiwKKysJMHg4 ZSwweDBhLDB4ODMsMHhkZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4NzQsMHg0NSwweGZiLDB4NTMsMHg4NCwweDk2LDB4YmUsMHhmZiwweDE1LDB4Y2MsMHg0MSww eDkxLAorKwkweGI5LDB4YTEsMHgyMSwweDY4CisrCX07CisrCisrCisrLyogQUVTLTE5MiBubyBk ZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDNjLDB4N2QsMHhiNSww eGUwLDB4NTQsMHhkOSwweDZlLDB4OGMsMHhhOSwweDg2LDB4Y2UsMHg0ZSwKKysJMHg2YiwweGFm LDB4ZWIsMHgyZiwweGU3LDB4NzUsMHhlMCwweDhiLDB4YTQsMHgzYiwweDA3LDB4ZmUsCisrCTB4 YmUsMHgzMywweDc1LDB4OTMsMHg4MCwweDI3LDB4YjUsMHgyOSwweDQ3LDB4OGIsMHhjNywweDI4 LAorKwkweDk0LDB4YzMsMHg1OSwweDYzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9ub25jZVtdID0KKysJeworKwkw eDQzLDB4ZjEsMHg3ZCwweGI4LDB4YzMsMHhmZSwweGQwLDB4MjMsMHg2YiwweGI0LDB4OTIsMHhk YiwKKysJMHgyOSwweGZkLDB4NDUsMHg3MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQorKwl7CisrCTB4OWYsMHgyNCwweDI5LDB4OTksMHg5ZSwweDAxLDB4YWIsMHhlOSww eDE5LDB4ZDgsMHgyMywweDA4LAorKwkweGI3LDB4ZDYsMHg3ZSwweDhjLDB4YzAsMHg5ZSwweDdm LDB4NmUsMHg1YiwweDMzLDB4MjAsMHg5NiwKKysJMHgwYiwweDIzLDB4MmMsMHhhNSwweDZhLDB4 ZjgsMHgxYiwweDA0LDB4MjYsMHhkYiwweDJlLDB4MmIsCisrCTB4M2IsMHg4OCwweGNlLDB4MzUK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDk0LDB4ZTksMHg3Yyww eDNkLDB4YTcsMHhkYiwweDYwLDB4ODMsMHgxZiwweDk4LDB4M2YsMHgwYiwKKysJMHg4OCwweDU5 LDB4NTcsMHg1MSwweDg4LDB4OWYsMHg3NiwweDQ5LDB4OWYsMHhhNiwweGRhLDB4NzEsCisrCTB4 MWQsMHgwZCwweDQ3LDB4MTYsMHg2MywweGM1LDB4NjgsMHhlNCwweDVkLDB4MzksMHg2OSwweGIz LAorKwkweDNlLDB4YmUsMHhkNCwweDhlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4ZjksMHhkNywweGFkLDB4NjksMHhhYiwweDhmLDB4MjMsMHg1NiwweDcwLDB4 MTcsMHg0ZiwweDJhLAorKwkweDQ1LDB4ZTcsMHg0YSwweGM1CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhhNiwweDcxLDB4NmEsMHgzZCwweGJhLDB4ZDEsMHhl OCwweDY2LDB4YTYsMHhlZiwweGIyLDB4MGUsCisrCTB4YTgsMHg5YywweGFhLDB4NGUsMHhhZiww eDE3LDB4ODksMHg1MCwweDAwLDB4ZGEsMHhhMSwweGIxLAorKwkweDBiLDB4YTQsMHhkOSwweDM1 LDB4ODksMHhjOCwweGU1LDB4YjAsMHhkOSwweGI3LDB4YzQsMHgzMywKKysJMHg5YiwweGNiLDB4 N2UsMHg3NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 MjcsMHgyMSwweGZjLDB4YzIsMHhiZCwweGYzLDB4M2MsMHhjZSwweGMzLDB4Y2EsMHhjMSwweDAx LAorKwkweGUwLDB4ZmYsMHg5MywweDEyLDB4N2QsMHg1NCwweDQyLDB4ZTMsMHg5ZiwweDAzLDB4 ZGYsMHgyNywKKysJMHgwNCwweDA3LDB4M2MsMHg1MywweDdmLDB4YTgsMHg2NiwweGM4LDB4OTcs MHg0YiwweDYxLDB4NDAsCisrCTB4NWQsMHg3YSwweDI1LDB4NzkKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgyZCwweDhlLDB4MTYsMHg1ZCwweDBiLDB4OWYsMHhl YiwweGFhLDB4ZDYsMHhlYywweDI4LDB4NzEsCisrCTB4N2MsMHgwYiwweGMxLDB4MWQsMHhkNCww eDQ0LDB4MTksMHg0NywweGZkLDB4MWQsMHg3YywweGU1LAorKwkweGYzLDB4MjcsMHhlMSwweGI2 LDB4NzIsMHgwYSwweGUwLDB4ZWMsMHgwZSwweGNkLDB4ZWYsMHgxYSwKKysJMHg5MSwweDZhLDB4 ZTMsMHg1ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTUsMHhkYSww eGI4LDB4ZTAsMHg2MywweDU5LDB4NWEsMHhjYywweDNkLDB4ZGMsMHg5ZiwweGU4LAorKwkweDY2 LDB4NjcsMHgyYywweDkyCisrCX07CisrCisrCisrLyogQUVTLTI1NiBubyBkZiBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDE1LDB4YzcsMHg1ZCwweGNiLDB4NDEsMHg0 YiwweDE2LDB4MDEsMHgzYSwweGQxLDB4NDQsMHhlOCwKKysJMHgyMiwweDMyLDB4YzYsMHg5Yyww eDNmLDB4ZTcsMHg0MywweGY1LDB4OWEsMHhkMywweGVhLDB4ZjIsCisrCTB4ZDcsMHg0ZSwweDZl LDB4NmEsMHg1NSwweDczLDB4NDAsMHhlZiwweDg5LDB4YWQsMHgwZCwweDAzLAorKwkweDk2LDB4 N2UsMHg3OCwweDgxLDB4MmYsMHg5MSwweDFiLDB4NDQsMHhiMCwweDAyLDB4YmEsMHgxYworKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfbm9fZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhkYywweGU0LDB4ZDQsMHgyNywweDdhLDB4 OTAsMHhkNywweDk5LDB4NDMsMHhhMSwweDNjLDB4MzAsCisrCTB4Y2MsMHg0YiwweGVlLDB4MmUK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGUzLDB4 ZTYsMHhiOSwweDExLDB4ZTQsMHg3YSwweGE0LDB4NDAsMHg2YiwweGY4LDB4NzMsMHhmNywKKysJ MHg3ZSwweGVjLDB4YzcsMHhiOSwweDk3LDB4YmYsMHhmOCwweDI1LDB4N2IsMHhiZSwweDExLDB4 OWIsCisrCTB4NWIsMHg2YSwweDBjLDB4MmUsMHgyYiwweDAxLDB4NTEsMHhjZCwweDQxLDB4NGIs MHg2YiwweGFjLAorKwkweDMxLDB4YTgsMHgwYiwweGY3LDB4ZTYsMHg1OSwweDQyLDB4YjgsMHgw MywweDBjLDB4ZjgsMHgwNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7 CisrCTB4NmEsMHg5ZiwweDAwLDB4OTEsMHhhZSwweGZlLDB4Y2YsMHg4NCwweDk5LDB4Y2UsMHhi MSwweDQwLAorKwkweDZkLDB4NWQsMHgzMywweDI4LDB4ODQsMHhmNCwweDhjLDB4NjMsMHg0Yyww eDdlLDB4YmQsMHgyYywKKysJMHg4MCwweDc2LDB4ZWUsMHg1YSwweGFhLDB4MTUsMHgwNywweDMx LDB4ZDgsMHhiYiwweDhjLDB4NjksCisrCTB4OWQsMHg5ZCwweGJjLDB4N2UsMHg0OSwweGFlLDB4 ZWMsMHgzOSwweDZiLDB4ZDEsMHgxZiwweDdlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRw cltdID0KKysJeworKwkweGYzLDB4YjksMHg3NSwweDljLDB4YmQsMHg4OCwweGVhLDB4YTIsMHg1 MCwweGFkLDB4ZDYsMHgxNiwKKysJMHgxYSwweDEyLDB4M2MsMHg4NiwweDY4LDB4YWYsMHg2Ziww eGJlLDB4MTksMHhmMiwweGVlLDB4Y2MsCisrCTB4YTUsMHg3MCwweDg0LDB4NTMsMHg1MCwweGNi LDB4OWYsMHgxNCwweGE5LDB4ZTUsMHhlZSwweGI5LAorKwkweDQ4LDB4NDUsMHg0MCwweGUyLDB4 YzcsMHhjOSwweDlhLDB4NzQsMHhmZiwweDhjLDB4OTksMHgxZgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfaW50 X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDJlLDB4ZjIsMHg0NSwweDRjLDB4NjIsMHgyZSww eDBhLDB4YjksMHg2YiwweGEyLDB4ZmQsMHg1NiwKKysJMHg3OSwweDYwLDB4OTMsMHhjZgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGFmLDB4NjksMHgyMCww eGU5LDB4M2IsMHgzNywweDlkLDB4M2YsMHhiNCwweDgwLDB4MDIsMHg3YSwKKysJMHgyNSwweDdk LDB4YjgsMHhkZSwweDcxLDB4YzUsMHgwNiwweDBjLDB4YjQsMHhlMiwweDhmLDB4MzUsCisrCTB4 ZDgsMHgxNCwweDBkLDB4N2YsMHg3NiwweDYzLDB4NGUsMHhiNSwweGVlLDB4ZTksMHg2ZiwweDM0 LAorKwkweGM3LDB4NWYsMHg1NiwweDE0LDB4NGEsMHhlOCwweDczLDB4OTUsMHg1YiwweDFjLDB4 YjksMHhjYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZTUs MHhiMCwweDJlLDB4N2UsMHg1MiwweDMwLDB4ZTMsMHg2MywweDgyLDB4YjYsMHg0NCwweGQzLAor KwkweDI1LDB4MTksMHgwNSwweDI0LDB4OWEsMHg5ZiwweDVmLDB4MjcsMHg2YSwweDI5LDB4YWIs MHhmYSwKKysJMHgwNywweGEyLDB4NDIsMHgwZiwweGM1LDB4YTgsMHg5NCwweDdjLDB4MTcsMHg3 YiwweDg1LDB4ODMsCisrCTB4MGMsMHgyNSwweDBlLDB4NjMsMHgwYiwweGU5LDB4MTIsMHg2MCww eGNkLDB4ZWYsMHg4MCwweDBmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHg1ZSwweGYyLDB4MjYsMHhlZiwweDlmLDB4NTgsMHg1ZCwweGQ1LDB4NGEsMHgxMCwweGZl LDB4YTcsCisrCTB4MmQsMHg1ZiwweDRhLDB4NDYKKysJfTsKKysKKysKKysvKiBBRVMtMjU2IG5v IGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4ZmIsMHhjZiwweDFi LDB4NjEsMHgxNiwweDg5LDB4NzgsMHgyMywweGY1LDB4ZDgsMHg5NiwweGUzLAorKwkweDRlLDB4 NjQsMHgwYiwweDI5LDB4OWEsMHgzZiwweGY4LDB4YTUsMHhlZCwweGYyLDB4ZmUsMHhkYiwKKysJ MHgxNiwweGNhLDB4N2YsMHgxMCwweGZhLDB4NWUsMHgxOCwweDc2LDB4MmMsMHg2MywweDVlLDB4 OTYsCisrCTB4Y2YsMHhiMywweGQ2LDB4ZmMsMHhhZiwweDk5LDB4MzksMHgyOCwweDljLDB4NjEs MHhlOCwweGIzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9ub25jZVtdID0KKysJeworKwkweDEyLDB4OTYsMHhmMCww eDUyLDB4ZjMsMHg4ZCwweDgxLDB4Y2YsMHhkZSwweDg2LDB4ZjIsMHg5OSwKKysJMHg0MywweDk2 LDB4YjksMHhmMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7Cisr CTB4NjMsMHgwZCwweDc4LDB4ZjUsMHg5MCwweDhlLDB4MzIsMHg0NywweGIwLDB4NGQsMHgzNyww eDYwLAorKwkweDA5LDB4OTYsMHhiYywweGJmLDB4OTcsMHg3YSwweDYyLDB4MTQsMHg0NSwweGJk LDB4OGQsMHhjYywKKysJMHg2OSwweGZiLDB4MDMsMHhlMSwweDgwLDB4MWMsMHhjNywweGUyLDB4 MmEsMHhmOSwweDM3LDB4M2YsCisrCTB4NjYsMHg0ZCwweDYyLDB4ZDksMHgxMCwweGUwLDB4YWQs MHhjOCwweDlhLDB4ZjAsMHhhOCwweDZkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9 CisrCXsKKysJMHgzNiwweGM2LDB4MTMsMHg2MCwweGJiLDB4MTQsMHhhZCwweDIyLDB4YjAsMHgz OCwweGFjLDB4YTYsCisrCTB4MTgsMHgxNiwweDkzLDB4MjUsMHg4NiwweGI3LDB4ZGMsMHhkYyww eDM2LDB4OTgsMHgyYiwweGY5LAorKwkweDY4LDB4MzMsMHhkMywweGM2LDB4ZmYsMHhjZSwweDhk LDB4MTUsMHg1OSwweDgyLDB4NzYsMHhlZCwKKysJMHg2ZiwweDhkLDB4NDksMHg3NCwweDJmLDB4 ZGEsMHhkYywweDFmLDB4MTcsMHhkMCwweGRlLDB4MTcKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2ludF9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHgxNiwweDJmLDB4OGUsMHgzZiwweDIxLDB4N2EsMHgxYywweDIw LDB4NTYsMHhkMSwweDkyLDB4ZjYsCisrCTB4ZDIsMHgyNSwweDc1LDB4MGUKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDkxLDB4NzksMHg3NiwweGVlLDB4ZTAs MHhjZiwweDllLDB4YzIsMHhkNSwweGQ0LDB4MjMsMHg5YiwKKysJMHgxMiwweDhjLDB4N2UsMHgw YSwweGI3LDB4ZDIsMHg4YiwweGQ2LDB4N2MsMHhhMywweGM2LDB4ZTUsCisrCTB4MGUsMHhhYSww eGM3LDB4NmIsMHhhZSwweDBkLDB4ZmEsMHg1MywweDA2LDB4NzksMHhhMSwweGVkLAorKwkweDRk LDB4NmEsMHgwZSwweGQ4LDB4OWQsMHhiZSwweDFiLDB4MzEsMHg5MywweDdiLDB4ZWMsMHhmYgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4ZDIsMHg0Niww eDUwLDB4MjIsMHgxMCwweDE0LDB4NjMsMHhmNywweGVhLDB4MGYsMHhiOSwweDdlLAorKwkweDBk LDB4ZTEsMHg5NCwweDA3LDB4YWYsMHgwOSwweDQ0LDB4MzEsMHhlYSwweDY0LDB4YTQsMHgxOCwK KysJMHg1YiwweGY5LDB4ZDgsMHhjMiwweGZhLDB4MDMsMHg0NywweGM1LDB4MzksMHg0MywweGQ1 LDB4M2IsCisrCTB4NjIsMHg4NiwweDY0LDB4ZWEsMHgyYywweDczLDB4OGMsMHhhZSwweDlkLDB4 OTgsMHg5OCwweDI5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 OGMsMHhhYiwweDE4LDB4ZjgsMHhjMywweGVjLDB4MTgsMHg1YywweGIzLDB4MWUsMHg5ZCwweGJl LAorKwkweDNmLDB4MDMsMHhiNCwweDAwLDB4OTgsMHg5ZCwweGFlLDB4ZWIsMHhmNCwweDk0LDB4 ZjgsMHg0MiwKKysJMHg4ZiwweGUzLDB4MzksMHgwNywweGUxLDB4YzksMHhhZCwweDBiLDB4MWYs MHhlZCwweGMwLDB4YmEsCisrCTB4ZjYsMHhkMSwweGVjLDB4MjcsMHg4NiwweDdiLDB4ZDYsMHg1 NSwweDliLDB4NjAsMHhhNSwweGM2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHhlZiwweGQyLDB4ZDgsMHg1YywweGRjLDB4NjIsMHgyNSwweDlmLDB4YWEsMHgxZSwweDJj LDB4NjcsCisrCTB4ZjYsMHgwMiwweDMyLDB4ZTIKKysJfTsKKysKKysKKysvKiBTSEEtMSBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3By X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGQyLDB4MzYsMHhhNSwweDI3LDB4MzEsMHg3Myww eGRkLDB4MTEsMHg0ZiwweDkzLDB4YmQsMHhlMiwKKysJMHgzMSwweGE1LDB4OTEsMHgxMworKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf cHJfbm9uY2VbXSA9CisrCXsKKysJMHhiNSwweGIzLDB4NjAsMHhlZiwweGY3LDB4NjMsMHgzMSww eGYzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhkNCwweGJiLDB4 MDIsMHgxMCwweGIyLDB4NzEsMHhkYiwweDgxLDB4ZDYsMHhmMCwweDQyLDB4NjAsCisrCTB4ZGEs MHhlYSwweDc3LDB4NTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDRkLDB4 ZDIsMHg2YywweDg3LDB4ZmIsMHgyYywweDRmLDB4YTYsMHg4ZCwweDE2LDB4NjMsMHgyMiwKKysJ MHg2YSwweDUxLDB4ZTMsMHhmOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhj OSwweDgzLDB4OWUsMHgxNiwweGY2LDB4MWMsMHgwZiwweGIyLDB4ZWMsMHg2MCwweDMxLDB4YTks CisrCTB4Y2IsMHhhOSwweDM2LDB4N2EKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHhhOCwweDEzLDB4NGYsMHhmNCwweDMxLDB4MDIsMHg0NCwweGUzLDB4ZDMsMHgzZCwweDYx LDB4OWUsCisrCTB4ZTUsMHhjNiwweDNlLDB4ODksMHhiNSwweDliLDB4MGYsMHgzNQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJf YWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGY5LDB4ZTgsMHhkMiwweDcyLDB4MTMsMHgz NCwweDk1LDB4NmYsMHgxNSwweDQ5LDB4NDcsMHg5OSwKKysJMHgxNiwweDAzLDB4MTksMHg0Nwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4NGUsMHg4YywweDQ5LDB4OWIsMHg0 YSwweDVjLDB4OWIsMHg5YywweDNhLDB4ZWUsMHhmYiwweGQyLAorKwkweGFlLDB4Y2QsMHg4Yyww eGM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg1MCwweGI0LDB4YjQsMHhjZCww eDY4LDB4NTcsMHhmYywweDJlLDB4YzEsMHg1MiwweGNjLDB4ZjYsCisrCTB4NjgsMHhhNCwweDgx LDB4ZWQsMHg3ZSwweGU0LDB4MWQsMHg4NworKwl9OworKworKworKy8qIFNIQS0xIE5vIFBSICAq LworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfZW50 cm9weWlucHV0W10gPQorKwl7CisrCTB4YTksMHg0NywweDFiLDB4MjksMHgyZCwweDFjLDB4MDUs MHhkZiwweDc2LDB4ZDAsMHg2MiwweGY5LAorKwkweGUyLDB4N2YsMHg0YywweDdiCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9ub25j ZVtdID0KKysJeworKwkweDUzLDB4MjMsMHgyNCwweGUzLDB4ZWMsMHgwYywweDU0LDB4MTQKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDdhLDB4ODcsMHhhMSwweGFjLDB4 MWMsMHhmZCwweGFiLDB4YWUsMHhmNywweGQ2LDB4ZmIsMHg3NiwKKysJMHgyOCwweGVjLDB4NmQs MHhjYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTFfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZmMsMHg5MiwweDM1LDB4ZDYs MHg3ZSwweGI3LDB4MjQsMHg2NSwweGZkLDB4MTIsMHgyNywweDM1LAorKwkweGMwLDB4NzIsMHhj YSwweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NTcsMHg4OCwweDgyLDB4 ZTUsMHgyNSwweGE1LDB4MmMsMHg0YSwweDA2LDB4MjAsMHg2YywweDcyLAorKwkweDU1LDB4NjEs MHhkZCwweDkwLDB4NzEsMHg5ZiwweDk1LDB4ZWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dHJlc2VlZFtdID0K KysJeworKwkweDY5LDB4YTUsMHg0MCwweDYyLDB4OTgsMHg0NywweDU2LDB4NzMsMHg0YSwweDhm LDB4NjAsMHg5NiwKKysJMHhkNiwweDk5LDB4MjcsMHhlZAorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0cmVz ZWVkW10gPQorKwl7CisrCTB4ZTUsMHg0MCwweDRlLDB4YmQsMHg1MCwweDAwLDB4ZjUsMHgxNSww eGE2LDB4ZWUsMHg0NSwweGRhLAorKwkweDg0LDB4M2QsMHhkNCwweGMwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4MTEsMHg1MSwweDE0LDB4ZjAsMHgwOSwweDFiLDB4NGUsMHg1 NiwweDBkLDB4ZTksMHhmNiwweDFlLAorKwkweDUyLDB4NjUsMHhjZCwweDk2CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHhhMSwweDljLDB4OTQsMHg2ZSwweDI5LDB4ZTEsMHgzMywweDBk LDB4MzIsMHhkNiwweGFhLDB4Y2UsCisrCTB4NzEsMHgzZiwweDUyLDB4NzIsMHg4YiwweDQyLDB4 YTgsMHhkNworKwl9OworKworKworKy8qIFNIQS0yMjQgUFIgICovCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0K KysJeworKwkweDEyLDB4NjksMHgzMiwweDRmLDB4ODMsMHhhNiwweGY1LDB4MTQsMHhlMywweDQ5 LDB4M2UsMHg3NSwKKysJMHgzZSwweGRlLDB4YWQsMHhhMSwweDI5LDB4YzMsMHhmMywweDE5LDB4 MjAsMHhiNSwweDRjLDB4ZDkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg2YSwweDc4LDB4 ZDAsMHhlYiwweGJiLDB4NWEsMHhmMCwweGVlLDB4ZTgsMHhjMywweGJhLDB4NzEKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZDUsMHhiOCwweGI2LDB4YmMsMHhj MSwweDViLDB4NjAsMHgzMSwweDNjLDB4ZjUsMHhlNSwweGMwLAorKwkweDhlLDB4NTIsMHg3YSww eGJkLDB4ZWEsMHg0NywweGE5LDB4NWYsMHg4ZiwweGY5LDB4OGIsMHhhZQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRp dGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgxZiwweDU1LDB4ZWMsMHhhZSwweDE2LDB4MTIsMHg4 NCwweGJhLDB4ODQsMHgxNiwweDE5LDB4ODgsCisrCTB4OGUsMHhiOCwweDMzLDB4MjUsMHg1NCww eGZmLDB4Y2EsMHg3OSwweGFmLDB4MDcsMHgyNSwweDUwCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dHBy W10gPQorKwl7CisrCTB4OTIsMHhhMywweDMyLDB4YTgsMHg5YSwweDBhLDB4NTgsMHg3YywweDFk LDB4NWEsMHg3ZSwweGUxLAorKwkweGIyLDB4NzMsMHhhYiwweDBlLDB4MTYsMHg3OSwweDIzLDB4 ZDMsMHgyOSwweDg5LDB4ODEsMHhlMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4ZjMsMHgzOCwweDkxLDB4NDAsMHgzNywweDdhLDB4NTEsMHg3MiwweDQyLDB4NzQsMHg3 OCwweDBhLAorKwkweDY5LDB4ZmQsMHhhNiwweDQ0LDB4NDMsMHg0NSwweDZjLDB4MGMsMHg1YSww eDE5LDB4ZmYsMHhmMSwKKysJMHg1NCwweDYwLDB4ZWUsMHg2YQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4NzUsMHhmMywweDA0LDB4MjUsMHhkZCwweDM2LDB4YTgsMHgz NywweDQ2LDB4YWUsMHgwYywweDUyLAorKwkweDA1LDB4NzksMHg0YywweDI2LDB4ZGIsMHhlOSww eDcxLDB4MTYsMHg0YywweDBhLDB4ZjIsMHg2MAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9 CisrCXsKKysJMHhlYSwweGM1LDB4MDMsMHgwYSwweDRmLDB4YjAsMHgzOCwweDhkLDB4MjMsMHhk NCwweGM4LDB4NzcsCisrCTB4ZTIsMHg2ZCwweDljLDB4MGIsMHg0NCwweGY3LDB4MmQsMHg1Yiww eGJmLDB4NWQsMHgyYSwweDExCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDYw LDB4NTAsMHgyYiwweGU3LDB4ODYsMHhkOCwweDI2LDB4NzMsMHhlMywweDFkLDB4OTUsMHgyMCwK KysJMHhiMywweDJjLDB4MzIsMHgxYywweGY1LDB4Y2UsMHg1NywweGE2LDB4NjcsMHgyYiwweGRj LDB4NGUsCisrCTB4ZGQsMHgxMSwweDRjLDB4YzQKKysJfTsKKysKKysKKysvKiBTSEEtMjI0IE5v IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTIyNF9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhiMiwweDFjLDB4NzcsMHg0ZCwweGY2LDB4 ZDMsMHhiNiwweDQwLDB4YjcsMHgzMCwweDNlLDB4MjksCisrCTB4YjAsMHg4NSwweDFjLDB4YmUs MHg0YSwweGVhLDB4NmIsMHg1YSwweGI1LDB4OGEsMHg5NywweGViCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X25vbmNlW10gPQor Kwl7CisrCTB4NDIsMHgwMiwweDBhLDB4MWMsMHg5OCwweDlhLDB4NzcsMHg5ZSwweDlmLDB4ODAs MHhiYSwweGUwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDk4LDB4 YjgsMHgwNCwweDQxLDB4ZmMsMHhjMSwweDVkLDB4YzUsMHhlOSwweGI5LDB4MDgsMHhkYSwKKysJ MHhmOSwweGZhLDB4MGQsMHg5MCwweGNlLDB4ZGYsMHgxZCwweDEwLDB4YTksMHg4ZCwweDUwLDB4 MGMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4OWEsMHg4ZCwweDM5LDB4NDks MHg0MiwweGQ1LDB4MGIsMHhhZSwweGUxLDB4YWYsMHhiNywweDAwLAorKwkweDAyLDB4ZmEsMHg5 NiwweGIxLDB4YTUsMHgxZCwweDJkLDB4MjUsMHg3OCwweGVlLDB4ODMsMHgzZgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTQsMHhmNSwweDUzLDB4NzksMHg1YSwweDk3LDB4 NTgsMHgwNiwweDA4LDB4YmEsMHg3YiwweGZhLAorKwkweGYwLDB4ODMsMHgwNSwweDhjLDB4MjIs MHhjMCwweGM5LDB4ZGIsMHgxNSwweGU3LDB4ZGUsMHgyMCwKKysJMHg1NSwweDIyLDB4OWEsMHhh ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg2NywweDA5LDB4NDgsMHhh YSwweDA3LDB4MTYsMHg5OSwweDg5LDB4N2YsMHg2ZCwweGEwLDB4ZTUsCisrCTB4OGYsMHhkZiww eGJjLDB4ZGIsMHhmZSwweGU1LDB4NmMsMHg3YSwweDk1LDB4NGEsMHg2NiwweDE3CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDBmLDB4NGIsMHgxYywweDZmLDB4Yjcs MHhlMywweDQ3LDB4ZTUsMHg1ZCwweDdkLDB4MzgsMHhkNiwKKysJMHgyOCwweDliLDB4ZWIsMHg1 NSwweDYzLDB4MDksMHgzZSwweDdjLDB4NTYsMHhlYSwweGY4LDB4MTkKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25h bGlucHV0MltdID0KKysJeworKwkweDJkLDB4MjYsMHg3YywweDM3LDB4ZTQsMHg3YSwweDI4LDB4 NWUsMHg1YSwweDNjLDB4YWYsMHgzZCwKKysJMHg1YSwweDhlLDB4NTUsMHhhMiwweDFhLDB4NmUs MHhjMCwweGU1LDB4ZjYsMHgyMSwweGQzLDB4ZjYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4NGQsMHg4MywweDM1LDB4ZGYsMHg2NywweGE5LDB4ZmMsMHgxNywweGRhLDB4NzAsMHhj YywweDhiLAorKwkweDdmLDB4NzcsMHhhZSwweGEyLDB4NWYsMHhiOSwweDdlLDB4NzQsMHg0Yyww eDI2LDB4YzEsMHg3YSwKKysJMHgzYiwweGE3LDB4NWMsMHg5MworKwl9OworKworKworKy8qIFNI QS0yNTYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGNlLDB4NDksMHgwMCwweDdh LDB4NTYsMHhlMywweDY3LDB4OGYsMHhlMSwweGI2LDB4YTcsMHhkNCwKKysJMHg0ZiwweDA4LDB4 N2EsMHgxYiwweDAxLDB4ZjQsMHhmYSwweDZiLDB4ZWYsMHhiNywweGU1LDB4ZWIsCisrCTB4MDcs MHgzZCwweDExLDB4MGQsMHhjOCwweGVhLDB4MmIsMHhmZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9ub25jZVtdID0KKysJ eworKwkweDczLDB4NDEsMHhjOCwweDkyLDB4OTQsMHhlMiwweGM1LDB4NWYsMHg5MywweGZkLDB4 MzksMHg1ZCwKKysJMHgyYiwweDkxLDB4NGQsMHgzOAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9CisrCXsKKysJMHg1MCwweDZkLDB4MDEsMHgwMSwweDA3LDB4NWEsMHg4MCwweDM1 LDB4N2EsMHg1NiwweDFhLDB4NTYsCisrCTB4MmYsMHg5YSwweDBiLDB4MzUsMHhiMiwweGIxLDB4 YzksMHhlNSwweGNhLDB4NjksMHg2MSwweDQ4LAorKwkweGZmLDB4ZmIsMHgwZiwweGQ5LDB4NGIs MHg3OSwweDFkLDB4YmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MjAs MHhiOCwweGRmLDB4NDQsMHg3NywweDVhLDB4YjgsMHhkMywweGJmLDB4ZjYsMHhjZiwweGFjLAor KwkweDVlLDB4YTYsMHg5NiwweDYyLDB4NzMsMHg0NCwweDQwLDB4NGEsMHgzMCwweGZiLDB4Mzgs MHhhNSwKKysJMHg3YiwweDBkLDB4ZTQsMHgwZCwweGM2LDB4ZTQsMHg5YSwweDFmCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3By X2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4MDQsMHhjNCwweDY1LDB4ZjQsMHhkMywweGJm LDB4ODMsMHg0YiwweGFiLDB4YzgsMHg0MSwweGE4LAorKwkweGMyLDB4ZTAsMHg0NCwweDYzLDB4 NzcsMHg0YywweDZmLDB4NmMsMHg0OSwweDQ2LDB4ZmYsMHg5NCwKKysJMHgxNywweGVhLDB4ZTYs MHgxYSwweDlkLDB4NWUsMHg2NiwweDc4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHgwNywweDRkLDB4YWMsMHg5YiwweDg2LDB4Y2EsMHg0YSwweGFhLDB4NmUsMHg3YSww eDAzLDB4YTIsCisrCTB4NWQsMHgxMCwweGVhLDB4MGIsMHhmOSwweDgzLDB4Y2MsMHhkMSwweGZj LDB4ZTIsMHgwNywweGM3LAorKwkweDA2LDB4MzQsMHg2MCwweDZmLDB4ODMsMHg5NCwweDk5LDB4 NzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDg5LDB4NGUsMHg0NSww eDhjLDB4MTEsMHhmOSwweGJjLDB4NWIsMHhhYywweDc0LDB4OGIsMHg0YiwKKysJMHg1ZiwweGY3 LDB4MTksMHhmMywweGY1LDB4MjQsMHg1NCwweDE0LDB4ZDEsMHgxNSwweGIxLDB4NDMsCisrCTB4 MTIsMHhhNCwweDVmLDB4ZDQsMHhlYywweGZjLDB4Y2QsMHgwOQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9CisrCXsKKysJMHgwZSwweGViLDB4MWYsMHhkNywweGZjLDB4ZDEsMHg5ZCwweGQ0 LDB4MDUsMHgzNiwweDhiLDB4YjIsCisrCTB4ZmIsMHhlNCwweGY0LDB4NTEsMHgwYywweDg3LDB4 OWIsMHgwMiwweDQ0LDB4ZDUsMHg5MiwweDRkLAorKwkweDQ0LDB4ZmUsMHgxYSwweDAzLDB4NDMs MHg1NiwweGJkLDB4ODYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MDIsMHhh YSwweGI2LDB4MWQsMHg3ZSwweDJhLDB4NDAsMHgwMywweDY5LDB4MmQsMHg0OSwweGEzLAorKwkw eDQxLDB4ZTcsMHg0NCwweDBiLDB4YWYsMHg3YiwweDg1LDB4ZTQsMHg1ZiwweDUzLDB4M2IsMHg2 NCwKKysJMHhiYywweDg5LDB4YzgsMHg4MiwweGQ0LDB4NzgsMHgzNywweGEyCisrCX07CisrCisr CisrLyogU0hBLTI1NiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NWIsMHgxYiww eGVjLDB4NGQsMHhhOSwweDM4LDB4NzQsMHg1YSwweDM0LDB4MGIsMHg3YiwweGM1LAorKwkweGU1 LDB4ZDcsMHg2NiwweDdjLDB4YmMsMHg4MiwweGI5LDB4MGUsMHgyZCwweDFmLDB4OTIsMHhkNywK KysJMHhjMSwweGJjLDB4NjcsMHg2OSwweGVjLDB4NmIsMHgwMywweDNjCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X25vbmNlW10g PQorKwl7CisrCTB4YTQsMHgwYywweGQ4LDB4OWMsMHg2MSwweGQ4LDB4YzMsMHg1NCwweGZlLDB4 NTMsMHhjOSwweGU1LAorKwkweDVkLDB4NmYsMHg2ZCwweDM1CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KKysJeworKwkweDIyLDB4NWUsMHg2MiwweDkzLDB4NDIsMHg4MywweDc4LDB4 MjQsMHhkOCwweDQwLDB4OGMsMHhkZSwKKysJMHg2ZiwweGY5LDB4YTQsMHg3YSwweGM1LDB4YTcs MHgzYiwweDg4LDB4YTMsMHhlZSwweDQyLDB4MjAsCisrCTB4ZmQsMHg2MSwweDU2LDB4YzYsMHg0 YywweDEzLDB4NDEsMHg5YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhiZiww eDc0LDB4NWIsMHhmNiwweGM1LDB4NjQsMHg1ZSwweDk5LDB4MzQsMHg4ZiwweGJjLDB4YTQsCisr CTB4ZTIsMHhiZCwweGQ4LDB4ODUsMHgyNiwweDM3LDB4ZWEsMHhiYSwweDRmLDB4ZjIsMHg5YSww eDlhLAorKwkweDY2LDB4ZmMsMHhkZiwweDYzLDB4MjYsMHgyNiwweDE5LDB4ODcKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfaW50 X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGIzLDB4YzYsMHgwNywweDA3LDB4ZDYsMHg3NSww eGY2LDB4MmIsMHhkNiwweDIxLDB4OTYsMHhmMSwKKysJMHhhZSwweGRiLDB4MmIsMHhhYywweDI1 LDB4MmEsMHhhZSwweGFlLDB4NDEsMHg3MiwweDAzLDB4NWUsCisrCTB4YmYsMHhkMywweDY0LDB4 YmMsMHg1OSwweGY5LDB4YzAsMHg3NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsK KysJMHhiZiwweDIwLDB4MzMsMHg1NiwweDI5LDB4YTgsMHgzNywweDA0LDB4MWYsMHg3OCwweDM0 LDB4M2QsCisrCTB4ODEsMHgyYSwweGM5LDB4ODYsMHhjNiwweDdhLDB4MmYsMHg4OCwweDVlLDB4 ZDUsMHhiZSwweDM0LAorKwkweDQ2LDB4MjAsMHhhNCwweDM1LDB4ZWIsMHhjNywweGUyLDB4OWQK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OWIsMHhhZSwweDJkLDB4 MmQsMHg2MSwweGE0LDB4ODksMHhlYiwweDQzLDB4NDYsMHhhNywweGRhLAorKwkweGVmLDB4NDAs MHhjYSwweDRhLDB4OTksMHgxMSwweDQxLDB4ZGMsMHg1YywweDk0LDB4ZTksMHhhYywKKysJMHhk NCwweGQwLDB4ZTYsMHhiZCwweGZiLDB4MDMsMHg5YywweGE4CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1 dDJbXSA9CisrCXsKKysJMHgyMywweGFhLDB4MGMsMHhiZCwweDI4LDB4MzMsMHhlMiwweDUxLDB4 ZmMsMHg3MSwweGQyLDB4MTUsCisrCTB4MWYsMHg3NiwweGZkLDB4MGQsMHhlMCwweGI3LDB4YjUs MHg4NCwweDc1LDB4NWIsMHhiZSwweGYzLAorKwkweDVjLDB4Y2EsMHhjNSwweDMwLDB4ZjIsMHg3 NSwweDFmLDB4ZGEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OTAsMHgzYywweGMx LDB4MTAsMHg4YywweDEyLDB4MDEsMHhjNiwweGE2LDB4M2EsMHgwZiwweDRkLAorKwkweGI2LDB4 M2EsMHg0ZiwweDQxLDB4OWMsMHg2MSwweDc1LDB4ODQsMHhlOSwweDc0LDB4NzUsMHhmZCwKKysJ MHhmZSwweGYyLDB4MWYsMHg0MywweGQ4LDB4NWUsMHgyNCwweGEzCisrCX07CisrCisrCisrLyog U0hBLTM4NCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NzEsMHg5ZCwweGIyLDB4 NWEsMHg3MSwweDZkLDB4MDQsMHhlOSwweDFlLDB4YzcsMHg5MiwweDI0LAorKwkweDZlLDB4MTIs MHgzMywweGE5LDB4NTIsMHg2NCwweDMxLDB4ZWYsMHg3MSwweGViLDB4MjIsMHg1NSwKKysJMHgy OCwweDk3LDB4MDYsMHg2YSwweGMwLDB4MGMsMHhhMCwweDdlCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX25vbmNlW10gPQor Kwl7CisrCTB4ZjUsMHgwZCwweGZhLDB4YjAsMHhlYywweDZhLDB4N2MsMHhkNiwweGJkLDB4OWIs MHgwNSwweGZkLAorKwkweDM4LDB4M2UsMHgyZSwweDU2CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KKysJeworKwkweDc0LDB4YWMsMHg3ZSwweDZkLDB4YjEsMHhhNCwweGU3LDB4 MjEsMHhkMSwweDFlLDB4NmUsMHg5NiwKKysJMHg2ZCwweDRkLDB4NTMsMHg0NiwweDgyLDB4OTYs MHg2ZSwweGNmLDB4YWEsMHg4MSwweDhkLDB4N2QsCisrCTB4OWUsMHhlMSwweDBmLDB4MTUsMHhl YSwweDQxLDB4YmYsMHhlMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhk YSwweDk1LDB4ZDQsMHhkMCwweGI4LDB4MTEsMHhkMywweDQ5LDB4MjcsMHg1ZCwweGE5LDB4Mzks CisrCTB4NjgsMHhmMywweGE4LDB4ZTksMHg1ZCwweDE5LDB4OGEsMHgyYiwweDY2LDB4ZTgsMHg2 OSwweDA2LAorKwkweDdjLDB4OWUsMHgwMywweGExLDB4OGIsMHgyNiwweDJkLDB4NmUKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf cHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHg0OSwweGRmLDB4NDQsMHgwMCwweGU0LDB4 MWMsMHg3NSwweDBiLDB4MjYsMHg1YSwweDU5LDB4NjQsCisrCTB4MWYsMHg0ZSwweGIxLDB4YjIs MHgxMywweGYxLDB4MjIsMHg0ZSwweGI0LDB4NmQsMHg5YSwweGNjLAorKwkweGEwLDB4NDgsMHhl NiwweGNmLDB4MWQsMHhkMSwweDkyLDB4MGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweGM4LDB4NTIsMHhhZSwweGJmLDB4MDQsMHgzYywweDI3LDB4YjcsMHg3OCwweDE4 LDB4YWEsMHg4ZiwKKysJMHhmZiwweGNmLDB4YTQsMHhmMSwweGNjLDB4ZTcsMHg2OCwweGZhLDB4 MjIsMHhhMiwweDEzLDB4NDUsCisrCTB4ZTgsMHhkZCwweDg3LDB4ZTYsMHhmMiwweDZlLDB4ZGQs MHhjNywweDUyLDB4OTAsMHg5ZiwweDdiLAorKwkweGZhLDB4NjEsMHgyZCwweDlkLDB4OWUsMHhj ZiwweDk4LDB4YWMsMHg1MiwweDQwLDB4Y2UsMHhhZgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPQorKwl7CisrCTB4NjEsMHg3YywweDAzLDB4OWEsMHgzZSwweDUwLDB4NTcsMHg2MCwweGM1 LDB4ODMsMHhjOSwweGIyLAorKwkweGQxLDB4ODcsMHg4NSwweDY2LDB4OTIsMHg1ZCwweDg0LDB4 MGUsMHg1MywweGZiLDB4NzAsMHgwMywKKysJMHg3MiwweGZkLDB4YmEsMHhhZSwweDljLDB4OGYs MHhmOCwweDE4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGY4LDB4ZWIs MHg4OSwweGIxLDB4OGQsMHg3OCwweGJlLDB4MjEsMHhlMCwweGJiLDB4OWQsMHhiNywKKysJMHg5 NSwweDBlLDB4ZDksMHg0NiwweDBjLDB4OGMsMHhlMiwweDYzLDB4YjcsMHg5ZCwweDY3LDB4OTAs CisrCTB4YmQsMHhjNywweDBiLDB4YTUsMHhjZSwweGIyLDB4NjUsMHg4MQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNiwweDlmLDB4ZmUsMHg2OCwweGQ2LDB4YjUsMHg3OSww eGYxLDB4MDYsMHg1ZiwweGEzLDB4YmIsCisrCTB4MjMsMHg4NSwweGQ4LDB4ZjAsMHgyOSwweDVh LDB4NjgsMHg5ZSwweGY1LDB4ZjQsMHhhNiwweDEyLAorKwkweGUwLDB4OWEsMHhlMiwweGFjLDB4 MDAsMHgxZCwweDk4LDB4MjYsMHhmYywweDUzLDB4OTUsMHg1MywKKysJMHhlNCwweDNlLDB4MTcs MHhkNSwweDA4LDB4MGIsMHg3MCwweDNkLDB4NjcsMHg5OSwweGFjLDB4NjYKKysJfTsKKysKKysK KysvKiBTSEEtMzg0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgwNywweDE1LDB4 MjcsMHgyYSwweGFmLDB4NzQsMHgyNCwweDM3LDB4YmMsMHhkNSwweDE0LDB4NjksCisrCTB4Y2Us MHgxMSwweGZmLDB4YTIsMHg2YiwweGI4LDB4MDUsMHg2NywweDM0LDB4ZjgsMHhiZCwweDZkLAor KwkweDZhLDB4Y2MsMHhjZCwweDYwLDB4YTMsMHg2OCwweGNhLDB4ZjQKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfbm9uY2VbXSA9 CisrCXsKKysJMHg3MCwweDE3LDB4YzIsMHg1YiwweDVkLDB4MjIsMHgwYiwweDA2LDB4MTUsMHg1 NCwweDc4LDB4NzcsCisrCTB4NDQsMHhhZiwweDJmLDB4MDkKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQorKwl7CisrCTB4ODksMHgzOSwweDI4LDB4YjAsMHg2MCwweGViLDB4M2QsMHhk YywweDU1LDB4NzUsMHg4NiwweGViLAorKwkweGFlLDB4YTIsMHg4ZiwweGJjLDB4MWIsMHg3NSww eGQ0LDB4ZTEsMHgwZiwweGFhLDB4MzgsMHhjYSwKKysJMHg2MiwweDhiLDB4Y2IsMHgyYywweDI2 LDB4ZjYsMHhiYywweGIxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDMwLDB4 MmIsMHg0MiwweDM1LDB4ZWYsMHhkYSwweDQwLDB4NTUsMHgyOCwweGM2LDB4OTUsMHhmYiwKKysJ MHg1NCwweDAxLDB4NjIsMHhkNywweDg3LDB4MTQsMHg0OCwweDZkLDB4OTAsMHg0YywweGE5LDB4 MDIsCisrCTB4NTQsMHg0MCwweDIyLDB4YzgsMHg2NiwweGE1LDB4NDgsMHg0OAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ODIsMHhjNCwweGExLDB4OWMsMHgyMSwweGQyLDB4 ZTcsMHhhNSwweGE2LDB4ZjYsMHg1ZiwweDA0LAorKwkweDVjLDB4YzcsMHgzMSwweDlkLDB4OGQs MHg1OSwweDc0LDB4NTAsMHgxOSwweDg5LDB4MmYsMHg2MywKKysJMHhkNSwweGI3LDB4N2UsMHhl YiwweDE1LDB4ZTMsMHg3MCwweDgzLDB4YTEsMHgyNCwweDU5LDB4ZmEsCisrCTB4MmMsMHg1Niww eGY2LDB4ODgsMHgzYSwweDkyLDB4OTMsMHhhMSwweGZiLDB4NzksMHhjMSwweDdhCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDM5LDB4YTYsMHhlOCwweDVjLDB4ODIsMHgx NywweDcxLDB4MjYsMHg1NywweDRmLDB4OWYsMHhjMiwKKysJMHg1NSwweGZmLDB4NWMsMHg5Yiww eDUzLDB4MWEsMHhkMSwweDVmLDB4YmMsMHg2MiwweGU0LDB4MjcsCisrCTB4MmQsMHgzMiwweGYw LDB4ZTQsMHg1MiwweDhjLDB4YzUsMHgwYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 CisrCXsKKysJMHg4ZCwweGNiLDB4OGQsMHhjZSwweDA4LDB4ZWEsMHg4MCwweGU4LDB4OWIsMHg2 MSwweGE4LDB4MGYsCisrCTB4YWYsMHg0OSwweDIwLDB4OWUsMHg3NCwweGNiLDB4NTcsMHg4MCww eDQyLDB4YjAsMHg4NCwweDVlLAorKwkweDMwLDB4MmEsMHg2NywweDA4LDB4ZjQsMHhlMywweDQw LDB4MjIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDdjLDB4OGYsMHhjMiww eGFlLDB4MjIsMHg0YSwweGQ2LDB4ZjYsMHgwNSwweGE0LDB4N2EsMHhlYSwKKysJMHhiYiwweDI1 LDB4ZDAsMHhiNywweDVhLDB4ZDYsMHhjZiwweDlkLDB4ZjMsMHg2YywweGUyLDB4YjIsCisrCTB4 NGUsMHhiNCwweGJkLDB4ZjQsMHhlNSwweDQwLDB4ODAsMHg5NAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9yZXR1cm5lZGJpdHNb XSA9CisrCXsKKysJMHg5ZSwweDdlLDB4ZmIsMHg1OSwweGJiLDB4YWEsMHgzYywweGY3LDB4ZTEs MHhmOCwweDc2LDB4ZGQsCisrCTB4NjMsMHg1ZiwweGFmLDB4MjMsMHhkNiwweDY0LDB4NjEsMHhj MCwweDlhLDB4MDksMHg0NywweGM5LAorKwkweDMzLDB4ZGYsMHg2ZCwweDU1LDB4OTEsMHgzNCww eDc5LDB4NzAsMHhjNCwweDk5LDB4NmUsMHg1NCwKKysJMHgwOSwweDY0LDB4MjEsMHgxYSwweGJk LDB4MWUsMHg4MCwweDQwLDB4MzQsMHhhZCwweGZhLDB4ZDcKKysJfTsKKysKKysKKysvKiBTSEEt NTEyIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxMywweGY3LDB4NjEsMHg3NSww eDY1LDB4MjgsMHhhMiwweDU5LDB4MTMsMHg1YSwweDRhLDB4NGYsCisrCTB4NTYsMHg2MCwweDhj LDB4NTMsMHg3ZCwweGIwLDB4YmQsMHgwNiwweDRmLDB4ZWQsMHhjYywweGQyLAorKwkweGEyLDB4 YjUsMHhmZCwweDViLDB4M2EsMHhhYiwweGVjLDB4MjgKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfbm9uY2VbXSA9CisrCXsK KysJMHhiZSwweGEzLDB4OTEsMHg5MywweDFkLDB4YzMsMHgzMSwweDNhLDB4MjMsMHgzMywweDUw LDB4NjcsCisrCTB4ODgsMHhjNywweGEyLDB4YzQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQorKwl7CisrCTB4MWYsMHg1OSwweDRkLDB4N2IsMHhlNiwweDQ2LDB4OTEsMHg0OCww eGMxLDB4MjUsMHhmYSwweGZmLAorKwkweDg5LDB4MTIsMHg3NywweDM1LDB4ZGYsMHgzZSwweGY0 LDB4ODAsMHg1ZiwweGQ5LDB4YjAsMHgwNywKKysJMHgyMiwweDQxLDB4ZGQsMHg0OCwweDc4LDB4 NmIsMHg3NywweDJiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDMwLDB4 ZmYsMHg2MywweDZmLDB4YWMsMHhkOSwweDg0LDB4MzksMHg2ZiwweGU0LDB4OTksMHhjZSwKKysJ MHg5MSwweDdkLDB4N2UsMHhjOCwweDU4LDB4ZjIsMHgxMiwweGMzLDB4YjYsMHhhZCwweGRhLDB4 MjIsCisrCTB4MDQsMHhhMCwweGQyLDB4MjEsMHhmZSwweGYyLDB4OTUsMHgxZAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9l bnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDY0LDB4NTQsMHgxMywweGVjLDB4NGYsMHg3Nyww eGRhLDB4YjIsMHg5MiwweDJlLDB4NTIsMHg4MCwKKysJMHgxMSwweDEwLDB4YzIsMHhmOCwweGU2 LDB4YTcsMHhjZCwweDRiLDB4ZmMsMHgzMiwweDJlLDB4OWUsCisrCTB4ZWIsMHhiYiwweGIxLDB4 YmYsMHgxNSwweDVjLDB4NzMsMHgwOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4ZWYsMHgxZSwweGRjLDB4MGEsMHhhNCwweDM2LDB4OTEsMHg5YywweDNkLDB4MjcsMHg5 NywweDUwLAorKwkweDhkLDB4MzYsMHgyOSwweDhkLDB4Y2UsMHg2YSwweDBjLDB4ZjcsMHgyMSww eGMwLDB4OTEsMHhhZSwKKysJMHgwYywweDk2LDB4NzIsMHhiZCwweDUyLDB4ODEsMHg1OCwweGZj LDB4NmQsMHhlNSwweGY3LDB4YTUsCisrCTB4ZmQsMHg1ZCwweGE3LDB4NTgsMHg2OCwweGM4LDB4 OTksMHg1OCwweDhlLDB4YzgsMHhjZSwweDk1LAorKwkweDAxLDB4N2QsMHhmZiwweGE0LDB4Yzgs MHhmNywweDYzLDB4ZmUsMHg1ZiwweDY5LDB4ODMsMHg1MywKKysJMHhlMiwweGM2LDB4OGIsMHhj MworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ZTYsMHg5YiwweGM0LDB4 ODgsMHgzNCwweGNhLDB4ZWEsMHgyOSwweDJmLDB4OTgsMHgwNSwweGE0LAorKwkweGQzLDB4YzAs MHg3YiwweDExLDB4ZTgsMHhiYiwweDc1LDB4ZjIsMHhiZCwweDI5LDB4YjcsMHg0MCwKKysJMHgy NSwweDdmLDB4YzEsMHhiNywweGIxLDB4ZjEsMHgyNSwweDYxCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1 dHByMltdID0KKysJeworKwkweDIzLDB4NmQsMHhmZiwweGRlLDB4ZmIsMHhkMSwweGJhLDB4MzMs MHgxOCwweGU2LDB4YmUsMHhiNSwKKysJMHg0OCwweDc3LDB4NmQsMHg3ZiwweGE3LDB4ZTEsMHg0 ZCwweDQ4LDB4MWUsMHgzYywweGE3LDB4MzQsCisrCTB4MWEsMHhjOCwweDYwLDB4ZGIsMHg4Ziww eDk5LDB4MTUsMHg5OQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg3MCwweDI3 LDB4MzEsMHhkYiwweDkyLDB4NzAsMHgyMSwweGZlLDB4MTYsMHhiNiwweGM4LDB4NTEsCisrCTB4 MzQsMHg4NywweDY1LDB4ZDAsMHg0ZSwweGZkLDB4ZmUsMHg2OCwweGVjLDB4YWMsMHhkYywweDkz LAorKwkweDQxLDB4MzgsMHg5MiwweDkwLDB4YjQsMHg5NCwweGY5LDB4MGQsMHhhNCwweGY3LDB4 NGUsMHg4MCwKKysJMHg5MiwweDY3LDB4NDgsMHg0MCwweGE3LDB4MDgsMHhjNywweGJjLDB4NjYs MHgwMCwweGZkLDB4ZjcsCisrCTB4NGMsMHg4YiwweDE3LDB4NmUsMHhkMSwweDhmLDB4OWIsMHhm MywweDZmLDB4ZjYsMHgzNCwweGRkLAorKwkweDY3LDB4ZjcsMHg2OCwweGRkCisrCX07CisrCisr CisrLyogU0hBLTUxMiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YjYsMHgwYiww eGI3LDB4YmMsMHg4NCwweDU2LDB4ZjYsMHgxMiwweGFmLDB4NDUsMHg2NywweDE3LAorKwkweDdj LDB4ZDEsMHhiMiwweDc4LDB4MmIsMHhhMCwweGYyLDB4YmUsMHhiNiwweDZkLDB4OGIsMHg1NiwK KysJMHhjNiwweGJjLDB4NGQsMHhlMSwweGY3LDB4YmUsMHhjZSwweGJkCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX25vbmNlW10g PQorKwl7CisrCTB4OWQsMHhlZCwweGMwLDB4ZTUsMHg1YSwweDk4LDB4NmEsMHhjYiwweDUxLDB4 N2QsMHg3NiwweDMxLAorKwkweDVhLDB4NjQsMHhmMCwweGY3CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KKysJeworKwkweGMyLDB4NmQsMHhhMywweGMzLDB4MDYsMHg3NCwweGU1LDB4 MDEsMHg1YywweDEwLDB4MTcsMHhjNywKKysJMHhhZiwweDgzLDB4OWQsMHg1OSwweDhkLDB4MmQs MHgyOSwweDM4LDB4YzUsMHg1OSwweDcwLDB4OGIsCisrCTB4NDYsMHg0OCwweDJkLDB4Y2YsMHgz NiwweDdkLDB4NTksMHhjMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhlYyww eDhjLDB4ZDQsMHhmNywweDYxLDB4NmUsMHgwZCwweDk1LDB4NzksMHhiNywweDI4LDB4YWQsCisr CTB4NWYsMHg2OSwweDc0LDB4NWYsMHgyZCwweDM2LDB4MDYsMHg4YSwweDZiLDB4YWMsMHg1NCww eDk3LAorKwkweGM0LDB4YTEsMHgxMiwweDg1LDB4MGEsMHhkZiwweDRiLDB4MzQKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfaW50 X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDg0LDB4MmYsMHgxZiwweDY4LDB4NmEsMHhhMyww eGFkLDB4MWUsMHhmYiwweGY0LDB4MTUsMHhiZCwKKysJMHhkZSwweDM4LDB4ZDQsMHgzMCwweDgw LDB4NTEsMHhlOSwweGQzLDB4YzcsMHgyMCwweDg4LDB4ZTksCisrCTB4ZjUsMHhjYywweGRmLDB4 NTcsMHg1YywweDQ3LDB4MmYsMHg1NywweDNjLDB4NWYsMHgxMywweDU2LAorKwkweGNjLDB4YzUs MHg0ZiwweDg0LDB4ZjgsMHgxMCwweDQxLDB4ZDUsMHg3ZSwweDU4LDB4NmUsMHgxOSwKKysJMHgx OSwweDllLDB4YWYsMHhjMiwweDIyLDB4NTgsMHg0MSwweDUwLDB4NzksMHhjMiwweGQ4LDB4MDQs CisrCTB4MjgsMHhkNCwweDM5LDB4OWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7 CisrCTB4ZmEsMHg3ZiwweDQ2LDB4NTEsMHg4MywweDYyLDB4OTgsMHgxNiwweDlhLDB4MTksMHhh MiwweDQ5LAorKwkweGE5LDB4ZTYsMHg0YSwweGQ4LDB4ODUsMHhlNywweGQ0LDB4M2IsMHgyYyww eDgyLDB4YzUsMHg4MiwKKysJMHhiZiwweDExLDB4ZjksMHg5ZSwweGJjLDB4ZDAsMHgwMSwweGVl CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGI5LDB4MTIsMHhlMCww eDRmLDB4ZjcsMHhhNywweGM0LDB4ZDgsMHhkMCwweDhlLDB4OTksMHgyOSwKKysJMHg3YywweDlh LDB4ZTksMHhjZiwweGM0LDB4NmMsMHhmOCwweGMzLDB4YTcsMHg0MSwweDgzLDB4ZDYsCisrCTB4 MmUsMHhmYSwweGI4LDB4NWUsMHg4ZSwweDZiLDB4NzgsMHgyMAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5w dXQyW10gPQorKwl7CisrCTB4ZDcsMHgwNywweDUyLDB4YjksMHg4MywweDJjLDB4MDMsMHg3MSww eGVlLDB4YzksMHhjMCwweDg1LAorKwkweGUxLDB4NTcsMHhiMiwweGNkLDB4M2EsMHhmMCwweGM5 LDB4MzQsMHgyNCwweDQxLDB4MWMsMHg0MiwKKysJMHg5OSwweGIyLDB4ODQsMHhlOSwweDE3LDB4 ZDIsMHg3NiwweDkyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDM2LDB4MTcsMHg1 ZCwweDk4LDB4MmIsMHg2NSwweDI1LDB4OGUsMHhjOCwweDI5LDB4ZGYsMHgyNywKKysJMHgwNSww eDM2LDB4MjYsMHgxMiwweDhhLDB4NjgsMHg3NCwweDI3LDB4MzcsMHhkNCwweDdmLDB4MzIsCisr CTB4YjEsMHgxMiwweGQ2LDB4ODUsMHg4MywweGViLDB4MmUsMHhhMCwweGVkLDB4NGIsMHhiNSww eDdiLAorKwkweDZmLDB4MzksMHgzYywweDcxLDB4NzcsMHgwMiwweDEyLDB4Y2MsMHgyYywweDNh LDB4OGUsMHg2MywKKysJMHhkZiwweDRhLDB4YmQsMHg2ZiwweDZlLDB4MmUsMHhlZCwweDBhLDB4 ODUsMHhhNSwweDJmLDB4YTIsCisrCTB4NjgsMHhkZSwweDQyLDB4YjUKKysJfTsKKysKKysKKysv KiBITUFDIFNIQS0xIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgyNiwweDVm LDB4MzYsMHgxNCwweGZmLDB4M2QsMHg4MywweGZhLDB4NzMsMHg1ZSwweDc1LDB4ZGMsCisrCTB4 MmMsMHgxOCwweDE3LDB4MWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhjOCwweGUz LDB4NTcsMHhhNSwweDdiLDB4NzQsMHg4NiwweDZlCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KKysJeworKwkweDZlLDB4ZGIsMHgwZCwweGZlLDB4N2QsMHhhYywweDc5LDB4 ZDAsMHhhNSwweDNhLDB4NDgsMHg4NSwKKysJMHg4MCwweGUyLDB4N2YsMHgyYQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9w cl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMSwweGNkLDB4NWUsMHg0MywweGRjLDB4 ZmIsMHg3YSwweDc5LDB4Y2EsMHg4OCwweGRlLDB4MWYsCisrCTB4ZDcsMHhiYiwweDQyLDB4MDkK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHg3YywweDIzLDB4OTUsMHgz OCwweDAwLDB4OTUsMHhjMSwweDc4LDB4MWYsMHg4ZiwweGQ3LDB4NjMsCisrCTB4MjMsMHg4Nyww eDJhLDB4ZWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGJiLDB4 MzQsMHhlNywweDkzLDB4YTMsMHgwMiwweDJjLDB4NGEsMHhkMCwweDg5LDB4ZGEsMHg3ZiwKKysJ MHhlZCwweGY0LDB4NGMsMHhkZSwweDE3LDB4ZWMsMHhlNSwweDZjCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg0OSwweGJjLDB4MmQsMHgyYywweGI3LDB4MzIsMHhj YiwweDIwLDB4ZGYsMHhmNSwweDc3LDB4NTgsCisrCTB4YTAsMHg0YiwweDkzLDB4NmUKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4M2MsMHhhYSwweGIwLDB4MjEsMHg0 MiwweGIwLDB4ZGQsMHgzNCwweGYwLDB4MTYsMHg3ZiwweDBjLAorKwkweDBmLDB4ZmYsMHgyZSww eGFmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGExX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDhlLDB4Y2IsMHhhMyww eDY0LDB4YjIsMHhiOCwweDMzLDB4NmMsMHg2NCwweDNiLDB4NzgsMHgxNiwKKysJMHg5OSwweDM1 LDB4YzgsMHgzMCwweGNiLDB4M2UsMHhhMCwweGQ4CisrCX07CisrCisrCisrLyogSE1BQyBTSEEt MSBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MzIsMHg5YSwweDJhLDB4ODcs MHg3YiwweDg5LDB4N2MsMHhmNiwweGNiLDB4OTUsMHhkNSwweDQwLAorKwkweDE3LDB4ZmUsMHg0 NywweDcwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX25vbmNlW10gPQorKwl7CisrCTB4MTYsMHhkOCwweGUwLDB4YzcsMHg1 MiwweGNmLDB4NGEsMHgyNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHgzNSwweDM1LDB4YTksMHhhNSwweDQwLDB4YmUsMHg5YiwweGQxLDB4NTYsMHhkZCwweDQ0 LDB4MDAsCisrCTB4NzIsMHhmNywweGQzLDB4NWUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0W10g PQorKwl7CisrCTB4MWIsMHgyYywweDg0LDB4MmQsMHg0YSwweDg5LDB4OGYsMHg2OSwweDE5LDB4 ZjEsMHhmMywweGRiLAorKwkweGJiLDB4ZTMsMHhhYSwweGVhCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2ludF9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHhjZiwweGZhLDB4N2QsMHg3MiwweDBmLDB4ZTYsMHhjNywweDk2 LDB4YTAsMHg2OSwweDMxLDB4MTEsCisrCTB4OWIsMHgwYiwweDFhLDB4MjAsMHgxZiwweDNmLDB4 YWEsMHhkMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5MCwweDc1 LDB4MTUsMHgwNCwweDk1LDB4ZjEsMHhiYSwweDgxLDB4MGMsMHgzNywweDk0LDB4NmYsCisrCTB4 ODYsMHg1MiwweDZkLDB4OWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7 CisrCTB4NWIsMHg0MCwweGJhLDB4NWYsMHgxNywweDcwLDB4ZjAsMHg0YiwweGRmLDB4YzksMHg5 NywweDkyLAorKwkweDc5LDB4YzUsMHg4MiwweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dDJb XSA9CisrCXsKKysJMHg5NywweGM4LDB4ODAsMHg5MCwweGIzLDB4YWEsMHg2ZSwweDYwLDB4ZWEs MHg4MywweDdhLDB4ZTMsCisrCTB4OGEsMHhjYSwweGE0LDB4N2YKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4OTAsMHhiZCwweDA1LDB4NTYsMHg2ZCwweGI1LDB4MjIsMHhkNSww eGI5LDB4NWEsMHgyOSwweDJkLAorKwkweGU5LDB4MGIsMHhlMSwweGFjLDB4ZGUsMHgyNywweDBi LDB4YjAKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0yMjQgUFIgICovCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlu cHV0W10gPQorKwl7CisrCTB4MTcsMHgzMiwweDJiLDB4MmUsMHg2ZiwweDFiLDB4OWMsMHg2ZCww eDMxLDB4ZTAsMHgzNCwweDA3LAorKwkweGNmLDB4ZWQsMHhmNiwweGI2LDB4NWEsMHg3NiwweDRj LDB4YmMsMHg2MiwweDg1LDB4MDEsMHg5MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX25vbmNlW10gPQorKwl7Cisr CTB4MzgsMHhiZiwweDVmLDB4MjAsMHhiMywweDY4LDB4MmYsMHg0MywweDYxLDB4MDUsMHg4Ziww eDIzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4YzAs MHhjOSwweDQ1LDB4YWMsMHg4ZCwweDI3LDB4NzcsMHgwOCwweDBiLDB4MTcsMHg2ZCwweGVkLAor KwkweGMxLDB4N2QsMHhkNSwweDA3LDB4OWQsMHg2ZSwweGY4LDB4MjMsMHgyYSwweDIyLDB4MTMs MHhiZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGE0LDB4M2Ms MHhlNywweDNiLDB4ZWEsMHgxOSwweDQ1LDB4MzIsMHhjMiwweDgzLDB4NmQsMHgyMSwKKysJMHg4 YSwweGMwLDB4ZWUsMHg2NywweDQ1LDB4ZGUsMHgxMywweDdkLDB4OWQsMHg2MSwweDAwLDB4M2IK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDE1LDB4MDUsMHg3NCww eDRhLDB4N2YsMHg4ZCwweDVjLDB4NjAsMHgxNiwweGU1LDB4N2IsMHhhZCwKKysJMHhmNSwweDQx LDB4OGYsMHg1NSwweDYwLDB4YzQsMHgwOSwweGVlLDB4MWUsMHgxMSwweDgxLDB4YWIKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NmYsMHhmNSwweDlhLDB4ZTIs MHg1NCwweDUzLDB4MzAsMHgzZCwweDVhLDB4MjcsMHgyOSwweDM4LAorKwkweDI3LDB4ZjIsMHgw ZCwweDA1LDB4ZTksMHgyNiwweGNiLDB4MTYsMHhjMywweDUxLDB4NWYsMHgxMywKKysJMHg0MSww eGZlLDB4OTksMHhmMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJ MHg3MywweDgxLDB4ODgsMHg4NCwweDhmLDB4ZWQsMHg2ZiwweDEwLDB4OWYsMHg5MywweGJmLDB4 MTcsCisrCTB4MzUsMHg3YywweGVmLDB4ZDUsMHg4ZCwweDI2LDB4YTYsMHg3YSwweGU4LDB4MDks MHgzNiwweDRmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZTYs MHhjZiwweGNmLDB4N2UsMHgxMiwweGU1LDB4NDMsMHhkMiwweDM4LDB4ZDgsMHgyNCwweDZmLAor KwkweDVhLDB4MzcsMHg2OCwweGJmLDB4NGYsMHhhMCwweGZmLDB4ZDUsMHg2MSwweDhhLDB4OTMs MHhlMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGFmLDB4ZjksMHhk OCwweDE5LDB4OTEsMHgzMCwweDgyLDB4NmYsMHhhOSwweDFlLDB4OWQsMHhkNywKKysJMHhmMyww eDUwLDB4ZTAsMHhjNywweGQ1LDB4NjQsMHg5NiwweDdkLDB4NGMsMHg0ZCwweDc4LDB4MDMsCisr CTB4NmQsMHhkOCwweDllLDB4NzIKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0yMjQgTm8gUFIg ICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyMjRfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MTEsMHg4MiwweGZkLDB4ZDksMHg0Miww eGY0LDB4ZmEsMHhjOCwweGYyLDB4NDEsMHhlNiwweDU0LAorKwkweDAxLDB4YWUsMHgyMiwweDZl LDB4YzYsMHhhZiwweGFmLDB4ZDAsMHhhNiwweGIyLDB4ZTIsMHg2ZAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X25vbmNl W10gPQorKwl7CisrCTB4YTksMHg0OCwweGQ3LDB4OTIsMHgzOSwweDdlLDB4MmEsMHhkYywweDMw LDB4MWYsMHgwZSwweDJiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7 CisrCTB4MTEsMHhkNSwweGY0LDB4YmQsMHg2NywweDhjLDB4MzEsMHhjZiwweGEzLDB4M2YsMHgx ZSwweDZiLAorKwkweGE4LDB4MDcsMHgwMiwweDBiLDB4YzgsMHgyZSwweDZjLDB4NjQsMHg0MSww eDViLDB4YzgsMHgzNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDY4 LDB4MTgsMHhjMiwweDA2LDB4ZWIsMHgzZSwweDA0LDB4OTUsMHg0NCwweDVlLDB4ZmIsMHhlNiwK KysJMHg0MSwweGMxLDB4NWMsMHhjYywweDQwLDB4MmYsMHhiNywweGQyLDB4MGYsMHhmMywweDZi LDB4ZTcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4N2YsMHg0NSww eGM3LDB4NWQsMHgzMiwweGU2LDB4MTcsMHg2MCwweGJhLDB4ZGMsMHhiOCwweDQyLAorKwkweDFi LDB4OWMsMHhmMSwweGZhLDB4M2IsMHg0ZCwweDI5LDB4NTQsMHhjNiwweDkwLDB4ZmYsMHg1YywK KysJMHhjZCwweGQ2LDB4YTksMHhjYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0K KysJeworKwkweGM0LDB4OGUsMHgzNywweDk1LDB4NjksMHg1MywweDI4LDB4ZDcsMHgzNywweGJi LDB4NzAsMHg5NSwKKysJMHgxYywweDA3LDB4MWQsMHhkOSwweGI3LDB4ZTYsMHgxYiwweGJiLDB4 ZmUsMHg0MSwweGViLDB4YzkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Cisr CXsKKysJMHg1MywweDE3LDB4YTEsMHg2YSwweGZhLDB4NzcsMHg0NywweGIwLDB4OTUsMHg1Niww eDlhLDB4MjAsCisrCTB4NTcsMHhkZSwweDVjLDB4ODksMHg5ZiwweDdmLDB4ZTIsMHhkZSwweDE3 LDB4M2EsMHg1MCwweDIzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkw eDNhLDB4MzIsMHhmOSwweDg1LDB4MGMsMHhjMSwweGVkLDB4NzYsMHgyZCwweGRmLDB4NDAsMHhj MywKKysJMHgwNiwweDIyLDB4NjYsMHhkNCwweDlhLDB4OWEsMHhmZiwweDVhLDB4N2UsMHg3YSww eGYzLDB4OTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0MywweGI0LDB4 NTcsMHg1YywweDM4LDB4MjUsMHg5ZCwweGFlLDB4ZWMsMHg5NiwweGQxLDB4ODUsCisrCTB4M2Es MHg4NCwweDhkLDB4ZmUsMHg2OCwweGQ1LDB4MGUsMHg1YywweDhmLDB4NjUsMHhhNSwweDRlLAor KwkweDQ1LDB4ODQsMHhhOCwweDk0CisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMjU2IFBSICAq LworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjU2X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDRkLDB4YjAsMHg0MywweGQ4LDB4MzQs MHg0YiwweDEwLDB4NzAsMHhiMSwweDhiLDB4ZWQsMHhlYSwKKysJMHgwNywweDkyLDB4OWYsMHg2 YywweDc5LDB4MzEsMHhhZiwweDgxLDB4MjksMHhlYiwweDZlLDB4Y2EsCisrCTB4MzIsMHg0OCww eDI4LDB4ZTcsMHgwMiwweDVkLDB4YTYsMHhhNgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX25vbmNlW10gPQorKwl7 CisrCTB4M2EsMHhhZSwweDE1LDB4YTksMHg5OSwweGRjLDB4ZTQsMHg2NywweDM0LDB4M2IsMHg3 MCwweDE1LAorKwkweGFhLDB4ZDMsMHgzMCwweDlhCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MTMsMHgxZCwweDI0LDB4MDQsMHhiMCwweDE4LDB4ODEs MHgxNSwweDIxLDB4NTEsMHgyYSwweDI0LAorKwkweDUyLDB4NjEsMHhiZSwweDY0LDB4ODIsMHg2 YiwweDU1LDB4MmYsMHhlMiwweGYxLDB4NDAsMHg3ZCwKKysJMHg3MSwweGQ4LDB4MDEsMHg4Niww eDE1LDB4YjcsMHg4YiwweGI1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7 CisrCTB4OGYsMHhhNiwweDU0LDB4NWYsMHhiMSwweGQwLDB4ZDgsMHhjMywweGU3LDB4MGMsMHgx NSwweGE5LAorKwkweDIzLDB4NmUsMHhmZSwweGZiLDB4OTMsMHhmNywweDNhLDB4YmQsMHg1OSww eDAxLDB4ZmEsMHgxOCwKKysJMHg4ZSwweGU5LDB4MWEsMHhhOSwweDc4LDB4ZmMsMHg3OSwweDBi CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhjZiwweDI0LDB4Yjks MHhlYiwweGIzLDB4ZDQsMHhjZCwweDE3LDB4MzcsMHgzOCwweDc1LDB4NzksCisrCTB4MTUsMHhj YiwweDJkLDB4NzUsMHg1MSwweGYxLDB4Y2MsMHhhYSwweDMyLDB4YTQsMHhhNywweDM2LAorKwkw eDdjLDB4NWMsMHhlNCwweDQ3LDB4ZjEsMHgzZSwweDFkLDB4ZTUKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9pbnRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NTIsMHg0MiwweGZhLDB4ZWIsMHg4NSwweGUwLDB4 MzAsMHgyMiwweDc5LDB4MDAsMHgxNiwweGIyLAorKwkweDg4LDB4MmYsMHgxNCwweDZhLDB4Yjcs MHhmYywweGI3LDB4NTMsMHhkYywweDRhLDB4MTIsMHhlZiwKKysJMHg1NCwweGQ2LDB4MzMsMHhl OSwweDIwLDB4ZDYsMHhmZCwweDU2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0K KysJeworKwkweGY0LDB4ZjYsMHg0OSwweGExLDB4MmQsMHg2NCwweDJiLDB4MzAsMHg1OCwweGY4 LDB4YmQsMHhiOCwKKysJMHg3NSwweGViLDB4YmIsMHg1ZSwweDFjLDB4OWIsMHg4MSwweDZhLDB4 ZGEsMHgxNCwweDg2LDB4NmUsCisrCTB4ZDAsMHhkYSwweDE4LDB4YjcsMHg4OCwweGZiLDB4NTks MHhmMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweDIxLDB4Y2Qs MHg2ZSwweDQ2LDB4YWQsMHg5OSwweDA3LDB4MTcsMHhiNCwweDNkLDB4NzYsMHgwYSwKKysJMHhm ZiwweDViLDB4NTIsMHg1MCwweDc4LDB4ZGYsMHgxZiwweDI0LDB4MDYsMHgwZCwweDNmLDB4NzQs CisrCTB4YTksMHhjOSwweDM3LDB4Y2YsMHhkOCwweDI2LDB4MjUsMHg5MQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3By X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGE3LDB4YWYsMHgyZiwweDI5LDB4ZTAsMHgzYSww eDcyLDB4OTUsMHg5NiwweDFjLDB4YTksMHhmMCwKKysJMHg0YSwweDE3LDB4NGQsMHg2NiwweDA2 LDB4MTAsMHhiZiwweDM5LDB4ODksMHg4OCwweGI4LDB4OTEsCisrCTB4MzcsMHgxOCwweDk5LDB4 Y2YsMHg4YywweDUzLDB4M2IsMHg3ZQorKwl9OworKworKworKy8qIEhNQUMgU0hBLTI1NiBObyBQ UiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg5NiwweGI3LDB4NTMsMHgyMiwweDFl LDB4NTIsMHgyYSwweDk2LDB4YjEsMHgxNSwweDNjLDB4MzUsCisrCTB4NWEsMHg4YiwweGQzLDB4 NGEsMHhhNiwweDZjLDB4ODMsMHgwYSwweDdkLDB4YTMsMHgyMywweDNkLAorKwkweDQzLDB4YTEs MHgwNywweDJjLDB4MmQsMHhlMywweDgxLDB4Y2MKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9ub25jZVtdID0KKysJewor KwkweGYxLDB4YWMsMHg5NywweGNiLDB4NWUsMHgwNiwweDQ4LDB4ZDIsMHg5NCwweGJlLDB4MTUs MHgyZSwKKysJMHhjNywweGZjLDB4YzIsMHgwMQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KKysJeworKwkweDk4LDB4YzUsMHgxZSwweDM1LDB4NWUsMHg4OSwweDBkLDB4Y2Us MHg2NCwweDZkLDB4MTgsMHhhNywKKysJMHg1YSwweGM2LDB4ZjMsMHhlNywweGQ2LDB4OWUsMHhj MCwweGVhLDB4YjcsMHgzYSwweDhkLDB4NjUsCisrCTB4YjgsMHhlYiwweDEwLDB4ZDcsMHg1Nyww eDE4LDB4YTAsMHgzMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDFi LDB4MTAsMHhhZiwweGFjLDB4ZDAsMHg2NSwweDk1LDB4YWQsMHgwNCwweGFkLDB4MDMsMHgxYywK KysJMHhlMCwweDQwLDB4ZDYsMHgzZSwweDFjLDB4NDYsMHg1MywweDM5LDB4N2MsMHhlMiwweGJj LDB4ZGEsCisrCTB4OGMsMHhhMiwweDMzLDB4YTcsMHg5YSwweDI2LDB4ZDMsMHgyNworKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhiYSwweDYxLDB4MGUsMHg1NSwweGZl LDB4MTEsMHg4YSwweDllLDB4MGYsMHg4MCwweGRmLDB4MWQsCisrCTB4MDMsMHgwYSwweGZlLDB4 MTUsMHg5NCwweDI4LDB4NGIsMHhiYSwweGY0LDB4OWYsMHg1MSwweDI1LAorKwkweDg4LDB4ZTUs MHg0ZSwweGZiLDB4YWYsMHhjZSwweDY5LDB4OTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHg2MiwweDdmLDB4MWUsMHg2YiwweGU4LDB4OGUsMHhlMSwweDM1LDB4 N2QsMHg5YiwweDRmLDB4YzcsCisrCTB4ZWMsMHhjOCwweGFjLDB4ZWYsMHg2YiwweDEzLDB4OWUs MHgwNSwweDU2LDB4YzEsMHgwOCwweGY5LAorKwkweDJmLDB4MGYsMHgyNywweDljLDB4ZDQsMHgx NSwweGVkLDB4MmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJ MHhjNywweDc2LDB4NmUsMHhhOSwweGQyLDB4YjIsMHg3NiwweDQwLDB4ODIsMHgyNSwweDJjLDB4 YjMsCisrCTB4NmYsMHhhYywweGU5LDB4NzQsMHhlZiwweDhmLDB4M2MsMHg4ZSwweGNkLDB4ZjEs MHhiZiwweGIzLAorKwkweDQ5LDB4NzcsMHgzNCwweDg4LDB4NTIsMHgzNiwweGU2LDB4MmUKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OGQsMHhiOCwweDBjLDB4ZDEs MHhiZiwweDcwLDB4ZjYsMHgxOSwweGMzLDB4NDEsMHg4MCwweDlmLAorKwkweGUxLDB4YTUsMHhh NCwweDFmLDB4MmMsMHgyNiwweGIxLDB4ZTUsMHhkOCwweGViLDB4YmUsMHhmOCwKKysJMHhkZiww eDg4LDB4NmEsMHg4OSwweGQ2LDB4MDUsMHhkOCwweDlkCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4NDMsMHgxMiwweDJhLDB4MmMsMHg0MCwweDUzLDB4MmUsMHg3YywweDY2 LDB4MzQsMHhhYywweGMzLAorKwkweDQzLDB4ZTMsMHhlMCwweDZhLDB4ZmMsMHhmYSwweGVhLDB4 ODcsMHgyMSwweDFmLDB4ZTIsMHgyNiwKKysJMHhjNCwweGY5LDB4MDksMHg5YSwweDBkLDB4NmUs MHg3ZiwweGUwCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMzg0IFBSICAqLworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJv cHlpbnB1dFtdID0KKysJeworKwkweDY5LDB4ODEsMHg5OCwweDg4LDB4NDQsMHhmNSwweGQ2LDB4 MmUsMHgwMCwweDA4LDB4M2IsMHhjNSwKKysJMHhmYiwweGQ3LDB4OGUsMHg2ZiwweDIzLDB4Zjgs MHg2ZCwweDA5LDB4ZDYsMHg4NSwweDQ5LDB4ZDEsCisrCTB4ZjgsMHg2ZCwweGE0LDB4NTgsMHg1 NCwweGZkLDB4ODgsMHhhOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNlW10gPQorKwl7CisrCTB4NmUsMHgz OCwweDgxLDB4Y2EsMHhiNywweGU4LDB4NmUsMHg2NiwweDQ5LDB4OGEsMHhiMiwweDU5LAorKwkw eGVlLDB4MTYsMHhjOSwweGRlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4ZmUsMHg0YywweGQ5LDB4ZjQsMHg3OCwweDNiLDB4MDgsMHg0MSwweDhkLDB4 OGYsMHg1NSwweGM0LAorKwkweDQzLDB4NTYsMHhiNiwweDEyLDB4MzYsMHg2YiwweDMwLDB4Yjcs MHg1ZSwweGUxLDB4YjksMHg0NywKKysJMHgwNCwweGIxLDB4NGUsMHhhOSwweDAwLDB4YTEsMHg1 MiwweGExCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ODksMHhl OSwweGNjLDB4OGYsMHgyNywweDNjLDB4MjYsMHhkMSwweDk1LDB4YzgsMHg3ZCwweDBmLAorKwkw eDViLDB4MWEsMHhmMCwweDc4LDB4MzksMHg1NiwweDZmLDB4YTQsMHgyMywweGU3LDB4ZDEsMHhk YSwKKysJMHg3YywweDY2LDB4MzMsMHhhMCwweDkwLDB4YzksMHg5MiwweDg4CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhiZSwweDNkLDB4N2MsMHgwZCwweGNhLDB4 ZGEsMHg3YywweDQ5LDB4YjgsMHgxMiwweDM2LDB4YzAsCisrCTB4ZGIsMHhhZCwweDM1LDB4YTgs MHhjNywweDBiLDB4MmEsMHgyYywweDY5LDB4NmQsMHgyNSwweDU2LAorKwkweDYzLDB4ODIsMHgx MSwweDNlLDB4YTcsMHgzMywweDcwLDB4NzIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4ODIsMHgzZCwweGU2LDB4NTQsMHg4MCwweDQyLDB4ZjgsMHhiYSwweDkw LDB4NGYsMHgwNiwweGE2LAorKwkweGQyLDB4N2YsMHhiZiwweDc5LDB4N2MsMHgxMiwweDdkLDB4 YTYsMHhhMiwweDY2LDB4ZTgsMHhhNiwKKysJMHhjMCwweGQ2LDB4NGEsMHg1NSwweGJmLDB4ZDgs MHgwYSwweGM1LDB4ZjgsMHgwMywweDg4LDB4ZGQsCisrCTB4OGUsMHg4NywweGQxLDB4NWEsMHg0 OCwweDI2LDB4NzIsMHgyYSwweDhlLDB4Y2YsMHhlZSwweGJhCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRp b25hbGlucHV0MltdID0KKysJeworKwkweDhmLDB4ZmYsMHhkOSwweDg0LDB4YmIsMHg4NSwweDNh LDB4NjYsMHhhMSwweDIxLDB4Y2UsMHhiMiwKKysJMHgzYSwweDNhLDB4MTcsMHgyMiwweDE5LDB4 YWUsMHhjNywweGI2LDB4NjMsMHg4MSwweGQ1LDB4ZmYsCisrCTB4MGQsMHhjOCwweGUxLDB4YWYs MHg1NywweGQyLDB4Y2IsMHg2MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJ eworKwkweGQ3LDB4ZmIsMHhjOSwweGU4LDB4ZTIsMHhmMiwweGFhLDB4NGMsMHhiOCwweDUxLDB4 MmYsMHhlMSwKKysJMHgyMiwweGJhLDB4ZjMsMHhkYSwweDBhLDB4MTksMHg3NiwweDcxLDB4NTcs MHhiMiwweDFkLDB4OTQsCisrCTB4MDksMHg2OSwweDZjLDB4ZDMsMHg5NywweDUxLDB4ODEsMHg4 NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGU2LDB4MTksMHgyOCww eGE4LDB4MjEsMHhjZSwweDVlLDB4ZGIsMHgyNCwweDc5LDB4OGMsMHg3NiwKKysJMHg1ZCwweDcz LDB4YjIsMHhkZiwweGFjLDB4ZWYsMHg4NSwweGE3LDB4M2IsMHgxOSwweDA5LDB4OGIsCisrCTB4 N2YsMHg5OCwweDI4LDB4YTksMHg5MywweGQ4LDB4N2EsMHhhZCwweDU1LDB4OGIsMHgyNCwweDlk LAorKwkweGU2LDB4OTgsMHhmZSwweDQ3LDB4ZDUsMHg0OCwweGMxLDB4MjMsMHhkOCwweDFkLDB4 NjIsMHg3NQorKwl9OworKworKworKy8qIEhNQUMgU0hBLTM4NCBObyBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9lbnRyb3B5 aW5wdXRbXSA9CisrCXsKKysJMHhjMywweDU2LDB4MmIsMHgxZCwweGMyLDB4YmIsMHhhOCwweGYw LDB4YWUsMHgxYiwweDBkLDB4ZDMsCisrCTB4NWEsMHg2YywweGRhLDB4NTcsMHg4ZSwweGE1LDB4 OGEsMHgwZCwweDZjLDB4NGIsMHgxOCwweGIxLAorKwkweDA0LDB4M2UsMHhiNCwweDk5LDB4MzUs MHhjNCwweGMwLDB4NWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9ub25jZVtdID0KKysJeworKwkweGM1LDB4NDksMHgx ZSwweDY2LDB4MjcsMHg5MiwweGJlLDB4ZWMsMHhiNSwweDFlLDB4NGIsMHhiMSwKKysJMHgzOCww eGUzLDB4ZWIsMHg2MgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJewor KwkweGJlLDB4ZTcsMHg2YiwweDU3LDB4ZGUsMHg4OCwweDExLDB4OTYsMHg5YiwweDZlLDB4ZWEs MHhlNSwKKysJMHg2MywweDgzLDB4NGMsMHhiNiwweDhkLDB4NjYsMHhhYSwweDFmLDB4OGIsMHg1 NCwweGU3LDB4NjIsCisrCTB4NmQsMHg1YSwweGZjLDB4YmYsMHg5NywweGJhLDB4Y2QsMHg3Nwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGU1LDB4MjgsMHg1ZiwweDQz LDB4ZjUsMHg4MywweDZlLDB4MGEsMHg4MywweDVjLDB4ZTMsMHg4MSwKKysJMHgwMywweGYyLDB4 ZjgsMHg3OCwweDAwLDB4N2MsMHg5NSwweDg3LDB4MTYsMHhkNiwweDZjLDB4NTgsCisrCTB4MzMs MHg2YywweDUzLDB4MzUsMHgwZCwweDY2LDB4ZTMsMHhjZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2ludF9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHhlMiwweDFmLDB4ZjMsMHhkYSwweDBkLDB4MTksMHg5OSwweDg3 LDB4YzQsMHg5MCwweGEyLDB4MzEsCisrCTB4Y2EsMHgyYSwweDg5LDB4NTgsMHg0MywweDQ0LDB4 YjgsMHhkZSwweGNmLDB4YTQsMHhiZSwweDNiLAorKwkweDUzLDB4MjYsMHgyMiwweDMxLDB4NzYs MHg0MSwweDIyLDB4YjUsMHhhOCwweDcwLDB4MmYsMHg0YiwKKysJMHg2NCwweDk1LDB4NGQsMHg0 OCwweDk2LDB4MzUsMHhlNiwweGJkLDB4M2MsMHgzNCwweGRiLDB4MWIKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9lbnRy b3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg3NywweDYxLDB4YmEsMHhiYywweGYyLDB4YzEs MHhmMywweDRiLDB4ODYsMHg2NSwweGZkLDB4NDgsCisrCTB4MGUsMHgzYywweDAyLDB4NWUsMHhh MiwweDdhLDB4NmIsMHg3YywweGVkLDB4MjEsMHg1ZSwweGY5LAorKwkweGNkLDB4Y2QsMHg3Nyww eDA3LDB4MmIsMHhiZSwweGM1LDB4NWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9CisrCXsKKysJMHgxOCwweDI0LDB4NWYsMHhjNiwweDg0LDB4ZDEsMHg2NywweGMzLDB4OWEs MHgxMSwweGE1LDB4OGMsCisrCTB4MDcsMHgzOSwweDIxLDB4ODMsMHg0ZCwweDA0LDB4YzQsMHg2 YSwweDI4LDB4MTksMHhjZiwweDkyLAorKwkweDIxLDB4ZDksMHg5ZSwweDQxLDB4NzIsMHg2Yyww eDllLDB4NjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OTYsMHg2 NywweDQxLDB4MjgsMHg5YiwweGI3LDB4OTIsMHg4ZCwweDY0LDB4M2IsMHhlNCwweGNmLAorKwkw eDdlLDB4YWEsMHgxZSwweGIxLDB4NGIsMHgxZCwweDA5LDB4NTYsMHg2NywweDljLDB4YzYsMHg2 ZCwKKysJMHgzYiwweGU4LDB4OTEsMHg5ZCwweGUxLDB4OGEsMHhiNywweDMyCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTMsMHg1OSwweDYxLDB4MzgsMHg5MiwweGVjLDB4 ZTIsMHgzYywweGZmLDB4YjcsMHhkYiwweDE5LAorKwkweDBmLDB4NWIsMHg5MywweDY4LDB4MGQs MHhhNCwweDk0LDB4NDAsMHg3MiwweDBiLDB4ZTAsMHhlZCwKKysJMHg0ZCwweGNkLDB4NjgsMHhh MCwweDFlLDB4ZmUsMHg2NywweGIyLDB4ZmEsMHgyMSwweDU2LDB4NzQsCisrCTB4YTQsMHhhZCww eGNmLDB4YjcsMHg2MCwweDY2LDB4MmUsMHg0MCwweGRlLDB4ODIsMHhjYSwweGZiCisrCX07Cisr CisrCisrLyogSE1BQyBTSEEtNTEyIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0KKysJewor KwkweGFhLDB4OWUsMHg0NSwweDY3LDB4MGUsMHgwMCwweDJhLDB4NjcsMHg5OCwweGQ2LDB4ZGEs MHgwYiwKKysJMHgwZiwweDE3LDB4N2UsMHhhYywweGZkLDB4MjcsMHhjNCwweGNhLDB4ODQsMHhk ZiwweGRlLDB4YmEsCisrCTB4ODUsMHhkOSwweGJlLDB4OGYsMHhmMywweGZmLDB4OTEsMHg0ZAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX3ByX25vbmNlW10gPQorKwl7CisrCTB4OGMsMHg0OSwweDJmLDB4NTgsMHgxZSww eDdhLDB4ZGEsMHg0YiwweDdlLDB4OGEsMHgzMCwweDdiLAorKwkweDg2LDB4ZWEsMHhhZiwweGEy CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NzEsMHhl MSwweGJiLDB4YWQsMHhhNywweDRiLDB4MmUsMHgzMSwweDNiLDB4MGIsMHhlYywweDI0LAorKwkw eDk5LDB4MzgsMHhiYywweGFhLDB4MDUsMHg0YywweDQ2LDB4NDQsMHhmYSwweGFkLDB4OGUsMHgw MiwKKysJMHhjMSwweDdlLDB4YWQsMHhlYywweDU0LDB4YTYsMHhkMCwweGFkCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4M2QsMHg2ZSwweGE2LDB4YTgsMHgyOSww eDJhLDB4YjIsMHhmNSwweDk4LDB4NDIsMHhlNCwweDkyLAorKwkweDc4LDB4MjIsMHg2NywweGZk LDB4MWIsMHgxNSwweDFlLDB4MjksMHhhYSwweDcxLDB4M2MsMHgzYywKKysJMHhlNywweDA1LDB4 MjAsMHhhOSwweDI5LDB4YzYsMHg3NSwweDcxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHJb XSA9CisrCXsKKysJMHhhYiwweGI5LDB4MTYsMHhkOCwweDU1LDB4MzUsMHg1NCwweGI3LDB4OTcs MHgzZiwweDk0LDB4YmMsCisrCTB4MmYsMHg3YywweDcwLDB4YzcsMHhkMCwweGVkLDB4YjcsMHg0 YiwweGY3LDB4ZjYsMHg2YywweDAzLAorKwkweDBjLDB4YjAsMHgwMywweGQ4LDB4YmIsMHg3MSww eGQ5LDB4MTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OGUs MHhkMywweGZkLDB4NTIsMHg5ZSwweDgzLDB4MDgsMHg0OSwweDE4LDB4NmUsMHgyMywweDU2LAor KwkweDVjLDB4NDUsMHg5MywweDM0LDB4MDUsMHhlMiwweDk4LDB4OGYsMHgwYywweGQ0LDB4MzIs MHgwYywKKysJMHhmZCwweGRhLDB4NWYsMHg5MiwweDNhLDB4OGMsMHg4MSwweGJkLDB4ZjYsMHg2 YywweDU1LDB4ZmQsCisrCTB4YjgsMHgyMCwweGNlLDB4OGQsMHg5NywweDI3LDB4ZTgsMHhlOCww eGUwLDB4YjMsMHg4NSwweDUwLAorKwkweGEyLDB4YzIsMHhiMiwweDk1LDB4MWQsMHg0OCwweGQz LDB4N2IsMHg0YiwweDc4LDB4MTMsMHgzNSwKKysJMHgwNSwweDE3LDB4YmUsMHgwZAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh NTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhjMywweGZjLDB4OTUsMHhhYSww eDY5LDB4MDYsMHhhZSwweDU5LDB4NDEsMHhjZSwweDI2LDB4MDgsCisrCTB4MjksMHg2ZCwweDQ1 LDB4ZGEsMHhlOCwweGIzLDB4NmMsMHg5NSwweDYwLDB4MGYsMHg3MCwweDJjLAorKwkweDEwLDB4 YmEsMHgzOCwweDhjLDB4Y2YsMHgyOSwweDk5LDB4YWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9CisrCXsKKysJMHgzYiwweDlhLDB4MjUsMHhjZSwweGQ3LDB4ZjksMHg1YywweGQx LDB4M2EsMHgzZSwweGFhLDB4NzEsCisrCTB4MTQsMHgzZSwweDE5LDB4ZTgsMHhjZSwweGU2LDB4 ZmUsMHg1MSwweDg0LDB4ZTksMHgxYiwweGZlLAorKwkweDNmLDB4YTcsMHhmMiwweGZkLDB4NzYs MHg1ZiwweDZhLDB4ZTcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhi NywweDgyLDB4YTksMHg1NywweDgxLDB4NjcsMHg1MywweGI1LDB4YTEsMHhlOSwweDNkLDB4MzUs CisrCTB4ZjksMHhlNCwweDk3LDB4YmUsMHhhNiwweGNhLDB4ZjEsMHgwMSwweDEzLDB4MDksMHhl NywweDIxLAorKwkweGMwLDB4ZWQsMHg5MywweDVkLDB4NGIsMHhmNCwweGViLDB4OGQsMHg1Myww eDI1LDB4OGEsMHhjNCwKKysJMHhiMSwweDZmLDB4NmUsMHgzNywweGNkLDB4MmUsMHhhYywweDM5 LDB4YjIsMHhiNiwweDk5LDB4YTMsCisrCTB4ODIsMHgwMCwweGIwLDB4MjEsMHhmMCwweGM3LDB4 MmYsMHg0YywweDczLDB4OTIsMHhmZCwweDAwLAorKwkweGI2LDB4YWYsMHhiYywweGQzCisrCX07 CisrCisrCisrLyogSE1BQyBTSEEtNTEyIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dFtdID0KKysJ eworKwkweDZlLDB4ODUsMHhlNiwweDI1LDB4OTYsMHgyOSwweGE3LDB4NTIsMHg1YiwweDYwLDB4 YmEsMHhhYSwKKysJMHhkZSwweGRiLDB4MzYsMHgwYSwweDUxLDB4OWEsMHgxNSwweGFlLDB4NmUs MHgxOCwweGQzLDB4ZmUsCisrCTB4MzksMHhiOSwweDRhLDB4OTYsMHhmOCwweDc3LDB4Y2IsMHg5 NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX25vbmNlW10gPQorKwl7CisrCTB4ZTAsMHhhNiwweDVkLDB4MDgsMHhjMyww eDdjLDB4YWUsMHgyNSwweDJlLDB4ODAsMHhkMSwweDNlLAorKwkweGQ5LDB4YWYsMHg0MywweDNj CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NTMsMHg5OSww eDUyLDB4NWYsMHgxMSwweGE5LDB4NjQsMHg2NiwweDIwLDB4NWUsMHgxYiwweDVmLAorKwkweDQy LDB4YjMsMHhmNCwweGRhLDB4ZWQsMHhiYiwweDYzLDB4YzEsMHgyMywweGFmLDB4ZDAsMHgwMSwK KysJMHg5MCwweDNiLDB4ZDAsMHg3OCwweGU0LDB4MGIsMHhhNywweDIwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRk aXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ODUsMHg5MCwweDgwLDB4ZDMsMHg5OCwweGYxLDB4 NTMsMHg2ZCwweDY4LDB4MTUsMHg4ZiwweGU1LAorKwkweDYwLDB4M2YsMHgxNywweDI5LDB4NTUs MHg4ZCwweDMzLDB4YjEsMHg0NSwweDY0LDB4NjQsMHg4ZCwKKysJMHg1MCwweDIxLDB4ODksMHhh ZSwweGY2LDB4ZmQsMHgzMiwweDczCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfaW50X3JldHVybmVkYml0c1tdID0KKysJ eworKwkweDI4LDB4NTYsMHgzMCwweDZmLDB4ZjQsMHhhMSwweDQ4LDB4ZTAsMHhjOSwweGY1LDB4 NzUsMHg5MCwKKysJMHhjYywweGZiLDB4ZGYsMHhkZiwweDcxLDB4M2QsMHgwYSwweDlhLDB4MDMs MHg2NSwweDNiLDB4MTgsCisrCTB4NjEsMHhlMywweGQxLDB4ZGEsMHhjYywweDRhLDB4ZmUsMHg1 NSwweDM4LDB4ZjgsMHgyMSwweDZiLAorKwkweGZhLDB4MTgsMHgwMSwweDQyLDB4MzksMHgyZiww eDk5LDB4NTMsMHgzOCwweDE1LDB4ODIsMHgzNCwKKysJMHhjNSwweDkzLDB4OTIsMHhiYywweDRk LDB4NzUsMHgxYSwweDVmLDB4MjEsMHgyNywweGNjLDB4YTEsCisrCTB4YjEsMHg1NywweDY5LDB4 ZTgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg4YywweDUyLDB4 N2UsMHg3NywweDcyLDB4M2YsMHhhMywweDA0LDB4OTcsMHgxMCwweDliLDB4NDEsCisrCTB4YmQs MHhlOCwweGZmLDB4ODksMHhlZCwweDgwLDB4ZTMsMHhiZCwweGFhLDB4MTIsMHgyZCwweGNhLAor KwkweDc1LDB4ODIsMHgzNiwweDc3LDB4ODgsMHhjZCwweGE2LDB4NzMKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg3ZSwweDMyLDB4ZTMsMHg2OSwweDY5LDB4 MDcsMHgzNCwweGEyLDB4MTYsMHhhMiwweDVkLDB4MWEsCisrCTB4MTAsMHg5MSwweGQzLDB4ZTIs MHgyMSwweGEyLDB4YTMsMHhkZCwweGNkLDB4MGMsMHgwOSwweDg2LAorKwkweDExLDB4ZTEsMHg1 MCwweGZmLDB4NWMsMHhiNywweGViLDB4NWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXQyW10g PQorKwl7CisrCTB4N2YsMHg3OCwweDY2LDB4ZDgsMHhmYiwweDY3LDB4Y2YsMHg4ZCwweDhjLDB4 MDgsMHgzMCwweGE1LAorKwkweGY4LDB4N2QsMHhjZiwweDQ0LDB4NTksMHhjZSwweGY4LDB4ZGYs MHg1OCwweGQzLDB4NjAsMHhjYiwKKysJMHhhOCwweDYwLDB4YjksMHgwNywweGM0LDB4YjEsMHg5 NSwweDQ4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZGYsMHhhNywweDM2 LDB4ZDQsMHhkYywweDVkLDB4NGQsMHgzMSwweGFkLDB4NjksMHg0NiwweDlmLAorKwkweGYxLDB4 N2MsMHhkNywweDNiLDB4NGYsMHg1NSwweGYyLDB4ZDcsMHhiOSwweDlkLDB4YWQsMHg3YSwKKysJ MHg3OSwweDA4LDB4NTksMHhhNSwweGRjLDB4NzQsMHhmNSwweDliLDB4NzMsMHhkMiwweDEzLDB4 MjUsCisrCTB4MGIsMHg4MSwweDA4LDB4MDgsMHgyNSwweGZiLDB4MzksMHhmMiwweGYwLDB4YTMs MHhhNCwweDhkLAorKwkweGVmLDB4MDUsMHg5ZSwweGI4LDB4YzcsMHg1MiwweGU0LDB4MGUsMHg0 MiwweGFhLDB4N2MsMHg3OSwKKysJMHhjMiwweGQ2LDB4ZmQsMHhhNQorKwl9OworKworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMJMjAxMy0wMi0xOSAx Mjo0NzozMy43MzkxMTg4NzIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9m aXBzX2RzYV9zZWxmdGVzdC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzM5MTE4ODcyICswMTAwCitA QCAtMCwwICsxLDE5MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDEx IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcFtdID0geworKwkw eGE4LDB4NTMsMHg3OCwweGQ4LDB4ZmQsMHgzZiwweDhkLDB4NzIsMHhlYywweDc0LDB4MTgsMHgw OCwKKysJMHgwZCwweGEyLDB4MTMsMHgxNywweGU0LDB4M2UsMHhjNCwweGI2LDB4MmIsMHhhOCww eGM4LDB4NjIsCisrCTB4M2IsMHg3ZSwweDRkLDB4MDQsMHg0NCwweDFkLDB4ZDEsMHhhMCwweDY1 LDB4ODYsMHg2MiwweDU5LAorKwkweDY0LDB4OTMsMHhjYSwweDhlLDB4OWUsMHg4ZiwweGJiLDB4 N2UsMHgzNCwweGFhLDB4ZGQsMHhiNiwKKysJMHgyZSwweDVkLDB4NjcsMHhiNiwweGQwLDB4OWEs MHg2ZSwweDYxLDB4YjcsMHg2OSwweGU3LDB4YzMsCisrCTB4NTIsMHhhYSwweDJiLDB4MTAsMHhl MiwweDBjLDB4YTAsMHg2MywweDY5LDB4NjMsMHhiNSwweDUyLAorKwkweDNlLDB4ODYsMHg0Nyww eDBkLDB4ZWMsMHhiYiwweGVkLDB4YTAsMHgyNywweGU3LDB4OTcsMHhlNywKKysJMHhiNiwweDc2 LDB4MzUsMHhkNCwweGQ0LDB4OWMsMHgzMCwweDcwLDB4MGUsMHg3NCwweGFmLDB4OGEsCisrCTB4 MGYsMHhmMSwweDU2LDB4YTgsMHgwMSwweGFmLDB4NTcsMHhhMiwweDZlLDB4NzAsMHg3OCwweGYx LAorKwkweGQ4LDB4MmYsMHg3NCwweDkwLDB4OGUsMHhjYiwweDZkLDB4MDcsMHhlNywweDBiLDB4 MzUsMHgwMywKKysJMHhlZSwweGQ5LDB4NGYsMHhhMywweDJjLDB4ZjEsMHg3YSwweDdmLDB4YzMs MHhkNiwweGNmLDB4NDAsCisrCTB4ZGMsMHg3YiwweDAwLDB4ODMsMHgwZSwweDZhLDB4MjUsMHg2 NiwweGRjLDB4MDcsMHgzZSwweDM0LAorKwkweDMzLDB4MTIsMHg1MSwweDdjLDB4NmEsMHhhNSww eDE1LDB4MmIsMHg0YiwweGZlLDB4Y2QsMHgyZSwKKysJMHg1NSwweDFmLDB4ZWUsMHgzNCwweDYz LDB4MTgsMHhhMSwweDUzLDB4NDIsMHgzYywweDk5LDB4NmIsCisrCTB4MGQsMHg1ZCwweGNiLDB4 OTEsMHgwMiwweGFlLDB4ZGQsMHgzOCwweDc5LDB4ODYsMHgxNiwweGYxLAorKwkweGYxLDB4ZTAs MHhkNiwweGM0LDB4MDMsMHg1MiwweDViLDB4MWYsMHg5YiwweDNkLDB4NGQsMHhjNywKKysJMHg2 NiwweGRlLDB4MmQsMHhmYywweDRhLDB4NTYsMHhkNywweGI4LDB4YmEsMHg1OSwweDYzLDB4ZDYs CisrCTB4MGYsMHgzZSwweDE2LDB4MzEsMHg4OCwweDcwLDB4YWQsMHg0MywweDY5LDB4NTIsMHhl NSwweDU3LAorKwkweDY1LDB4MzcsMHg0ZSwweGFiLDB4ODUsMHhlOCwweGVjLDB4MTcsMHhkNiww eGI5LDB4YTQsMHg1NCwKKysJMHg3YiwweDliLDB4NWYsMHgyNywweDUyLDB4ZjMsMHgxMCwweDVi LDB4ZTgsMHgwOSwweGIyLDB4M2EsCisrCTB4MmMsMHg4ZCwweDc0LDB4NjksMHhkYiwweDAyLDB4 ZTIsMHg0ZCwweDU5LDB4MjMsMHg5NCwweGE3LAorKwkweGRiLDB4YTAsMHg2OSwweGU5CisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3FbXSA9IHsKKysJ MHhkMiwweDc3LDB4MDQsMHg0ZSwweDUwLDB4ZjUsMHhhNCwweGUzLDB4ZjUsMHgxMCwweGE1LDB4 MGEsCisrCTB4MGIsMHg4NCwweGZkLDB4ZmYsMHhiYywweGEwLDB4NDcsMHhlZCwweDI3LDB4NjAs MHgyMCwweDU2LAorKwkweDc0LDB4NDEsMHhhMCwweGE1CisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X2dbXSA9IHsKKysJMHgxMywweGQ3LDB4NTQsMHhl MiwweDFmLDB4ZDIsMHg0MSwweDY1LDB4NWQsMHhhOCwweDkxLDB4YzUsCisrCTB4MjIsMHhhNiww eDVhLDB4NzIsMHhhOCwweDliLDB4ZGMsMHg2NCwweGVjLDB4OWIsMHg1NCwweGE4LAorKwkweDIx LDB4ZWQsMHg0YSwweDg5LDB4OGIsMHg0OSwweDBlLDB4MGMsMHg0ZiwweGNiLDB4NzIsMHgxOSwK KysJMHgyYSwweDRhLDB4MjAsMHhmNSwweDQxLDB4ZjMsMHhmMiwweDkyLDB4NTMsMHg5OSwweGYw LDB4YmEsCisrCTB4ZWMsMHhmOSwweDI5LDB4YWEsMHhmYiwweGY3LDB4OWQsMHhmZSwweDQzLDB4 MzIsMHgzOSwweDNiLAorKwkweDMyLDB4Y2QsMHgyZSwweDJmLDB4Y2YsMHgyNywweDJmLDB4MzIs MHhhNiwweDI3LDB4NDMsMHg0YSwKKysJMHgwZCwweGYyLDB4NDIsMHhiNywweDViLDB4NDEsMHg0 ZCwweGYzLDB4NzIsMHgxMiwweDFlLDB4NTMsCisrCTB4YTUsMHg1MywweGYyLDB4MjIsMHhmOCww eDM2LDB4YjAsMHgwMCwweGYwLDB4MTYsMHg0OCwweDViLAorKwkweDZiLDB4ZDAsMHg4OSwweDg0 LDB4NTEsMHg4MCwweDFkLDB4Y2QsMHg4ZCwweGU2LDB4NGMsMHhkNSwKKysJMHgzNiwweDU2LDB4 OTYsMHhmZiwweGM1LDB4MzIsMHhkNSwweDI4LDB4YzUsMHgwNiwweDYyLDB4MGEsCisrCTB4OTQs MHgyYSwweDAzLDB4MDUsMHgwNCwweDZkLDB4OGYsMHgxOCwweDc2LDB4MzQsMHgxZiwweDFlLAor KwkweDU3LDB4MGIsMHhjMywweDk3LDB4NGIsMHhhNiwweGI5LDB4YTQsMHgzOCwweGU5LDB4NzAs MHgyMywKKysJMHgwMiwweGEyLDB4ZTYsMHhlNiwweDdiLDB4ZmQsMHgwNiwweGQzLDB4MmIsMHhj NiwweDc5LDB4OTYsCisrCTB4MjIsMHg3MSwweGQ3LDB4YjQsMHgwYywweGQ3LDB4MmYsMHgzOCww eDZlLDB4NjQsMHhlMCwweGQ3LAorKwkweGVmLDB4ODYsMHhjYSwweDhjLDB4YTUsMHhkMSwweDQy LDB4MjgsMHhkYywweDJhLDB4NGYsMHgxNiwKKysJMHhlMywweDE4LDB4OTgsMHg4NiwweGI1LDB4 OTksMHgwNiwweDc0LDB4ZjQsMHgyMCwweDBmLDB4M2EsCisrCTB4NGMsMHhmNiwweDVhLDB4M2Ys MHgwZCwweGRiLDB4YTEsMHhmYSwweDY3LDB4MmQsMHhmZiwweDJmLAorKwkweDVlLDB4MTQsMHgz ZCwweDEwLDB4ZTQsMHhlOSwweDdhLDB4ZTgsMHg0ZiwweDZkLDB4YTAsMHg5NSwKKysJMHgzNSww eGQ1LDB4YjksMHhkZiwweDI1LDB4OTEsMHg4MSwweGE3LDB4OWIsMHg2MywweGIwLDB4NjksCisr CTB4ZTksMHg0OSwweDk3LDB4MmIsMHgwMiwweGJhLDB4MzYsMHhiMywweDU4LDB4NmEsMHhhYiww eDdlLAorKwkweDQ1LDB4ZjMsMHgyMiwweGY4LDB4MmUsMHg0ZSwweDg1LDB4Y2EsMHgzYSwweGI4 LDB4NTUsMHg5MSwKKysJMHhiMywweGMyLDB4YTksMHg2NgorK307CisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7CisrCTB4MjQsMHg1Miww eGYzLDB4Y2MsMHhiZSwweDllLDB4ZDUsMHhjYSwweDdkLDB4YzcsMHg0YywweDYwLAorKwkweDJi LDB4OTksMHgyMiwweDZlLDB4OGYsMHgyZiwweGFiLDB4MzgsMHhlNywweGQ3LDB4ZGQsMHhmYiwK KysJMHg3NSwweDUzLDB4OWIsMHgxNywweDE1LDB4NWUsMHg5ZiwweGNmLDB4ZDEsMHhhYiwweGE1 LDB4NjQsCisrCTB4ZWIsMHg4NSwweDM1LDB4ZDgsMHgxMiwweGM5LDB4YzIsMHhkYywweGY5LDB4 NzIsMHg4NCwweDQ0LAorKwkweDFiLDB4YzQsMHg4MiwweDI0LDB4MzYsMHgyNCwweGM3LDB4ZjQs MHg1NywweDU4LDB4MGMsMHgxYywKKysJMHgzOCwweGE1LDB4N2MsMHg0NiwweGM0LDB4NTcsMHgz OSwweDI0LDB4NzAsMHhlZCwweGI1LDB4MmMsCisrCTB4YjUsMHhhNiwweGUwLDB4M2YsMHhlNiww eDI4LDB4N2IsMHhiNiwweGY0LDB4OWEsMHg0MiwweGEyLAorKwkweDA2LDB4NWEsMHgwNSwweDRm LDB4MDMsMHgwOCwweDM5LDB4ZGYsMHgxZiwweGQzLDB4MTQsMHg5YywKKysJMHg0YywweGEwLDB4 NTMsMHgxZCwweGQ4LDB4Y2EsMHg4YSwweGFhLDB4OWMsMHhjNywweDMzLDB4NzEsCisrCTB4OTMs MHgzOCwweDczLDB4NDgsMHgzMywweDYxLDB4MTgsMHgyMiwweDQ1LDB4NDUsMHhlOCwweDhjLAor KwkweDgwLDB4ZmYsMHhkOCwweDc2LDB4NWQsMHg3NCwweDM2LDB4MDMsMHgzMywweGNjLDB4YWIs MHg5OSwKKysJMHg3MiwweDc3LDB4OWIsMHg2NSwweDI1LDB4YTYsMHg1YiwweGRkLDB4MGQsMHgx MCwweGM2LDB4NzUsCisrCTB4YzEsMHgwOSwweGJiLDB4ZDMsMHhlNSwweGJlLDB4NGQsMHg3Miww eGVmLDB4NmUsMHhiYSwweDZlLAorKwkweDQzLDB4OGQsMHg1MiwweDI2LDB4MjMsMHg3ZCwweGI4 LDB4ODgsMHgzNywweDljLDB4NWYsMHhjYywKKysJMHg0NywweGEzLDB4ODQsMHg3ZiwweGY2LDB4 MzcsMHgxMSwweGJhLDB4ZWQsMHg2ZCwweDAzLDB4YWYsCisrCTB4ZTgsMHgxZSwweDY5LDB4NGEs MHg0MSwweDNiLDB4NjgsMHgwYiwweGQzLDB4OGEsMHhiNCwweDkwLAorKwkweDNmLDB4ODMsMHg3 MCwweGE3LDB4MDcsMHhlZiwweDU1LDB4MWQsMHg0OSwweDQxLDB4MDIsMHg2ZCwKKysJMHg5NSww eDc5LDB4ZDYsMHg5MSwweGRlLDB4OGUsMHhkYSwweGExLDB4NjEsMHgwNSwweGViLDB4OWQsCisr CTB4YmEsMHgzYywweDJmLDB4NGMsMHgxYiwweGVjLDB4NTAsMHg4MiwweDc1LDB4YWEsMHgwMiww eDA3LAorKwkweGUyLDB4NTEsMHhiNSwweGVjLDB4Y2IsMHgyOCwweDZhLDB4NGIsMHgwMSwweGQ0 LDB4NDksMHhkMywKKysJMHgwYSwweGNiLDB4NjcsMHgzNywweDE3LDB4YTAsMHhkMiwweGZiLDB4 M2IsMHg1MCwweGM4LDB4OTMsCisrCTB4ZjcsMHhkYSwweGIxLDB4NGYKKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9IHsKKysJMHgw YywweDRiLDB4MzAsMHg4OSwweGQxLDB4YjgsMHg2MiwweGNiLDB4M2MsMHg0MywweDY0LDB4OTEs CisrCTB4ZjAsMHg5MSwweDU0LDB4NzAsMHhjNSwweDI3LDB4OTYsMHhlMywweGFjLDB4YmUsMHhl OCwweDAwLAorKwkweGVjLDB4NTUsMHhmNiwweGNjCisrfTsKKysKKytzdGF0aWMgaW50IGNvcnJ1 cHRfZHNhOworKworK3ZvaWQgRklQU19jb3JydXB0X2RzYSgpCisrICAgIHsKKysgICAgY29ycnVw dF9kc2EgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKKysJeworKwlE U0EgKmRzYSA9IE5VTEw7CisrCUVWUF9QS0VZICpwayA9IE5VTEw7CisrCWludCByZXQgPSAwOwor KworKwlkc2EgPSBEU0FfbmV3KCk7CisrCisrCWlmKGRzYSA9PSBOVUxMKQorKwkJZ290byBlcnI7 CisrCisrCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcCwgZHNhX3Rlc3RfMjA0OCk7Cisr CWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcSwgZHNhX3Rlc3RfMjA0OCk7CisrCWZpcHNf bG9hZF9rZXlfY29tcG9uZW50KGRzYSwgZywgZHNhX3Rlc3RfMjA0OCk7CisrCWZpcHNfbG9hZF9r ZXlfY29tcG9uZW50KGRzYSwgcHViX2tleSwgZHNhX3Rlc3RfMjA0OCk7CisrCWZpcHNfbG9hZF9r ZXlfY29tcG9uZW50KGRzYSwgcHJpdl9rZXksIGRzYV90ZXN0XzIwNDgpOworKworKwlpZiAoY29y cnVwdF9kc2EpCisrCQlCTl9zZXRfYml0KGRzYS0+cHViX2tleSwgMjA0Nyk7CisrCisrCWlmICgo cGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlf YXNzaWduX0RTQShwaywgZHNhKTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIE5VTEwsIDAsCisrCQkJCQlOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAsCisrCQkJCQkiRFNB IFNIQTI1NiIpKQorKwkJZ290byBlcnI7CisrCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHBr KQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCWVsc2UgaWYgKGRzYSkKKysJCURTQV9mcmVlKGRz YSk7CisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9m aXBzX2VuYy5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBz CTIwMTMtMDItMTkgMTI6NDc6MzMuNzM5MTE4ODcyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvZmlwc19lbmMuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjczOTExODg3MiArMDEw MAorQEAgLTAsMCArMSwxOTEgQEAKKysvKiBmaXBlL2V2cC9maXBzX2VuYy5jICovCisrLyogQ29w eXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1w bGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3 aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNv bW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0 IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUg U1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMg ZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICog ZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku CisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBh bnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92 ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5n IHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBh cnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2Yg YSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRh dGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICog CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNy eXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBs ZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNl ZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1 ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZy b20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVz dCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgor KyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElT JycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxp Y2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxl IHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdl ZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1 bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05V IFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2NvbnN0IEVWUF9DSVBI RVIgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpCisrCXsKKysJc3dpdGNoIChuaWQpCisr CQl7CisrCQljYXNlIE5JRF9hZXNfMTI4X2NiYzoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jYmMo KTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfY2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2Nj bSgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jZmIxOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4 X2NmYjEoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfY2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9h ZXNfMTI4X2NmYjEyOCgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jZmI4OgorKwkJcmV0dXJu IEVWUF9hZXNfMTI4X2NmYjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfY3RyOgorKwkJcmV0 dXJuIEVWUF9hZXNfMTI4X2N0cigpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9lY2I6CisrCQly ZXR1cm4gRVZQX2Flc18xMjhfZWNiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2djbToKKysJ CXJldHVybiBFVlBfYWVzXzEyOF9nY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfb2ZiMTI4 OgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X29mYigpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF94 dHM6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfeHRzKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTky X2NiYzoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jYmMoKTsKKysKKysJCWNhc2UgTklEX2Flc18x OTJfY2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NjbSgpOworKworKwkJY2FzZSBOSURfYWVz XzE5Ml9jZmIxOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEoKTsKKysKKysJCWNhc2UgTklE X2Flc18xOTJfY2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEyOCgpOworKworKwkJ Y2FzZSBOSURfYWVzXzE5Ml9jZmI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjgoKTsKKysK KysJCWNhc2UgTklEX2Flc18xOTJfY3RyOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2N0cigpOwor KworKwkJY2FzZSBOSURfYWVzXzE5Ml9lY2I6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfZWNiKCk7 CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2djbToKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9nY20o KTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfb2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMTky X29mYigpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jYmM6CisrCQlyZXR1cm4gRVZQX2Flc18y NTZfY2JjKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2NjbToKKysJCXJldHVybiBFVlBfYWVz XzI1Nl9jY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY2ZiMToKKysJCXJldHVybiBFVlBf YWVzXzI1Nl9jZmIxKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2NmYjEyODoKKysJCXJldHVy biBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY2ZiODoKKysJ CXJldHVybiBFVlBfYWVzXzI1Nl9jZmI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2N0cjoK KysJCXJldHVybiBFVlBfYWVzXzI1Nl9jdHIoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfZWNi OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2VjYigpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9n Y206CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfZ2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2 X29mYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9vZmIoKTsKKysKKysJCWNhc2UgTklEX2Fl c18yNTZfeHRzOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X3h0cygpOworKworKwkJY2FzZSBOSURf ZGVzX2VkZV9lY2I6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUoKTsKKysKKysJCWNhc2UgTklEX2Rl c19lZGUzX2VjYjoKKysJCXJldHVybiBFVlBfZGVzX2VkZTMoKTsKKysKKysJCWNhc2UgTklEX2Rl c19lZGUzX2NiYzoKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfY2JjKCk7CisrCisrCQljYXNlIE5J RF9kZXNfZWRlM19jZmIxOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmIxKCk7CisrCisrCQlj YXNlIE5JRF9kZXNfZWRlM19jZmI2NDoKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsK KysKKysJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjg6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2Nm YjgoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGUzX29mYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNf ZWRlM19vZmIoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVfY2JjOgorKwkJcmV0dXJuIEVWUF9k ZXNfZWRlX2NiYygpOworKworKwkJY2FzZSBOSURfZGVzX2VkZV9jZmI2NDoKKysJCXJldHVybiBF VlBfZGVzX2VkZV9jZmI2NCgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZV9vZmI2NDoKKysJCXJl dHVybiBFVlBfZGVzX2VkZV9vZmIoKTsKKysKKysJCWRlZmF1bHQ6CisrCQlyZXR1cm4gTlVMTDsK KysKKysJCX0KKysJfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlw cy5oLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwcy5oCistLS0gb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJMjAxMy0wMi0xOSAxMjo0NzozMy43MzkxMTg4 NzIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzLmgJMjAxMy0wMi0x OSAxMjo0NzozMy43MzkxMTg4NzIgKzAxMDAKK0BAIC0wLDAgKzEsMjc5IEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy 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 QUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrCisrI2lm bmRlZiBPUEVOU1NMX0ZJUFMKKysjZXJyb3IgRklQUyBpcyBkaXNhYmxlZC4KKysjZW5kaWYKKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAi QyIgeworKyNlbmRpZgorKworK3N0cnVjdCBkc2Ffc3Q7Cisrc3RydWN0IHJzYV9zdDsKKytzdHJ1 Y3QgZXZwX3BrZXlfc3Q7Cisrc3RydWN0IGVudl9tZF9zdDsKKytzdHJ1Y3QgZW52X21kX2N0eF9z dDsKKytzdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKKytzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7Cisr c3RydWN0IGRoX21ldGhvZDsKKytzdHJ1Y3QgQ01BQ19DVFhfc3Q7Cisrc3RydWN0IGhtYWNfY3R4 X3N0OworKworK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIg KmF1dGgpOworK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpOworK2NvbnN0IHZvaWQgKkZJUFNf cmFuZF9jaGVjayh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdCh2b2lkKTsKKytpbnQgRklQU19z ZWxmdGVzdF9mYWlsZWQodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsKKytp bnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9p ZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Fl c19jY20odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKTsKKytpbnQgRklQ U19zZWxmdGVzdF9hZXNfeHRzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsK Kyt2b2lkIEZJUFNfY29ycnVwdF9kZXModm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZGVzKHZv aWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9y c2Ffa2V5Z2VuKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKKyt2b2lkIEZJ UFNfY29ycnVwdF9kc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5n KHZvaWQpOworK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7Cisrdm9pZCBGSVBTX3g5MzFfc3Rp Y2soaW50IG9ub2ZmKTsKKyt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpOworK2ludCBG SVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF94OTMxKHZvaWQpOwor K2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2 b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKKytpbnQgRklQU19zZWxm dGVzdF9jbWFjKHZvaWQpOworKworK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFy ICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOworKworKyNkZWZpbmUgRklQU19FUlJPUl9JR05P UkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKysJCWFsZyAiIHByZXZp b3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7CisrCisraW50IGZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBzdHJ1Y3QgZW52X21kX3N0 ICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKKysJCQljb25zdCBjaGFyICpmYWlsX3N0 cik7CisrCisraW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpj dHgsCisrCQkJY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKKysJCQljb25zdCB1 bnNpZ25lZCBjaGFyICprZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNp cGhlcnRleHQsCisrCQkJaW50IGxlbik7CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWls KHZvaWQpOworKworK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlk KGludCBuaWQpOworKworK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBTX2dldF9jaXBo ZXJieW5pZChpbnQgbmlkKTsKKysKKysKKysvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLworKy8qIFRo ZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIu cGwuIEFueSBjaGFuZ2VzCisrICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3Jp dHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCisrICovCisrdm9pZCBFUlJfbG9hZF9G SVBTX3N0cmluZ3Modm9pZCk7CisrCisrLyogRXJyb3IgY29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0 aW9ucy4gKi8KKysKKysvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJUFNfRl9ESF9C VUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKKysjZGVmaW5lIEZJUFNfRl9ESF9JTklUCQkJCQkgMTQ4 CisrI2RlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQJCQkJIDE2MgorKyNkZWZpbmUgRklQU19GX0RT QV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQorKyNkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BB UkFNR0VOMgkJCSAxMDcKKysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTgkJCQkgMTAyCisrI2Rl ZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCisrI2RlZmluZSBGSVBTX0ZfRUNESF9D T01QVVRFX0tFWQkJCQkgMTYzCisrI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fU0lHTgkJCQkgMTY0 CisrI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fVkVSSUZZCQkJCSAxNjUKKysjZGVmaW5lIEZJUFNf Rl9FQ19LRVlfR0VORVJBVEVfS0VZCQkJIDE2NgorKyNkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJ TklUX0VYCQkJIDEyNAorKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEyNQor KyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKKysjZGVmaW5lIEZJUFNfRl9G SVBTX0NIRUNLX0RTQV9QUk5HCQkJIDE1MQorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUMJ CQkJIDE0MgorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUNfUFJORwkJCSAxNTIKKysjZGVm aW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEwNQorKyNkZWZpbmUg RklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAxMDYKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNL X1JTQV9QUk5HCQkJIDE1MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSCQkJCSAxNjAKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUklOSVQJCQkJIDE0MworKyNkZWZpbmUgRklQU19GX0ZJ UFNfQ0lQSEVSX0NUWF9DVFJMCQkJIDE2MQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNURklO QUwJCQkJIDE1OAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUSU5JVAkJCQkgMTI4CisrI2Rl ZmluZSBGSVBTX0ZfRklQU19ESUdFU1RVUERBVEUJCQkgMTU5CisrI2RlZmluZSBGSVBTX0ZfRklQ U19EUkJHX0JZVEVTCQkJCSAxMzEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0sJCQkJ IDE0NgorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNUCQkJIDEzMgorKyNkZWZp bmUgRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSwkJCSAxMzYKKysjZGVmaW5lIEZJUFNfRl9G SVBTX0RSQkdfR0VORVJBVEUJCQkgMTM0CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0lOSVQJ CQkJIDEzNQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURQkJCSAxMzgKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfTkVXCQkJCSAxMzkKKysjZGVmaW5lIEZJUFNfRl9GSVBT X0RSQkdfUkVTRUVECQkJCSAxNDAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tB VAkJCSAxNDEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJLyogdW51c2VkICovCSAx MDcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9TSUdOX0RJR0VTVAkJCSAxNTQKKysjZGVmaW5l IEZJUFNfRl9GSVBTX0RTQV9WRVJJRllfRElHRVNUCQkJIDE1NQorKyNkZWZpbmUgRklQU19GX0ZJ UFNfR0VUX0VOVFJPUFkJCQkJIDE0NworKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9TRVQJCS8q IHVudXNlZCAqLwkgMTA4CisrI2RlZmluZSBGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQJCQkg MTA4CisrI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUCQkJIDEwOQorKyNk ZWZpbmUgRklQU19GX0ZJUFNfUkFORF9BREQJCQkJIDEzNworKyNkZWZpbmUgRklQU19GX0ZJUFNf UkFORF9CWVRFUwkJCQkgMTIyCisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1BTRVVET19CWVRF UwkJCSAxNjcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VFRAkJCQkgMTY4CisrI2RlZmlu ZSBGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QJCQkgMTI2CisrI2RlZmluZSBGSVBTX0ZfRklQ U19SQU5EX1NUQVRVUwkJCQkgMTI3CisrI2RlZmluZSBGSVBTX0ZfRklQU19SU0FfU0lHTl9ESUdF U1QJCQkgMTU2CisrI2RlZmluZSBGSVBTX0ZfRklQU19SU0FfVkVSSUZZX0RJR0VTVAkJCSAxNTcK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX0FFU19DQ00JCQkgMTQ1CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxG VEVTVF9BRVNfR0NNCQkJIDEyOQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hU UwkJCSAxNDQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMJCQkgMTMwCisrI2Rl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCisrI2RlZmluZSBGSVBTX0ZfRklQ U19TRUxGVEVTVF9EU0EJCQkgMTEyCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9FQ0RT QQkJCSAxMzMKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMJCQkgMTEzCisrI2Rl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJLyogdW51c2VkICovCSAxMTQKKysjZGVmaW5l IEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1CisrI2RlZmluZSBGSVBTX0ZfRklQU19T RUxGVEVTVF9YOTMxCQkJIDExNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZCQkJ IDE1MworKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJCQkJIDEyMworKyNkZWZpbmUgRklQU19G X1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX0lOSVQJ CQkJIDE0OQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUCQkJIDExNwor KyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAorKyNkZWZpbmUg RklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5CisrI2RlZmluZSBGSVBTX0ZfUlNB X0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKKysjZGVmaW5lIEZJUFNfRl9SU0FfWDkzMV9HRU5F UkFURV9LRVlfRVgJCQkgMTIxCisrI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMJLyog dW51c2VkICovCSAxMjIKKysKKysvKiBSZWFzb24gY29kZXMuICovCisrI2RlZmluZSBGSVBTX1Jf QURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVECSAxNTAKKysjZGVmaW5lIEZJUFNfUl9B RERJVElPTkFMX0lOUFVUX1RPT19MT05HCQkgMTI1CisrI2RlZmluZSBGSVBTX1JfQUxSRUFEWV9J TlNUQU5USUFURUQJCQkgMTM0CisrI2RlZmluZSBGSVBTX1JfQVVUSEVOVElDQVRJT05fRkFJTFVS RQkJCSAxNTEKKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCS8qIHVudXNlZCAqLwkg MTAzCisrI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVAkvKiB1bnVzZWQgKi8J IDEwNAorKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkgMTE0CisrI2Rl ZmluZSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQJCQkgMTUyCisrI2RlZmluZSBGSVBTX1Jf RFJCR19TVFVDSwkJCQkgMTAzCisrI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVD VEVECQkJIDEwNAorKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVT RUVECQkgMTA1CisrI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0sJCQkgMTQyCisr I2RlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTE1CisrI2RlZmluZSBG SVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEyNworKyNkZWZpbmUgRklQU19SX0VS Uk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVAkgMTI0CisrI2RlZmluZSBGSVBTX1JfRVJS T1JfUkVUUklFVklOR19FTlRST1BZCQkJIDEyMgorKyNkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJ RVZJTkdfTk9OQ0UJCQkgMTQwCisrI2RlZmluZSBGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9N QVRDSCAgIC8qIHVudXNlZCAqLwkgMTA1CisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9F U19OT1RfTUFUQ0gJCSAxMTAKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9N QVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RP RVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCisrI2RlZmluZSBGSVBTX1JfRklQU19N T0RFX0FMUkVBRFlfU0VUCQkJIDEwMgorKyNkZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVECQkJIDEwNgorKyNkZWZpbmUgRklQU19SX0ZVTkNUSU9OX0VSUk9SCQkJCSAxMTYKKysjZGVm aW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUgkJCQkgMTM3CisrI2RlZmluZSBGSVBTX1JfR0VORVJB VEVfRVJST1JfVU5ERVRFQ1RFRAkJIDExOAorKyNkZWZpbmUgRklQU19SX0lOU1RBTlRJQVRFX0VS Uk9SCQkJIDExOQorKyNkZWZpbmUgRklQU19SX0lOU1VGRklDSUVOVF9TRUNVUklUWV9TVFJFTkdU SAkJIDEyMAorKyNkZWZpbmUgRklQU19SX0lOVEVSTkFMX0VSUk9SCQkJCSAxMjEKKysjZGVmaW5l IEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5CisrI2RlZmluZSBGSVBTX1JfSU5WQUxJ RF9QQVJBTUVURVJTCQkJIDE0NAorKyNkZWZpbmUgRklQU19SX0lOX0VSUk9SX1NUQVRFCQkJCSAx MjMKKysjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKKysjZGVmaW5lIEZJUFNf Ul9OT05DRV9FUlJPUl9VTkRFVEVDVEVECQkJIDE0OQorKyNkZWZpbmUgRklQU19SX05PTl9GSVBT X01FVEhPRAkJCQkgMTAwCisrI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFCQkJIDE0 NQorKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRQkJCSAxNDYKKysjZGVmaW5lIEZJ UFNfUl9OT1RfSU5TVEFOVElBVEVECQkJCSAxMjYKKysjZGVmaW5lIEZJUFNfUl9QQUlSV0lTRV9U RVNUX0ZBSUxFRAkJCSAxMDcKKysjZGVmaW5lIEZJUFNfUl9QRVJTT05BTElTQVRJT05fRVJST1Jf VU5ERVRFQ1RFRAkJIDEyOAorKyNkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdf VE9PX0xPTkcJCSAxMjkKKysjZGVmaW5lIEZJUFNfUl9QUk5HX1NUUkVOR1RIX1RPT19MT1cJCQkg MTQzCisrI2RlZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRQkJCQkgMTQ3CisrI2RlZmluZSBG SVBTX1JfUFJfVEVTVDJfRkFJTFVSRQkJCQkgMTQ4CisrI2RlZmluZSBGSVBTX1JfUkVRVUVTVF9M RU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzMAorKyNkZWZpbmUgRklQU19SX1JFUVVFU1RfVE9P X0xBUkdFX0ZPUl9EUkJHCQkgMTMxCisrI2RlZmluZSBGSVBTX1JfUkVTRUVEX0NPVU5URVJfRVJS T1IJCQkgMTMyCisrI2RlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9SCQkJCSAxMzMKKysjZGVmaW5l IEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNQorKyNkZWZpbmUgRklQ U19SX1JTQV9FTkNSWVBUX0VSUk9SCS8qIHVudXNlZCAqLwkgMTE2CisrI2RlZmluZSBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKKysjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJF CQkJCSAxMzUKKysjZGVmaW5lIEZJUFNfUl9TVFJFTkdUSF9FUlJPUl9VTkRFVEVDVEVECQkgMTM2 CisrI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAxMTcKKysjZGVmaW5lIEZJUFNfUl9V TklOU1RBTlRJQVRFX0VSUk9SCQkJIDE0MQorKyNkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVf WkVST0lTRV9FUlJPUgkJIDEzOAorKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX0RSQkdfVFlQ RQkJCSAxMzkKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STQkJCSAxMTMKKysK KysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMJMjAxMy0wMi0xOSAxMjo0 NzozMy43MzkxMTg4NzIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBz X2htYWNfc2VsZnRlc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MDExODg5MyArMDEwMAorQEAg LTAsMCArMSwxMzcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysJ Y29uc3QgRVZQX01EICooKmFsZykodm9pZCk7CisrCWNvbnN0IGNoYXIgKmtleSwgKml2OworKwl1 bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07CisrfSBITUFDX0tBVDsKKysKKytz dGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7CisrICAgIHsJRVZQX3NoYTEsCisrCS8q IGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9maXBz LTE5OGEucGRmICovCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAor Kwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKKysJICAweDRmLDB4 ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMsCisrCSAgMHhjNiwweGM3LDB4NWQsMHgy NCB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTIyNCwKKysJLyoganVzdCBrZWVwIGV4dGVuZGlu ZyB0aGUgYWJvdmUuLi4gKi8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAj MiIsCisrCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAorKwkgIDB4 NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKKysJICAweDA4LDB4ZjMsMHgw NywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCisrCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9Cisr ICAgIH0sCisrICAgIHsJRVZQX3NoYTI1NiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJ IlNhbXBsZSAjMiIsCisrCXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0MywweDA5 LAorKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKKysJICAweGY3 LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4MzgsCisrCSAgMHgwZCwweGMxLDB4N2Us MHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMzg0LAor KwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA4LDB4YmMs MHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCisrCSAgMHg5YSwweDFkLDB4NmEsMHhjZSww eDIzLDB4YzUsMHgwYiwweGY2LAorKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNkLDB4 NDksMHgwNCwKKysJICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYsCisr CSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAorKwkgIDB4YTQsMHg1 ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9CisrICAgIH0sCisrICAgIHsJRVZQX3No YTUxMiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHg4 MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSwweDQxLAorKwkgIDB4MDUsMHhiZCwweDA0 LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKKysJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAs MHg4OSwweDJiLDB4ZDAsCisrCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3Nyww eDY4LAorKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKKysJICAw eDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCisrCSAgMHg0NywweDAyLDB4 YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAorKwkgIDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0 MiwweDk4LDB4OTksMHgwNSB9CisrICAgIH0sCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9o bWFjKCkKKysgICAgeworKyAgICBpbnQgbjsKKysgICAgdW5zaWduZWQgaW50ICAgIG91dGxlbjsK KysgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICBjb25zdCBF VlBfTUQgICAqbWQ7CisrICAgIGNvbnN0IEhNQUNfS0FUICp0OworKworKyAgICBmb3Iobj0wLHQ9 dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQorKwl7 CisrCW1kID0gKCp0LT5hbGcpKCk7CisrCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkpLAor KwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAorKwkJb3V0LCZv dXRsZW4pOworKworKwlpZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCisrCSAgICB7Cisr CSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysg ICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19s b2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaAorLS0tIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMJMjAxMy0wMi0xOSAxMjo0 NzozMy43NDAxMTg4OTMgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBz X2xvY2wuaAkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MDExODg5MyArMDEwMAorQEAgLTAsMCArMSw3 MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrI2Rl ZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFCTMyCisrI2RlZmluZSBmaXBzX2xvYWRfa2V5 X2NvbXBvbmVudChrZXksIGNvbXAsIHByZSkgXAorKwlrZXktPmNvbXAgPSBCTl9iaW4yYm4ocHJl IyNfIyNjb21wLCBzaXplb2YocHJlIyNfIyNjb21wKSwga2V5LT5jb21wKTsgXAorKwlpZiAoIWtl eS0+Y29tcCkgXAorKwkJZ290byBlcnIKKysKKysjZGVmaW5lIGZpcHNfcG9zdF9zdGFydGVkKGlk LCBzdWJpZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNfcG9zdF9zdWNjZXNzKGlkLCBzdWJpZCwgZXgp IDEKKysjZGVmaW5lIGZpcHNfcG9zdF9mYWlsZWQoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZpbmUg Zmlwc19wb3N0X2NvcnJ1cHQoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZpbmUgZmlwc19wb3N0X3N0 YXR1cygpIDEKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19tZC5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2ZpcHMvZmlwc19tZC5jLmZpcHMJMjAxMy0wMi0xOSAxMjo0NzozMy43NDAxMTg4OTMgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX21kLmMJMjAxMy0wMi0xOSAxMjo0 NzozMy43NDAxMTg4OTMgKzAxMDAKK0BAIC0wLDAgKzEsMTQ1IEBACisrLyogZmlwcy9ldnAvZmlw c19tZC5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNy eXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFj a2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcg KGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4g c28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJy YXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25n IGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBk aXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBj b2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBp bmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29w eXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3Vu ZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBh cmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBw cm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRo ZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4g YmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9y CisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGgg dGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAg ICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0 b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5 CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisr ICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJp dmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNh dGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg RVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICog REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0Uu CisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1 YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29k ZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysg KiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICog W2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNy eXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlw dHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRp bQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrLyogTWlu aW1hbCBzdGFuZGFsb25lIEZJUFMgdmVyc2lvbnMgb2YgRGlnZXN0IG9wZXJhdGlvbnMgKi8KKysK KysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKworK2NvbnN0IEVWUF9NRCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50 IG5pZCkKKysJeworKwlzd2l0Y2ggKG5pZCkKKysJCXsKKysJCWNhc2UgTklEX3NoYTE6CisrCQly ZXR1cm4gRVZQX3NoYTEoKTsKKysKKysJCWNhc2UgTklEX3NoYTIyNDoKKysJCXJldHVybiBFVlBf c2hhMjI0KCk7CisrCisrCQljYXNlIE5JRF9zaGEyNTY6CisrCQlyZXR1cm4gRVZQX3NoYTI1Nigp OworKworKwkJY2FzZSBOSURfc2hhMzg0OgorKwkJcmV0dXJuIEVWUF9zaGEzODQoKTsKKysKKysJ CWNhc2UgTklEX3NoYTUxMjoKKysJCXJldHVybiBFVlBfc2hhNTEyKCk7CisrCisrCQlkZWZhdWx0 OgorKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlw c19wb3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBz CTIwMTMtMDItMTkgMTI6NDc6MzMuNzQwMTE4ODkzICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxMy0wMi0xOSAxMjo0NzozMy43NDAxMTg4OTMgKzAx MDAKK0BAIC0wLDAgKzEsMjA1IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2Rl ZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 bGltaXRzLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFBvd2VyIG9uIHNlbGYg dGVzdCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKy8qIFJ1biBhbGwgc2VsZnRlc3Rz ICovCisraW50IEZJUFNfc2VsZnRlc3Qodm9pZCkKKysJeworKwlpbnQgcnYgPSAxOworKwlpZiAo IUZJUFNfc2VsZnRlc3RfZHJiZygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3Rf eDkzMSgpKQorKwkJcnYgPSAwOworKyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTEoKSkKKysJ CXJ2ID0gMDsKKysgICAgCWlmICghRklQU19zZWxmdGVzdF9zaGEyKCkpCisrCQlydiA9IDA7Cisr CWlmICghRklQU19zZWxmdGVzdF9obWFjKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxm dGVzdF9jbWFjKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9hZXMoKSkKKysJ CXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19jY20oKSkKKysJCXJ2ID0gMDsKKysJ aWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19nY20oKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3Nl bGZ0ZXN0X2Flc194dHMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Rlcygp KQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfcnNhKCkpCisrCQlydiA9IDA7Cisr CWlmICghRklQU19zZWxmdGVzdF9kc2EoKSkKKysJCXJ2ID0gMDsKKysJcmV0dXJuIHJ2OworKwl9 CisrCisrLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJvdXRpbmUuIFNpZ25zIGFuZCB2 ZXJpZmllcyB0aGUgZGF0YQorKyAqIHN1cHBsaWVkIGluIHRicyB1c2luZyBtZXNhZ2UgZGlnZXN0 IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKKysgKiBmbGFncyBtZF9mbGFncy4gSWYgdGhl ICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCisrICogYWRkaXRpb25hbGx5IGNo ZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBhbnN3ZXIgdGVzdAorKyAqIFRo ZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBp biBjYXNlCisrICogb2YgZmFpbHVyZS4gSWYgInBrZXkiIGlzIE5VTEwganVzdCBwZXJmb3JtIGEg bWVzc2FnZSBkaWdlc3QgY2hlY2suCisrICovCisrCisraW50IGZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChFVlBfUEtFWSAqcGtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0 YnNsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVu LAorKwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCisrCQkJ Y29uc3QgY2hhciAqZmFpbF9zdHIpCisrCXsJCisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBj aGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOworKwl1bnNpZ25lZCBpbnQgc2lnbGVuOwor KwlFVlBfTURfQ1RYIG1jdHg7CisrCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrCisrCWlmIChk aWdlc3QgPT0gTlVMTCkKKysJCWRpZ2VzdCA9IEVWUF9zaGEyNTYoKTsKKysKKysJaWYgKChwa2V5 LT50eXBlID09IEVWUF9QS0VZX1JTQSkKKysJCSYmIChSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkg PiBzaXplb2Yoc2lndG1wKSkpCisrCQl7CisrCQlzaWcgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6 ZShwa2V5LT5wa2V5LnJzYSkpOworKwkJaWYgKCFzaWcpCisrCQkJeworKwkJCUZJUFNlcnIoRklQ U19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisrCQkJ cmV0dXJuIDA7CisrCQkJfQorKwkJfQorKworKwlpZiAodGJzbGVuID09IC0xKQorKwkJdGJzbGVu ID0gc3RybGVuKChjaGFyICopdGJzKTsKKysKKysJaWYgKG1kX2ZsYWdzKQorKwkJRVZQX01EX0NU WF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKKysKKysJaWYgKCFFVlBfU2lnbkluaXRfZXgo Jm1jdHgsIGRpZ2VzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduVXBk YXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWdu RmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCisrCQlnb3RvIGVycm9yOworKworKwlp ZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwgc2lnLCBrYXRsZW4p KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIGRp Z2VzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1j dHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCXJldCA9IEVWUF9WZXJpZnlGaW5h bCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOworKworKwllcnJvcjoKKysJaWYgKHNpZyAhPSBz aWd0bXApCisrCQlPUEVOU1NMX2ZyZWUoc2lnKTsKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4 KTsKKysJaWYgKHJldCAhPSAxKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJ R05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUpOworKwkJaWYgKGZhaWxfc3RyKQorKwkJ CUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7CisrCQlyZXR1cm4gMDsK KysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBzeW1tZXRyaWMgY2lw aGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVzdWx0CisrICogYWdhaW5z dCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBwbGFpbnRl eHQuCisrICovCisrCisraW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwg Y29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwK KysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpw bGFpbnRleHQsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKKysJCQlpbnQg bGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1RfU0la RV07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07Cisr CisrCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysJ bWVtc2V0KHBsdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysJbWVtc2V0KGNp dG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysKKysJaWYgKEVWUF9DaXBoZXJJ bml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAxKSA8PSAwKQorKwkJcmV0dXJuIDA7 CisrCWlmIChFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKSA8PSAwKQorKwkJ cmV0dXJuIDA7CisrCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCisrCQlyZXR1 cm4gMDsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2 LCAwKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCWlmIChFVlBfQ2lwaGVyKGN0eCwgcGx0bXAsIGNp dG1wLCBsZW4pIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50 ZXh0LCBsZW4pKQorKwkJcmV0dXJuIDA7CisrCXJldHVybiAxOworKwl9CisrI2VuZGlmCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmMuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MDExODg5MyArMDEw MAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMTMtMDItMTkg MTI6NDc6MzMuNzQwMTE4ODkzICswMTAwCitAQCAtMCwwICsxLDQ1NyBAQAorKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln 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 RS4KKysgKgorKyAqLworKworKy8qCisrICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVTIFBS TkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9j cnlwdG8uaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKy8qIElmIHdlIGRvbid0IGRlZmluZSBf WE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAorKyAgIGJlIGRlZmlu ZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBp bGVycworKyAgIGxpa2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLworKyNpZm5kZWYgX1hPUEVO X1NPVVJDRV9FWFRFTkRFRAorKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCisrI2Vu ZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Fl cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgorKyNpZiAhKGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpIHx8IGRlZmluZWQoT1BF TlNTTF9TWVNfVlhXT1JLUykpCisrIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyNlbmRpZgorKyNp ZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrIyBpbmNsdWRlIDx0aW1lLmg+CisrI2Vu ZGlmCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysj IGlmZGVmIE9QRU5TU0xfVU5JU1RECisrIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAorKyMgZWxz ZQorKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX2xv Y2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrdm9pZCAqT1BFTlNTTF9zdGRlcnIo dm9pZCk7CisrCisrI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2CisrCisrCisrLyogQUVTIEZJ UFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLworKworK3R5cGVkZWYgc3RydWN0IAorKwl7CisrCWlu dCBzZWVkZWQ7CisrCWludCBrZXllZDsKKysJaW50IHRlc3RfbW9kZTsKKysJaW50IHNlY29uZDsK KysJaW50IGVycm9yOworKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7CisrCUFFU19LRVkga3M7Cisr CWludCB2cG9zOworKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5IGlmIGl0IGVxdWFscyBz ZWVkIGxlbmd0aCAqLworKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVTX0JMT0NLX0xFTkdUSF07 CisrCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBE VFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBsYXN0W0FFU19CTE9DS19MRU5H VEhdOworKwl9IEZJUFNfUFJOR19DVFg7CisrCisrc3RhdGljIEZJUFNfUFJOR19DVFggc2N0eDsK KysKKytzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfeDkzMV9z dGljayhpbnQgb25vZmYpCisrCXsKKysJZmlwc19wcm5nX2ZhaWwgPSBvbm9mZjsKKysJfQorKwor K3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKKysJeworKwlGSVBTX3g5MzFfc3RpY2soMSk7Cisr CX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBTX1BSTkdfQ1RYICpj dHgpCisrCXsKKysJY3R4LT5zZWVkZWQgPSAwOworKwljdHgtPmtleWVkID0gMDsKKysJY3R4LT50 ZXN0X21vZGUgPSAwOworKwljdHgtPmNvdW50ZXIgPSAwOworKwljdHgtPnNlY29uZCA9IDA7Cisr CWN0eC0+ZXJyb3IgPSAwOworKwljdHgtPnZwb3MgPSAwOworKwlPUEVOU1NMX2NsZWFuc2UoY3R4 LT5WLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXpl b2YoQUVTX0tFWSkpOworKwl9CisrCQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19rZXko RklQU19QUk5HX0NUWCAqY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWdu ZWQgaW50IGtleWxlbikKKysJeworKwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZLCBGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoa2V5bGVuICE9IDE2ICYmIGtleWxlbiAh PSAyNCAmJiBrZXlsZW4gIT0gMzIpCisrCQl7CisrCQkvKiBlcnJvcjogaW52YWxpZCBrZXkgc2l6 ZSAqLworKwkJcmV0dXJuIDA7CisrCQl9CisrCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBrZXls ZW4gPDwgMywgJmN0eC0+a3MpOworKwlpZiAoa2V5bGVuID09IDE2KQorKwkJeworKwkJbWVtY3B5 KGN0eC0+dG1wX2tleSwga2V5LCAxNik7CisrCQljdHgtPmtleWVkID0gMjsKKysJCX0KKysJZWxz ZQorKwkJY3R4LT5rZXllZCA9IDE7CisrCWN0eC0+c2VlZGVkID0gMDsKKysJY3R4LT5zZWNvbmQg PSAwOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19zZWVk KEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCB1bnNp Z25lZCBpbnQgc2VlZGxlbikKKysJeworKwl1bnNpZ25lZCBpbnQgaTsKKysJaWYgKCFjdHgtPmtl eWVkKQorKwkJcmV0dXJuIDA7CisrCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlzIGp1c3Qgc3VwcGxp ZWQgZGF0YSAqLworKwlpZiAoY3R4LT50ZXN0X21vZGUpCisrCQl7CisrCQlpZiAoc2VlZGxlbiAh PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXJldHVybiAwOworKwkJbWVtY3B5KGN0eC0+Viwgc2Vl ZCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCQljdHgtPnNlZWRlZCA9IDE7CisrCQlyZXR1cm4gMTsK KysJCX0KKysJLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEgd2l0aCBleGlz dGluZyBzZWVkICovCisrCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspCisrCQl7CisrCQlj dHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRbaV07CisrCQlpZiAoY3R4LT52cG9zID09IEFFU19C TE9DS19MRU5HVEgpCisrCQkJeworKwkJCWN0eC0+dnBvcyA9IDA7CisrCQkJLyogU3BlY2lhbCBj YXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCisrIAkJCSAqIGJsb2NrIHNp emUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KKysgCQkJICovIAorKwkJCWlmIChj dHgtPmtleWVkID09IDIpCisrCQkJCXsKKysJCQkJaWYgKCFtZW1jbXAoY3R4LT50bXBfa2V5LCBj dHgtPlYsIDE2KSkKKysJCQkJCXsKKysJCQkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1BSTkdf U0VFRCwKKysJCQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSk7CisrCQkJ CQlyZXR1cm4gMDsKKysJCQkJCX0KKysJCQkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dG1wX2tleSwg MTYpOworKwkJCQljdHgtPmtleWVkID0gMTsKKysJCQkJfQorKwkJCWN0eC0+c2VlZGVkID0gMTsK KysJCQl9CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX3NldF90 ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQorKwl7CisrCWlmIChjdHgtPmtleWVkKQorKwkJ eworKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRfUl9QUk5HX0tFWUVE KTsKKysJCXJldHVybiAwOworKwkJfQorKwljdHgtPnRlc3RfbW9kZSA9IDE7CisrCXJldHVybiAx OworKwl9CisrCisraW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCkKKysJeworKwlyZXR1cm4g Zmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfdGVzdF9t b2RlKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7CisrCX0K KysKKysKKytpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKKysJeworKwlp ZiAoIXNjdHgudGVzdF9tb2RlKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19YOTMxX1NF VF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJbWVt Y3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJcmV0dXJuIDE7CisrCX0KKysK KytpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKKysJeworKwlpZiAoIXNj dHgudGVzdF9tb2RlKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCxS QU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJbWVtY3B5KHNj dHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKyt2b2lk IEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3Ry KQorKwl7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCUZJTEVUSU1FIGZ0OworKyNlbGlm IGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKKysgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0 czsKKysjZWxzZQorKwlzdHJ1Y3QgdGltZXZhbCB0djsKKysjZW5kaWYKKysKKysjaWZuZGVmIEdF VFBJRF9JU19NRUFOSU5HTEVTUworKwl1bnNpZ25lZCBsb25nIHBpZDsKKysjZW5kaWYKKysKKysj aWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsK KysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYpOwor KwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAmIDB4 ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAx NikgJiAweGZmKTsKKysJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRp bWUgPj4gMjQpICYgMHhmZik7CisrCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdMb3dE YXRlVGltZSAmIDB4ZmYpOworKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0Rh dGVUaW1lID4+IDgpICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3 TG93RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAo KGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7CisrI2VsaWYgZGVmaW5lZChPUEVOU1NM X1NZU19WWFdPUktTKQorKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOworKwli dWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X3NlYyAmIDB4ZmYpOworKwlidWZbMV0gPSAo dW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVu c2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10gPSAodW5z aWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gMjQpICYgMHhmZik7CisrCWJ1Zls0XSA9ICh1bnNp Z25lZCBjaGFyKSAodHMudHZfbnNlYyAmIDB4ZmYpOworKwlidWZbNV0gPSAodW5zaWduZWQgY2hh cikgKCh0cy50dl9uc2VjID4+IDgpICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFy KSAoKHRzLnR2X25zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFy KSAoKHRzLnR2X25zZWMgPj4gMjQpICYgMHhmZik7CisrI2Vsc2UKKysJZ2V0dGltZW9mZGF5KCZ0 dixOVUxMKTsKKysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9zZWMgJiAweGZmKTsK KysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgpICYgMHhmZik7Cisr CWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikgJiAweGZmKTsKKysJ YnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKwli dWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsKKysJYnVmWzVdID0g KHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAo dW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAo dW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgorKwli dWZbOF0gPSAodW5zaWduZWQgY2hhcikgKCpwY3RyICYgMHhmZik7CisrCWJ1Zls5XSA9ICh1bnNp Z25lZCBjaGFyKSAoKCpwY3RyID4+IDgpICYgMHhmZik7CisrCWJ1ZlsxMF0gPSAodW5zaWduZWQg Y2hhcikgKCgqcGN0ciA+PiAxNikgJiAweGZmKTsKKysJYnVmWzExXSA9ICh1bnNpZ25lZCBjaGFy KSAoKCpwY3RyID4+IDI0KSAmIDB4ZmYpOworKworKwkoKnBjdHIpKys7CisrCisrCisrI2lmbmRl ZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJcGlkPSh1bnNpZ25lZCBsb25nKWdldHBpZCgpOwor KwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQgJiAweGZmKTsKKysJYnVmWzEzXSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYpOworKwlidWZbMTRdID0gKHVuc2lnbmVk IGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOworKwlidWZbMTVdID0gKHVuc2lnbmVkIGNoYXIp ICgocGlkID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgorKyAgICB9CisrCisrc3RhdGljIGludCBm aXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgdW5z aWduZWQgaW50IG91dGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JMT0NLX0xFTkdU SF0sIElbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgdG1wW0FFU19CTE9DS19M RU5HVEhdOworKwlpbnQgaTsKKysJaWYgKGN0eC0+ZXJyb3IpCisrCQl7CisrCQlSQU5EZXJyKFJB TkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfRVJST1IpOworKwkJcmV0dXJuIDA7CisrCQl9Cisr CWlmICghY3R4LT5rZXllZCkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5E X1JfTk9fS0VZX1NFVCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFjdHgtPnNlZWRlZCkK KysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19OT1RfU0VFREVE KTsKKysJCXJldHVybiAwOworKwkJfQorKwlmb3IgKDs7KQorKwkJeworKwkJaWYgKCFjdHgtPnRl c3RfbW9kZSkKKysJCQlGSVBTX2dldF90aW1ldmVjKGN0eC0+RFQsICZjdHgtPmNvdW50ZXIpOwor KwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOworKwkJZm9yIChpID0gMDsgaSA8 IEFFU19CTE9DS19MRU5HVEg7IGkrKykKKysJCQl0bXBbaV0gPSBJW2ldIF4gY3R4LT5WW2ldOwor KwkJQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7CisrCQlmb3IgKGkgPSAwOyBpIDwgQUVT X0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ldOworKwkJQUVTX2Vu Y3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKKysJCS8qIENvbnRpbnVvdXMgUFJORyB0ZXN0 ICovCisrCQlpZiAoY3R4LT5zZWNvbmQpCisrCQkJeworKwkJCWlmIChmaXBzX3BybmdfZmFpbCkK KysJCQkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCQkJaWYgKCFt ZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKKysJCQkJeworKwkgICAgCQkJ UkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsKKysJCQkJY3R4LT5l cnJvciA9IDE7CisrCQkJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCQkJcmV0dXJuIDA7 CisrCQkJCX0KKysJCQl9CisrCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RI KTsKKysJCWlmICghY3R4LT5zZWNvbmQpCisrCQkJeworKwkJCWN0eC0+c2Vjb25kID0gMTsKKysJ CQlpZiAoIWN0eC0+dGVzdF9tb2RlKQorKwkJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlpZiAo b3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJeworKwkJCW1lbWNweShvdXQsIFIsIG91 dGxlbik7CisrCQkJYnJlYWs7CisrCQkJfQorKworKwkJbWVtY3B5KG91dCwgUiwgQUVTX0JMT0NL X0xFTkdUSCk7CisrCQlvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKKysJCW91dGxlbiAtPSBBRVNf QkxPQ0tfTEVOR1RIOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworKworK2ludCBGSVBTX3g5 MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pCisrCXsKKysJ aW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlw c19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVuKTsKKysJQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IEZJUFNfcmFuZF9z ZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4p CisrCXsKKysJcmV0dXJuIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysJfQorKwor K2ludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKysJewor KwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBm aXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNlZWRsZW4pOworKwlDUllQVE9fd191bmxv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysKKytpbnQgRklQ U194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQorKwl7CisrCWludCBy ZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNfcmFu ZCgmc2N0eCwgb3V0LCBjb3VudCk7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5E KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3g5MzFfc3RhdHVzKHZvaWQpCisr CXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0 ID0gc2N0eC5zZWVkZWQ7CisrCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJ cmV0dXJuIHJldDsKKysJfQorKworK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZvaWQpCisrCXsKKysJ Q1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJZmlwc19yYW5kX3BybmdfcmVzZXQo JnNjdHgpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCX0KKysKKytz dGF0aWMgaW50IGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVu KQorKwl7CisrCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOworKwlyZXR1cm4gMTsKKysJ fQorKworK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lkICpzZWVkLCBpbnQg c2VlZGxlbiwKKysJCQkJCWRvdWJsZSBhZGRfZW50cm9weSkKKysJeworKwlGSVBTX3g5MzFfc2Vl ZChzZWVkLCBzZWVkbGVuKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgY29uc3QgUkFO RF9NRVRIT0QgcmFuZF94OTMxX21ldGg9CisrICAgIHsKKysgICAgZmlwc19kb19yYW5kX3NlZWQs CisrICAgIEZJUFNfeDkzMV9ieXRlcywKKysgICAgRklQU194OTMxX3Jlc2V0LAorKyAgICBmaXBz X2RvX3JhbmRfYWRkLAorKyAgICBGSVBTX3g5MzFfYnl0ZXMsCisrICAgIEZJUFNfeDkzMV9zdGF0 dXMKKysgICAgfTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU194OTMxX21ldGhvZCh2b2lk KQorK3sKKysgIHJldHVybiAmcmFuZF94OTMxX21ldGg7CisrfQorKworKyNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAorLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9m aXBzL2ZpcHNfcmFuZC5oLmZpcHMJMjAxMy0wMi0xOSAxMjo0NzozMy43NDAxMTg4OTMgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDEzLTAyLTE5IDEy OjQ3OjMzLjc0MTExODkxNCArMDEwMAorQEAgLTAsMCArMSwxNDUgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAorKyNkZWZpbmUgSEVB REVSX0ZJUFNfUkFORF9ICisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2lmZGVmICBfX2Nw bHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK2ludCBGSVBTX3g5MzFfc2V0X2tl eShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pOworK2ludCBGSVBTX3g5MzFf c2VlZChjb25zdCB2b2lkICpidWYsIGludCBudW0pOworK2ludCBGSVBTX3g5MzFfYnl0ZXModW5z aWduZWQgY2hhciAqb3V0LCBpbnQgb3V0bGVuKTsKKysKKytpbnQgRklQU194OTMxX3Rlc3RfbW9k ZSh2b2lkKTsKKyt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKTsKKytpbnQgRklQU194OTMxX3Nl dF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7CisrCisraW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCk7 CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCk7CisrCisrdHlw ZWRlZiBzdHJ1Y3QgZHJiZ19jdHhfc3QgRFJCR19DVFg7CisrLyogRFJCRyBleHRlcm5hbCBmbGFn cyAqLworKy8qIEZsYWcgZm9yIENUUiBtb2RlIG9ubHk6IHVzZSBkZXJpdmF0aW9uIGZ1bmN0aW9u IGN0cl9kZiAqLworKyNkZWZpbmUJRFJCR19GTEFHX0NUUl9VU0VfREYJCTB4MQorKy8qIFBSTkcg aXMgaW4gdGVzdCBzdGF0ZSAqLworKyNkZWZpbmUJRFJCR19GTEFHX1RFU1QJCQkweDIKKysKKytE UkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKytp bnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQg ZmxhZ3MpOworK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKKytpbnQgRklQU19k cmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6 ZV90IGFkaW5sZW4pOworK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVu c2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysJCQlpbnQgcHJlZGljdGlvbl9yZXNp c3RhbmNlLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsK KysKKytpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpOworK3ZvaWQg RklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpOworKworK2ludCBGSVBTX2RyYmdfc2V0X2Nh bGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6ZV90ICgqZ2V0X2VudHJvcHkpKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1p bl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKKysJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCisrCXNpemVfdCBlbnRy b3B5X2Jsb2NrbGVuLAorKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVf dCBtYXhfbGVuKSwKKysJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKTsKKysKKytpbnQgRklQU19kcmJnX3NldF9yYW5k X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKKysJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCisrCWludCAoKnJh bmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKSwKKysJ aW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCisrCQkJCWNvbnN0IHZvaWQgKmJ1Ziwg aW50IG51bSwgZG91YmxlIGVudHJvcHkpKTsKKysKKyt2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9k YXRhKERSQkdfQ1RYICpjdHgpOworK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJHX0NU WCAqY3R4LCB2b2lkICphcHBfZGF0YSk7Cisrc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5n dGgoRFJCR19DVFggKmRjdHgpOworK2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RY ICpkY3R4KTsKKyt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRj dHgsIGludCBpbnRlcnZhbCk7Cisrdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChE UkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKKysKKytpbnQgRklQU19kcmJnX2hlYWx0aF9j aGVjayhEUkJHX0NUWCAqZGN0eCk7CisrCisrRFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1bHRfZHJi Zyh2b2lkKTsKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2b2lkKTsKKysK KysKKytpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpOwor K2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKTsKKysKKyt2b2lk IEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpOworKworK2ludCBGSVBTX3JhbmRfc3RyZW5n dGgodm9pZCk7CisrCisrLyogMS4wLjAgY29tcGF0IGZ1bmN0aW9ucyAqLworK2ludCBGSVBTX3Jh bmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5 bGVuKTsKKytpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0la RV9UIG51bSk7CisraW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNf UkFORF9TSVpFX1Qgb3V0bGVuKTsKKytpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKTsKKyt2 b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKKytpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25l ZCBjaGFyICpkdCk7CisraW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCk7CisrY29uc3QgUkFORF9N RVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCk7CisrCisrI2lmZGVmICBfX2NwbHVzcGx1cwor K30KKysjZW5kaWYKKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9sY2wuaAorLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcmFu ZF9sY2wuaC5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQxMTE4OTE0ICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCTIwMTMtMDItMTkgMTI6NDc6 MzMuNzQxMTE4OTE0ICswMTAwCitAQCAtMCwwICsxLDIxOSBAQAorKy8qIGZpcHMvcmFuZC9maXBz X3JhbmRfbGNsLmggKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworK3R5cGVkZWYgc3RydWN0IGRyYmdfaGFz aF9jdHhfc3QgRFJCR19IQVNIX0NUWDsKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2htYWNfY3R4X3N0 IERSQkdfSE1BQ19DVFg7CisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0IERSQkdfQ1RS X0NUWDsKKysKKysvKiA4ODggYml0cyBmcm9tIDEwLjEgdGFibGUgMiAqLworKyNkZWZpbmUgSEFT SF9QUk5HX01BWF9TRUVETEVOCTExMQorKworK3N0cnVjdCBkcmJnX2hhc2hfY3R4X3N0CisrCXsK KysJY29uc3QgRVZQX01EICptZDsKKysJRVZQX01EX0NUWCBtY3R4OworKwl1bnNpZ25lZCBjaGFy IFZbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKKysJdW5zaWduZWQgY2hhciBDW0hBU0hfUFJOR19N QVhfU0VFRExFTl07CisrCS8qIFRlbXBvcmFyeSB2YWx1ZSBzdG9yYWdlOiBzaG91bGQgYWx3YXlz IGV4Y2VlZCBtYXggZGlnZXN0IGxlbmd0aCAqLworKwl1bnNpZ25lZCBjaGFyIHZ0bXBbSEFTSF9Q Uk5HX01BWF9TRUVETEVOXTsKKysJfTsKKysKKytzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdAorKwl7 CisrCWNvbnN0IEVWUF9NRCAqbWQ7CisrCUhNQUNfQ1RYIGhjdHg7CisrCXVuc2lnbmVkIGNoYXIg S1tFVlBfTUFYX01EX1NJWkVdOworKwl1bnNpZ25lZCBjaGFyIFZbRVZQX01BWF9NRF9TSVpFXTsK KysJfTsKKysKKytzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0CisrCXsKKysJQUVTX0tFWSBrczsKKysJ c2l6ZV90IGtleWxlbjsKKysJdW5zaWduZWQgY2hhciBLWzMyXTsKKysJdW5zaWduZWQgY2hhciBW WzE2XTsKKysJLyogVGVtcCB2YXJpYWJsZXMgdXNlZCBieSBkZXJpdmF0aW9uIGZ1bmN0aW9uICov CisrCUFFU19LRVkgZGZfa3M7CisrCUFFU19LRVkgZGZfa3hrczsKKysJLyogVGVtcG9yYXJ5IGJs b2NrIHN0b3JhZ2UgdXNlZCBieSBjdHJfZGYgKi8KKysJdW5zaWduZWQgY2hhciBibHRtcFsxNl07 CisrCXNpemVfdCBibHRtcF9wb3M7CisrCXVuc2lnbmVkIGNoYXIgS1hbNDhdOworKwl9OworKwor Ky8qIERSQkcgaW50ZXJuYWwgZmxhZ3MgKi8KKysKKysvKiBGdW5jdGlvbnMgc2hvdWxkbid0IGNh bGwgZXJyIGxpYnJhcnkgKi8KKysjZGVmaW5lCURSQkdfRkxBR19OT0VSUgkJCTB4MQorKy8qIEN1 c3RvbSByZXNlZWQgY2hlY2tpbmcgKi8KKysjZGVmaW5lCURSQkdfQ1VTVE9NX1JFU0VFRAkJMHgy CisrCisrLyogRFJCRyBzdGF0dXMgdmFsdWVzICovCisrLyogbm90IGluaXRpYWxpc2VkICovCisr I2RlZmluZSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VECTAKKysvKiBvayBhbmQgcmVhZHkgdG8g Z2VuZXJhdGUgcmFuZG9tIGJpdHMgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1JFQURZCQkxCisr LyogcmVzZWVkIHJlcXVpcmVkICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19SRVNFRUQJCTIKKysv KiBmYXRhbCBlcnJvciBjb25kaXRpb24gKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX0VSUk9SCQkz CisrCisrLyogQSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoOiBsYXJnZXIgdGhhbiBhbnkgcmVhc29u YWJsZSB2YWx1ZSB1c2VkIGluIHByYXRpY2UgKi8KKysKKysjZGVmaW5lIERSQkdfTUFYX0xFTkdU SAkJCTB4N2ZmZmZmZjAKKysvKiBNYXhpbXVtIERSQkcgYmxvY2sgbGVuZ3RoOiBhbGwgbWQgc2l6 ZXMgYXJlIGJpZ2dlciB0aGFuIGNpcGhlciBibG9ja3Mgc2l6ZXMKKysgKiBzbyB1c2UgbWF4IGRp Z2VzdCBsZW5ndGguCisrICovCisrI2RlZmluZSBEUkJHX01BWF9CTE9DSwkJCUVWUF9NQVhfTURf U0laRQorKworKyNkZWZpbmUgRFJCR19IRUFMVEhfSU5URVJWQUwJCSgxIDw8IDI0KQorKworKy8q IERSQkcgY29udGV4dCBzdHJ1Y3R1cmUgKi8KKysKKytzdHJ1Y3QgZHJiZ19jdHhfc3QKKysJewor KwkvKiBGaXJzdCB0eXBlcyBjb21tb24gdG8gYWxsIGltcGxlbWVudGF0aW9ucyAqLworKwkvKiBE UkJHIHR5cGU6IGEgTklEIGZvciB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0gKi8KKysJaW50IHR5 cGU7CisrCS8qIFZhcmlvdXMgZXh0ZXJuYWwgZmxhZ3MgKi8KKysJdW5zaWduZWQgaW50IHhmbGFn czsKKysJLyogVmFyaW91cyBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyAqLworKwl1bnNpZ25lZCBp bnQgaWZsYWdzOworKwkvKiBVc2VkIGZvciBwZXJpb2RpYyBoZWFsdGggY2hlY2tzICovCisrCWlu dCBoZWFsdGhfY2hlY2tfY250LCBoZWFsdGhfY2hlY2tfaW50ZXJ2YWw7CisrCisrCS8qIFRoZSBm b2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgc2V0dXAgYnkgbWVjaGFuaXNtIGRyYmdfaW5pdCgpIGNh bGwgKi8KKysJaW50IHN0cmVuZ3RoOworKwlzaXplX3QgYmxvY2tsZW5ndGg7CisrCXNpemVfdCBt YXhfcmVxdWVzdDsKKysKKysJc2l6ZV90IG1pbl9lbnRyb3B5LCBtYXhfZW50cm9weTsKKysJc2l6 ZV90IG1pbl9ub25jZSwgbWF4X25vbmNlOworKwlzaXplX3QgbWF4X3BlcnMsIG1heF9hZGluOwor Kwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXI7CisrCXVuc2lnbmVkIGludCByZXNlZWRfaW50 ZXJ2YWw7CisrCXNpemVfdCBzZWVkbGVuOworKwlpbnQgc3RhdHVzOworKwkvKiBBcHBsaWNhdGlv biBkYXRhOiB0eXBpY2FsbHkgdXNlZCBieSB0ZXN0IGdldF9lbnRyb3B5ICovCisrCXZvaWQgKmFw cF9kYXRhOworKwkvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmVzICovCisrCXVu aW9uIAorKwkJeworKwkJRFJCR19IQVNIX0NUWCBoYXNoOworKwkJRFJCR19ITUFDX0NUWCBobWFj OworKwkJRFJCR19DVFJfQ1RYICBjdHI7CisrCQl9IGQ7CisrCS8qIEluaXRpYWxpYXNlIFBSTkcg YW5kIHNldHVwIGNhbGxiYWNrcyBiZWxvdyAqLworKwlpbnQgKCppbml0KShEUkJHX0NUWCAqY3R4 LCBpbnQgbmlkLCBpbnQgc2VjdXJpdHksIHVuc2lnbmVkIGludCBmbGFncyk7CisrCS8qIEludGFu dGlhdGUgUFJORyAqLworKwlpbnQgKCppbnN0YW50aWF0ZSkoRFJCR19DVFggKmN0eCwKKysJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7CisrCS8qIHJlc2VlZCAqLworKwlpbnQgKCpyZXNl ZWQpKERSQkdfQ1RYICpjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90 IGVudGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4p OworKwkvKiBnZW5lcmF0IG91dHB1dCAqLworKwlpbnQgKCpnZW5lcmF0ZSkoRFJCR19DVFggKmN0 eCwKKysJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCS8qIHVuaW5zdGFudGlhdGUg Ki8KKysJaW50ICgqdW5pbnN0YW50aWF0ZSkoRFJCR19DVFggKmN0eCk7CisrCisrCS8qIEVudHJv cHkgc291cmNlIGJsb2NrIGxlbmd0aCAqLworKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbjsKKysK KysJLyogZW50cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KKysJc2l6ZV90ICgqZ2V0X2VudHJv cHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9w eSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKKysJLyogSW5kaWNhdGVzIHdlIGhh dmUgZmluaXNoZWQgd2l0aCBlbnRyb3B5IGJ1ZmZlciAqLworKwl2b2lkICgqY2xlYW51cF9lbnRy b3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysK KysJLyogbm9uY2UgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCisrCXNpemVfdCAoKmdldF9ub25jZSko RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBz aXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOworKwkvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBm aW5pc2hlZCB3aXRoIG5vbmNlIGJ1ZmZlciAqLworKwl2b2lkICgqY2xlYW51cF9ub25jZSkoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrCisrCS8qIENv bnRpbnVvdXMgcmFuZG9tIG51bWJlciB0ZXN0IHRlbXBvcmFyeSBhcmVhICovCisrCS8qIExhc3Qg YmxvY2sgKi8JCisrCXVuc2lnbmVkIGNoYXIgbGJbRVZQX01BWF9NRF9TSVpFXTsKKysJLyogc2V0 IGlmIGxiIGlzIHZhbGlkICovCisrCWludCBsYl92YWxpZDsKKysKKysJLyogQ2FsbGJhY2tzIHVz ZWQgd2hlbiBjYWxsZWQgdGhyb3VnaCBSQU5EIGludGVyZmFjZSAqLworKwkvKiBHZXQgYW55IGFk ZGl0aW9uYWwgaW5wdXQgZm9yIGdlbmVyYXRlICovCisrCXNpemVfdCAoKmdldF9hZGluKShEUkJH X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCk7CisrCXZvaWQgKCpjbGVhbnVwX2FkaW4p KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOworKwkvKiBD YWxsYmFjayBmb3IgUkFORF9zZWVkKCksIFJBTkRfYWRkKCkgKi8KKysJaW50ICgqcmFuZF9zZWVk X2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pOworKwlpbnQgKCpy YW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVt LCBkb3VibGUgZW50cm9weSk7CisrCX07CisrCisrCisraW50IGZpcHNfZHJiZ19jdHJfaW5pdChE UkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgp OworK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19k cmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKTsKKytp bnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKm91dCk7CisrCisrY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19nZXRfZGlnZXN0Ynlu aWQoaW50IG5pZCk7CisrCisrY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJUFNfZ2V0X2Np cGhlcmJ5bmlkKGludCBuaWQpOworKworKyNkZWZpbmUgRklQU19kaWdlc3Rpbml0IEVWUF9EaWdl c3RJbml0CisrI2RlZmluZSBGSVBTX2RpZ2VzdHVwZGF0ZSBFVlBfRGlnZXN0VXBkYXRlCisrI2Rl ZmluZSBGSVBTX2RpZ2VzdGZpbmFsIEVWUF9EaWdlc3RGaW5hbAorKyNkZWZpbmUgTV9FVlBfTURf c2l6ZSBFVlBfTURfc2l6ZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlw c19yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xp Yi5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jLmZpcHMJ MjAxMy0wMi0xOSAxMjo0NzozMy43NDExMTg5MTQgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43NDExMTg5MTQg KzAxMDAKK0BAIC0wLDAgKzEsMTkxIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKy8q IEZJUFMgQVBJIGZvciBQUk5HIHVzZS4gU2ltaWxhciB0byBSQU5EIGZ1bmN0aW9uYWxpdHkgYnV0 IHdpdGhvdXQKKysgKiBFTkdJTkUgYW5kIGFkZGl0aW9uYWwgY2hlY2tpbmcgZm9yIG5vbi1GSVBT IHJhbmQgbWV0aG9kcy4KKysgKi8KKysKKytzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgKmZpcHNf cmFuZF9tZXRoID0gTlVMTDsKKytzdGF0aWMgaW50IGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0g MDsKKytzdGF0aWMgaW50IGZpcHNfcmFuZF9iaXRzID0gMDsKKysKKysvKiBBbGxvd3MgYXBwbGlj YXRpb24gdG8gb3ZlcnJpZGUgbnVtYmVyIG9mIGJpdHMgYW5kIHVzZXMgbm9uLUZJUFMgbWV0aG9k cyAqLworK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cykKKysJeworKwlmaXBzX3Jh bmRfYml0cyA9IG5iaXRzOworKwl9CisrCisraW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNvbnN0 IFJBTkRfTUVUSE9EICptZXRoKQorKwl7CisrCWlmICghZmlwc19yYW5kX2JpdHMpCisrCQl7Cisr CQlpZiAobWV0aCA9PSBGSVBTX2RyYmdfbWV0aG9kKCkpCisrCQkJZmlwc19hcHByb3ZlZF9yYW5k X21ldGggPSAxOworKwkJZWxzZSBpZiAobWV0aCA9PSBGSVBTX3g5MzFfbWV0aG9kKCkpCisrCQkJ Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAyOworKwkJZWxzZQorKwkJCXsKKysJCQlmaXBzX2Fw cHJvdmVkX3JhbmRfbWV0aCA9IDA7CisrCQkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCQkJ eworKwkJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRCwKKysJCQkJCQlGSVBT X1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCQkJcmV0dXJuIDA7CisrCQkJCX0KKysJCQl9CisrCQl9 CisrCWZpcHNfcmFuZF9tZXRoID0gbWV0aDsKKysJcmV0dXJuIDE7CisrCX0KKysKKytjb25zdCBS QU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCkKKysJeworKwlyZXR1cm4gZmlw c19yYW5kX21ldGg7CisrCX0KKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhv ZCh2b2lkKQorKwl7CisrCXJldHVybiBGSVBTX3JhbmRfZ2V0X21ldGhvZCgpOworKwl9CisrCisr dm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKKysJeworKwlpZiAoZmlwc19yYW5kX21ldGggJiYg Zmlwc19yYW5kX21ldGgtPmNsZWFudXApCisrCQlmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCgpOwor Kwl9CisrCisraW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJ WkVfVCBudW0pCisrCXsKKysJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21v ZHVsZV9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VFRCwgRklQ U19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNfcmFu ZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zZWVkKQorKwkJZmlwc19yYW5kX21ldGgtPnNlZWQo YnVmLG51bSk7CisrCXJldHVybiAxOworKwl9CisrCisrdm9pZCBGSVBTX3JhbmRfYWRkKGNvbnN0 IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpCisrCXsKKysJaWYgKCFmaXBzX2Fw cHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX1JBTkRfQURELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVy bjsKKysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5hZGQpCisr CQlmaXBzX3JhbmRfbWV0aC0+YWRkKGJ1ZixudW0sZW50cm9weSk7CisrCX0KKysKKytpbnQgRklQ U19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pCisr CXsKKysJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQllURVMsIEZJUFNfUl9OT05fRklQ U19NRVRIT0QpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBm aXBzX3JhbmRfbWV0aC0+Ynl0ZXMpCisrCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPmJ5dGVzKGJ1 ZixudW0pOworKwlyZXR1cm4gMDsKKysJfQorKworK2ludCBGSVBTX3JhbmRfcHNldWRvX2J5dGVz KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRf cmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfUkFORF9QU0VVRE9fQllURVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+cHNl dWRvcmFuZCkKKysJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+cHNldWRvcmFuZChidWYsbnVtKTsK KysJcmV0dXJuIC0xOworKwl9CisrCisraW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKKysJewor KwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TVEFUVVMsIEZJUFNfUl9OT05fRklQU19N RVRIT0QpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBz X3JhbmRfbWV0aC0+c3RhdHVzKQorKwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMoKTsK KysJcmV0dXJuIDA7CisrCX0KKysKKysvKiBSZXR1cm4gaW5zdGFudGlhdGVkIHN0cmVuZ3RoIG9m IFBSTkcuIEZvciBEUkJHIHRoaXMgaXMgYW4gaW50ZXJuYWwKKysgKiBwYXJhbWV0ZXIuIEZvciBY OS4zMSBQUk5HIGl0IGlzIDgwIGJpdHMgKGZyb20gU1A4MDAtMTMxKS4gQW55IG90aGVyCisrICog dHlwZSBvZiBQUk5HIGlzIG5vdCBhcHByb3ZlZCBhbmQgcmV0dXJucyAwIGluIEZJUFMgbW9kZSBh bmQgbWF4aW11bQorKyAqIDI1NiBvdXRzaWRlIEZJUFMgbW9kZS4KKysgKi8KKysKKytpbnQgRklQ U19yYW5kX3N0cmVuZ3RoKHZvaWQpCisrCXsKKysJaWYgKGZpcHNfcmFuZF9iaXRzKQorKwkJcmV0 dXJuIGZpcHNfcmFuZF9iaXRzOworKwlpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMSkK KysJCXJldHVybiBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKEZJUFNfZ2V0X2RlZmF1bHRfZHJiZygp KTsKKysJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMikKKysJCXJldHVybiA4 MDsKKysJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMCkKKysJCXsKKysJCWlm IChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQkJcmV0dXJuIDA7CisrCQllbHNlCisrCQkJcmV0dXJu IDI1NjsKKysJCX0KKysJcmV0dXJuIDA7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQxMTE4OTE0 ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0 LmMJMjAxMy0wMi0xOSAxMjo0NzozMy43NDExMTg5MTQgKzAxMDAKK0BAIC0wLDAgKzEsMTgzIEBA CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Cisr I2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysKKysK Kyt0eXBlZGVmIHN0cnVjdAorKwl7CisrCXVuc2lnbmVkIGNoYXIgRFRbMTZdOworKwl1bnNpZ25l ZCBjaGFyIFZbMTZdOworKwl1bnNpZ25lZCBjaGFyIFJbMTZdOworKwl9IEFFU19QUk5HX1RWOwor KworKy8qIFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9t IHRoZSBSR05WUyBzcGVjICovCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlb MTZdID0KKysJCXsweGYzLDB4YjEsMHg2NiwweDZkLDB4MTMsMHg2MCwweDcyLDB4NDIsCisrCQkg MHhlZCwweDA2LDB4MWMsMHhhYiwweGI4LDB4ZDQsMHg2MiwweDAyfTsKKysKKytzdGF0aWMgQUVT X1BSTkdfVFYgYWVzXzEyOF90diA9IAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIz LDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIs MHhiMCwweGU5LDB4MjIsMHhmOX0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4NTksMHg1MywweDFlLDB4ZDEsMHgz YiwweGIwLDB4YzAsMHg1NSwKKysJCSAweDg0LDB4NzksMHg2NiwweDg1LDB4YzEsMHgyZiwweDc2 LDB4NDF9CisrCX07CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0K KysJCXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCisrCQkgMHg0NCww eDY0LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAorKwkJIDB4NGEsMHhmYiwweGNhLDB4 ZWIsMHg0YywweDhiLDB4OTksMHgzYn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJf dHYgPSAKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCww eDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4 NGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisr CQkJCS8qIFIgKi8KKysJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFlLDB4ZWYs CisrCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQorKwl9OworKwor K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9CisrCQl7MHg2ZCwweDE0LDB4 MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAorKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3 YSwweDAzLDB4YjcsMHg5ZiwKKysJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVl LDB4YjUsCisrCQkgMHgyMSwweDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKKysK KytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90diA9CisrCXsKKysJCQkJLyogRFQgKi8KKysJ CXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5 LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKKysJCQkJLyogViAqLworKwkJezB4ODAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgzNSwweGM3LDB4 ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAorKwkJIDB4ODIsMHg3OSwweDk5LDB4ZmIsMHhk MCwweGIzLDB4M2IsMHg3Mn0KKysJfTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQorKyAg ICB7CisrICAgIGFlc18xOTJfdHYuVlswXSsrOworKyAgICB9CisrCisrI2RlZmluZSBmaXBzX3g5 MzFfdGVzdChrZXksIHR2KSBcCisrCWRvX3g5MzFfdGVzdChrZXksIHNpemVvZiBrZXksICZ0dikK KysKKytzdGF0aWMgaW50IGRvX3g5MzFfdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXls ZW4sCisrCQkJQUVTX1BSTkdfVFYgKnR2KQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUlsxNl0sIFZb MTZdOworKwlpbnQgcnYgPSAxOworKwltZW1jcHkoViwgdHYtPlYsIHNpemVvZihWKSk7CisrCWlm ICghRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmICgh Zmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCisrCQlyZXR1 cm4gMTsKKysJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBO VUxMKSkKKysJCVZbMF0rKzsKKysJRklQU194OTMxX3NlZWQoViwgMTYpOworKwlGSVBTX3g5MzFf c2V0X2R0KHR2LT5EVCk7CisrCUZJUFNfeDkzMV9ieXRlcyhSLCAxNik7CisrCWlmIChtZW1jbXAo UiwgdHYtPlIsIDE2KSkKKysJCXsKKysJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX1g5MzEs IGtleWxlbiwgTlVMTCk7CisrCQlydiA9IDA7CisrCQl9CisrCWVsc2UgaWYgKCFmaXBzX3Bvc3Rf c3VjY2VzcyhGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKKysJCXJldHVybiAwOworKwly ZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVzdF94OTMxKCkKKysJeworKwlpbnQg cnYgPSAxOworKwlGSVBTX3g5MzFfcmVzZXQoKTsKKysJaWYgKCFGSVBTX3g5MzFfdGVzdF9tb2Rl KCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFmaXBzX3g5MzFfdGVz dChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KSkKKysJCXJ2ID0gMDsKKysJaWYgKCFmaXBzX3g5MzFf dGVzdChhZXNfMTkyX2tleSwgYWVzXzE5Ml90dikpCisrCQlydiA9IDA7CisrCWlmICghZmlwc194 OTMxX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18yNTZfdHYpKQorKwkJcnYgPSAwOworKwlGSVBTX3g5 MzFfcmVzZXQoKTsKKysJaWYgKCFydikKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1Rf WDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisraW50 IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpCisrCXsKKysJcmV0dXJuIEZJUFNfc2VsZnRlc3RfeDkz MSgpOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9maXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3Jh bmR0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMu ZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MTExODkxNCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MTEx ODkxNCArMDEwMAorQEAgLTAsMCArMSwyNTAgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5 OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVu CisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1l bnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4K KysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNv bW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl IGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwg Y29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAq IGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wg ZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292 ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9s ZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmln aHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNl cyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBh Y2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0 dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkg dXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBh dCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4 dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz IHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2Vt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysg KiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3Vp bmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3Jh cGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVj aWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBw cyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93 bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0 aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRl cml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUg Y2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJp YnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgor KyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0 eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUwor K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJ UFMgUkFORCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKwor KyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKyt0 eXBlZGVmIHN0cnVjdAorKwl7CisrCXVuc2lnbmVkIGNoYXIgRFRbMTZdOworKwl1bnNpZ25lZCBj aGFyIFZbMTZdOworKwl1bnNpZ25lZCBjaGFyIFJbMTZdOworKwl9IEFFU19QUk5HX01DVDsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZdID0KKysJezB4 OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQsMHhiNSwKKysJIDB4ZDgsMHgyYiwweGU4 LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07CisrCisrc3RhdGljIGNvbnN0IEFFU19QUk5HX01D VCBhZXNfMTI4X21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHg2MywweDc2LDB4YmIsMHhl NSwweDI5LDB4MDIsMHhiYSwweDNiLAorKwkgMHg2NywweGM5LDB4MjUsMHhmYSwweDcwLDB4MWYs MHgxMSwweGFjfSwKKysJCQkvKiBWICovCisrCXsweDU3LDB4MmMsMHg4ZSwweDc2LDB4ODcsMHgy NiwweDQ3LDB4OTcsCisrCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4YzQsMHg5NSwweDAxLDB4ZDF9 LAorKwkJCS8qIFIgKi8KKysJezB4NDgsMHhlOSwweGJkLDB4MGQsMHgwNiwweGVlLDB4MTgsMHhm YiwKKysJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4OWIsMHg3M30KKyt9OworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0gPQorKwl7MHhi NywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAorKwkgMHg0ZCwweDVhLDB4ZDUs MHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAorKwkgMHhiYywweDM1LDB4NTEsMHgxNiwweDZiLDB4 YWUsMHg5MywweDhhfTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xOTJfbWN0 X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4OTEsMHg1YSww eGEzLDB4YzksCisrCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2MywweDE1LDB4NTJ9LAor KwkJCS8qIFYgKi8KKysJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSwweDllLDB4OTAsMHg2NCwK KysJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2ZH0sCisrCQkJLyogUiAq LworKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiwweDIxLAorKwkgMHhkZCww eDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQorK307CisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9CisrCXsweDliLDB4MDUsMHhjOCww eDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCisrCSAweGE2LDB4M2EsMHhhOCwweGNiLDB4NGUsMHg3 MSwweGIyLDB4ZTAsCisrCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhiNCwweGY2LDB4NmQs CisrCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9OworKworK3N0YXRp YyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7CisrCQkJLyogRFQgKi8KKysJ ezB4MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKKysJIDB4NjIsMHg2ZCww eDA0LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCisrCQkJLyogViAqLworKwl7MHg0ZiwweGNk LDB4YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAorKwkgMHgzZSwweDBlLDB4NTYsMHg0NCww eDU5LDB4ZTgsMHg4MywweGNhfSwKKysJCQkvKiBSICovCisrCXsweGM4LDB4ODcsMHhjMiwweDYx LDB4NWIsMHhkMCwweGI5LDB4ZTEsCisrCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4NWIsMHhkNSww eGYxLDB4OGR9CisrfTsKKysKKytzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIg KmIsaW50IG4pCisrICAgIHsKKysgICAgd2hpbGUobi0tID4gMCkKKysJeworKwlwcmludGYoIiAl MDJ4IiwqYisrKTsKKysJfQorKyAgICB9CisrCisrc3RhdGljIHZvaWQgY29tcGFyZShjb25zdCB1 bnNpZ25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsCisrCQkg ICAgaW50IG4pCisrICAgIHsKKysgICAgaW50IGk7CisrCisrICAgIGZvcihpPTAgOyBpIDwgbiA7 ICsraSkKKysJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQorKwkgICAgeworKwkgICAgcHV0 cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7CisrCSAgICBkdW1wKHJlc3VsdCxuKTsKKysJ ICAgIHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7CisrCSAgICBkdW1wKGV4cGVj dGVkLG4pOworKwkgICAgcHV0Y2hhcignXG4nKTsKKysJICAgIEVYSVQoMSk7CisrCSAgICB9Cisr ICAgIH0KKysKKysKKytzdGF0aWMgdm9pZCBydW5fdGVzdChjb25zdCB1bnNpZ25lZCBjaGFyICpr ZXksIGludCBrZXlsZW4sCisrCQkJCQkJCWNvbnN0IEFFU19QUk5HX01DVCAqdHYpCisrICAgIHsK KysgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07CisrICAgIGludCBpLCBqOworKyAg ICBGSVBTX3g5MzFfcmVzZXQoKTsKKysgICAgRklQU194OTMxX3Rlc3RfbW9kZSgpOworKyAgICBG SVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrICAgIEZJUFNfeDkzMV9zZWVkKHR2LT5W LCAxNik7CisrICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7CisrICAgIGZvciAoaSA9IDA7IGkg PCAxMDAwMDsgaSsrKQorKwl7CisrICAgIAlGSVBTX3g5MzFfc2V0X2R0KGR0KTsKKysJRklQU194 OTMxX2J5dGVzKGJ1ZiwgMTYpOworKwkvKiBJbmNyZW1lbnQgRFQgKi8KKysJZm9yIChqID0gMTU7 IGogPj0gMDsgai0tKQorKwkJeworKwkJZHRbal0rKzsKKysJCWlmIChkdFtqXSkKKysJCQlicmVh azsKKysJCX0KKysJfQorKworKyAgICBjb21wYXJlKGJ1Zix0di0+UiwgMTYpOworKyAgICB9Cisr CisraW50IG1haW4oKQorKwl7CisrCXJ1bl90ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZhZXNf MTI4X21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKKysJcnVu X3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJfbWN0X3R2KTsKKysJcHJpbnRmKCJG SVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMy LCAmYWVzXzI1Nl9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7 CisrCXJldHVybiAwOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBz L2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MjExODkzNSAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJ MjAxMy0wMi0xOSAxMjo0NzozMy43NDIxMTg5MzUgKzAxMDAKK0BAIC0wLDAgKzEsNDQ0IEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG5bXSA9CisrIlx4MDBceEJCXHhGOFx4MkZceDA5 XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCisrIlx4RjdceDM2 XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUi CisrIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4Q0Vc eEVCXHg2Rlx4Q0QiCisrIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlc eDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCisrIlx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4Qzdc eDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCisrIlx4ODRceEVFXHg2QVx4NjRc eDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1XHg5OFx4MzkiCisrIlx4NEVc eEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4 NjgiCisrIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4 RkRceDA5XHgxRFx4QkQiCisrIlx4Q0IiOworKworK3N0YXRpYyBpbnQgY29ycnVwdF9yc2E7Cisr Cisrc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCisrICAgIHsKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkW10gPQorKyJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFceEZBXHhGMlx4ODlc eEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgorKyJceEY4XHgzRlx4MzFceDI1XHgxRVx4MDZc eDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQxIgorKyJceEIyXHg5NFx4MTBc eEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4MjZceDY5IgorKyJc eEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJFXHhDOVx4 M0VceERBIgorKyJceEM5XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4QkNceDExXHgxQ1x4 NzZceEYxXHhBOVx4NTJceDk0IgorKyJceDQ0XHhFNVx4NkFceEFGXHg2OFx4QzVceDZDXHgwOVx4 MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgorKyJceDkzXHg5OVx4MjZceEVEXHg0Rlx4 NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0IgorKyJceEFGXHg5NFx4 MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1Qlx4MUNceEIzIgor KyJceEMxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0KKysiXHgw MFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4QTFceEI1 XHg2MCIKKysiXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4QjhceDFB XHg5RVx4M0RceDg0XHhGNiIKKysiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4MUVceDNC XHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKKysiXHgyRFx4NUJceDI1XHgyMVx4NzZceDQ1 XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKKysiXHg5OSI7CisrCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9CisrIlx4MDBceEM5XHg3Rlx4QjFc eEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4RDkiCisrIlx4MzVc eDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4MzVceDAyXHg4Qlx4 OUQiCisrIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4QjRceDJFXHg5Mlx4RUFceDBEXHhBM1x4 QjRceDMyXHgwNFx4QjUiCisrIlx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4MDRceDE2XHhBNVx4 QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCisrIlx4MDMiOworKworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBkbXAxW10gPQorKyJceDU0XHg0OVx4NENceEE2XHgzRVx4QkFceDAz XHgzN1x4RTRceEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgorKyJceEVCXHgwN1x4RERceERD XHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFceDNFIgorKyJceEQ5 XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4RjdceDY5XHgyRVx4OUFc eDJFIgorKyJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4NzRceEFEXHhDOVx4M0Nc eDFGXHg2N1x4QzlceDgxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1x MVtdID0KKysiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAzXHg1MVx4QjdceEY4 XHg3OFx4ODZceDRDXHhBOSIKKysiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5OVx4MUNceDVD XHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIKKysiXHhGOVx4ODBceDNGXHg4Rlx4NkZceDhB XHhFM1x4NDJceEU5XHgzMVx4RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKKysiXHgxQlx4OTlceEE0 XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERBXHgzRCI7Cisr ICAgIAorKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQorKyJceDAwXHhC MFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhBRVx4OTRceDIz IgorKyJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgwN1x4N0ZceENE XHgzOVx4RTJceDExIgorKyJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4M1x4QjFceDY3 XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgorKyJceDlFXHgyRVx4MEZceDk2XHg1Nlx4RTZceDk4 XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5IgorKyJceEY3IjsKKysKKysgICAg a2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXktPm4pOworKyAgICBpZiAoY29y cnVwdF9yc2EpCisrCUJOX3NldF9iaXQoa2V5LT5uLCAxMDI0KTsKKysgICAga2V5LT5lID0gQk5f YmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOworKyAgICBrZXktPmQgPSBCTl9iaW4yYm4o ZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7CisrICAgIGtleS0+cCA9IEJOX2JpbjJibihwLCBzaXpl b2YocCktMSwga2V5LT5wKTsKKysgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihxKS0x LCBrZXktPnEpOworKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRtcDEp LTEsIGtleS0+ZG1wMSk7CisrICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBzaXplb2Yo ZG1xMSktMSwga2V5LT5kbXExKTsKKysgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlxbXAsIHNp emVvZihpcW1wKS0xLCBrZXktPmlxbXApOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3Zv aWQgRklQU19jb3JydXB0X3JzYSgpCisrICAgIHsKKysgICAgY29ycnVwdF9yc2EgPSAxOworKyAg ICB9CisrCisrLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJT QSBwcml2YXRlIGtleSBzaWduaW5nCisrICoga2F0X3Ricy4KKysgKi8KKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBL ZXkgUlNBIEtBVCI7CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1Nf U0hBMVtdID0geworKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwg MHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKKysgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMs IDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCisrICAweEY0 LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAw eEY4LCAweEQzLAorKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywg MHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKKysgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0Ys IDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCisrICAweDBE LCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAw eDlCLCAweEY1LAorKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4Mywg MHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKKysgIDB4MEEsIDB4RTksIDB4OEUsIDB4Mzgs IDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCisrICAweEQ2 LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAw eEJBLCAweEU4LAorKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwg MHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKKysgIDB4MjYsIDB4QzYsIDB4NzksIDB4Qzks IDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0geworKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwg MHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKKysgIDB4RkUs IDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4 OTUsIDB4RkEsCisrICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAw eDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAorKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwg MHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKKysgIDB4ODMs IDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4 MDUsIDB4RUUsCisrICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAw eDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIyLAorKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2Riwg MHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKKysgIDB4Mzcs IDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4 MjQsIDB4NDksCisrICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAw eDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJELAorKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwg MHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKKysgIDB4NTQs IDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0geworKyAgMHg2RCwg MHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhF MywgMHg4OSwKKysgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4 MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCisrICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAw eDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAorKyAgMHhDMSwg MHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3 MywgMHg0RSwKKysgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4 REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCisrICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAw eDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAorKyAgMHgyRiwg MHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhE QSwgMHhCNiwKKysgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4 RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCisrICAweDIxLCAweEI3LCAweDdFLCAweEFELCAw eDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAorKyAgMHg1Riwg MHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhC OSwgMHhGNiwKKysgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4 MUMKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4 NFtdID0geworKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5 QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKKysgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4 N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCisrICAweDg2LCAw eDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlB LCAweENELAorKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhE OSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKKysgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4 QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCisrICAweEIyLCAw eDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRG LCAweEZCLAorKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhB NCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKKysgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4 NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCisrICAweDk4LCAw eDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENB LCAweDZGLAorKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4 OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKKysgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4 OTAsIDB4MTgsIDB4NEIsIDB4RjEKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTUxMltdID0geworKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgw NSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKKysgIDB4QzYsIDB4 ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMs IDB4OUEsCisrICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRE LCAweDUxLCAweEVELCAweDlFLCAweERELAorKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2 QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKKysgIDB4MDEsIDB4 MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUs IDB4RDcsCisrICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYw LCAweDNELCAweDc4LCAweDU1LCAweDYxLAorKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhE MiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKKysgIDB4QzUsIDB4 NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4Mzks IDB4NjMsCisrICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRC LCAweEJGLCAweEY0LCAweEE4LCAweEZFLAorKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5 QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKKysgIDB4NUMsIDB4 OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0geworKyAgMHg3MSwgMHhFRSwgMHgx QSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywK KysgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEs IDB4MzMsIDB4OEQsIDB4OUIsCisrICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1 LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAorKyAgMHhEQywgMHgyMiwgMHgz NywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwK KysgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgs IDB4OEIsIDB4OEIsIDB4QTEsCisrICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUw LCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAorKyAgMHhBOSwgMHg5RSwgMHhF OCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwK KysgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQs IDB4NDQsIDB4RTUsIDB4NUYsCisrICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5 LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAorKyAgMHg3MiwgMHgwNSwgMHhE RSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwK KysgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKKyt9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7CisrICAw eDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3 LCAweDE1LCAweEY5LAorKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhF RCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKKysgIDB4NUIsIDB4NTUsIDB4OUEsIDB4 N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCisrICAw eDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJD LCAweDlFLCAweENELAorKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2 RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKKysgIDB4RUUsIDB4MUYsIDB4OEQsIDB4 N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCisrICAw eERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAy LCAweEM2LCAweDNCLAorKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhG OCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKKysgIDB4NTgsIDB4MkUsIDB4MDYsIDB4 NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCisrICAw eEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgy LCAweEU2LCAweERDLAorKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgx RSwgMHg4RAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEy NTZbXSA9IHsKKysgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4 ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCisrICAweEU3LCAweDNCLCAweDFELCAweEFGLCAw eEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAorKyAgMHg5Miwg MHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2 RiwgMHgzNSwKKysgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4 MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCisrICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAw eEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAorKyAgMHgwRSwg MHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5 MSwgMHgzMCwKKysgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4 NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCisrICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAw eEQxLCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAorKyAgMHhCOCwg MHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhE MSwgMHhEQSwKKysgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4 ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCisrICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAw eENELCAweDU3LCAweEMwLCAweDdBCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBrYXRfUlNBX1NIQTM4NFtdID0geworKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywg MHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKKysgIDB4RDIsIDB4OTEs IDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4 QzcsCisrICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAw eENBLCAweEZBLCAweDVELCAweDVDLAorKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwg MHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKKysgIDB4NjUsIDB4M0Us IDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4 Q0YsCisrICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAw eDE5LCAweDJCLCAweDMwLCAweEMyLAorKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0Niwg MHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKKysgIDB4RkYsIDB4OTUs IDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4 Q0QsCisrICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAw eEQwLCAweDhGLCAweDk5LCAweEYxLAorKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwg MHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKKysgIDB4QkQsIDB4MzEs IDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKKyt9OworKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7CisrICAweDY5LCAweDUyLCAweDFC LCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAor KyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwg MHhGOCwgMHhCMiwgMHg5QSwKKysgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIs IDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCisrICAweDA0LCAweEMxLCAweDVB LCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAor KyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwg MHg1MywgMHg2MiwgMHhCNSwKKysgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIs IDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCisrICAweEFGLCAweDYyLCAweDdD LCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAor KyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwg MHg2MywgMHg4NCwgMHgwNSwKKysgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4Rjcs IDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCisrICAweDNFLCAweDYyLCAweENF LCAweEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAor KyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAorK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKKysg IDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4 NDUsIDB4NEQsIDB4REYsCisrICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAw eDJGLCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAorKyAgMHg4MCwgMHhBNCwgMHhGMSwg MHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKKysg IDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4 RUUsIDB4QTksIDB4OTcsCisrICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAw eDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAorKyAgMHg1MywgMHgxNSwgMHhGNywg MHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKKysg IDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4 MEMsIDB4NTksIDB4RDcsCisrICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAw eDAzLCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAorKyAgMHg0OCwgMHhBRiwgMHg4Miwg MHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKKysg IDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4 MUMsIDB4QjMsIDB4NjcsCisrICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAw eDdELCAweDQ5CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5 MzFfU0hBMjU2W10gPSB7CisrICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAw eDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAorKyAgMHhFNSwgMHg1MiwgMHgxNSwg MHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKKysg IDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4 OTUsIDB4NzMsIDB4Q0YsCisrICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAw eDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAorKyAgMHhDNiwgMHg1MywgMHg4OCwg MHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKKysg IDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4 MzgsIDB4MEUsIDB4OTgsCisrICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAw eEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAorKyAgMHg3RSwgMHg3NSwgMHg4OSwg MHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKKysg IDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4 QTEsIDB4NDIsIDB4QkQsCisrICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAw eDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAorKyAgMHhFMywgMHhFMiwgMHhFOCwg MHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0geworKyAgMHg1QywgMHg3RCwgMHg5Niwg MHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKKysg IDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4 MzksIDB4MzcsIDB4Q0IsCisrICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAw eDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAorKyAgMHhFRiwgMHg3OCwgMHg4Mywg MHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKKysg IDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4 NjYsIDB4RUUsIDB4MzEsCisrICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAw eDdCLCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAorKyAgMHgzRSwgMHg5QywgMHgzNSwg MHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKKysg IDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4 RDUsIDB4N0MsIDB4RkYsCisrICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAw eEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAorKyAgMHhFRiwgMHgwMSwgMHhFNiwg MHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKKysg IDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKKyt9OworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKKysg IDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4 M0EsIDB4QzEsIDB4NjMsCisrICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAw eERELCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAorKyAgMHhFNywgMHg0NywgMHgwOSwg MHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKKysg IDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4 RjksIDB4MTQsIDB4MjgsCisrICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAw eEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAorKyAgMHg2RSwgMHgyQiwgMHg3OSwg MHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKKysg IDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4 RTAsIDB4RjYsIDB4RDAsCisrICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAw eEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAorKyAgMHg5RiwgMHgwOSwgMHhDQSwg MHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKKysg IDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4 MzAsIDB4NzEsIDB4MUIsCisrICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAw eDU5LCAweEMzCisrfTsKKysKKysKKytpbnQgRklQU19zZWxmdGVzdF9yc2EoKQorKwl7CisrCWlu dCByZXQgPSAwOworKwlSU0EgKmtleTsKKysJRVZQX1BLRVkgKnBrID0gTlVMTDsKKysKKysJaWYg KChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCXNldHJzYWtleShrZXkp OworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisr CUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7CisrCisrCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNB X1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAorKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCisrCQlnb3RvIGVycjsK KysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAor KwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0Eg U0hBMjI0IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NI QTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKKysJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4 NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJ IlJTQSBTSEEzODQgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9S U0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAorKwkJCQlFVlBfc2hhNTEyKCksIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQorKwkJ Z290byBlcnI7CisrCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0 X1JTQV9QU1NfU0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNT LAorKwkJCQkiUlNBIFNIQTEgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWth dF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCisrCQkJCUVWUF9z aGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMjI0IFBTUyIp KQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVv ZihrYXRfUlNBX1BTU19TSEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwK KysJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBT SEEzODQgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NI QTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQorKwkJZ290byBl cnI7CisrCisrCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JT QV9YOTMxX1NIQTEpLAorKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwK KysJCQkiUlNBIFNIQTEgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCS8qIE5COiBTSEEyMjQgbm90 IHN1cHBvcnRlZCBpbiBYOS4zMSAqLworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMjU2 LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCisrCQkJRVZQX3NoYTI1NigpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQorKwkJZ290byBlcnI7 CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFf U0hBMzg0KSwKKysJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJ CQkiUlNBIFNIQTM4NCBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JT QV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAorKwkJCUVWUF9zaGE1 MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkK KysJCWdvdG8gZXJyOworKworKworKwlyZXQgPSAxOworKworKwllcnI6CisrCWlmIChwaykKKysJ CUVWUF9QS0VZX2ZyZWUocGspOworKwllbHNlIGlmIChrZXkpCisrCQlSU0FfZnJlZShrZXkpOwor KwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcyBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCistLS0gb3BlbnNzbC0x LjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTMtMDItMTkgMTI6NDc6 MzMuNzQyMTE4OTM1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19y c2FfeDkzMWcuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MjExODkzNSArMDEwMAorQEAgLTAsMCAr MSwyODIgQEAKKysvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLworKy8qIENvcHlyaWdodCAoQykg MTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9u IHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhl IGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2Fw ZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFu ZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5 IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBS U0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAg VGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlv biBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0 IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAq IENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdo dCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElm IHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUg Z2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUg bGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBt ZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGlu ZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYg dGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBj cnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5k b3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAg IHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBh biBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK KysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBk aXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9y CisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRo aXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhl ciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGlj ZW5jZS5dCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2V4dGVybiBpbnQgZmlw c19jaGVja19yc2EoUlNBICpyc2EpOworKyNlbmRpZgorKworKy8qIFg5LjMxIFJTQSBrZXkgZGVy aXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLworKworK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNB ICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCisr CQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhw LAorKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVN ICpYcSwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlCSUdOVU0g KnIwPU5VTEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEw7CisrCUJOX0NUWCAqY3R4PU5VTEws KmN0eDI9TlVMTDsKKysKKysJaWYgKCFyc2EpIAorKwkJZ290byBlcnI7CisrCisrCWN0eCA9IEJO X0NUWF9uZXcoKTsKKysJaWYgKCFjdHgpIAorKwkJZ290byBlcnI7CisrCUJOX0NUWF9zdGFydChj dHgpOworKworKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjEgPSBCTl9DVFhfZ2V0KGN0eCk7 CisrCXIyID0gQk5fQ1RYX2dldChjdHgpOworKwlyMyA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJ aWYgKHIzID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFyc2EtPmUpCisrCQl7CisrCQly c2EtPmUgPSBCTl9kdXAoZSk7CisrCQlpZiAoIXJzYS0+ZSkKKysJCQlnb3RvIGVycjsKKysJCX0K KysJZWxzZQorKwkJZSA9IHJzYS0+ZTsKKysKKysJLyogSWYgbm90IGFsbCBwYXJhbWV0ZXJzIHBy ZXNlbnQgb25seSBjYWxjdWxhdGUgd2hhdCB3ZSBjYW4uCisrCSAqIFRoaXMgYWxsb3dzIHRlc3Qg cHJvZ3JhbXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgorKwkgKi8KKysKKysJaWYg KFhwICYmICFyc2EtPnApCisrCQl7CisrCQlyc2EtPnAgPSBCTl9uZXcoKTsKKysJCWlmICghcnNh LT5wKQorKwkJCWdvdG8gZXJyOworKworKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChy c2EtPnAsIHAxLCBwMiwKKysJCQkJCVhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCisrCQkJZ290 byBlcnI7CisrCQl9CisrCisrCWlmIChYcSAmJiAhcnNhLT5xKQorKwkJeworKwkJcnNhLT5xID0g Qk5fbmV3KCk7CisrCQlpZiAoIXJzYS0+cSkKKysJCQlnb3RvIGVycjsKKysJCWlmICghQk5fWDkz MV9kZXJpdmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIsCisrCQkJCQlYcSwgWHExLCBYcTIsIGUs IGN0eCwgY2IpKQorKwkJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIXJzYS0+cCB8fCAhcnNh LT5xKQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJ CXJldHVybiAyOworKwkJfQorKworKwkvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUgc2V0IHdlIGNh biBub3cgY2FsY3VsYXRlIGFsbCByZW1haW5pbmcgCisrCSAqIGNvbXBvbmVudHMuCisrCSAqLwor KworKwkvKiBjYWxjdWxhdGUgbiAqLworKwlyc2EtPm49Qk5fbmV3KCk7CisrCWlmIChyc2EtPm4g PT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJzYS0+ cSxjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBkICovCisrCWlmICghQk5f c3ViKHIxLHJzYS0+cCxCTl92YWx1ZV9vbmUoKSkpCisrCQlnb3RvIGVycjsJLyogcC0xICovCisr CWlmICghQk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUoKSkpCisrCQlnb3RvIGVycjsJLyog cS0xICovCisrCWlmICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpCisrCQlnb3RvIGVycjsJLyogKHAt MSkocS0xKSAqLworKworKwlpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQorKwkJZ290byBl cnI7CisrCisrCWlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCisrCQlnb3RvIGVy cjsJLyogTENNKChwLTEpKHEtMSkpICovCisrCisrCWN0eDIgPSBCTl9DVFhfbmV3KCk7CisrCWlm ICghY3R4MikKKysJCWdvdG8gZXJyOworKworKwlyc2EtPmQ9Qk5fbW9kX2ludmVyc2UoTlVMTCxy c2EtPmUscjAsY3R4Mik7CS8qIGQgKi8KKysJaWYgKHJzYS0+ZCA9PSBOVUxMKQorKwkJZ290byBl cnI7CisrCisrCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLworKwlyc2EtPmRtcDE9Qk5fbmV3 KCk7CisrCWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIUJOX21v ZChyc2EtPmRtcDEscnNhLT5kLHIxLGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3Vs YXRlIGQgbW9kIChxLTEpICovCisrCXJzYS0+ZG1xMT1CTl9uZXcoKTsKKysJaWYgKHJzYS0+ZG1x MSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxyc2EtPmQs cjIsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1v ZCBwICovCisrCXJzYS0+aXFtcD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+cSxyc2EtPnAsY3R4 Mik7CisrCisrCWVycjoKKysJaWYgKGN0eCkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJ CUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCWlmIChjdHgyKQorKwkJQk5fQ1RYX2ZyZWUoY3R4 Mik7CisrCS8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxscyBzdWNjZXNzZnVsICovCisrCWlmIChy c2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7Cisr CisrCX0KKysKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0 cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IG9rID0gMDsKKysJ QklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7CisrCUJOX0NUWCAqY3R4ID0gTlVMTDsKKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19OT05fRklQU19BTExPVykgJiYgCisrCQkoYml0cyA8IE9QRU5TU0xfUlNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUUykpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkgICAgcmV0dXJu IDA7CisrCSAgICB9CisrCisrCWlmIChiaXRzICYgMHhmZikKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVO R1RIKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVf S0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJ ICAgIH0KKysjZW5kaWYKKysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkKKysJ CWdvdG8gZXJyb3I7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlYcCA9IEJOX0NUWF9nZXQo Y3R4KTsKKysJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9Y cHEoWHAsIFhxLCBiaXRzLCBjdHgpKQorKwkJZ290byBlcnJvcjsKKysKKysJcnNhLT5wID0gQk5f bmV3KCk7CisrCXJzYS0+cSA9IEJOX25ldygpOworKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQor KwkJZ290byBlcnJvcjsKKysKKysJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAq LworKworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBYcCwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysK KysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgWHEsCisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8q IFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRl cml2ZQorKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCisrCSAqLworKworKwlpZiAoIVJT QV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCU5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKKysJCWdvdG8gZXJyb3I7Cisr CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJICAg IGdvdG8gZXJyb3I7CisrI2VuZGlmCisrCisrCW9rID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChj dHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJ fQorKworKwlpZiAob2spCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCistLS0gb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzCTIwMTMtMDIt MTkgMTI6NDc6MzMuNzQyMTE4OTM1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2Zp cHMvZmlwc19zaGFfc2VsZnRlc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MjExODkzNSArMDEw MAorQEAgLTAsMCArMSwxNDAgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq 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 KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYwXT0KKysgICAgeworKyAgICAi IiwKKysgICAgImFiYyIsCisrICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lq a2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKKysgICAgfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09CisrICAgIHsKKysgICAgeyAweGRhLDB4 MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1LAorKyAgICAgIDB4YmYs MHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4MDkgfSwKKysgICAgeyAw eGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhiYSwweDNlLAorKyAgICAg IDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCwweGQ4LDB4OWQgfSwKKysg ICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4NmUsMHhiYSwweGFlLAor KyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUsMHg0NiwweDcwLDB4ZjEg fSwKKysgICAgfTsKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRfc2hhOworKworK3ZvaWQgRklQU19j b3JydXB0X3NoYTEoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfc2hhID0gMTsKKysgICAgfQorKwor K2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICBm b3Iobj0wIDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3RbMF0pIDsgKytuKQorKwl7CisrCXVu c2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKworKwlFVlBfRGlnZXN0KHRlc3Rb bl0sc3RybGVuKHRlc3Rbbl0pK2NvcnJ1cHRfc2hhLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxM KTsKKysJaWYobWVtY21wKG1kLHJldFtuXSxzaXplb2YgbWQpKQorKwkgICAgeworKwkgICAgRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwor KwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCX0KKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhMjU2W10gPSB7IDB4ZmEsIDB4NDgs IDB4NTksIDB4MmEsIDB4ZTEsIDB4YWUsIDB4MWYsIDB4MzAsCisrCQkJCQkgICAgMHhmYyB9Owor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGEyNTZbXSA9IHsgMHhmNywgMHgyNiwg MHhkOCwgMHg5OCwgMHg0NywgMHg5MSwgMHg2OCwgMHg1YiwKKysJCQkJCSAgICAweDllLCAweDM5 LCAweGIyLCAweDU4LCAweGJiLCAweDc1LCAweGJmLCAweDAxLAorKwkJCQkJICAgIDB4MTcsIDB4 MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2EsIDB4OTQsIDB4ODMsCisrCQkJCQkgICAgMHhmMywg MHgwYiwgMHgxNSwgMHg4NCwgMHg0YiwgMHg2OSwgMHg4OCwgMHg4YSB9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJbXSA9IHsgMHgzNywgMHhkMSwgMHgzNSwgMHg5 ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhiNywKKysJCQkJCSAgICAweDZkLCAweDlhLCAweDEzLCAw eGRhLCAweDVmLCAweGYzLCAweGJkIH07Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGln X3NoYTUxMltdID0geyAweDExLCAweDEzLCAweGM0LCAweDE5LCAweGVkLCAweDJiLCAweDFkLCAw eDE2LAorKwkJCQkJICAgIDB4MTEsIDB4ZWIsIDB4OWIsIDB4YmUsIDB4ZjAsIDB4N2YsIDB4Y2Ys IDB4NDQsCisrCQkJCQkgICAgMHg4YiwgMHhkNywgMHg1NywgMHhiZCwgMHg4ZCwgMHhhOSwgMHgy NSwgMHhiMCwKKysJCQkJCSAgICAweDQ3LCAweDI1LCAweGQ2LCAweDZjLCAweDlhLCAweDU0LCAw eDdmLCAweDhmLAorKwkJCQkJICAgIDB4MGIsIDB4NTMsIDB4MWEsIDB4MTAsIDB4NjgsIDB4MzIs IDB4MDMsIDB4MzgsCisrCQkJCQkgICAgMHg4MiwgMHhjNCwgMHg4NywgMHhjNCwgMHhlYSwgMHgw ZSwgMHhkMSwgMHgwNCwKKysJCQkJCSAgICAweGE5LCAweDk4LCAweGMxLCAweDA1LCAweGEzLCAw eGYzLCAweGY4LCAweGIxLAorKwkJCQkJICAgIDB4YWYsIDB4YmMsIDB4ZDksIDB4NzgsIDB4N2Us IDB4ZWUsIDB4M2QsIDB4NDMgfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpCisr CXsKKysJdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07CisrCisrCUVWUF9E aWdlc3QobXNnX3NoYTI1Niwgc2l6ZW9mKG1zZ19zaGEyNTYpLCBtZCwgTlVMTCwgRVZQX3NoYTI1 NigpLCBOVUxMKTsKKysJaWYobWVtY21wKGRpZ19zaGEyNTYsIG1kLCBzaXplb2YoZGlnX3NoYTI1 NikpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJRVZQX0RpZ2VzdChtc2dfc2hh NTEyLCBzaXplb2YobXNnX3NoYTUxMiksIG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpOwor KwlpZihtZW1jbXAoZGlnX3NoYTUxMiwgbWQsIHNpemVvZihkaWdfc2hhNTEyKSkpCisrCQl7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK KysJCXJldHVybiAwOworKwkJfQorKworKwlyZXR1cm4gMTsKKysJfQorKworKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYy5m aXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMKKy0t LSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMJ MjAxMy0wMi0xOSAxMjo0NzozMy43NDIxMTg5MzUgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQy MTE4OTM1ICswMTAwCitAQCAtMCwwICsxLDE4MCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 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 LworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9zaGEuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrCisrI2lmbmRl ZiBGSVBTQ0FOSVNURVJfTworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsgcmV0dXJuIDA7 IH0KKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQorK3ZvaWQgT1BFTlNTTF9jbGVhbnNl KHZvaWQgKnAsc2l6ZV90IGxlbikge30KKysjZW5kaWYKKysKKysjaWYJZGVmaW5lZChfX2kzODYp ICAgfHwgZGVmaW5lZChfX2kzODZfXykgICB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IFwKKysJZGVm aW5lZChfX0lOVEVMX18pIHx8IFwKKysJZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4 Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkKKysKKyt1bnNp Z25lZCBpbnQgIE9QRU5TU0xfaWEzMmNhcF9QWzJdOworKyNlbmRpZgorKworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysKKytzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBMjU2X0NUWCAqbWRfY3R4LFNI QTI1Nl9DVFggKm9fY3R4LAorKwkJICAgICAgY29uc3QgY2hhciAqa2V5KQorKyAgICB7CisrICAg IHNpemVfdCBsZW49c3RybGVuKGtleSk7CisrICAgIGludCBpOworKyAgICB1bnNpZ25lZCBjaGFy IGtleW1kW0hNQUNfTUFYX01EX0NCTE9DS107CisrICAgIHVuc2lnbmVkIGNoYXIgcGFkW0hNQUNf TUFYX01EX0NCTE9DS107CisrCisrICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NLKQorKwl7CisrCVNI QTI1Nl9Jbml0KG1kX2N0eCk7CisrCVNIQTI1Nl9VcGRhdGUobWRfY3R4LGtleSxsZW4pOworKwlT SEEyNTZfRmluYWwoa2V5bWQsbWRfY3R4KTsKKysJbGVuPVNIQTI1Nl9ESUdFU1RfTEVOR1RIOwor Kwl9CisrICAgIGVsc2UKKysJbWVtY3B5KGtleW1kLGtleSxsZW4pOworKyAgICBtZW1zZXQoJmtl eW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9DQkxPQ0stbGVuKTsKKysKKysgICAgZm9yKGk9MCA7 IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDM2XmtleW1kW2ldOwor KyAgICBTSEEyNTZfSW5pdChtZF9jdHgpOworKyAgICBTSEEyNTZfVXBkYXRlKG1kX2N0eCxwYWQs U0hBMjU2X0NCTE9DSyk7CisrCisrICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NL IDsgaSsrKQorKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKKysgICAgU0hBMjU2X0luaXQob19jdHgp OworKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LHBhZCxTSEEyNTZfQ0JMT0NLKTsKKysgICAgfQor KworK3N0YXRpYyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAqbWQsU0hBMjU2X0NUWCAq bWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVm W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgU0hBMjU2X0ZpbmFsKGJ1ZixtZF9jdHgp OworKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LGJ1ZixzaXplb2YgYnVmKTsKKysgICAgU0hBMjU2 X0ZpbmFsKG1kLG9fY3R4KTsKKysgICAgfQorKworKyNlbmRpZgorKworK2ludCBtYWluKGludCBh cmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBzdGF0 aWMgY2hhciBrZXlbXT0ib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOworKyAgICBp bnQgbixiaW5hcnk9MDsKKysKKysgICAgaWYoYXJnYyA8IDIpCisrCXsKKysJZnByaW50ZihzdGRl cnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKworKyAgICBu PTE7CisrICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sIi1iaW5hcnkiKSkKKysJeworKwluKys7Cisr CWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmludC4uLiAqLworKwl9CisrCisrICAg IGZvcig7IG4gPCBhcmdjIDsgKytuKQorKwl7CisrCUZJTEUgKmY9Zm9wZW4oYXJndltuXSwicmIi KTsKKysJU0hBMjU2X0NUWCBtZF9jdHgsb19jdHg7CisrCXVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2 X0RJR0VTVF9MRU5HVEhdOworKwlpbnQgaTsKKysKKysJaWYoIWYpCisrCSAgICB7CisrCSAgICBw ZXJyb3IoYXJndltuXSk7CisrCSAgICBleGl0KDIpOworKwkgICAgfQorKworKwlobWFjX2luaXQo Jm1kX2N0eCwmb19jdHgsa2V5KTsKKysJZm9yKCA7IDsgKQorKwkgICAgeworKwkgICAgY2hhciBi dWZbMTAyNF07CisrCSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxzaXplb2YgYnVmLGYpOworKwor KwkgICAgaWYobCA9PSAwKQorKwkJeworKwkJaWYoZmVycm9yKGYpKQorKwkJICAgIHsKKysJCSAg ICBwZXJyb3IoYXJndltuXSk7CisrCQkgICAgZXhpdCgzKTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgYnJlYWs7CisrCQl9CisrCSAgICBTSEEyNTZfVXBkYXRlKCZtZF9jdHgsYnVmLGwpOwor KwkgICAgfQorKwlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9fY3R4KTsKKysKKysJaWYgKGJpbmFy eSkKKysJICAgIHsKKysJICAgIGZ3cml0ZShtZCxTSEEyNTZfRElHRVNUX0xFTkdUSCwxLHN0ZG91 dCk7CisrCSAgICBicmVhazsJLyogLi4uIGZvciBzaW5nbGUoISkgZmlsZSAqLworKwkgICAgfQor KworKy8qCXByaW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsgKi8KKysJZm9yKGk9MCA7 IGkgPCBTSEEyNTZfRElHRVNUX0xFTkdUSCA7ICsraSkKKysJICAgIHByaW50ZigiJTAyeCIsbWRb aV0pOworKwlwcmludGYoIlxuIik7CisrCX0KKysjZW5kaWYKKysgICAgcmV0dXJuIDA7CisrICAg IH0KKysKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9z dWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMK Ky0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzCTIw MTMtMDItMTkgMTI6NDc6MzMuNzQzMTE4OTU1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMJMjAxMy0wMi0xOSAxMjo0NzozMy43NDMxMTg5NTUg KzAxMDAKK0BAIC0wLDAgKzEsNTg4IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKgorKyAqIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJpdmVyIGZvciB0 aGUgRklQUy0xNDAgdGVzdGluZworKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQwIHZhbGlkYXRp b24uICBJdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUKKysgKiBPcGVuU1NMIGxpYnJhcnkg aXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGljCisrICogZnVuY3Rp b25zLiAgQSBwb3dlci11cCBzZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRlbGliZXJhdGVs eQorKyAqIHBvaW50aW5nIHRvIGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNoCisrICoKKysgKiBD b250cmlidXRlZCBieSBTdGV2ZSBNYXJxdWVzcy4KKysgKgorKyAqLworKyNpbmNsdWRlIDxzdGRp by5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Fl cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKwor KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKysgICAgeworKyAgICBwcmludGYoIk5vIEZJ UFMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKysgICAgfQorKyNlbHNlCisrCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKy8qIEFF UzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0 Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKKysqLworK3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2 b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzE2XTsKKysJ dW5zaWduZWQgY2hhciBjaXRtcFsxNl07CisrCXVuc2lnbmVkIGNoYXIga2V5WzE2XSA9IHsgMSwy LDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTZ9OworKwl1bnNpZ25lZCBjaGFyIHBs YWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJ RVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgs IEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJCWdvdG8gZXJy OworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDE2KTsKKysJaWYgKEVWUF9D aXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkg PD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYp OworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKKysJCWdvdG8gZXJyOworKwly ZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCXJldHVy biByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZvaWQpCisrCXsKKysJ aW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbOF07CisrCXVuc2lnbmVkIGNoYXIg Y2l0bXBbOF07CisrICAgIAl1bnNpZ25lZCBjaGFyIGtleVtdID0geyAxLDIsMyw0LDUsNiw3LDgs OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwKKysJCSAgICAgICAgICAgICAgMTksMjAsMjEs MjIsMjMsMjR9OworKyAgICAJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcs ICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKKysJRVZQX0NJUEhFUl9DVFggY3R4Owor KwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0 eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJCWdvdG8g ZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgpOworKwlpZiAoRVZQ X0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwg MCkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwg OCk7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJ cmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlyZXR1 cm4gcmV0OworKwl9CisrCisrLyoKKysgKiBEU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZl cmlmeSBpbnB1dCBwbGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGlu dCBiYWQpCisrICAgIHsKKysgICAgRFNBICpkc2EgPSBOVUxMOworKyAgICBFVlBfUEtFWSBwazsK KysgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWdu ZWQgY2hhciBidWZbNjBdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgaW50IHIgPSAw OworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrICAgIGlm ICghZHNhKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChkc2EsIDEwMjQsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlm ICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKGJhZCkKKysJ ICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7CisrCisrICAgIHBrLnR5cGUgPSBFVlBf UEtFWV9EU0E7CisrICAgIHBrLnBrZXkuZHNhID0gZHNhOworKworKyAgICBpZiAoIUVWUF9TaWdu SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAo IUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJZ290byBl bmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJ Z290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3Mx KCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4 LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVy aWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBFVlBfTURf Q1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAoZHNhKQorKyAgCSAgRFNBX2ZyZWUoZHNhKTsK KysgICAgaWYgKHIgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9Cisr CisrLyoKKysgKiBSU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFp bnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCisrICAgIHsK KysgICAgUlNBICprZXk7CisrICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFv bnJpc2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworKyAgICB1bnNpZ25lZCBp bnQgc2xlbjsKKysgICAgQklHTlVNICpibjsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBF VlBfUEtFWSBwazsKKysgICAgaW50IHIgPSAwOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAga2V5ID0gUlNBX25ldygpOworKyAg ICBibiA9IEJOX25ldygpOworKyAgICBpZiAoIWtleSB8fCAhYm4pCisrCXJldHVybiAwOworKyAg ICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgo a2V5LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgQk5fZnJlZShibik7CisrICAg IGlmIChiYWQpCisrCSAgICBCTl9hZGRfd29yZChrZXktPm4sIDEpOworKworKyAgICBway50eXBl ID0gRVZQX1BLRVlfUlNBOworKyAgICBway5wa2V5LnJzYSA9IGtleTsKKysKKysgICAgaWYgKCFF VlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysg ICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9w dGV4dCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwg YnVmLCAmc2xlbiwgJnBrKSkKKysJZ290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUlu aXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFF VlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAt IDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBz bGVuLCAmcGspOworKyAgICBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Cisr ICAgIGlmIChrZXkpCisrICAJICAgIFJTQV9mcmVlKGtleSk7CisrICAgIGlmIChyICE9IDEpCisr CXJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTE6IGdlbmVyYXRl IGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJl Y29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkK KysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQor KyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhl LCAweDY1LCAweGQ0LCAweDlhLCAweDM4LCAweDBjLCAweDhiLCAweDFlLCAweDJjLCAweGU4LCAw eGIzLCAweGM1LCAweDE4IH07CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNo ZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKworKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3Ry KSAtIDEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1l bWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0 dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGln ZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBo YXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQorKyAgICB7CisrICAgIHVu c2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweGY1LCAweDUz LCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMsIDB4YzksIDB4 NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCisrCSAweDYsIDB4ZWMsIDB4OGUsIDB4MTEsIDB4 OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsIDB4NTAsIDB4NGYs IDB4NDcsIDB4NTd9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwor KworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAg RVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikg LSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1l bWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0 dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGln ZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBo YXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVu c2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweDk5LCAweGM5 LCAweGU5LCAweDViLCAweDg4LCAweGQ0LCAweDc4LCAweDg4LCAweGRmLCAweDg4LCAweDVmLCAw eDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAorKwkgMHgxNiwgMHgxZiwgMHgzZCwgMHhmNCwg MHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhiMiwgMHhkMCwgMHhlNywgMHgw YiwgMHg5NCwgMHg0YSwKKysJIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAsIDB4MDYsIDB4 ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDksIDB4NDAsIDB4MjIs CisrCSAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAweDIyLCAweDlkLCAweDI3LCAweGZlLCAweGJk LCAweGQ2LCAweGQ2LCAweGViLCAweDJkLCAweDQyLCAweDFkLCAweGEzfTsKKysgICAgdW5zaWdu ZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtT SEE1MTJfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBp ZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTUxMigp LCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkp KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1B Qy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBG SVBTX2htYWNfc2hhMV90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0g ImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwor KyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3MywgMHhm NywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhlYSwgMHhlYSwg MHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKKysJIDB4YjIsIDB4ZmIsIDB4ZWMsIDB4YzZ9 OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNp Z25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFI TUFDKEVWUF9zaGExKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0 bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTIy NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25v d24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19o bWFjX3NoYTIyNF90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0 YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAg ICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3NSwgMHg1OCwg MHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhmZiwgMHhiZSwgMHgx YywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKKysJIDB4ZTUsIDB4NjIsIDB4NDksIDB4YjYsIDB4 OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9OworKworKyAgICB1 bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0 bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGEy MjQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1 cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBMjU2OiBnZW5lcmF0 ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHBy ZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjU2 X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7 CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVk IGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGU5LCAweDE3LCAweGMxLCAweDdi LCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LCAweDAyLCAweGY1LCAw eDcyLCAweDMzLCAweDg3LAorKwkgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3ZSwgMHhhOCwg MHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhkYSwgMHgyNCwgMHhm NH07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVu c2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAo IUhNQUMoRVZQX3NoYTI1NigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQs Jm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQor KyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1T SEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRv IGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJ UFNfaG1hY19zaGEzODRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9 ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsK KysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4YjIsIDB4 OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMsIDB4MDgs IDB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCisrCSAweGUyLCAweGRmLCAweGY4LCAweGZm LCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAweDFiLCAweGFjLCAweGIwLCAw eDA3LCAweDM5LCAweDA4LAorKwkgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3NiwgMHhkNiwg MHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5YiwgMHg4OCwgMHgx Y307CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVu c2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAo IUhNQUMoRVZQX3NoYTM4NCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQs Jm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQor KyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1T SEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRv IGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJ UFNfaG1hY19zaGE1MTJfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9 ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsK KysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4Y2QsIDB4 M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4YWYsIDB4ZjMs IDB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCisrCSAweGY3LCAweGQxLCAweDUxLCAweDk2 LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLCAweGFkLCAweDdlLCAw eDI0LCAweGNhLCAweGIxLAorKwkgMHhkNywgMHg3OSwgMHgwYSwgMHhhNSwgMHhlYSwgMHgyYywg MHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5 YywKKysJIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4 NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9OworKworKyAgICB1 bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0 bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGE1 MTIoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1 cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKworKy8qIERIOiBnZW5lcmF0ZSBzaGFy ZWQgcGFyYW1ldGVycworKyovCisrc3RhdGljIGludCBkaF90ZXN0KCkKKysgICAgeworKyAgICBE SCAqZGg7CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7 CisrICAgIGlmICghZGgpCisrCXJldHVybiAwOworKyAgICBpZiAoIURIX2dlbmVyYXRlX3BhcmFt ZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgRklQU19kaF9m cmVlKGRoKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBaZXJvaXplCisrKi8KKytz dGF0aWMgaW50IFplcm9pemUoKQorKyAgICB7CisrICAgIFJTQSAqa2V5OworKyAgICBCSUdOVU0g KmJuOworKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0gCisrCXsgMHg0OCwgMHg1MCwg MHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0NywgMHg3ZiwgMHg4 MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OworKyAgICBpbnQgaSwgbjsKKysKKysgICAga2V5 ID0gRklQU19yc2FfbmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8 ICFibikKKysJcmV0dXJuIDA7CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlm ICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVybiAwOwor KyAgICBCTl9mcmVlKGJuKTsKKysgICAgCisrICAgIG4gPSBCTl9udW1fYnl0ZXMoa2V5LT5kKTsK KysgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5XG4iLCBuKTsK KysgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9f Ym5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKyAgICBCTl9yYW5kKGtleS0+ZCxuKjgsLTEsMCk7 CisrICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9f Ym5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKworKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIg a2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNp emVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAg IHByaW50ZigiXG4iKTsKKysgICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7 CisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRc dCIpOworKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIl MDJ4IiwgdXNlcmtleVtpXSk7CisrICAgICAgICBwcmludGYoIlxuIik7CisrCisrICAgIHJldHVy biAxOworKyAgICB9CisrCisrc3RhdGljIGludCBFcnJvcjsKKytjb25zdCBjaGFyICogRmFpbChj b25zdCBjaGFyICptc2cpCisrICAgIHsKKysgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgIEVy cm9yKys7CisrICAgIHJldHVybiBtc2c7IAorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2Ms Y2hhciAqKmFyZ3YpCisrICAgIHsKKysKKysgICAgaW50IGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9 IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7CisrICAgIGludCBiYWRfcnNhID0gMCwgYmFk X2RzYSA9IDA7CisrICAgIGludCBkb19ybmdfc3RpY2sgPSAwOworKyAgICBpbnQgbm9fZXhpdCA9 IDA7CisrCisrICAgIHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlvblxuXG4iKTsK KysKKysgICAgLyogTG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYgYW55ICovCisr ICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAyNCk7CisrCisrICAgIGlmIChhcmd2WzFdKSB7 CisrICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCisrICAgICAgICBpZiAoIXN0cmNt cChhcmd2WzFdLCAiYWVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfYWVzKCk7Cisr ICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVw dGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRl cyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2RlcygpOworKyAgICAgICAgICAgIHBy aW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4u LlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYSIpKSB7Cisr ICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgpOworKyAgICAgICAgICAgIHByaW50ZigiRFNB IGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBL QVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkg eworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2EoKTsKKysgICAgICAgICAgICBwcmludGYo IlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0 ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNh a2V5IikpIHsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2ln bmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9y c2EgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgInJzYWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAx OworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVy YXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxu Iik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleSIpKSB7Cisr ICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxp ZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7CisrCSAgICBiYWRfZHNhID0gMTsKKysJ ICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJk c2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsKKysJICAgIG5v X2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOworKyAgICAg ICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikpIHsKKysgICAgICAgICAgICBG SVBTX2NvcnJ1cHRfc2hhMSgpOworKyAgICAgICAgICAgIHByaW50ZigiU0hBLTEgaGFzaCB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJu ZyIpKSB7CisrCSAgICBGSVBTX2NvcnJ1cHRfcm5nKCk7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChh cmd2WzFdLCAicm5nc3RpY2siKSkgeworKwkgICAgZG9fcm5nX3N0aWNrID0gMTsKKysJICAgIG5v X2V4aXQgPSAxOworKwkgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNvbnRpbnVvdXMg dGVzdC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIHByaW50ZigiQmFk IGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7CisrICAgICAgICAgICAgZXhpdCgxKTsKKysg ICAgICAgIH0KKysJaWYgKCFub19leGl0KSB7CisrICAgICAgICAJaWYgKCFGSVBTX21vZGVfc2V0 KDEpKSB7CisrIAkJICAgIGRvX3ByaW50X2Vycm9ycygpOworKyAgICAgICAgCSAgICBwcmludGYo IlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9Cisr ICAgICAgICAJcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7CisrICAg ICAgICAJZXhpdCgwKTsKKysJfQorKyAgICB9CisrCisrICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlw dG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjEuIE5vbi1BcHByb3Zl ZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEu IEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFBvd2Vy LXVwIHNlbGYgdGVzdAorKyAgICAqLworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgcHJp bnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7CisrICAgIGlmICghRklQ U19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAgIHByaW50 ZihGYWlsKCJGQUlMRUQhXG4iKSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgcHJpbnRmKCJzdWNj ZXNzZnVsXG4iKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikKKysgICAgICAgICAg ICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOworKyAgICBpZiAoZG9fY29ycnVwdF9yc2Ffa2V5 Z2VuKQorKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChk b19ybmdfc3RpY2spCisrICAgICAgICAgICAgRklQU19ybmdfc3RpY2soKTsKKysKKysgICAgLyog QUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjMuIEFFUyBl bmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2Flc190ZXN0KCkg PyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBSU0Eg a2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBw cmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4u Iik7CisrICAgIHByaW50ZiggRklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9uL2Rl Y3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2RlczNfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogRFNBIGtleSBnZW5lcmF0 aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjYuIERT QSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKKysgICAgcHJp bnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBwcmludGYo IjdhLiBTSEEtMSBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGExX3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS0yNTYg aGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdiLiBTSEEtMjU2IGhhc2guLi4iKTsKKysgICAg cHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlM RUQhXG4iKSApOworKworKyAgICAvKiBTSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRm KCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGE1MTJfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1B Qy1TSEEtMSBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2QuIEhNQUMtU0hBLTEgaGFzaC4u LiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTIyNCBoYXNoCisr ICAgICovCisrICAgIHByaW50ZigiN2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4uIik7CisrICAgIHBy aW50ZiggRklQU19obWFjX3NoYTIyNF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJG QUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAorKyAgICAqLworKyAg ICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNf aG1hY19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikg KTsKKysKKysgICAgLyogSE1BQy1TSEEtMzg0IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3 Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMzg0 X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAg IC8qIEhNQUMtU0hBLTUxMiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2guIEhNQUMtU0hB LTUxMiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTUxMl90ZXN0KCkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBOb24tQXBw cm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI4LiBO b24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7CisrICAgIHBy aW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBk aF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWlsKCJmYWls ZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAgICAvKiBaZXJvaXphdGlvbgorKyAgICAqLwor KyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4uLlxuIik7CisrICAgIHByaW50ZiggWmVyb2l6 ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWlsKCJcdGZhaWxl ZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAgIHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxl dGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7CisrICAgIHJldHVybiBFcnJvciA/IDEgOiAw OworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vZmlw cy9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL01ha2VmaWxlCistLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEzLTAyLTE5IDEyOjQ3 OjMzLjc0MzExODk1NSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9maXBzL01ha2Vm aWxlCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQzMTE4OTU1ICswMTAwCitAQCAtMCwwICsxLDM0MCBA QAorKyMKKysjIE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKKysjCisrCisrRElSPQlmaXBz CisrVE9QPQkuLi8uLgorK0NDPQljYworK0lOQ0xVREVTPQorK0NGTEFHPS1nCisrTUFLRUZJTEU9 CU1ha2VmaWxlCisrQVI9CQlhciByCisrCisrQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQor KworK0dFTkVSQUw9TWFrZWZpbGUKKytURVNUPWZpcHNfdGVzdF9zdWl0ZS5jIGZpcHNfcmFuZHRl c3QuYworK0FQUFM9CisrCisrUFJPR1JBTT0gZmlwc19zdGFuZGFsb25lX2htYWMKKytFWEU9ICQo UFJPR1JBTSkkKEVYRV9FWFQpCisrCisrTElCPSQoVE9QKS9saWJjcnlwdG8uYQorK0xJQlNSQz1m aXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlwc19obWFjX3NlbGZ0ZXN0 LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAorKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNf c2hhX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZpcHNfcmFuZC5jIFwK KysgICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBmaXBzX2RyYmdfY3RyLmMgZmlwc19k cmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKKysgICAgZmlwc19kcmJnX2xpYi5jIGZpcHNf ZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX2xpYi5jIFwKKysgICAg Zmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lbmMuYyBmaXBzX21kLmMKKysKKytMSUJPQko9Zmlw c19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNfaG1hY19zZWxmdGVzdC5v IGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKKysgICAgZmlwc19yc2Ffc2VsZnRlc3QubyBmaXBzX3No YV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5vICBmaXBzX3JhbmQubyBcCisr ICAgIGZpcHNfcnNhX3g5MzFnLm8gZmlwc19wb3N0Lm8gZmlwc19kcmJnX2N0ci5vIGZpcHNfZHJi Z19oYXNoLm8gZmlwc19kcmJnX2htYWMubyBcCisrICAgIGZpcHNfZHJiZ19saWIubyBmaXBzX2Ry YmdfcmFuZC5vIGZpcHNfZHJiZ19zZWxmdGVzdC5vIGZpcHNfcmFuZF9saWIubyBcCisrICAgIGZp cHNfY21hY19zZWxmdGVzdC5vIGZpcHNfZW5jLm8gZmlwc19tZC5vCisrCisrTElCQ1JZUFRPPS1M Li4gLWxjcnlwdG8KKysKKytTUkM9ICQoTElCU1JDKSBmaXBzX3N0YW5kYWxvbmVfaG1hYy5jCisr CisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAorK0hFQURFUj0JJChFWEhFQURFUikKKysK KytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorKworK3RvcDoKKysJKGNkIC4u Ly4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQorKworK2FsbDoJ bGliIGV4ZQorKworK2xpYjoJJChMSUJPQkopCisrCSQoQVIpICQoTElCKSAkKExJQk9CSikKKysJ JChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCisrCUB0b3VjaCBsaWIKKysKKytl eGU6CSQoRVhFKQorKworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1h a2VmaWxlID4+ICQoVE9QKS9NSU5GTworKworK2xpbmtzOgorKwlAJChQRVJMKSAkKFRPUCkvdXRp bC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCisrCUAkKFBFUkwp ICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKKysJQCQoUEVSTCkgJChU T1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorKworK2luc3RhbGw6CisrCUBb IC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4K KysJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAor KwlkbyAgXAorKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRl L29wZW5zc2wvJCRpOyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRP UCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCisrCWRvbmU7CisrCisrdGFnczoKKysJY3RhZ3Mg JChTUkMpCisrCisrdGVzdHM6CisrCisrbGludDoKKysJbGludCAtRExJTlQgJChJTkNMVURFUykg JChTUkMpPmZsdWZmCisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNo b3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChNQUtFREVQRU5EKSAtLSAkKENG TEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQorKworK2Rj bGVhbjoKKysJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7 cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldworKwltdiAtZiBNYWtl ZmlsZS5uZXcgJChNQUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0gLWYgKi5vICoub2JqIGxpYiB0 YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKKysKKyskKEVYRSk6ICQoUFJP R1JBTSkubworKwlGSVBTX1NIQV9BU009IiI7IGZvciBpIGluICQoU0hBMV9BU01fT0JKKSBzaGEy NTYubzsgZG8gRklQU19TSEFfQVNNPSIkJEZJUFNfU0hBX0FTTSAuLi9zaGEvJCRpIiA7IGRvbmU7 IFwKKysJJChDQykgLW8gJEAgJChDRkxBR1MpICQoUFJPR1JBTSkubyAkJEZJUFNfU0hBX0FTTQor KworKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBp dC4KKysKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2htYWMuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3JzYS5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHMuYyBmaXBzX2xvY2wuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o CisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2Fl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfYWVzX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2Flc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Flc19zZWxmdGVzdC5jCisr Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2Rlc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK KytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o CisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK KytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgK KytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2Zp cHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNf ZGVzX3NlbGZ0ZXN0LmMKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisr Zmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX2N0 ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2Zp cHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfZHJiZ19jdHIu bzogZmlwc19kcmJnX2N0ci5jIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisr Zmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJiZ19oYXNo Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytm aXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19k cmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2Ry YmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19o YXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZp cHNfZHJiZ19oYXNoLmMKKytmaXBzX2RyYmdfaGFzaC5vOiBmaXBzX3JhbmRfbGNsLmgKKytmaXBz X2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK KytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19k cmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJn X2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaG1hYy5jCisrZmlwc19kcmJnX2htYWMubzogZmlwc19y YW5kX2xjbC5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNf ZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgK KytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAor K2ZpcHNfZHJiZ19saWIubzogZmlwc19kcmJnX2xpYi5jIGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9s Y2wuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJi Z19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5k LmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgK KytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19y YW5kLmMKKytmaXBzX2RyYmdfcmFuZC5vOiBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2RyYmdf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kcmJnX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19zZWxmdGVz dC5jCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IGZpcHNfZHJiZ19zZWxmdGVzdC5oIGZpcHNfbG9j bC5oIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19kc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rz YS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlwc19kc2Ffc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAor K2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZmlwc19kc2Ffc2VsZnRlc3QuYworK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86 IGZpcHNfbG9jbC5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19obWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfaG1hY19zZWxmdGVzdC5jCisrZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisr Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3Bvc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw c19yYW5kLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3Bv c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3Bvc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19wb3N0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5oIGZpcHNfcG9z dC5jCisrZmlwc19yYW5kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVz LmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlwc19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBz X3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwc19yYW5kLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytm aXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3Jh bmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgK KytmaXBzX3JhbmQubzogZmlwc19sb2NsLmggZmlwc19yYW5kLmMKKytmaXBzX3JhbmRfbGliLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKKytmaXBzX3JhbmRfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3JhbmRf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHNfcmFuZC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX3JhbmRfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmgKKytmaXBzX3JhbmRfbGliLm86IGZpcHNfcmFuZF9saWIuYworK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisr Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3Jh bmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcmFuZF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19yYW5kX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmRfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JhbmRfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3JhbmRfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmgKKytmaXBzX3Jh bmRfc2VsZnRlc3QubzogZmlwc19yYW5kX3NlbGZ0ZXN0LmMKKytmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNf cnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2Eu aAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlw c19yc2Ffc2VsZnRlc3QuYworK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yc2FfeDkzMWcubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o CisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcnNhX3g5 MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yc2FfeDkz MWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JzYV94OTMxZy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cnNhLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNh X3g5MzFnLmMKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2Zp cHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z aGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfc2hhX3NlbGZ0ZXN0LmMKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9obWFjL2htYWMuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9obWFjL2ht YWMuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL2htYWMvaG1hYy5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQzMTE4OTU1 ICswMTAwCitAQCAtODEsMTEgKzgxLDYgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4 LCBjb25zdCB2bworIAkJCUVWUGVycihFVlBfRl9ITUFDX0lOSVRfRVgsIEVWUF9SX0RJU0FCTEVE X0ZPUl9GSVBTKTsKKyAJCQlyZXR1cm4gMDsKKyAJCQl9CistCQkvKiBPdGhlciBhbGdvcml0aG0g YmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAorLQkJICogdmlhIEZJUFNf aG1hY19pbml0X2V4KCkuCistCQkgKi8KKy0JCWlmICghaW1wbCAmJiAhY3R4LT5pX2N0eC5lbmdp bmUpCistCQkJcmV0dXJuIEZJUFNfaG1hY19pbml0X2V4KGN0eCwga2V5LCBsZW4sIG1kLCBOVUxM KTsKKyAJCX0KKyAjZW5kaWYKKyAKK0BAIC05OSw2ICs5NCwxMyBAQCBpbnQgSE1BQ19Jbml0X2V4 KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCisgCisgCWlmIChrZXkgIT0gTlVMTCkKKyAJCXsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBF VlBfTURfRkxBR19GSVBTKQorKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwgIShjdHgtPmlfY3R4LmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVW UF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQorKwkJCWdvdG8gZXJyOworKyNlbmRpZgor IAkJcmVzZXQ9MTsKKyAJCWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOworIAkJT1BFTlNTTF9hc3Nl cnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOworQEAgLTE1NSwxMCArMTU3LDYgQEAgaW50 IEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCisgCisgaW50IEhNQUNfVXBkYXRl KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCisg CXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0 eC5lbmdpbmUpCistCQlyZXR1cm4gRklQU19obWFjX3VwZGF0ZShjdHgsIGRhdGEsIGxlbik7Cist I2VuZGlmCisgCXJldHVybiBFVlBfRGlnZXN0VXBkYXRlKCZjdHgtPm1kX2N0eCxkYXRhLGxlbik7 CisgCX0KKyAKK0BAIC0xNjYsMTAgKzE2NCw2IEBAIGludCBITUFDX0ZpbmFsKEhNQUNfQ1RYICpj dHgsIHVuc2lnbmVkIGMKKyAJeworIAl1bnNpZ25lZCBpbnQgaTsKKyAJdW5zaWduZWQgY2hhciBi dWZbRVZQX01BWF9NRF9TSVpFXTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21v ZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCistCQlyZXR1cm4gRklQU19obWFjX2ZpbmFsKGN0 eCwgbWQsIGxlbik7CistI2VuZGlmCisgCisgCWlmICghRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgt Pm1kX2N0eCxidWYsJmkpKQorIAkJZ290byBlcnI7CitAQCAtMjA5LDEzICsyMDMsNiBAQCBpbnQg SE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DCisgCisgdm9pZCBITUFDX0NUWF9j bGVhbnVwKEhNQUNfQ1RYICpjdHgpCisgCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChG SVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCistCQl7CistCQlGSVBTX2htYWNfY3R4 X2NsZWFudXAoY3R4KTsKKy0JCXJldHVybjsKKy0JCX0KKy0jZW5kaWYKKyAJRVZQX01EX0NUWF9j bGVhbnVwKCZjdHgtPmlfY3R4KTsKKyAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm9fY3R4KTsK KyAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm1kX2N0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbWQy L21kMl9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlw cwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0MzExODk1NSArMDEw MAorQEAgLTYyLDYgKzYyLDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvbWQyLmg+CisgI2luY2x1 ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorIAorIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25b XT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtMTE2LDcgKzEyMSw3IEBAIGNv bnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpCisgCQlyZXR1cm4oIm1kMihpbnQpIik7CisgCX0K KyAKKy1maXBzX21kX2luaXQoTUQyKQorK25vbmZpcHNfbWRfaW5pdChNRDIpCisgCXsKKyAJYy0+ bnVtPTA7CisgCW1lbXNldChjLT5zdGF0ZSwwLHNpemVvZiBjLT5zdGF0ZSk7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vbWQ0L21kNF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbWQ0L21kNF9k Z3N0LmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0NDEx ODk3NSArMDEwMAorQEAgLTcxLDcgKzcxLDcgQEAgY29uc3QgY2hhciBNRDRfdmVyc2lvbltdPSJN RDQiIE9QRU5TU0xfVgorICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJh ZGNmZUwKKyAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisg CistZmlwc19tZF9pbml0KE1ENCkKKytub25maXBzX21kX2luaXQoTUQ0KQorIAl7CisgCW1lbXNl dCAoYywwLHNpemVvZigqYykpOworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L21kNS9tZDVfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kNS9tZDVfZGdzdC5j LmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxMy0wMi0xOSAxMjo0NzozMy43NDQxMTg5NzUg KzAxMDAKK0BAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBP UEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVM CisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAorLWZp cHNfbWRfaW5pdChNRDUpCisrbm9uZmlwc19tZF9pbml0KE1ENSkKKyAJeworIAltZW1zZXQgKGMs MCxzaXplb2YoKmMpKTsKKyAJYy0+QT1JTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vbWRj Mi9tZGMyZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5m aXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0NDExODk3NSAr MDEwMAorQEAgLTc2LDcgKzc2LDcgQEAKKyAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChs KT4+MjRMKSYweGZmKSkKKyAKKyBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKKy1maXBzX21kX2luaXQoTURDMikK Kytub25maXBzX21kX2luaXQoTURDMikKKyAJeworIAljLT5udW09MDsKKyAJYy0+cGFkX3R5cGU9 MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9vX2ZpcHMuYy5maXBzIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9vX2ZpcHMuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9vX2ZpcHMu Yy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL29fZmlwcy5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQ0MTE4OTc1ICswMTAw CitAQCAtNzksNiArNzksOCBAQCBpbnQgRklQU19tb2RlX3NldChpbnQgcikKKyAjaWZuZGVmIEZJ UFNfQVVUSF9VU0VSX1BBU1MKKyAjZGVmaW5lIEZJUFNfQVVUSF9VU0VSX1BBU1MJIkRlZmF1bHQg RklQUyBDcnlwdG8gVXNlciBQYXNzd29yZCIKKyAjZW5kaWYKKysJaWYgKEZJUFNfbW9kdWxlX21v ZGUoKSkgLyogY2FuIGJlIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgT1BFTlNTTF9pbml0KCkg Ki8KKysJCXJldHVybiAxOworIAlpZiAoIUZJUFNfbW9kdWxlX21vZGVfc2V0KHIsIEZJUFNfQVVU SF9VU0VSX1BBU1MpKQorIAkJcmV0dXJuIDA7CisgCWlmIChyKQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL29faW5pdC5j CistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL29faW5pdC5jLmZpcHMJMjAxMy0wMi0xMSAxNjoy NjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vb19pbml0LmMJ MjAxMy0wMi0xOSAxMjo0NzozMy43NDQxMTg5NzUgKzAxMDAKK0BAIC01NSwyOCArNTUsNjMgQEAK KyAjaW5jbHVkZSA8ZV9vcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRl IDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKworKyNkZWZpbmUgRklQU19NT0RFX1NX SVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCIKKysKKytzdGF0aWMgdm9p ZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQorKwl7CisrCWNoYXIgYnVmWzJdID0gIjAiOworKwlpbnQg ZmQ7CisrCQorKwlpZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwp CisrCQl7CisrCQlidWZbMF0gPSAnMSc7CisrCQl9CisrCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQ U19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05MWSkpID49IDApCisrCQl7CisrCQl3aGlsZSAocmVh ZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKysJCWNsb3Nl KGZkKTsKKysJCX0KKysJLyogRmFpbHVyZSByZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZp bGUgbWVhbnMganVzdCBub3QKKysJICogc3dpdGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3Vs ZCBicmVhayB0b28gbWFueSB0aGluZ3MKKysJICogb3RoZXJ3aXNlLiAKKysJICovCisrCQorKwlp ZiAoYnVmWzBdID09ICcxJykKKysJCXsKKysJCUZJUFNfbW9kZV9zZXQoMSk7CisrCQl9CisrCX0K KyAjZW5kaWYKKyAKKyAvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXph dGlvbiBvcGVyYXRpb25zLgorICAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MK KyAgKi8KKyAKKy12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQorK3ZvaWQgT1BFTlNTTF9pbml0X2xp YnJhcnkodm9pZCkKKyAJeworIAlzdGF0aWMgaW50IGRvbmUgPSAwOworIAlpZiAoZG9uZSkKKyAJ CXJldHVybjsKKyAJZG9uZSA9IDE7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlGSVBTX3NldF9s b2NraW5nX2NhbGxiYWNrcyhDUllQVE9fbG9jaywgQ1JZUFRPX2FkZF9sb2NrKTsKKy0JRklQU19z ZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJyb3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpOwor LQlGSVBTX3NldF9tYWxsb2NfY2FsbGJhY2tzKENSWVBUT19tYWxsb2MsIENSWVBUT19mcmVlKTsK KyAJUkFORF9pbml0X2ZpcHMoKTsKKysJaW5pdF9maXBzX21vZGUoKTsKKyAjZW5kaWYKKyAjaWYg MAorIAlmcHJpbnRmKHN0ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIpOworICNlbmRpZgor IAl9CisgCisrdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKKysJeworKwlPUEVOU1NMX2luaXRfbGli cmFyeSgpOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vb3BlbnNzbGNvbmYu aC5pbi5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCistLS0gb3Bl bnNzbC0xLjAuMWUvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDEzLTAyLTExIDE2OjI2 OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9vcGVuc3NsY29u Zi5oLmluCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQ0MTE4OTc1ICswMTAwCitAQCAtMSw1ICsxLDIw IEBACisgLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KKyAKKysjaWZkZWYgT1BFTlNTTF9E T0lOR19NQUtFREVQRU5ECisrCisrLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2 ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCisrICogdGhhdCBzaG91 bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgorKyAqCisrICogW091ciAibWFrZSBkZXBlbmQi IGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRp bmdzCisrICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRp cmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCisrICovCisrCisrI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKysjZGVmaW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgorKworKyNlbmRpZgor KworIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCisgI3VuZGVmIEkzODZfT05MWQorIAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwkyMDEzLTAyLTE5 IDEyOjQ3OjMzLjc0NDExODk3NSArMDEwMAorQEAgLTU5LDYgKzU5LDEwIEBACisgI2luY2x1ZGUg PHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvcGtj czEyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysKKyAKKyAKKyBzdGF0aWMgaW50IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBL Q1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJfU0FGRUJBRyAqYmFnKTsKK0BAIC05MCw3ICs5 NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUoY2hhciAqcGFzcywgY2hhciAqCisgCisgCS8q IFNldCBkZWZhdWx0cyAqLworIAlpZiAoIW5pZF9jZXJ0KQorKwkJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNI QTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOworKwkJZWxzZQorKyNlbmRpZgorIAkJbmlkX2NlcnQg PSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJfQ0JDOworKwkJfQorIAlpZiAoIW5pZF9rZXkp CisgCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Cisg CWlmICghaXRlcikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yYW5kL21kX3JhbmQu Yy5maXBzIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yYW5kL21kX3JhbmQuYworLS0tIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIw MTMtMDItMTkgMTI6NDc6MzMuNzQ1MTE4OTk1ICswMTAwCitAQCAtMzg5LDcgKzM4OSwxMCBAQCBz dGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCisgCUNSWVBUT193X3VubG9j ayhDUllQVE9fTE9DS19SQU5EMik7CisgCWNyeXB0b19sb2NrX3JhbmQgPSAxOworIAorLQlpZiAo IWluaXRpYWxpemVkKQorKwkvKiBhbHdheXMgcG9sbCBmb3IgZXh0ZXJuYWwgZW50cm9weSBpbiBG SVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAorKwkgKiBleHBhbnNpb24KKysJICovCisrCWlm ICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgpKSAKKyAJCXsKKyAJCVJBTkRfcG9s bCgpOworIAkJaW5pdGlhbGl6ZWQgPSAxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRv L3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFuZC5oCistLS0g b3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMJMjAxMy0wMi0xOSAxMjo0Nzoz My4xNzYxMDc0MzAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmFuZC9yYW5kLmgJ MjAxMy0wMi0xOSAxMjo0NzozMy43NDUxMTg5OTUgKzAxMDAKK0BAIC0xMzMsMTUgKzEzMywzMyBA QCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKKyAvKiBFcnJvciBjb2RlcyBmb3Ig dGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZp bmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgKKysjZGVmaW5lIFJBTkRf Rl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkg MTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkgMTA2CisrI2RlZmluZSBS QU5EX0ZfRklQU19YOTMxX1NFVF9EVAkJCQkgMTA2CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRf RFQJCQkJIDEwNAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKKysj ZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1CisgI2RlZmluZSBSQU5EX0Zf UkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCistI2RlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJ UFMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBTCQkJCSAxMDkKKyAjZGVm aW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKKyAKKyAvKiBSZWFzb24gY29kZXMu ICovCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTAyCistI2Rl ZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEwMworLSNkZWZpbmUgUkFO RF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMDEKKysjZGVmaW5lIFJBTkRfUl9FUlJP Ul9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTIKKysjZGVmaW5lIFJBTkRfUl9FUlJPUl9JTlNUQU5U SUFUSU5HX0RSQkcJCQkgMTEzCisrI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAx MDUKKysjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAxMDYKKysjZGVmaW5lIFJB TkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTExCisrI2RlZmluZSBSQU5EX1JfTk9f S0VZX1NFVAkJCQkgMTA3CisrI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNI CQkJIDEwMQorKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEwOAorKyNkZWZpbmUgUkFO RF9SX1BSTkdfS0VZRUQJCQkJIDEwOQorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJ CQkJIDEwMgorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVECQkJIDEwMworICNkZWZp bmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCisrI2RlZmluZSBSQU5EX1JfUFJOR19T RUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAorKyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJ CQkJIDEwNAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v cmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmlwZW1kL3JtZF9k Z3N0LmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0 NTExODk5NSArMDEwMAorQEAgLTcwLDcgKzcwLDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lv bltdPSJSSVBFLU1EMTYwIgorICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NU WCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKKyAjICBlbmRpZgorIAorLWZpcHNf bWRfaW5pdChSSVBFTUQxNjApCisrbm9uZmlwc19tZF9pbml0KFJJUEVNRDE2MCkKKyAJeworIAlt ZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1SSVBFTUQxNjBfQTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by9yc2EvcnNhX2NycHQuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2Ny cHQuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQ1MTE4 OTk1ICswMTAwCitAQCAtOTAsMTAgKzkwLDkgQEAgaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50 IGZsZW4sIGNvbnN0CisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisgI2lmZGVm IE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYg UlNBX0ZMQUdfRklQU19NRVRIT0QpCistCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpKQorKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19OT05fRklQU19BTExPVykpCisgCQl7CistCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5D UllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7 CisgCQlyZXR1cm4gLTE7CisgCQl9CisgI2VuZGlmCitAQCAtMTE4LDEwICsxMTcsOSBAQCBpbnQg UlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25zdCB1CisgCSAgICAgUlNBICpyc2EsIGlu dCBwYWRkaW5nKQorIAl7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkg JiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCistCQkJJiYgIShy c2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwlpZihGSVBTX21vZGUoKSAm JiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CistCQlSU0Fl cnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsK KysJCVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1Rf QUxMT1dFRF9JTl9GSVBTX01PREUpOworIAkJcmV0dXJuIC0xOworIAkJfQorICNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcyBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vcnNhL3JzYV9lYXkuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2Ev cnNhX2VheS5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9lYXkuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0 NTExODk5NSArMDEwMAorQEAgLTExNCw2ICsxMTQsMTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorICNpZm5kZWYgUlNBX05VTEwKKyAK K0BAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRo PXsKKyAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFggcHJvYmFibHkgd2Ugc2hvdWxkIG5vdCB1c2Ug TW9udGdvbWVyeSBpZiAgZSA9PSAzICovCisgCVJTQV9lYXlfaW5pdCwKKyAJUlNBX2VheV9maW5p c2gsCistCTAsIC8qIGZsYWdzICovCisrCVJTQV9GTEFHX0ZJUFNfTUVUSE9ELCAvKiBmbGFncyAq LworIAlOVUxMLAorIAkwLCAvKiByc2Ffc2lnbiAqLworIAkwLCAvKiByc2FfdmVyaWZ5ICovCitA QCAtMTU4LDYgKzE2MiwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50 IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1OVUxMOworIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZiAoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9Q VUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJy OworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExP VykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01P RFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNS WVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9Cisr CQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0Ff TUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19F TkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMzYxLDYgKzM4MywyNCBAQCBz dGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCisgCUJJR05VTSAqdW5ibGlu ZCA9IE5VTEw7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5D UllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCXJldHVybiAtMTsKKysJCQl9 CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkJ JiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysj ZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJ Qk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKK0BAIC01MDQsNiAr NTQ0LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKKyAJQklH TlVNICp1bmJsaW5kID0gTlVMTDsKKyAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlf UFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJcmV0dXJu IC0xOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVf REVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAlpZigoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBn b3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsK K0BAIC02MzksNiArNjk3LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChp bnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7CisgCUJOX0NUWCAqY3R4PU5VTEw7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZihG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZ X1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBl cnI7CisrCQkJfQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FM TE9XKQorKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RF Q1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0K KysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JT QV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElD X0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC04OTcsNiArOTczLDkgQEAg ZXJyOgorIAorIHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQorIAl7CisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJzYS0+ ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOworIAly ZXR1cm4oMSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX2Vy ci5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfZXJyLmMKKy0tLSBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAx My0wMi0xOSAxMjo0NzozMy43NDYxMTkwMTUgKzAxMDAKK0BAIC0xMjEsNiArMTIxLDggQEAgc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhSU0FfRl9S U0FfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX3B1YmxpY19lbmNyeXB0In0sCisge0VSUl9GVU5DKFJT QV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0sCisge0VSUl9GVU5DKFJTQV9G X1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ffc2V0dXBfYmxpbmRpbmcifSwKKyt7RVJSX0ZVTkMo UlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0s Cisre0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwJIlJTQV9zZXRfbWV0aG9kIn0sCisg e0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJIlJTQV9zaWduIn0sCisge0VSUl9GVU5DKFJTQV9G X1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJIlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5H In0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRlkpLAkiUlNBX3ZlcmlmeSJ9LAorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4x ZS9jcnlwdG8vcnNhL3JzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNh X2dlbi5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0NjEx OTAxNSArMDEwMAorQEAgLTY5LDYgKzY5LDc4IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisgI2lmZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKytzdGF0 aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOworKworK3ZvaWQgRklQU19jb3JydXB0 X3JzYV9rZXlnZW4odm9pZCkKKysJeworKwlmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMTsKKysJ fQorKworK2ludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSkKKysJeworKwljb25zdCB1bnNpZ25l ZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKKysJdW5zaWduZWQgY2hh ciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOworKwlpbnQgbGVuLCByZXQgPSAwOworKwlF VlBfUEtFWSAqcGs7CisrCisrCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQln b3RvIGVycjsKKysKKysJRVZQX1BLRVlfc2V0MV9SU0EocGssIHJzYSk7CisrCisrCS8qIFBlcmZv cm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0dXJlIHRlc3QgKi8KKysJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NU WF9GTEFHX1BBRF9YOTMxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BTUywgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJLyogTm93IHBlcmZvcm0gcGFpcndpc2UgY29u c2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KKysJY3RidWYgPSBPUEVOU1NMX21hbGxv YyhSU0Ffc2l6ZShyc2EpKTsKKysJaWYgKCFjdGJ1ZikKKysJCWdvdG8gZXJyOworKworKwlsZW4g PSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMsIGN0YnVmLCByc2EsIFJT QV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiA8PSAwKQorKwkJZ290byBlcnI7CisrCS8qIENo ZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQgKi8KKysJaWYgKChsZW4gPT0g KHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAodGJzLCBjdGJ1ZiwgbGVuKSkKKysJCWdvdG8g ZXJyOworKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKworKwlpZiAo IXB0YnVmKQorKwkJZ290byBlcnI7CisrCWxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVuLCBj dGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKwlpZiAobGVuICE9IChzaXpl b2YodGJzKSAtIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChtZW1jbXAocHRidWYsIHRicywgbGVu KSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKworKwlpZiAoIXB0YnVmKQorKwkJZ290 byBlcnI7CisrCQorKwllcnI6CisrCWlmIChyZXQgPT0gMCkKKysJCXsKKysJCWZpcHNfc2V0X3Nl bGZ0ZXN0X2ZhaWwoKTsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBLEZJUFNfUl9Q QUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQl9CisrCisrCWlmIChjdGJ1ZikKKysJCU9QRU5TU0xf ZnJlZShjdGJ1Zik7CisrCWlmIChwdGJ1ZikKKysJCU9QRU5TU0xfZnJlZShwdGJ1Zik7CisrCWlm IChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKworKwlyZXR1cm4gcmV0OworKwl9CisgI2Vu ZGlmCisgCisgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBiaXRz LCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7CitAQCAtODEsNyArMTUzLDcgQEAgc3Rh dGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgaW50IFJTQV9nZW5lcmF0ZV9r ZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYikK KyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5t ZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorKwlpZiAoRklQU19tb2R1bGVfbW9k ZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorIAkJCSYm ICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKyAJCXsKKyAJCVJTQWVy cihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYLCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsK K0BAIC05MCwxMCArMTYyLDYgQEAgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGlu dCBiaQorICNlbmRpZgorIAlpZihyc2EtPm1ldGgtPnJzYV9rZXlnZW4pCisgCQlyZXR1cm4gcnNh LT5tZXRoLT5yc2Ffa2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOworLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIEZJUFNfcnNhX2dlbmVyYXRl X2tleV9leChyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jZW5kaWYKKyAJcmV0dXJuIHJzYV9i dWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKyAJfQorIAorQEAgLTEwNSw2 ICsxNzMsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgCWlu dCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICAJeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JT QV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgCXJl dHVybiAwOworKwkgICAgCX0KKysKKysJCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKQorKwkJICAgIHsKKysJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJ Tl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkJICAgIHJldHVybiAwOworKwkJICAg IH0KKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBO VUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAtMjE2LDYgKzMwMSwxNyBA QCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKKyAJCXAgPSByc2EtPnA7 CisgCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJy OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJ CXsKKysJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKHJzYS0+ biwgMSk7CisrCisrCQlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJCSAgICBnb3RvIGVycjsK KysJCX0KKysjZW5kaWYKKysKKyAJb2s9MTsKKyBlcnI6CisgCWlmIChvayA9PSAtMSkKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4xZS9j cnlwdG8vcnNhL3JzYS5oCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2EuaC5maXBz CTIwMTMtMDItMTkgMTI6NDc6MzMuNDg1MTEzNzEwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL3JzYS9yc2EuaAkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0NjExOTAxNSArMDEwMAorQEAg LTE2NCw2ICsxNjQsOCBAQCBzdHJ1Y3QgcnNhX3N0CisgIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFY X01PRFVMVVNfQklUUwkxNjM4NAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQ U19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01P RFVMVVNfQklUUworICMgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcy CisgI2VuZGlmCitAQCAtMjkwLDYgKzI5MiwxMSBAQCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGlu dCBiaXRzLCB1bnNpZ25lCisgCisgLyogTmV3IHZlcnNpb24gKi8KKyBpbnQJUlNBX2dlbmVyYXRl X2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKytp bnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBC SUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdO VU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3Qg QklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9H RU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBi aXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisgCisgaW50CVJTQV9jaGVja19r ZXkoY29uc3QgUlNBICopOworIAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9yICovCitAQCAt NDg3LDcgKzQ5NCw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmlu ZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9ORQkJCSAxMDcKKyAjZGVmaW5lIFJTQV9GX1JTQV9Q QURESU5HX0FERF9QS0NTMV9PQUVQCQkgMTIxCisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19B RERfUEtDUzFfUFNTCQkJIDEyNQorLSNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1Mx X1BTU19NR0YxCQkgMTQ4CisrI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNT X01HRjEJCSAxNTgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzEJ CSAxMDgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzIJCSAxMDkK KyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9TU0xWMjMJCQkgMTEwCitAQCAtNTAwLDIw ICs1MDcsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJT QV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEJCQkgMTI4CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJ TlQJCQkJCSAxMTUKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2CistI2RlZmlu ZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJIDE1MAorLSNkZWZpbmUgUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVAkJCSAxNTEKKysjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQJ CQkgMTU3CisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJIDE0OAorICNkZWZp bmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklW X0VOQ09ERQkJCQkgMTM4CistI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTUy CisrI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5CisgI2RlZmluZSBSU0Ff Rl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUzCisgI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09E RQkJCQkgMTM5CisgI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2CisrI2Rl ZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1MAorKyNkZWZpbmUgUlNBX0Zf UlNBX1NFVF9NRVRIT0QJCQkJIDE1MQorICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcK KyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkgMTE4CisgI2RlZmlu ZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKKyAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfQVNO MV9PQ1RFVF9TVFJJTkcJCSAxMjAKKyAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNT CQkJIDEyNgorLSNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNDkK KysjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkgMTUyCisgCisgLyog UmVhc29uIGNvZGVzLiAqLworICNkZWZpbmUgUlNBX1JfQUxHT1JJVEhNX01JU01BVENICQkJIDEw MAorQEAgLTU0MiwyMSArNTUxLDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7 CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX01HRjFfTUQJCQkJIDE1NgorICNkZWZpbmUgUlNBX1Jf SU5WQUxJRF9QQURESU5HCQkJCSAxMzgKKyAjZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElOR19N T0RFCQkJIDE0MQorLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNDkK KysjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTU3CisgI2RlZmluZSBS U0FfUl9JTlZBTElEX1BTU19TQUxUTEVOCQkJIDE0NgorLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9T QUxUX0xFTkdUSAkJCSAxNTAKKysjZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJCQkg MTU4CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1RSQUlMRVIJCQkJIDEzOQorICNkZWZpbmUgUlNB X1JfSU5WQUxJRF9YOTMxX0RJR0VTVAkJCSAxNDIKKyAjZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lO VkVSU0VfT0ZfUQkJCSAxMjYKKyAjZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAx MjAKKyAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKKyAjZGVmaW5lIFJT QV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKy0jZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JT QV9NRVRIT0QJCQkgMTU3CisrI2RlZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9ECQkJIDE0 OQorKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKKyAjZGVmaW5lIFJTQV9S X05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKKyAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JM T0NLX01JU1NJTkcJCQkgMTEzCisgI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJ CSAxMjcKKyAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCistI2RlZmlu ZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTgKKysjZGVmaW5l IFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1MAorICNkZWZpbmUg UlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4CisgI2Rl ZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKKyAjZGVmaW5lIFJTQV9SX1Bf Tk9UX1BSSU1FCQkJCSAxMjgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNh X2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQu MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfbGliLmMJ MjAxMy0wMi0xOSAxMjo0NzozMy43NDYxMTkwMTUgKzAxMDAKK0BAIC04NCw2ICs4NCwxMyBAQCBS U0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3Qg UlNBX01FVEhPRCAqbWV0aCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNf bW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7Cisr CQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVU SE9EKTsKKysJCXJldHVybjsKKysJCX0KKysjZW5kaWYKKyAJZGVmYXVsdF9SU0FfbWV0aCA9IG1l dGg7CisgCX0KKyAKK0BAIC05MSwxOCArOTgsMTEgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX2dl dF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlmIChkZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpCisg CQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJldHVy biBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gUlNBX1BLQ1Mx X1NTTGVheSgpOworLSNlbHNlCisgI2lmZGVmIFJTQV9OVUxMCisgCQlkZWZhdWx0X1JTQV9tZXRo PVJTQV9udWxsX21ldGhvZCgpOworICNlbHNlCisgCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9QS0NT MV9TU0xlYXkoKTsKKyAjZW5kaWYKKy0jZW5kaWYKKyAJCX0KKyAKKyAJcmV0dXJuIGRlZmF1bHRf UlNBX21ldGg7CitAQCAtMTE4LDYgKzExOCwxMyBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpy c2EsIGNvbnN0IFJTQV9NCisgCS8qIE5COiBUaGUgY2FsbGVyIGlzIHNwZWNpZmljYWxseSBzZXR0 aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cworIAkgKiB0byBkZWFsIHdpdGggd2hp Y2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCisgCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAm IFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfU0VUX01F VEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRp ZgorIAltdG1wID0gcnNhLT5tZXRoOworIAlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5pc2go cnNhKTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMTcwLDYgKzE3NywxOCBAQCBS U0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAkJCX0KKyAJCX0KKyAjZW5kaWYK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNB X05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrI2lmbmRlZiBPUEVOU1NMX05P X0VOR0lORQorKwkJaWYgKHJldC0+ZW5naW5lKQorKwkJCUVOR0lORV9maW5pc2gocmV0LT5lbmdp bmUpOworKyNlbmRpZgorKwkJT1BFTlNTTF9mcmVlKHJldCk7CisrCQlyZXR1cm4gTlVMTDsKKysJ CX0KKysjZW5kaWYKKyAKKyAJcmV0LT5wYWQ9MDsKKyAJcmV0LT52ZXJzaW9uPTA7CitAQCAtMTg4 LDcgKzIwNyw3IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCisgCXJldC0+ YmxpbmRpbmc9TlVMTDsKKyAJcmV0LT5tdF9ibGluZGluZz1OVUxMOworIAlyZXQtPmJpZ251bV9k YXRhPU5VTEw7CistCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFncyAmIH5SU0FfRkxBR19OT05f RklQU19BTExPVzsKKysJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzOworIAlpZiAoIUNSWVBU T19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByZXQsICZyZXQtPmV4X2RhdGEpKQor IAkJeworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcnNhL3Jz YV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBz CTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0NjExOTAxNSArMDEw MAorQEAgLTIwNiwyMiArMjA2LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZ X0NUWCAqYworIAkJCQkJUlNBX1JfSU5WQUxJRF9ESUdFU1RfTEVOR1RIKTsKKyAJCQlyZXR1cm4g LTE7CisgCQkJfQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChyZXQgPiAwKQorLQkJCXsK Ky0JCQl1bnNpZ25lZCBpbnQgc2xlbjsKKy0JCQlyZXQgPSBGSVBTX3JzYV9zaWduX2RpZ2VzdChy c2EsIHRicywgdGJzbGVuLCByY3R4LT5tZCwKKy0JCQkJCQkJcmN0eC0+cGFkX21vZGUsCistCQkJ CQkJCXJjdHgtPnNhbHRsZW4sCistCQkJCQkJCXJjdHgtPm1nZjFtZCwKKy0JCQkJCQkJc2lnLCAm c2xlbik7CistCQkJaWYgKHJldCA+IDApCistCQkJCSpzaWdsZW4gPSBzbGVuOworLQkJCWVsc2UK Ky0JCQkJKnNpZ2xlbiA9IDA7CistCQkJcmV0dXJuIHJldDsKKy0JCQl9CistI2VuZGlmCisgCisg CQlpZiAoRVZQX01EX3R5cGUocmN0eC0+bWQpID09IE5JRF9tZGMyKQorIAkJCXsKK0BAIC0zNTQs MTkgKzMzOCw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAorICNl bmRpZgorIAlpZiAocmN0eC0+bWQpCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYg KHJ2ID4gMCkKKy0JCQl7CistCQkJcmV0dXJuIEZJUFNfcnNhX3ZlcmlmeV9kaWdlc3QocnNhLAor LQkJCQkJCQl0YnMsIHRic2xlbiwKKy0JCQkJCQkJcmN0eC0+bWQsCistCQkJCQkJCXJjdHgtPnBh ZF9tb2RlLAorLQkJCQkJCQlyY3R4LT5zYWx0bGVuLAorLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCist CQkJCQkJCXNpZywgc2lnbGVuKTsKKy0JCQkJCQkJCistCQkJfQorLSNlbmRpZgorIAkJaWYgKHJj dHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QQURESU5HKQorIAkJCXJldHVybiBSU0FfdmVyaWZ5 KEVWUF9NRF90eXBlKHJjdHgtPm1kKSwgdGJzLCB0YnNsZW4sCisgCQkJCQlzaWcsIHNpZ2xlbiwg cnNhKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBz IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yc2EvcnNhX3NpZ24uYworLS0tIG9wZW5zc2wtMS4wLjFl L2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTMtMDIt MTkgMTI6NDc6MzMuNzQ3MTE5MDM1ICswMTAwCitAQCAtMTM4LDcgKzEzOCw4IEBAIGludCBSU0Ff c2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWkyZF9YNTA5X1NJRygmc2lnLCZw KTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2VuY3J5cHQoaSxzLHNpZ3JldCxy c2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBk aXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9w cml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdyZXQscnNhLFJTQV9QS0NT MV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9MDsKKyAJZWxzZQorQEAgLTE3 OCw4ICsxNzksOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCisg CisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQorIAkJeworLQkJaSA9IFJTQV9w dWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1Mx X1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJz YV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFE RElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4gMDsKKyAJCSpwcm1fbGVuID0g aTsKK0BAIC0xOTYsNyArMTk3LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29u c3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9JTlZBTElEX01F U1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlpPVJTQV9wdWJsaWNfZGVjcnlw dCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjog Y2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICov CisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygo aW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAKKyAJaWYg KGkgPD0gMCkgZ290byBlcnI7CisgCS8qIE9kZGJhbGwgTURDMiBjYXNlOiBzaWduYXR1cmUgY2Fu IGJlIE9DVEVUIFNUUklORy4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEvc2hh MjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vc2hhL3NoYTI1Ni5jCistLS0gb3BlbnNz bC0xLjAuMWUvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMTMtMDItMTEgMTY6MjY6MDQuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDEz LTAyLTE5IDEyOjQ3OjMzLjc0NzExOTAzNSArMDEwMAorQEAgLTEyLDEyICsxMiwxOSBAQAorIAor ICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlm CisrCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAKKyBjb25zdCBjaGFyIFNIQTI1 Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKyBmaXBzX21k X2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykp OworIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7CisgCWMtPmhb Ml09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsKK0BAIC0yOSw2ICszNiw5IEBA IGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCisgCisgZmlwc19tZF9pbml0KFNIQTI1 NikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOwor KyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+aFswXT0weDZhMDllNjY3 VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOworIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+aFsz XT0weGE1NGZmNTNhVUw7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vc2hhL3NoYTUx Mi5jLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGE1MTIuYworLS0tIG9wZW5zc2wt MS4wLjFlL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxMy0w Mi0xOSAxMjo0NzozMy43NDcxMTkwMzUgKzAxMDAKK0BAIC01LDYgKzUsMTAgQEAKKyAgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorICAqLworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAj aWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBNTEy KQorIC8qCisgICogSU1QTEVNRU5UQVRJT04gTk9URVMuCitAQCAtNjEsNiArNjUsOSBAQCBjb25z dCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNIQS01MTIiIE9QCisgCisgZmlwc19tZF9pbml0X2N0 eChTSEEzODQsIFNIQTUxMikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxm dGVzdF9jaGVjaygpOworKyNlbmRpZgorIAljLT5oWzBdPVU2NCgweGNiYmI5ZDVkYzEwNTllZDgp OworIAljLT5oWzFdPVU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOworIAljLT5oWzJdPVU2NCgweDkx NTkwMTVhMzA3MGRkMTcpOworQEAgLTc3LDYgKzg0LDkgQEAgZmlwc19tZF9pbml0X2N0eChTSEEz ODQsIFNIQTUxMikKKyAKKyBmaXBzX21kX2luaXQoU0hBNTEyKQorIAl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWMtPmhbMF09VTY0 KDB4NmEwOWU2NjdmM2JjYzkwOCk7CisgCWMtPmhbMV09VTY0KDB4YmI2N2FlODU4NGNhYTczYik7 CisgCWMtPmhbMl09VTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xZS9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGEu aAorLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEvc2hhLmguZmlwcwkyMDEzLTAyLTE5IDEy OjQ3OjMyLjk4NjEwMzU2OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEvc2hh LmgJMjAxMy0wMi0xOSAxMjo0NzozMy43NDcxMTkwMzUgKzAxMDAKK0BAIC0xMTYsOSArMTE2LDYg QEAgdW5zaWduZWQgY2hhciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNoYXIgKgorIHZvaWQgU0hBX1Ry YW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyAjZW5kaWYK KyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQgcHJp dmF0ZV9TSEExX0luaXQoU0hBX0NUWCAqYyk7CistI2VuZGlmCisgaW50IFNIQTFfSW5pdChTSEFf Q1RYICpjKTsKKyBpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGxlbik7CisgaW50IFNIQTFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFgg KmMpOworQEAgLTE0MSwxMCArMTM4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBMjU2c3RhdGVfc3QK KyAJfSBTSEEyNTZfQ1RYOworIAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7Cist aW50IHByaXZhdGVfU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7CistI2VuZGlmCisgaW50IFNI QTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworIGludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFgg KmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEEyMjRfRmluYWwodW5z aWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOworQEAgLTE5MiwxMCArMTg1LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE9QRU5TU0xf Tk9fU0hBNTEyCistI2lmZGVmIE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTM4NF9Jbml0 KFNIQTUxMl9DVFggKmMpOworLWludCBwcml2YXRlX1NIQTUxMl9Jbml0KFNIQTUxMl9DVFggKmMp OworLSNlbmRpZgorIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKKyBpbnQgU0hBMzg0 X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBp bnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4w LjFlL2NyeXB0by9zaGEvc2hhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9zaGEv c2hhX2xvY2wuaC5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzIuOTkxMTAzNjcwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWUvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTMtMDItMTkgMTI6NDc6MzMu NzQ3MTE5MDM1ICswMTAwCitAQCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2Rh dGFfb3JkZXIgKFNIQV9DVFggKmMsCisgI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVM CisgCisgI2lmZGVmIFNIQV8wCistZmlwc19tZF9pbml0KFNIQSkKKytub25maXBzX21kX2luaXQo U0hBKQorICNlbHNlCisgZmlwc19tZF9pbml0X2N0eChTSEExLCBTSEEpCisgI2VuZGlmCisgCXsK KysjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMt PmgwPUlOSVRfREFUQV9oMDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gxOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWUvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFlL2Ny eXB0by93aHJscG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vd2hybHBv b2wvd3BfZGdzdC5jLmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCTIwMTMtMDItMTkgMTI6 NDc6MzMuNzQ4MTE5MDU1ICswMTAwCitAQCAtNTUsNyArNTUsNyBAQAorICNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy1maXBzX21kX2luaXQoV0hJ UkxQT09MKQorK25vbmZpcHNfbWRfaW5pdChXSElSTFBPT0wpCisgCXsKKyAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7CisgCXJldHVybigxKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL01ha2Vm aWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjFlL01ha2VmaWxlLm9yZworLS0tIG9wZW5zc2wtMS4w LjFlL01ha2VmaWxlLm9yZy5maXBzCTIwMTMtMDItMTkgMTI6NDc6MzMuNjc4MTE3NjM0ICswMTAw CisrKysgb3BlbnNzbC0xLjAuMWUvTWFrZWZpbGUub3JnCTIwMTMtMDItMTkgMTI6NDc6MzMuNzQ4 MTE5MDU1ICswMTAwCitAQCAtMTM2LDYgKzEzNiw5IEBAIEZJUFNDQU5MSUI9CisgCisgQkFTRUFE RFI9CisgCisrIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVkCisrRklQUz0KKysKKyBESVJTPSAg IGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMKKyBFTkdESVJTPSBjY2dvc3QKKyBT SExJQkRJUlM9IGNyeXB0byBzc2wKK0BAIC0xNDgsNyArMTUxLDcgQEAgU0RJUlM9ICBcCisgCWJu IGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwKKyAJYnVmZmVyIGJpbyBzdGFj ayBsaGFzaCByYW5kIGVyciBcCisgCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9k YiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAorLQljbXMgcHF1ZXVlIHRzIGpwYWtl IHNycCBzdG9yZSBjbWFjCisrCWNtcyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMgZmlw cworICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9D b25maWd1cmUKKyAjIGFjY29yZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCisgCitAQCAtMjM3 LDYgKzI0MCw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MKKyAJ CUZJUFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJXAorIAkJRklQU0RJUj0nJHtGSVBTRElSfScJ CQkJXAorIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwKKysJ CUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklM RT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkg ImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAorICMgd2hpY2gg aW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRo IC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVuc3Ns LTEuMC4xZS9zc2wvc3NsX2FsZ3MuYworLS0tIG9wZW5zc2wtMS4wLjFlL3NzbC9zc2xfYWxncy5j LmZpcHMJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xZS9zc2wvc3NsX2FsZ3MuYwkyMDEzLTAyLTE5IDEyOjQ3OjMzLjc0ODExOTA1NSArMDEwMAor QEAgLTY0LDYgKzY0LDEyIEBACisgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKKyAJeworIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysJaWYgKCFG SVBTX21vZGUoKSkKKysJCXsKKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisg CUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2JjKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfY2JjKCkpOworQEAgLTEzNyw2ICsxNDMsNTAgQEAgaW50IFNTTF9saWJyYXJ5X2luaXQo dm9pZCkKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKKyAJRVZQX2FkZF9kaWdlc3QoRVZQ X2RzcygpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9CisrCWVsc2UKKysJ CXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl M19jYmMoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX0FFUworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Ni YygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzEyOF9nY20oKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2dj bSgpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CisrCS8qIG5lZWRlZCBldmVu IGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBNQUMgKi8KKysJRVZQX2FkZF9kaWdlc3QoRVZQX21k NSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wyLW1kNSIpOworKwlFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDMtbWQ1Iik7CisrI2VuZGlmCisrI2lmbmRlZiBP UEVOU1NMX05PX1NIQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyogUlNBIHdpdGgg c2hhMSAqLworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKKysJ RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRo UlNBKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CisrCUVWUF9hZGRfZGln ZXN0KEVWUF9zaGEyMjQoKSk7CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrI2Vu ZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hh Mzg0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOworKyNlbmRpZgorKyNpZiAh ZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCisrCUVW UF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0aCBzaGExICovCisrCUVWUF9hZGRf ZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOworKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9O T19FQ0RTQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7CisrI2VuZGlmCisrCQl9Cisr I2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKyAJLyogVGhpcyB3aWxsIGluaXRpYWxp c2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuCisgCSAgIFRoZSB2YWx1ZSBy ZXR1cm5lZCBpcyBhIFNUQUNLX09GKFNTTF9DT01QKSwgYnV0IHRoYXQgY2FuCgpkaWZmIC0tZ2l0 IGEvb3BlbnNzbC0xLjAuMWUtaXNzdWVyLWhhc2gucGF0Y2ggYi9vcGVuc3NsLTEuMC4xZS1pc3N1 ZXItaGFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjNiZmRi Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMWUtaXNzdWVyLWhhc2gucGF0Y2gKQEAg LTAsMCArMSwxMSBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3g1MDkveDUwOV9j bXAuYy5pc3N1ZXItaGFzaCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8veDUwOS94NTA5X2NtcC5jCist LS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3g1MDkveDUwOV9jbXAuYy5pc3N1ZXItaGFzaAkyMDEz LTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0 by94NTA5L3g1MDlfY21wLmMJMjAxMy0wMi0xOSAxMjo0NjoxMS4zMTU3ODg1OTIgKzAxMDAKK0BA IC04NSw2ICs4NSw3IEBAIHVuc2lnbmVkIGxvbmcgWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9oYXMK KyAJY2hhciAqZjsKKyAKKyAJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKwlFVlBfTURfQ1RYX3Nl dF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAlmPVg1MDlf TkFNRV9vbmVsaW5lKGEtPmNlcnRfaW5mby0+aXNzdWVyLE5VTEwsMCk7CisgCWlmICghRVZQX0Rp Z2VzdEluaXRfZXgoJmN0eCwgRVZQX21kNSgpLCBOVUxMKSkKKyAJCWdvdG8gZXJyOwoKZGlmZiAt LWdpdCBhL29wZW5zc2wtMS4wLjFlLXNlY3VyZS1nZXRlbnYucGF0Y2ggYi9vcGVuc3NsLTEuMC4x ZS1zZWN1cmUtZ2V0ZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmViODAzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xZS1zZWN1cmUtZ2V0ZW52 LnBhdGNoCkBAIC0wLDAgKzEsMjQ0IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8v Y29uZi9jb25mX2FwaS5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL2NvbmYv Y29uZl9hcGkuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9jb25mL2NvbmZfYXBpLmMuc2Vj dXJlLWdldGVudgkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjFlL2NyeXB0by9jb25mL2NvbmZfYXBpLmMJMjAxMy0wMi0xOSAxMzowMjowMi41MzEx ODgxMjQgKzAxMDAKK0BAIC02Myw2ICs2Myw4IEBACisgIyBkZWZpbmUgTkRFQlVHCisgI2VuZGlm CisgCisrLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KKysjZGVmaW5lIF9HTlVfU09VUkNFCisgI2lu Y2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5n Lmg+CitAQCAtMTQyLDcgKzE0NCw3IEBAIGNoYXIgKl9DT05GX2dldF9zdHJpbmcoY29uc3QgQ09O RiAqY29uZiwKKyAJCQlpZiAodiAhPSBOVUxMKSByZXR1cm4odi0+dmFsdWUpOworIAkJCWlmIChz dHJjbXAoc2VjdGlvbiwiRU5WIikgPT0gMCkKKyAJCQkJeworLQkJCQlwPWdldGVudihuYW1lKTsK KysJCQkJcD1zZWN1cmVfZ2V0ZW52KG5hbWUpOworIAkJCQlpZiAocCAhPSBOVUxMKSByZXR1cm4o cCk7CisgCQkJCX0KKyAJCQl9CitAQCAtMTU1LDcgKzE1Nyw3IEBAIGNoYXIgKl9DT05GX2dldF9z dHJpbmcoY29uc3QgQ09ORiAqY29uZiwKKyAJCQlyZXR1cm4oTlVMTCk7CisgCQl9CisgCWVsc2UK Ky0JCXJldHVybihnZXRlbnYobmFtZSkpOworKwkJcmV0dXJuIChzZWN1cmVfZ2V0ZW52KG5hbWUp KTsKKyAJfQorIAorICNpZiAwIC8qIFRoZXJlJ3Mgbm8gd2F5IHRvIHByb3ZpZGUgZXJyb3IgY2hl Y2tpbmcgd2l0aCB0aGlzIGZ1bmN0aW9uLCBzbworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL2NvbmYvY29uZl9tb2QuYy5zZWN1cmUtZ2V0ZW52IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9j b25mL2NvbmZfbW9kLmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vY29uZi9jb25mX21vZC5j LnNlY3VyZS1nZXRlbnYJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vY29uZi9jb25mX21vZC5jCTIwMTMtMDItMTkgMTM6MDI6MDIu NTMxMTg4MTI0ICswMTAwCitAQCAtNTYsNiArNTYsOCBAQAorICAqCisgICovCisgCisrLyogZm9y IHNlY3VyZV9nZXRlbnYgKi8KKysjZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHN0ZGlv Lmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CitA QCAtNTQ4LDggKzU1MCw4IEBAIGNoYXIgKkNPTkZfZ2V0MV9kZWZhdWx0X2NvbmZpZ19maWxlKHZv aWQKKyAJY2hhciAqZmlsZTsKKyAJaW50IGxlbjsKKyAKKy0JZmlsZSA9IGdldGVudigiT1BFTlNT TF9DT05GIik7CistCWlmIChmaWxlKSAKKysJZmlsZSA9IHNlY3VyZV9nZXRlbnYoIk9QRU5TU0xf Q09ORiIpOworKwlpZiAoZmlsZSkKKyAJCXJldHVybiBCVUZfc3RyZHVwKGZpbGUpOworIAorIAls ZW4gPSBzdHJsZW4oWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2FyZWEoKSk7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xZS9jcnlwdG8vZW5naW5lL2VuZ19saXN0LmMuc2VjdXJlLWdldGVudiBvcGVuc3Ns LTEuMC4xZS9jcnlwdG8vZW5naW5lL2VuZ19saXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xZS9jcnlw dG8vZW5naW5lL2VuZ19saXN0LmMuc2VjdXJlLWdldGVudgkyMDEzLTAyLTExIDE2OjI2OjA0LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9lbmdpbmUvZW5nX2xpc3Qu YwkyMDEzLTAyLTE5IDEzOjAyOjAyLjUzNjE4ODIzMyArMDEwMAorQEAgLTYxLDYgKzYxLDggQEAK KyAgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuLCBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5T U0wgcHJvamVjdC4KKyAgKi8KKyAKKysvKiBmb3Igc2VjdXJlX2dldGVudiAqLworKyNkZWZpbmUg X0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSAiZW5nX2ludC5oIgorIAorIC8qIFRoZSBsaW5rZWQtbGlz dCBvZiBwb2ludGVycyB0byBlbmdpbmUgdHlwZXMuIGVuZ2luZV9saXN0X2hlYWQKK0BAIC0zOTks OSArNDAxLDkgQEAgRU5HSU5FICpFTkdJTkVfYnlfaWQoY29uc3QgY2hhciAqaWQpCisgCWlmIChz dHJjbXAoaWQsICJkeW5hbWljIikpCisgCQl7CisgI2lmZGVmIE9QRU5TU0xfU1lTX1ZNUworLQkJ aWYoKGxvYWRfZGlyID0gZ2V0ZW52KCJPUEVOU1NMX0VOR0lORVMiKSkgPT0gMCkgbG9hZF9kaXIg PSAiU1NMUk9PVDpbRU5HSU5FU10iOworKwkJaWYoT1BFTlNTTF9pc3NldHVnaWQoKSB8fCAobG9h ZF9kaXIgPSBnZXRlbnYoIk9QRU5TU0xfRU5HSU5FUyIpKSA9PSAwKSBsb2FkX2RpciA9ICJTU0xS T09UOltFTkdJTkVTXSI7CisgI2Vsc2UKKy0JCWlmKChsb2FkX2RpciA9IGdldGVudigiT1BFTlNT TF9FTkdJTkVTIikpID09IDApIGxvYWRfZGlyID0gRU5HSU5FU0RJUjsKKysJCWlmKChsb2FkX2Rp ciA9IHNlY3VyZV9nZXRlbnYoIk9QRU5TU0xfRU5HSU5FUyIpKSA9PSAwKSBsb2FkX2RpciA9IEVO R0lORVNESVI7CisgI2VuZGlmCisgCQlpdGVyYXRvciA9IEVOR0lORV9ieV9pZCgiZHluYW1pYyIp OworIAkJaWYoIWl0ZXJhdG9yIHx8ICFFTkdJTkVfY3RybF9jbWRfc3RyaW5nKGl0ZXJhdG9yLCAi SUQiLCBpZCwgMCkgfHwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9tZDUvbWQ1X2Rn c3QuYy5zZWN1cmUtZ2V0ZW52IG9wZW5zc2wtMS4wLjFlL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwor LS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5zZWN1cmUtZ2V0ZW52CTIw MTMtMDItMTkgMTM6MDI6MDIuNDkyMTg3Mjc1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL21kNS9tZDVfZGdzdC5jCTIwMTMtMDItMTkgMTM6MDI6MDIuNTM3MTg4MjU0ICswMTAwCitA QCAtNTYsNiArNTYsOCBAQAorICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5d CisgICovCisgCisrLyogZm9yIHNlY3VyZV9nZXRlbnYgKi8KKysjZGVmaW5lIF9HTlVfU09VUkNF CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgIm1kNV9sb2NsLmgiCisgI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbHYuaD4KK0BAIC03NCw3ICs3Niw3IEBAIGNvbnN0IGNoYXIgTUQ1X3Zl cnNpb25bXT0iTUQ1IiBPUEVOU1NMX1YKKyBpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykKKyAjaWZk ZWYgT1BFTlNTTF9GSVBTCisgCXsKKy0JaWYgKEZJUFNfbW9kZSgpICYmIGdldGVudigiT1BFTlNT TF9GSVBTX05PTl9BUFBST1ZFRF9NRDVfQUxMT1ciKSA9PSBOVUxMKQorKwlpZiAoRklQU19tb2Rl KCkgJiYgc2VjdXJlX2dldGVudigiT1BFTlNTTF9GSVBTX05PTl9BUFBST1ZFRF9NRDVfQUxMT1ci KSA9PSBOVUxMKQorIAkJT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKyAgICAgICAg ICAgICAgICAgIkRpZ2VzdCBNRDUgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKTsKKyAJcmV0dXJu IHByaXZhdGVfTUQ1X0luaXQoYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vb19p bml0LmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vb19pbml0LmMKKy0tLSBv cGVuc3NsLTEuMC4xZS9jcnlwdG8vb19pbml0LmMuc2VjdXJlLWdldGVudgkyMDEzLTAyLTE5IDEz OjAyOjAyLjQyODE4NTg4MiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9vX2luaXQu YwkyMDEzLTAyLTE5IDEzOjAyOjAyLjUzODE4ODI3NiArMDEwMAorQEAgLTUyLDYgKzUyLDggQEAK KyAgKgorICAqLworIAorKy8qIGZvciBzZWN1cmVfZ2V0ZW52ICovCisrI2RlZmluZSBfR05VX1NP VVJDRQorICNpbmNsdWRlIDxlX29zLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2lm ZGVmIE9QRU5TU0xfRklQUworQEAgLTcxLDcgKzczLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9maXBz X21vZGUodm9pZCkKKyAJY2hhciBidWZbMl0gPSAiMCI7CisgCWludCBmZDsKKyAJCistCWlmIChn ZXRlbnYoIk9QRU5TU0xfRk9SQ0VfRklQU19NT0RFIikgIT0gTlVMTCkKKysJaWYgKHNlY3VyZV9n ZXRlbnYoIk9QRU5TU0xfRk9SQ0VfRklQU19NT0RFIikgIT0gTlVMTCkKKyAJCXsKKyAJCWJ1Zlsw XSA9ICcxJzsKKyAJCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9yYW5kL3JhbmRm aWxlLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vcmFuZC9yYW5kZmlsZS5j CistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3JhbmQvcmFuZGZpbGUuYy5zZWN1cmUtZ2V0ZW52 CTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL3JhbmQvcmFuZGZpbGUuYwkyMDEzLTAyLTE5IDEzOjAzOjA2Ljk3MTU5MTA1MiArMDEw MAorQEAgLTYwLDYgKzYwLDggQEAKKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykK KyAjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwCisgI2VuZGlmCisrLyogZm9yIHNlY3VyZV9nZXRl bnYgKi8KKysjZGVmaW5lIF9HTlVfU09VUkNFCisgCisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2lu Y2x1ZGUgPHN0ZGlvLmg+CitAQCAtMjc3LDggKzI3OSw3IEBAIGNvbnN0IGNoYXIgKlJBTkRfZmls ZV9uYW1lKGNoYXIgKmJ1Ziwgc2kKKyAJc3RydWN0IHN0YXQgc2I7CisgI2VuZGlmCisgCistCWlm IChPUEVOU1NMX2lzc2V0dWdpZCgpID09IDApCistCQlzPWdldGVudigiUkFOREZJTEUiKTsKKysJ cz1zZWN1cmVfZ2V0ZW52KCJSQU5ERklMRSIpOworIAlpZiAocyAhPSBOVUxMICYmICpzICYmIHN0 cmxlbihzKSArIDEgPCBzaXplKQorIAkJeworIAkJaWYgKEJVRl9zdHJsY3B5KGJ1ZixzLHNpemUp ID49IHNpemUpCitAQCAtMjg2LDggKzI4Nyw3IEBAIGNvbnN0IGNoYXIgKlJBTkRfZmlsZV9uYW1l KGNoYXIgKmJ1Ziwgc2kKKyAJCX0KKyAJZWxzZQorIAkJeworLQkJaWYgKE9QRU5TU0xfaXNzZXR1 Z2lkKCkgPT0gMCkKKy0JCQlzPWdldGVudigiSE9NRSIpOworKwkJcz1zZWN1cmVfZ2V0ZW52KCJI T01FIik7CisgI2lmZGVmIERFRkFVTFRfSE9NRQorIAkJaWYgKHMgPT0gTlVMTCkKKyAJCQl7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4xZS9jcnlwdG8veDUwOS9ieV9kaXIuYy5zZWN1cmUtZ2V0ZW52 IG9wZW5zc2wtMS4wLjFlL2NyeXB0by94NTA5L2J5X2Rpci5jCistLS0gb3BlbnNzbC0xLjAuMWUv Y3J5cHRvL3g1MDkvYnlfZGlyLmMuc2VjdXJlLWdldGVudgkyMDEzLTAyLTExIDE2OjI2OjA0LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by94NTA5L2J5X2Rpci5jCTIw MTMtMDItMTkgMTM6MDI6MDIuNTM5MTg4Mjk4ICswMTAwCitAQCAtNTYsNiArNTYsOCBAQAorICAq IFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgICovCisgCisrLyogZm9yIHNl Y3VyZV9nZXRlbnYgKi8KKysjZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHN0ZGlvLmg+ CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KK0BAIC0xMzUsNyArMTM3 LDcgQEAgc3RhdGljIGludCBkaXJfY3RybChYNTA5X0xPT0tVUCAqY3R4LCBpbgorIAljYXNlIFg1 MDlfTF9BRERfRElSOgorIAkJaWYgKGFyZ2wgPT0gWDUwOV9GSUxFVFlQRV9ERUZBVUxUKQorIAkJ CXsKKy0JCQlkaXI9KGNoYXIgKilnZXRlbnYoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnYo KSk7CisrCQkJZGlyPShjaGFyICopc2VjdXJlX2dldGVudihYNTA5X2dldF9kZWZhdWx0X2NlcnRf ZGlyX2VudigpKTsKKyAJCQlpZiAoZGlyKQorIAkJCQlyZXQ9YWRkX2NlcnRfZGlyKGxkLGRpcixY NTA5X0ZJTEVUWVBFX1BFTSk7CisgCQkJZWxzZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvY3J5 cHRvL3g1MDkvYnlfZmlsZS5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3g1 MDkvYnlfZmlsZS5jCistLS0gb3BlbnNzbC0xLjAuMWUvY3J5cHRvL3g1MDkvYnlfZmlsZS5jLnNl Y3VyZS1nZXRlbnYJMjAxMy0wMi0xOSAxMzowMjowMi4yMzYxODE3MDEgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xZS9jcnlwdG8veDUwOS9ieV9maWxlLmMJMjAxMy0wMi0xOSAxMzowMjowMi41NTQx ODg2MjQgKzAxMDAKK0BAIC01Niw2ICs1Niw4IEBACisgICogW2luY2x1ZGluZyB0aGUgR05VIFB1 YmxpYyBMaWNlbmNlLl0KKyAgKi8KKyAKKysvKiBmb3Igc2VjdXJlX2dldGVudiAqLworKyNkZWZp bmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8dGltZS5oPgor ICNpbmNsdWRlIDxlcnJuby5oPgorQEAgLTEwMCw3ICsxMDIsNyBAQCBzdGF0aWMgaW50IGJ5X2Zp bGVfY3RybChYNTA5X0xPT0tVUCAqY3R4CisgCWNhc2UgWDUwOV9MX0ZJTEVfTE9BRDoKKyAJCWlm IChhcmdsID09IFg1MDlfRklMRVRZUEVfREVGQVVMVCkKKyAJCQl7CistCQkJZmlsZSA9IChjaGFy ICopZ2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpKTsKKysJCQlmaWxlID0g KGNoYXIgKilzZWN1cmVfZ2V0ZW52KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpKTsK KyAJCQlpZiAoZmlsZSkKKyAJCQkJb2sgPSAoWDUwOV9sb2FkX2NlcnRfY3JsX2ZpbGUoY3R4LGZp bGUsCisgCQkJCQkgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSkgIT0gMCk7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xZS9jcnlwdG8veDUwOS94NTA5X3ZmeS5jLnNlY3VyZS1nZXRlbnYgb3BlbnNzbC0x LjAuMWUvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworLS0tIG9wZW5zc2wtMS4wLjFlL2NyeXB0by94 NTA5L3g1MDlfdmZ5LmMuc2VjdXJlLWdldGVudgkyMDEzLTAyLTExIDE2OjI2OjA0LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMJMjAxMy0w Mi0xOSAxMzowMjowMi41NTYxODg2NjggKzAxMDAKK0BAIC01Niw2ICs1Niw4IEBACisgICogW2lu Y2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAgKi8KKyAKKysvKiBmb3Igc2VjdXJl X2dldGVudiAqLworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAj aW5jbHVkZSA8dGltZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorQEAgLTQ4MSw3ICs0ODMsNyBA QCBzdGF0aWMgaW50IGNoZWNrX2NoYWluX2V4dGVuc2lvbnMoWDUwOV9TCisgCQkJISEoY3R4LT5w YXJhbS0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19BTExPV19QUk9YWV9DRVJUUyk7CisgCQkvKiBBIGhh Y2sgdG8ga2VlcCBwZW9wbGUgd2hvIGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZWlyCisgCQkgICBz b2Z0d2FyZSBoYXBweSAqLworLQkJaWYgKGdldGVudigiT1BFTlNTTF9BTExPV19QUk9YWV9DRVJU UyIpKQorKwkJaWYgKHNlY3VyZV9nZXRlbnYoIk9QRU5TU0xfQUxMT1dfUFJPWFlfQ0VSVFMiKSkK KyAJCQlhbGxvd19wcm94eV9jZXJ0cyA9IDE7CisgCQlwdXJwb3NlID0gY3R4LT5wYXJhbS0+cHVy cG9zZTsKKyAJCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFlL2VuZ2luZXMvY2Nnb3N0L2dvc3Rf Y3RsLmMuc2VjdXJlLWdldGVudiBvcGVuc3NsLTEuMC4xZS9lbmdpbmVzL2NjZ29zdC9nb3N0X2N0 bC5jCistLS0gb3BlbnNzbC0xLjAuMWUvZW5naW5lcy9jY2dvc3QvZ29zdF9jdGwuYy5zZWN1cmUt Z2V0ZW52CTIwMTMtMDItMTEgMTY6MjY6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMWUvZW5naW5lcy9jY2dvc3QvZ29zdF9jdGwuYwkyMDEzLTAyLTE5IDEzOjAyOjAyLjU1NzE4 ODY5MCArMDEwMAorQEAgLTYsNiArNiw4IEBACisgICogICAgICAgIEltcGxlbWVudGF0aW9uIG9m IGNvbnRyb2wgY29tbWFuZHMgZm9yIEdPU1QgZW5naW5lICAgICAgICAgICoKKyAgKiAgICAgICAg ICAgIE9wZW5TU0wgMC45LjkgbGlicmFyaWVzIHJlcXVpcmVkICAgICAgICAgICAgICAgICAgICAg ICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLyAgICAgICAgICAgIAorKy8qIGZvciBzZWN1cmVfZ2V0ZW52 ICovCisrI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVk ZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CitAQCAtNjUsNyArNjcs NyBAQCBjb25zdCBjaGFyICpnZXRfZ29zdF9lbmdpbmVfcGFyYW0oaW50IHBhCisgCQl7CisgCQly ZXR1cm4gZ29zdF9wYXJhbXNbcGFyYW1dOworIAkJfQorLQl0bXAgPSBnZXRlbnYoZ29zdF9lbnZu YW1lc1twYXJhbV0pOworKwl0bXAgPSBzZWN1cmVfZ2V0ZW52KGdvc3RfZW52bmFtZXNbcGFyYW1d KTsKKyAJaWYgKHRtcCkgCisgCQl7CisgCQlpZiAoZ29zdF9wYXJhbXNbcGFyYW1dKSBPUEVOU1NM X2ZyZWUoZ29zdF9wYXJhbXNbcGFyYW1dKTsKK0BAIC03OSw3ICs4MSw3IEBAIGludCBnb3N0X3Nl dF9kZWZhdWx0X3BhcmFtKGludCBwYXJhbSwgY28KKyAJeworIAljb25zdCBjaGFyICp0bXA7Cisg CWlmIChwYXJhbSA8MCB8fCBwYXJhbSA+R09TVF9QQVJBTV9NQVgpIHJldHVybiAwOworLQl0bXAg PSBnZXRlbnYoZ29zdF9lbnZuYW1lc1twYXJhbV0pOworKwl0bXAgPSBzZWN1cmVfZ2V0ZW52KGdv c3RfZW52bmFtZXNbcGFyYW1dKTsKKyAJLyogaWYgdGhlcmUgaXMgdmFsdWUgaW4gdGhlIGVudmly b25tZW50LCB1c2UgaXQsIGVsc2UgLXBhc3NlZCBzdHJpbmcgKiAqLworIAlpZiAoIXRtcCkgdG1w PXZhbHVlOworIAlpZiAoZ29zdF9wYXJhbXNbcGFyYW1dKSBPUEVOU1NMX2ZyZWUoZ29zdF9wYXJh bXNbcGFyYW1dKTsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLnNwZWMgYi9vcGVuc3NsLnNwZWMKaW5k ZXggYjUzNTJlMy4uNWIxMzJmMCAxMDA2NDQKLS0tIGEvb3BlbnNzbC5zcGVjCisrKyBiL29wZW5z c2wuc3BlYwpAQCAtMjAsOSArMjAsOSBAQAogCiBTdW1tYXJ5OiBVdGlsaXRpZXMgZnJvbSB0aGUg Z2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IHdpdGggVExTIGltcGxlbWVudGF0 aW9uCiBOYW1lOiBvcGVuc3NsCi1WZXJzaW9uOiAxLjAuMWMKK1ZlcnNpb246IDEuMC4xZQogIyBE byBub3QgZm9yZ2V0IHRvIGJ1bXAgU0hMSUJfVkVSU0lPTiBvbiB2ZXJzaW9uIHVwZ3JhZGVzCi1S ZWxlYXNlOiAxMiV7P2Rpc3R9CitSZWxlYXNlOiAxJXs/ZGlzdH0KIEVwb2NoOiAxCiAjIFdlIGhh dmUgdG8gcmVtb3ZlIGNlcnRhaW4gcGF0ZW50ZWQgYWxnb3JpdGhtcyBmcm9tIHRoZSBvcGVuc3Ns IHNvdXJjZQogIyB0YXJiYWxsIHdpdGggdGhlIGhvYmJsZS1vcGVuc3NsIHNjcmlwdCB3aGljaCBp cyBpbmNsdWRlZCBiZWxvdy4KQEAgLTQ3LDcgKzQ3LDcgQEAgUGF0Y2g4OiBvcGVuc3NsLTEuMC4x Yy1wZXJsZmluZC5wYXRjaAogUGF0Y2g5OiBvcGVuc3NsLTEuMC4xYy1hbGlhc2luZy5wYXRjaAog IyBCdWcgZml4ZXMKIFBhdGNoMjM6IG9wZW5zc2wtMS4wLjFjLWRlZmF1bHQtcGF0aHMucGF0Y2gK LVBhdGNoMjQ6IG9wZW5zc2wtMS4wLjFjLWlzc3Vlci1oYXNoLnBhdGNoCitQYXRjaDI0OiBvcGVu c3NsLTEuMC4xZS1pc3N1ZXItaGFzaC5wYXRjaAogIyBGdW5jdGlvbmFsaXR5IGNoYW5nZXMKIFBh dGNoMzM6IG9wZW5zc2wtMS4wLjAtYmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVuc3Ns LTAuOS42LXg1MDkucGF0Y2gKQEAgLTU1LDcgKzU1LDcgQEAgUGF0Y2gzNTogb3BlbnNzbC0wLjku OGotdmVyc2lvbi1hZGQtZW5naW5lcy5wYXRjaAogUGF0Y2gzNjogb3BlbnNzbC0xLjAuMGUtZG9j LW5vZW9mLnBhdGNoCiBQYXRjaDM4OiBvcGVuc3NsLTEuMC4xLWJldGEyLXNzbC1vcC1hbGwucGF0 Y2gKIFBhdGNoMzk6IG9wZW5zc2wtMS4wLjFjLWlwdjYtYXBwcy5wYXRjaAotUGF0Y2g0MDogb3Bl bnNzbC0xLjAuMWMtZmlwcy5wYXRjaAorUGF0Y2g0MDogb3BlbnNzbC0xLjAuMWUtZmlwcy5wYXRj aAogUGF0Y2g0NTogb3BlbnNzbC0wLjkuOGotZW52LW5vemxpYi5wYXRjaAogUGF0Y2g0Nzogb3Bl bnNzbC0xLjAuMC1iZXRhNS1yZWFkbWUtd2FybmluZy5wYXRjaAogUGF0Y2g0OTogb3BlbnNzbC0x LjAuMWEtYWxnby1kb2MucGF0Y2gKQEAgLTY3LDE2ICs2NywxMSBAQCBQYXRjaDYwOiBvcGVuc3Ns LTEuMC4wZC1hcHBzLWRnc3QucGF0Y2gKIFBhdGNoNjM6IG9wZW5zc2wtMS4wLjBkLXhtcHAtc3Rh cnR0bHMucGF0Y2gKIFBhdGNoNjU6IG9wZW5zc2wtMS4wLjBlLWNoaWwtZml4ZXMucGF0Y2gKIFBh dGNoNjY6IG9wZW5zc2wtMS4wLjEtcGtnY29uZmlnLWtyYjUucGF0Y2gKLVBhdGNoNjc6IG9wZW5z c2wtMS4wLjAtZmlwcy1wa2NzOC5wYXRjaAotUGF0Y2g2ODogb3BlbnNzbC0xLjAuMWMtc2VjdXJl LWdldGVudi5wYXRjaAorUGF0Y2g2ODogb3BlbnNzbC0xLjAuMWUtc2VjdXJlLWdldGVudi5wYXRj aAogUGF0Y2g2OTogb3BlbnNzbC0xLjAuMWMtZGgtMTAyNC5wYXRjaAogIyBCYWNrcG9ydGVkIGZp eGVzIGluY2x1ZGluZyBzZWN1cml0eSBmaXhlcwogUGF0Y2g4MTogb3BlbnNzbC0xLjAuMS1iZXRh Mi1wYWRsb2NrNjQucGF0Y2gKLVBhdGNoODI6IG9wZW5zc2wtMS4wLjFjLWJhY2twb3J0cy5wYXRj aAotUGF0Y2g4Mzogb3BlbnNzbC0xLjAuMWMtY2NtLWluaXQtc3RyLnBhdGNoCi1QYXRjaDg0OiBv cGVuc3NsLTEuMC4xYy1iYWNrcG9ydHMyLnBhdGNoCi1QYXRjaDg1OiBvcGVuc3NsLTEuMC4xYy1t YW5maXgucGF0Y2gKLVBhdGNoODY6IG9wZW5zc2wtMS4wLjFjLXZlcmlmeS1lcnJvci5wYXRjaAor UGF0Y2g4Mjogb3BlbnNzbC0xLjAuMWUtYmFja3BvcnRzLnBhdGNoCiAKIExpY2Vuc2U6IE9wZW5T U0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCkBAIC0xNzUsMTYgKzE3MCwx MSBAQCBmcm9tIG90aGVyIGZvcm1hdHMgdG8gdGhlIGZvcm1hdHMgdXNlZCBieSB0aGUgT3BlblNT TCB0b29sa2l0LgogJXBhdGNoNjMgLXAxIC1iIC5zdGFydHRscwogJXBhdGNoNjUgLXAxIC1iIC5j aGlsCiAlcGF0Y2g2NiAtcDEgLWIgLmtyYjUKLSVwYXRjaDY3IC1wMSAtYiAucGtjczgKICVwYXRj aDY4IC1wMSAtYiAuc2VjdXJlLWdldGVudgogJXBhdGNoNjkgLXAxIC1iIC5kaDEwMjQKIAogJXBh dGNoODEgLXAxIC1iIC5wYWRsb2NrNjQKICVwYXRjaDgyIC1wMSAtYiAuYmFja3BvcnRzCi0lcGF0 Y2g4MyAtcDEgLWIgLmluaXQtc3RyCi0lcGF0Y2g4NCAtcDEgLWIgLmJhY2twb3J0czIKLSVwYXRj aDg1IC1wMSAtYiAubWFuZml4Ci0lcGF0Y2g4NiAtcDEgLWIgLnZlcmlmeQogCiAjIE1vZGlmeSB0 aGUgdmFyaW91cyBwZXJsIHNjcmlwdHMgdG8gcmVmZXJlbmNlIHBlcmwgaW4gdGhlIHJpZ2h0IGxv Y2F0aW9uLgogcGVybCB1dGlsL3BlcmxwYXRoLnBsIGBkaXJuYW1lICV7X19wZXJsfWAKQEAgLTQ0 MCw2ICs0MzAsOSBAQCBybSAtcmYgJFJQTV9CVUlMRF9ST09ULyV7X2xpYmRpcn0vZmlwc2Nhbmlz dGVyLioKICVwb3N0dW4gbGlicyAtcCAvc2Jpbi9sZGNvbmZpZwogCiAlY2hhbmdlbG9nCisqIFR1 ZSBGZWIgMTkgMjAxMyBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29tPiAxLjAuMWUtMQorLSBu ZXcgdXBzdHJlYW0gdmVyc2lvbgorCiAqIFdlZCBKYW4gMzAgMjAxMyBUb21hcyBNcmF6IDx0bXJh ekByZWRoYXQuY29tPiAxLjAuMWMtMTIKIC0gbW9yZSBmaXhlcyBmcm9tIHVwc3RyZWFtCiAtIGZp eCBlcnJvcnMgaW4gbWFudWFsIGNhdXNpbmcgYnVpbGQgZmFpbHVyZSAoIzkwNDc3NykKCmRpZmYg LS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRleCBlZDUzNDUzLi5mNGJhM2ExIDEwMDY0NAot LS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEgKzEgQEAKLTNiNzViYjIxNDUyNzY3ZWQx Nzc5ZmJjZTMyNjI1Yjk1ICBvcGVuc3NsLTEuMC4xYy11c2EudGFyLnh6Cis2NDE2NzdjMTE2ODY1 ZTYwNjAxNjc3MzI5YjUxNGUyZCAgb3BlbnNzbC0xLjAuMWUtdXNhLnRhci54ego=