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: add support for RFC 5649 Date: Tue, 09 Jun 2026 12:43:26 GMT Message-ID: <178100900644.1.488957258547207488.rpms-openssl-11aeae71ed45@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 11aeae71ed4502950b80368737d830fa5547a5ef QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IDExYWVhZTcxZWQ0NTAyOTUwYjgwMzY4NzM3ZDgz MGZhNTU0N2E1ZWYKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTQtMDktMDhUMTU6MjI6NDQrMDI6MDAKU3RhdHMgIDogKzEyNDUvLTEgaW4g MiBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvb3Bl bnNzbC9jLzExYWVhZTcxZWQ0NTAyOTUwYjgwMzY4NzM3ZDgzMGZhNTU0N2E1ZWY/YnJhbmNoPXJl YmFzZV80MGJldGEKCkxvZzoKYWRkIHN1cHBvcnQgZm9yIFJGQyA1NjQ5CgotLS0KZGlmZiAtLWdp dCBhL29wZW5zc2wtMS4wLjFpLWV2cC13cmFwLnBhdGNoIGIvb3BlbnNzbC0xLjAuMWktZXZwLXdy YXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmZmVmNQotLS0g L2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjFpLWV2cC13cmFwLnBhdGNoCkBAIC0wLDAgKzEs MTIzOSBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2Flcy9hZXNfd3JhcC5jLndy YXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2Flcy9hZXNfd3JhcC5jCistLS0gb3BlbnNzbC0xLjAu MWkvY3J5cHRvL2Flcy9hZXNfd3JhcC5jLndyYXAJMjAxNC0wOC0wNiAyMzoxMDo1Ni4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vYWVzL2Flc193cmFwLmMJMjAxNC0w OS0wOCAxNTowNzoyNy4zMzE5OTQ0OTAgKzAyMDAKK0BAIC01MywyMDcgKzUzLDE4IEBACisgCisg I2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CistI2luY2x1 ZGUgPG9wZW5zc2wvYmlvLmg+CistCistc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVmYXVs dF9pdltdID0geworLSAgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwgMHhBNiwg MHhBNiwKKy19OworKyNpbmNsdWRlIDxvcGVuc3NsL21vZGVzLmg+CisgCisgaW50IEFFU193cmFw X2tleShBRVNfS0VZICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorIAkJdW5zaWduZWQg Y2hhciAqb3V0LAorIAkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxl bikKKyAJeworLQl1bnNpZ25lZCBjaGFyICpBLCBCWzE2XSwgKlI7CistCXVuc2lnbmVkIGludCBp LCBqLCB0OworLQlpZiAoKGlubGVuICYgMHg3KSB8fCAoaW5sZW4gPCA4KSkKKy0JCXJldHVybiAt MTsKKy0JQSA9IEI7CistCXQgPSAxOworLQltZW1jcHkob3V0ICsgOCwgaW4sIGlubGVuKTsKKy0J aWYgKCFpdikKKy0JCWl2ID0gZGVmYXVsdF9pdjsKKy0KKy0JbWVtY3B5KEEsIGl2LCA4KTsKKy0K Ky0JZm9yIChqID0gMDsgaiA8IDY7IGorKykKKy0JCXsKKy0JCVIgPSBvdXQgKyA4OworLQkJZm9y IChpID0gMDsgaSA8IGlubGVuOyBpICs9IDgsIHQrKywgUiArPSA4KQorLQkJCXsKKy0JCQltZW1j cHkoQiArIDgsIFIsIDgpOworLQkJCUFFU19lbmNyeXB0KEIsIEIsIGtleSk7CistCQkJQVs3XSBe PSAodW5zaWduZWQgY2hhcikodCAmIDB4ZmYpOworLQkJCWlmICh0ID4gMHhmZikJCistCQkJCXsK Ky0JCQkJQVs2XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gOCkgJiAweGZmKTsKKy0JCQkJQVs1 XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gMTYpICYgMHhmZik7CistCQkJCUFbNF0gXj0gKHVu c2lnbmVkIGNoYXIpKCh0ID4+IDI0KSAmIDB4ZmYpOworLQkJCQl9CistCQkJbWVtY3B5KFIsIEIg KyA4LCA4KTsKKy0JCQl9CistCQl9CistCW1lbWNweShvdXQsIEEsIDgpOworLQlyZXR1cm4gaW5s ZW4gKyA4OworKwlyZXR1cm4gQ1JZUFRPXzEyOF93cmFwKGtleSwgaXYsIG91dCwgaW4sIGlubGVu LCAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CisgCX0KKyAKKyBpbnQgQUVTX3Vud3JhcF9rZXko QUVTX0tFWSAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKyAJCXVuc2lnbmVkIGNoYXIg Km91dCwKKyAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4pCisg CXsKKy0JdW5zaWduZWQgY2hhciAqQSwgQlsxNl0sICpSOworLQl1bnNpZ25lZCBpbnQgaSwgaiwg dDsKKy0JaW5sZW4gLT0gODsKKy0JaWYgKGlubGVuICYgMHg3KQorLQkJcmV0dXJuIC0xOworLQlp ZiAoaW5sZW4gPCA4KQorLQkJcmV0dXJuIC0xOworLQlBID0gQjsKKy0JdCA9ICA2ICogKGlubGVu ID4+IDMpOworLQltZW1jcHkoQSwgaW4sIDgpOworLQltZW1jcHkob3V0LCBpbiArIDgsIGlubGVu KTsKKy0JZm9yIChqID0gMDsgaiA8IDY7IGorKykKKy0JCXsKKy0JCVIgPSBvdXQgKyBpbmxlbiAt IDg7CistCQlmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkgKz0gOCwgdC0tLCBSIC09IDgpCistCQkJ eworLQkJCUFbN10gXj0gKHVuc2lnbmVkIGNoYXIpKHQgJiAweGZmKTsKKy0JCQlpZiAodCA+IDB4 ZmYpCQorLQkJCQl7CistCQkJCUFbNl0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDgpICYgMHhm Zik7CistCQkJCUFbNV0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDE2KSAmIDB4ZmYpOworLQkJ CQlBWzRdIF49ICh1bnNpZ25lZCBjaGFyKSgodCA+PiAyNCkgJiAweGZmKTsKKy0JCQkJfQorLQkJ CW1lbWNweShCICsgOCwgUiwgOCk7CistCQkJQUVTX2RlY3J5cHQoQiwgQiwga2V5KTsKKy0JCQlt ZW1jcHkoUiwgQiArIDgsIDgpOworLQkJCX0KKy0JCX0KKy0JaWYgKCFpdikKKy0JCWl2ID0gZGVm YXVsdF9pdjsKKy0JaWYgKG1lbWNtcChBLCBpdiwgOCkpCistCQl7CistCQlPUEVOU1NMX2NsZWFu c2Uob3V0LCBpbmxlbik7CistCQlyZXR1cm4gMDsKKy0JCX0KKy0JcmV0dXJuIGlubGVuOworLQl9 CistCistI2lmZGVmIEFFU19XUkFQX1RFU1QKKy0KKy1pbnQgQUVTX3dyYXBfdW53cmFwX3Rlc3Qo Y29uc3QgdW5zaWduZWQgY2hhciAqa2VrLCBpbnQga2V5Yml0cywKKy0JCQkgY29uc3QgdW5zaWdu ZWQgY2hhciAqaXYsCistCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVvdXQsCistCQkJIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbikKKy0JeworLQl1bnNpZ25lZCBjaGFyICpv dG1wID0gTlVMTCwgKnB0bXAgPSBOVUxMOworLQlpbnQgciwgcmV0ID0gMDsKKy0JQUVTX0tFWSB3 Y3R4OworLQlvdG1wID0gT1BFTlNTTF9tYWxsb2Moa2V5bGVuICsgOCk7CistCXB0bXAgPSBPUEVO U1NMX21hbGxvYyhrZXlsZW4pOworLQlpZiAoIW90bXAgfHwgIXB0bXApCistCQlyZXR1cm4gMDsK Ky0JaWYgKEFFU19zZXRfZW5jcnlwdF9rZXkoa2VrLCBrZXliaXRzLCAmd2N0eCkpCistCQlnb3Rv IGVycjsKKy0JciA9IEFFU193cmFwX2tleSgmd2N0eCwgaXYsIG90bXAsIGtleSwga2V5bGVuKTsK Ky0JaWYgKHIgPD0gMCkKKy0JCWdvdG8gZXJyOworLQorLQlpZiAoZW91dCAmJiBtZW1jbXAoZW91 dCwgb3RtcCwga2V5bGVuKSkKKy0JCWdvdG8gZXJyOworLQkJCistCWlmIChBRVNfc2V0X2RlY3J5 cHRfa2V5KGtlaywga2V5Yml0cywgJndjdHgpKQorLQkJZ290byBlcnI7CistCXIgPSBBRVNfdW53 cmFwX2tleSgmd2N0eCwgaXYsIHB0bXAsIG90bXAsIHIpOworLQorLQlpZiAobWVtY21wKGtleSwg cHRtcCwga2V5bGVuKSkKKy0JCWdvdG8gZXJyOworLQorLQlyZXQgPSAxOworLQorLQllcnI6Cist CWlmIChvdG1wKQorLQkJT1BFTlNTTF9mcmVlKG90bXApOworLQlpZiAocHRtcCkKKy0JCU9QRU5T U0xfZnJlZShwdG1wKTsKKy0KKy0JcmV0dXJuIHJldDsKKy0KKysJcmV0dXJuIENSWVBUT18xMjhf dW53cmFwKGtleSwgaXYsIG91dCwgaW4sIGlubGVuLCAoYmxvY2sxMjhfZilBRVNfZGVjcnlwdCk7 CisgCX0KKy0KKy0KKy0KKy1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisteworLQor LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtla1tdID0geworLSAgMHgwMCwgMHgwMSwgMHgw MiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKy0gIDB4MDgsIDB4MDksIDB4MGEsIDB4 MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCistICAweDEwLCAweDExLCAweDEyLCAweDEzLCAw eDE0LCAweDE1LCAweDE2LCAweDE3LAorLSAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywg MHgxZCwgMHgxZSwgMHgxZgorLX07CistCistc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5 W10gPSB7CistICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3 LAorLSAgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZiwKKy0g IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCistICAweDA4 LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmCistfTsKKy0KKy1zdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBlMVtdID0geworLSAgMHgxZiwgMHhhNiwgMHg4YiwgMHgw YSwgMHg4MSwgMHgxMiwgMHhiNCwgMHg0NywKKy0gIDB4YWUsIDB4ZjMsIDB4NGIsIDB4ZDgsIDB4 ZmIsIDB4NWEsIDB4N2IsIDB4ODIsCistICAweDlkLCAweDNlLCAweDg2LCAweDIzLCAweDcxLCAw eGQyLCAweGNmLCAweGU1CistfTsKKy0KKy1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlMltd ID0geworLSAgMHg5NiwgMHg3NywgMHg4YiwgMHgyNSwgMHhhZSwgMHg2YywgMHhhNCwgMHgzNSwK Ky0gIDB4ZjksIDB4MmIsIDB4NWIsIDB4OTcsIDB4YzAsIDB4NTAsIDB4YWUsIDB4ZDIsCistICAw eDQ2LCAweDhhLCAweGI4LCAweGExLCAweDdhLCAweGQ4LCAweDRlLCAweDVkCistfTsKKy0KKy1z dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlM1tdID0geworLSAgMHg2NCwgMHhlOCwgMHhjMywg MHhmOSwgMHhjZSwgMHgwZiwgMHg1YiwgMHhhMiwKKy0gIDB4NjMsIDB4ZTksIDB4NzcsIDB4Nzks IDB4MDUsIDB4ODEsIDB4OGEsIDB4MmEsCistICAweDkzLCAweGM4LCAweDE5LCAweDFlLCAweDdk LCAweDZlLCAweDhhLCAweGU3CistfTsKKy0KKy1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBl NFtdID0geworLSAgMHgwMywgMHgxZCwgMHgzMywgMHgyNiwgMHg0ZSwgMHgxNSwgMHhkMywgMHgz MiwKKy0gIDB4NjgsIDB4ZjIsIDB4NGUsIDB4YzIsIDB4NjAsIDB4NzQsIDB4M2UsIDB4ZGMsCist ICAweGUxLCAweGM2LCAweGM3LCAweGRkLCAweGVlLCAweDcyLCAweDVhLCAweDkzLAorLSAgMHg2 YiwgMHhhOCwgMHgxNCwgMHg5MSwgMHg1YywgMHg2NywgMHg2MiwgMHhkMgorLX07CistCistc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZTVbXSA9IHsKKy0gIDB4YTgsIDB4ZjksIDB4YmMsIDB4 MTYsIDB4MTIsIDB4YzYsIDB4OGIsIDB4M2YsCistICAweGY2LCAweGU2LCAweGY0LCAweGZiLCAw eGUzLCAweDBlLCAweDcxLCAweGU0LAorLSAgMHg3NiwgMHg5YywgMHg4YiwgMHg4MCwgMHhhMywg MHgyYywgMHhiOCwgMHg5NSwKKy0gIDB4OGMsIDB4ZDUsIDB4ZDEsIDB4N2QsIDB4NmIsIDB4MjUs IDB4NGQsIDB4YTEKKy19OworLQorLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGU2W10gPSB7 CistICAweDI4LCAweGM5LCAweGY0LCAweDA0LCAweGM0LCAweGI4LCAweDEwLCAweGY0LAorLSAg MHhjYiwgMHhjYywgMHhiMywgMHg1YywgMHhmYiwgMHg4NywgMHhmOCwgMHgyNiwKKy0gIDB4M2Ys IDB4NTcsIDB4ODYsIDB4ZTIsIDB4ZDgsIDB4MGUsIDB4ZDMsIDB4MjYsCistICAweGNiLCAweGM3 LCAweGYwLCAweGU3LCAweDFhLCAweDk5LCAweGY0LCAweDNiLAorLSAgMHhmYiwgMHg5OCwgMHg4 YiwgMHg5YiwgMHg3YSwgMHgwMiwgMHhkZCwgMHgyMQorLX07CistCistCUFFU19LRVkgd2N0eCwg eGN0eDsKKy0JaW50IHJldDsKKy0JcmV0ID0gQUVTX3dyYXBfdW53cmFwX3Rlc3Qoa2VrLCAxMjgs IE5VTEwsIGUxLCBrZXksIDE2KTsKKy0JZnByaW50ZihzdGRlcnIsICJLZXkgdGVzdCByZXN1bHQg JWRcbiIsIHJldCk7CistCXJldCA9IEFFU193cmFwX3Vud3JhcF90ZXN0KGtlaywgMTkyLCBOVUxM LCBlMiwga2V5LCAxNik7CistCWZwcmludGYoc3RkZXJyLCAiS2V5IHRlc3QgcmVzdWx0ICVkXG4i LCByZXQpOworLQlyZXQgPSBBRVNfd3JhcF91bndyYXBfdGVzdChrZWssIDI1NiwgTlVMTCwgZTMs IGtleSwgMTYpOworLQlmcHJpbnRmKHN0ZGVyciwgIktleSB0ZXN0IHJlc3VsdCAlZFxuIiwgcmV0 KTsKKy0JcmV0ID0gQUVTX3dyYXBfdW53cmFwX3Rlc3Qoa2VrLCAxOTIsIE5VTEwsIGU0LCBrZXks IDI0KTsKKy0JZnByaW50ZihzdGRlcnIsICJLZXkgdGVzdCByZXN1bHQgJWRcbiIsIHJldCk7Cist CXJldCA9IEFFU193cmFwX3Vud3JhcF90ZXN0KGtlaywgMjU2LCBOVUxMLCBlNSwga2V5LCAyNCk7 CistCWZwcmludGYoc3RkZXJyLCAiS2V5IHRlc3QgcmVzdWx0ICVkXG4iLCByZXQpOworLQlyZXQg PSBBRVNfd3JhcF91bndyYXBfdGVzdChrZWssIDI1NiwgTlVMTCwgZTYsIGtleSwgMzIpOworLQlm cHJpbnRmKHN0ZGVyciwgIktleSB0ZXN0IHJlc3VsdCAlZFxuIiwgcmV0KTsKKy19CistCQorLQkK Ky0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvY19hbGxjLmMud3Jh cCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2NfYWxsYy5jCistLS0gb3BlbnNzbC0xLjAuMWkv Y3J5cHRvL2V2cC9jX2FsbGMuYy53cmFwCTIwMTQtMDktMDggMTU6MDc6MjcuMjU0OTkyNzE3ICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDE0LTA5LTA4IDE1 OjA3OjI3LjMzMTk5NDQ5MCArMDIwMAorQEAgLTk4LDYgKzk4LDcgQEAgdm9pZCBPcGVuU1NMX2Fk ZF9hbGxfY2lwaGVycyh2b2lkKQorIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VjYigpKTsKKyAJ RVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf ZWRlMygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX3dyYXAoKSk7CisgI2VuZGlm CisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1JDNAorQEAgLTE3Nyw2ICsxNzgsOCBAQCB2b2lkIE9w ZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4 X2N0cigpKTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworIAlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzEyOF94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4 X3dyYXAoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXBfcGFkKCkpOworIAlF VlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiQUVTMTI4Iik7CisgCUVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJhZXMxMjgiKTsKKyAJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfZWNiKCkpOworQEAgLTE4Nyw2ICsxOTAsOCBAQCB2b2lkIE9wZW5TU0xfYWRk X2FsbF9jaXBoZXJzKHZvaWQpCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsK KyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOworIAlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9nY20oKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXAoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXBfcGFkKCkpOworIAlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiQUVTMTkyIik7CisgCUVWUF9hZGRfY2lwaGVyX2Fs aWFzKFNOX2Flc18xOTJfY2JjLCJhZXMxOTIiKTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfZWNiKCkpOworQEAgLTE5OCw2ICsyMDMsOCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBo ZXJzKHZvaWQpCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKKyAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1 Nl94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dyYXAoKSk7CisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dyYXBfcGFkKCkpOworIAlFVlBfYWRkX2NpcGhlcl9hbGlh cyhTTl9hZXNfMjU2X2NiYywiQUVTMjU2Iik7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Fl c18yNTZfY2JjLCJhZXMyNTYiKTsKKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFk ZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKK0BAIC0yNTAsNiArMjU3LDcgQEAgdm9pZCBPcGVuU1NM X2FkZF9hbGxfY2lwaGVycyh2b2lkKQorIAorIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZSgp KTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkpOworKwlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZTNfd3JhcCgpKTsKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQUVT CitAQCAtMjYyLDYgKzI3MCw4IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkK KyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY3RyKCkpOworIAlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzEyOF9nY20oKSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsK KysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfd3JhcCgpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfd3JhcF9wYWQoKSk7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18x MjhfY2JjLCJBRVMxMjgiKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMs ImFlczEyOCIpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7CitAQCAtMjcy LDYgKzI4Miw4IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5 Ml9jdHIoKSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xOTJfd3JhcCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x OTJfd3JhcF9wYWQoKSk7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJB RVMxOTIiKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsImFlczE5MiIp OworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7CitAQCAtMjgzLDYgKzI5NSw4 IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18yNTZfY3RyKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7 CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3h0cygpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18yNTZfd3JhcCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcF9w YWQoKSk7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsK KyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsImFlczI1NiIpOworICNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9lX2Flcy5jLndyYXAgb3BlbnNz bC0xLjAuMWkvY3J5cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2 cC9lX2Flcy5jLndyYXAJMjAxNC0wOS0wOCAxNTowNzoyNy4yNTU5OTI3NDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxNC0wOS0wOCAxNTowNzoyNy4zMzE5 OTQ0OTAgKzAyMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistICogQ29weXJp Z2h0IChjKSAyMDAxLTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK0BA IC0xMzg0LDQgKzEzODQsMTgwIEBAIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywxMjgsMSwx MixjY20KKyBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMTkyLDEsMTIsY2NtLENDTSxFVlBf Q0lQSF9GTEFHX0ZJUFN8Q1VTVE9NX0ZMQUdTKQorIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2Fl cywyNTYsMSwxMixjY20sQ0NNLEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCisgCisr dHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1bmlvbiB7IGRvdWJsZSBhbGlnbjsgQUVTX0tFWSBrczsg fSBrczsKKysJLyogSW5kaWNhdGVzIGlmIElWIGhhcyBiZWVuIHNldCAqLworKwl1bnNpZ25lZCBj aGFyICppdjsKKysJfSBFVlBfQUVTX1dSQVBfQ1RYOworKworK3N0YXRpYyBpbnQgYWVzX3dyYXBf aW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAor KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5j KQorKwl7CisrCUVWUF9BRVNfV1JBUF9DVFggKndjdHggPSBjdHgtPmNpcGhlcl9kYXRhOworKwlp ZiAoIWl2ICYmICFrZXkpCisrCQlyZXR1cm4gMTsKKysJaWYgKGtleSkKKysJCXsKKysJCWlmIChj dHgtPmVuY3J5cHQpCisrCQkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAq IDgsICZ3Y3R4LT5rcy5rcyk7CisrCQllbHNlCisrCQkJQUVTX3NldF9kZWNyeXB0X2tleShrZXks IGN0eC0+a2V5X2xlbiAqIDgsICZ3Y3R4LT5rcy5rcyk7CisrCQlpZiAoIWl2KQorKwkJCXdjdHgt Pml2ID0gTlVMTDsKKysJCX0KKysJaWYgKGl2KQorKwkJeworKwkJbWVtY3B5KGN0eC0+aXYsIGl2 LCBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY3R4KSk7CisrCQl3Y3R4LT5pdiA9IGN0eC0+aXY7 CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBhZXNfd3JhcF9jaXBoZXIo RVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKysJeworKwlFVlBfQUVTX1dSQVBfQ1RYICp3Y3R4 ID0gY3R4LT5jaXBoZXJfZGF0YTsKKysJc2l6ZV90IHJ2OworKwkvKiBBRVMgd3JhcCB3aXRoIHBh ZGRpbmcgaGFzIElWIGxlbmd0aCBvZiA0LCB3aXRob3V0IHBhZGRpbmcgOCAqLworKwlpbnQgcGFk ID0gRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGN0eCkgPT0gNDsKKysJLyogTm8gZmluYWwgb3Bl cmF0aW9uIHNvIGFsd2F5cyByZXR1cm4gemVybyBsZW5ndGggKi8KKysJaWYgKCFpbikKKysJCXJl dHVybiAwOworKwkvKiBJbnB1dCBsZW5ndGggbXVzdCBhbHdheXMgYmUgbm9uLXplcm8gKi8KKysJ aWYgKCFpbmxlbikKKysJCXJldHVybiAtMTsKKysJLyogSWYgZGVjcnlwdGluZyBuZWVkIGF0IGxl YXN0IDE2IGJ5dGVzIGFuZCBtdWx0aXBsZSBvZiA4ICovCisrCWlmICghY3R4LT5lbmNyeXB0ICYm IChpbmxlbiA8IDE2IHx8IGlubGVuICYgMHg3KSkKKysJCXJldHVybiAtMTsKKysJLyogSWYgbm90 IHBhZGRpbmcgaW5wdXQgbXVzdCBiZSBtdWx0aXBsZSBvZiA4ICovCisrCWlmICghcGFkICYmIGlu bGVuICYgMHg3KQorKwkJcmV0dXJuIC0xOworKwlpZiAoIW91dCkKKysJCXsKKysJCWlmIChjdHgt PmVuY3J5cHQpCisrCQkJeworKwkJCS8qIElmIHBhZGRpbmcgcm91bmQgdXAgdG8gbXVsdGlwbGUg b2YgOCAqLworKwkJCWlmIChwYWQpCisrCQkJCWlubGVuID0gKGlubGVuICsgNykvOCAqIDg7Cisr CQkJLyogOCBieXRlIHByZWZpeCAqLworKwkJCXJldHVybiBpbmxlbiArIDg7CisrCQkJfQorKwkJ ZWxzZQorKwkJCXsKKysJCQkvKiBJZiBub3QgcGFkZGluZyBvdXRwdXQgd2lsbCBiZSBleGFjdGx5 IDggYnl0ZXMKKysJCQkgKiBzbWFsbGVyIHRoYW4gaW5wdXQuIElmIHBhZGRpbmcgaXQgd2lsbCBi ZSBhdAorKwkJCSAqIGxlYXN0IDggYnl0ZXMgc21hbGxlciBidXQgd2UgZG9uJ3Qga25vdyBob3cK KysJCQkgKiBtdWNoLgorKwkJCSAqLworKwkJCXJldHVybiBpbmxlbiAtIDg7CisrCQkJfQorKwkJ fQorKwlpZiAocGFkKQorKwkJeworKwkJaWYgKGN0eC0+ZW5jcnlwdCkKKysJCQlydiA9IENSWVBU T18xMjhfd3JhcF9wYWQoJndjdHgtPmtzLmtzLCB3Y3R4LT5pdiwKKysJCQkJCQlvdXQsIGluLCBp bmxlbiwKKysJCQkJCQkoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CisrCQllbHNlCisrCQkJcnYg PSBDUllQVE9fMTI4X3Vud3JhcF9wYWQoJndjdHgtPmtzLmtzLCB3Y3R4LT5pdiwKKysJCQkJCQlv dXQsIGluLCBpbmxlbiwKKysJCQkJCQkoYmxvY2sxMjhfZilBRVNfZGVjcnlwdCk7CisrCQl9Cisr CWVsc2UKKysJCXsKKysJCWlmIChjdHgtPmVuY3J5cHQpCisrCQkJcnYgPSBDUllQVE9fMTI4X3dy YXAoJndjdHgtPmtzLmtzLCB3Y3R4LT5pdiwKKysJCQkJCQlvdXQsIGluLCBpbmxlbiwKKysJCQkJ CQkoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CisrCQllbHNlCisrCQkJcnYgPSBDUllQVE9fMTI4 X3Vud3JhcCgmd2N0eC0+a3Mua3MsIHdjdHgtPml2LAorKwkJCQkJCW91dCwgaW4sIGlubGVuLAor KwkJCQkJCShibG9jazEyOF9mKUFFU19kZWNyeXB0KTsKKysJCX0KKysJcmV0dXJuIHJ2ID8gKGlu dClydiA6IC0xOworKwl9CisrCisrI2RlZmluZSBXUkFQX0ZMQUdTCShFVlBfQ0lQSF9XUkFQX01P REUgfCBFVlBfQ0lQSF9GTEFHX0ZJUFMgXAorKwkJfCBFVlBfQ0lQSF9DVVNUT01fSVYgfCBFVlBf Q0lQSF9GTEFHX0NVU1RPTV9DSVBIRVIgXAorKwkJfCBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklU IHwgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCisrCisrc3RhdGljIGNvbnN0IEVWUF9DSVBI RVIgYWVzXzEyOF93cmFwID0geworKwlOSURfaWRfYWVzMTI4X3dyYXAsCisrCTgsIDE2LCA4LCBX UkFQX0ZMQUdTLAorKwlhZXNfd3JhcF9pbml0X2tleSwgYWVzX3dyYXBfY2lwaGVyLAorKwlOVUxM LAorKwlzaXplb2YoRVZQX0FFU19XUkFQX0NUWCksCisrCU5VTEwsTlVMTCxOVUxMLE5VTEwgfTsK KysKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF93cmFwKHZvaWQpCisrCXsKKysJcmV0 dXJuICZhZXNfMTI4X3dyYXA7CisrCX0KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNf MTkyX3dyYXAgPSB7CisrCU5JRF9pZF9hZXMxOTJfd3JhcCwKKysJOCwgMjQsIDgsIFdSQVBfRkxB R1MsCisrCWFlc193cmFwX2luaXRfa2V5LCBhZXNfd3JhcF9jaXBoZXIsCisrCU5VTEwsCisrCXNp emVvZihFVlBfQUVTX1dSQVBfQ1RYKSwKKysJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OworKworK2Nv bnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX3dyYXAodm9pZCkKKysJeworKwlyZXR1cm4gJmFl c18xOTJfd3JhcDsKKysJfQorKworK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGFlc18yNTZfd3Jh cCA9IHsKKysJTklEX2lkX2FlczI1Nl93cmFwLAorKwk4LCAzMiwgOCwgV1JBUF9GTEFHUywKKysJ YWVzX3dyYXBfaW5pdF9rZXksIGFlc193cmFwX2NpcGhlciwKKysJTlVMTCwKKysJc2l6ZW9mKEVW UF9BRVNfV1JBUF9DVFgpLAorKwlOVUxMLE5VTEwsTlVMTCxOVUxMIH07CisrCisrY29uc3QgRVZQ X0NJUEhFUiAqRVZQX2Flc18yNTZfd3JhcCh2b2lkKQorKwl7CisrCXJldHVybiAmYWVzXzI1Nl93 cmFwOworKwl9CisrCisrc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYWVzXzEyOF93cmFwX3BhZCA9 IHsKKysJTklEX2lkX2FlczEyOF93cmFwX3BhZCwKKysJOCwgMTYsIDQsIFdSQVBfRkxBR1MsCisr CWFlc193cmFwX2luaXRfa2V5LCBhZXNfd3JhcF9jaXBoZXIsCisrCU5VTEwsCisrCXNpemVvZihF VlBfQUVTX1dSQVBfQ1RYKSwKKysJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OworKworK2NvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMTI4X3dyYXBfcGFkKHZvaWQpCisrCXsKKysJcmV0dXJuICZhZXNf MTI4X3dyYXBfcGFkOworKwl9CisrCisrc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYWVzXzE5Ml93 cmFwX3BhZCA9IHsKKysJTklEX2lkX2FlczE5Ml93cmFwX3BhZCwKKysJOCwgMjQsIDQsIFdSQVBf RkxBR1MsCisrCWFlc193cmFwX2luaXRfa2V5LCBhZXNfd3JhcF9jaXBoZXIsCisrCU5VTEwsCisr CXNpemVvZihFVlBfQUVTX1dSQVBfQ1RYKSwKKysJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OworKwor K2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX3dyYXBfcGFkKHZvaWQpCisrCXsKKysJcmV0 dXJuICZhZXNfMTkyX3dyYXBfcGFkOworKwl9CisrCisrc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIg YWVzXzI1Nl93cmFwX3BhZCA9IHsKKysJTklEX2lkX2FlczI1Nl93cmFwX3BhZCwKKysJOCwgMzIs IDQsIFdSQVBfRkxBR1MsCisrCWFlc193cmFwX2luaXRfa2V5LCBhZXNfd3JhcF9jaXBoZXIsCisr CU5VTEwsCisrCXNpemVvZihFVlBfQUVTX1dSQVBfQ1RYKSwKKysJTlVMTCxOVUxMLE5VTEwsTlVM TCB9OworKworK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXBfcGFkKHZvaWQpCisr CXsKKysJcmV0dXJuICZhZXNfMjU2X3dyYXBfcGFkOworKwl9CisrCisgI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2VfZGVzMy5jLndyYXAgb3BlbnNzbC0xLjAuMWkv Y3J5cHRvL2V2cC9lX2RlczMuYworLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZV9kZXMz LmMud3JhcAkyMDE0LTA5LTA4IDE1OjA3OjI3LjI1NTk5Mjc0MCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFpL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAxNC0wOS0wOCAxNTowNzoyNy4zMzI5OTQ1MTMg KzAyMDAKK0BAIC0zMTAsNCArMzEwLDExMiBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2Vk ZTModm9pZCkKKyB7CisgCXJldHVybiAmZGVzX2VkZTNfZWNiOworIH0KKysKKysjaWZuZGVmIE9Q RU5TU0xfTk9fU0hBCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgd3JhcF9pdls4XSA9IHsweDRhLDB4ZGQsMHhhMiwweDJjLDB4Nzks MHhlOCwweDIxLDB4MDV9OworKworK3N0YXRpYyBpbnQgZGVzX2VkZTNfdW53cmFwKEVWUF9DSVBI RVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqaW4sIHNpemVfdCBpbmwpCisrCXsKKysJdW5zaWduZWQgY2hhciBpY3ZbOF0sIGl2WzhdLCBz aGExdG1wW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysJaW50IHJ2ID0gLTE7CisrCWlmIChpbmwgPCAy NCkKKysJCXJldHVybiAtMTsKKysJaWYgKCFvdXQpCisrCQlyZXR1cm4gaW5sIC0gMTY7CisrCW1l bWNweShjdHgtPml2LCB3cmFwX2l2LCA4KTsKKysJLyogRGVjcnlwdCBmaXJzdCBibG9jayB3aGlj aCB3aWxsIGVuZCB1cCBhcyBpY3YgKi8KKysJZGVzX2VkZV9jYmNfY2lwaGVyKGN0eCwgaWN2LCBp biwgOCk7CisrCS8qIERlY3J5cHQgY2VudHJhbCBibG9ja3MgKi8KKysJLyogSWYgZGVjcnlwdGlu ZyBpbiBwbGFjZSBtb3ZlIHdob2xlIG91dHB1dCBhbG9uZyBhIGJsb2NrCisrCSAqIHNvIHRoZSBu ZXh0IGRlc19lZGVfY2JjX2NpcGhlciBpcyBpbiBwbGFjZS4KKysJICovCisrCWlmIChvdXQgPT0g aW4pCisrCQl7CisrCQltZW1tb3ZlKG91dCwgb3V0ICsgOCwgaW5sIC0gOCk7CisrCQlpbiAtPSA4 OworKwkJfQorKwlkZXNfZWRlX2NiY19jaXBoZXIoY3R4LCBvdXQsIGluICsgOCwgaW5sIC0gMTYp OworKwkvKiBEZWNyeXB0IGZpbmFsIGJsb2NrIHdoaWNoIHdpbGwgYmUgSVYgKi8KKysJZGVzX2Vk ZV9jYmNfY2lwaGVyKGN0eCwgaXYsIGluICsgaW5sIC0gOCwgOCk7CisrCS8qIFJldmVyc2Ugb3Jk ZXIgb2YgZXZlcnl0aGluZyAqLworKwlCVUZfcmV2ZXJzZShpY3YsIE5VTEwsIDgpOworKwlCVUZf cmV2ZXJzZShvdXQsIE5VTEwsIGlubCAtIDE2KTsKKysJQlVGX3JldmVyc2UoY3R4LT5pdiwgaXYs IDgpOworKwkvKiBEZWNyeXB0IGFnYWluIHVzaW5nIG5ldyBJViAqLworKwlkZXNfZWRlX2NiY19j aXBoZXIoY3R4LCBvdXQsIG91dCwgaW5sIC0gMTYpOworKwlkZXNfZWRlX2NiY19jaXBoZXIoY3R4 LCBpY3YsIGljdiwgOCk7CisrCS8qIFdvcmsgb3V0IFNIQTEgaGFzaCBvZiBmaXJzdCBwb3J0aW9u ICovCisrCVNIQTEob3V0LCBpbmwgLSAxNiwgc2hhMXRtcCk7CisrCisrCWlmICghQ1JZUFRPX21l bWNtcChzaGExdG1wLCBpY3YsIDgpKQorKwkJcnYgPSBpbmwgLSAxNjsKKysJT1BFTlNTTF9jbGVh bnNlKGljdiwgOCk7CisrCU9QRU5TU0xfY2xlYW5zZShzaGExdG1wLCBTSEFfRElHRVNUX0xFTkdU SCk7CisrCU9QRU5TU0xfY2xlYW5zZShpdiwgOCk7CisrCU9QRU5TU0xfY2xlYW5zZShjdHgtPml2 LCA4KTsKKysJaWYgKHJ2ID09IC0xKQorKwkJT1BFTlNTTF9jbGVhbnNlKG91dCwgaW5sIC0gMTYp OworKwkKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3RhdGljIGludCBkZXNfZWRlM193cmFwKEVW UF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCisrCXsKKysJdW5zaWduZWQgY2hhciBzaGExdG1wW1NI QV9ESUdFU1RfTEVOR1RIXTsKKysJaWYgKCFvdXQpCisrCQlyZXR1cm4gaW5sICsgMTY7CisrCS8q IENvcHkgaW5wdXQgdG8gb3V0cHV0IGJ1ZmZlciArIDggc28gd2UgaGF2ZSBzcGFjZSBmb3IgSVYg Ki8KKysJbWVtbW92ZShvdXQgKyA4LCBpbiwgaW5sKTsKKysJLyogV29yayBvdXQgSUNWICovCisr CVNIQTEoaW4sIGlubCwgc2hhMXRtcCk7CisrCW1lbWNweShvdXQgKyBpbmwgKyA4LCBzaGExdG1w LCA4KTsKKysJT1BFTlNTTF9jbGVhbnNlKHNoYTF0bXAsIFNIQV9ESUdFU1RfTEVOR1RIKTsKKysJ LyogR2VuZXJhdGUgcmFuZG9tIElWICovCisrCVJBTkRfYnl0ZXMoY3R4LT5pdiwgOCk7CisrCW1l bWNweShvdXQsIGN0eC0+aXYsIDgpOworKwkvKiBFbmNyeXB0IGV2ZXJ5dGhpbmcgYWZ0ZXIgSVYg aW4gcGxhY2UgKi8KKysJZGVzX2VkZV9jYmNfY2lwaGVyKGN0eCwgb3V0ICsgOCwgb3V0ICsgOCwg aW5sICsgOCk7CisrCUJVRl9yZXZlcnNlKG91dCwgTlVMTCwgaW5sICsgMTYpOworKwltZW1jcHko Y3R4LT5pdiwgd3JhcF9pdiwgOCk7CisrCWRlc19lZGVfY2JjX2NpcGhlcihjdHgsIG91dCwgb3V0 LCBpbmwgKyAxNik7CisrCXJldHVybiBpbmwgKyAxNjsKKysJfQorKworK3N0YXRpYyBpbnQgZGVz X2VkZTNfd3JhcF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkKKysJeworKwkvKiBT YW5pdHkgY2hlY2sgaW5wdXQgbGVuZ3RoOiB3ZSB0eXBpY2FsbHkgb25seSB3cmFwIGtleXMKKysJ ICogc28gRVZQX01BWENIVU5LIGlzIG1vcmUgdGhhbiB3aWxsIGV2ZXIgYmUgbmVlZGVkLiBBbHNv CisrCSAqIGlucHV0IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBiaXRzLgorKwkgKi8K KysJaWYgKGlubCA+PSBFVlBfTUFYQ0hVTksgfHwgaW5sICUgOCkKKysJCXJldHVybiAtMTsKKysJ aWYgKGN0eC0+ZW5jcnlwdCkKKysJCXJldHVybiBkZXNfZWRlM193cmFwKGN0eCwgb3V0LCBpbiwg aW5sKTsKKysJZWxzZQorKwkJcmV0dXJuIGRlc19lZGUzX3Vud3JhcChjdHgsIG91dCwgaW4sIGlu bCk7CisrCX0KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBkZXMzX3dyYXAgPSB7CisrCU5J RF9pZF9zbWltZV9hbGdfQ01TM0RFU3dyYXAsCisrCTgsIDI0LCAwLAorKwlFVlBfQ0lQSF9XUkFQ X01PREV8RVZQX0NJUEhfQ1VTVE9NX0lWfEVWUF9DSVBIX0ZMQUdfQ1VTVE9NX0NJUEhFUgorKwkJ fEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xfEVWUF9DSVBIX0ZMQUdfRklQUywKKysJZGVzX2Vk ZTNfaW5pdF9rZXksIGRlc19lZGUzX3dyYXBfY2lwaGVyLAorKwlOVUxMLAkKKysJc2l6ZW9mKERF U19FREVfS0VZKSwKKysJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OworKworKworK2NvbnN0IEVWUF9D SVBIRVIgKkVWUF9kZXNfZWRlM193cmFwKHZvaWQpCisrCXsKKysJcmV0dXJuICZkZXMzX3dyYXA7 CisrCX0KKysKKysjIGVuZGlmCisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9jcnlw dG8vZXZwL2V2cF9lbmMuYy53cmFwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwX2VuYy5j CistLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnBfZW5jLmMud3JhcAkyMDE0LTA5LTA4 IDE1OjA3OjI3LjI1NTk5Mjc0MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAv ZXZwX2VuYy5jCTIwMTQtMDktMDggMTU6MDc6MjcuMzMyOTk0NTEzICswMjAwCitAQCAtMjMzLDcg KzIzMyw4IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQlj dHgtPmNpcGhlcl9kYXRhID0gTlVMTDsKKyAJCQl9CisgCQljdHgtPmtleV9sZW4gPSBjaXBoZXIt PmtleV9sZW47CistCQljdHgtPmZsYWdzID0gMDsKKysJCS8qIFByZXNlcnZlIHdyYXAgZW5hYmxl IGZsYWcsIHplcm8gZXZlcnl0aGluZyBlbHNlICovCisrCQljdHgtPmZsYWdzICY9IEVWUF9DSVBI RVJfQ1RYX0ZMQUdfV1JBUF9BTExPVzsKKyAJCWlmKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9D SVBIX0NUUkxfSU5JVCkKKyAJCQl7CisgCQkJaWYoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoY3R4LCBF VlBfQ1RSTF9JTklULCAwLCBOVUxMKSkKK0BAIC0yNTYsNiArMjU3LDEzIEBAIHNraXBfdG9faW5p dDoKKyAJICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKKyAJICAgIHx8IGN0eC0+ Y2lwaGVyLT5ibG9ja19zaXplID09IDE2KTsKKyAKKysJaWYoIShjdHgtPmZsYWdzICYgRVZQX0NJ UEhFUl9DVFhfRkxBR19XUkFQX0FMTE9XKQorKwkJJiYgRVZQX0NJUEhFUl9DVFhfbW9kZShjdHgp ID09IEVWUF9DSVBIX1dSQVBfTU9ERSkKKysJCXsKKysJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVS SU5JVF9FWCwgRVZQX1JfV1JBUF9NT0RFX05PVF9BTExPV0VEKTsKKysJCXJldHVybiAwOworKwkJ fQorKworIAlpZighKEVWUF9DSVBIRVJfQ1RYX2ZsYWdzKGN0eCkgJiBFVlBfQ0lQSF9DVVNUT01f SVYpKSB7CisgCQlzd2l0Y2goRVZQX0NJUEhFUl9DVFhfbW9kZShjdHgpKSB7CisgCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cF9lcnIuYy53cmFwIG9wZW5zc2wtMS4wLjFp L2NyeXB0by9ldnAvZXZwX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnBf ZXJyLmMud3JhcAkyMDE0LTA4LTA2IDIzOjEwOjU2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwX2Vyci5jCTIwMTQtMDktMDggMTU6MDc6MjcuMzMyOTk0 NTEzICswMjAwCitAQCAtMSw2ICsxLDYgQEAKKyAvKiBjcnlwdG8vZXZwL2V2cF9lcnIuYyAqLwor IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICogQ29weXJpZ2h0IChjKSAxOTk5LTIw MTMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKyAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK0BAIC0yMjAsNiArMjIwLDcgQEAgc3RhdGljIEVSUl9T VFJJTkdfREFUQSBFVlBfc3RyX3JlYXNvbnNbXQorIHtFUlJfUkVBU09OKEVWUF9SX1VOU1VQUE9S VEVEX1BSRikgICAgICAgLCJ1bnN1cHBvcnRlZCBwcmYifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9V TlNVUFBPUlRFRF9QUklWQVRFX0tFWV9BTEdPUklUSE0pLCJ1bnN1cHBvcnRlZCBwcml2YXRlIGtl eSBhbGdvcml0aG0ifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9VTlNVUFBPUlRFRF9TQUxUX1RZUEUp ICwidW5zdXBwb3J0ZWQgc2FsdCB0eXBlIn0sCisre0VSUl9SRUFTT04oRVZQX1JfV1JBUF9NT0RF X05PVF9BTExPV0VEKSAsIndyYXAgbW9kZSBub3QgYWxsb3dlZCJ9LAorIHtFUlJfUkVBU09OKEVW UF9SX1dST05HX0ZJTkFMX0JMT0NLX0xFTkdUSCksIndyb25nIGZpbmFsIGJsb2NrIGxlbmd0aCJ9 LAorIHtFUlJfUkVBU09OKEVWUF9SX1dST05HX1BVQkxJQ19LRVlfVFlQRSkgLCJ3cm9uZyBwdWJs aWMga2V5IHR5cGUifSwKKyB7MCxOVUxMfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRv L2V2cC9ldnAuaC53cmFwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwLmgKKy0tLSBvcGVu c3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cC5oLndyYXAJMjAxNC0wOS0wOCAxNTowNzoyNy4yNTY5 OTI3NjMgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cC5oCTIwMTQtMDkt MDggMTU6MDc6MjcuMzMyOTk0NTEzICswMjAwCitAQCAtMzM2LDYgKzMzNiw3IEBAIHN0cnVjdCBl dnBfY2lwaGVyX3N0CisgI2RlZmluZQkJRVZQX0NJUEhfR0NNX01PREUJCTB4NgorICNkZWZpbmUJ CUVWUF9DSVBIX0NDTV9NT0RFCQkweDcKKyAjZGVmaW5lCQlFVlBfQ0lQSF9YVFNfTU9ERQkJMHgx MDAwMQorKyNkZWZpbmUJCUVWUF9DSVBIX1dSQVBfTU9ERQkJMHgxMDAwMgorICNkZWZpbmUgCUVW UF9DSVBIX01PREUJCQkweEYwMDA3CisgLyogU2V0IGlmIHZhcmlhYmxlIGxlbmd0aCBjaXBoZXIg Ki8KKyAjZGVmaW5lIAlFVlBfQ0lQSF9WQVJJQUJMRV9MRU5HVEgJMHg4CitAQCAtMzY3LDYgKzM2 OCwxMyBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAorICNkZWZpbmUgCUVWUF9DSVBIX0ZMQUdfQ1VT VE9NX0NJUEhFUgkweDEwMDAwMAorICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIJ MHgyMDAwMDAKKyAKKysvKiBDaXBoZXIgY29udGV4dCBmbGFnIHRvIGluZGljYXRlIHdlIGNhbiBo YW5kbGUKKysgKiB3cmFwIG1vZGU6IGlmIGFsbG93ZWQgaW4gb2xkZXIgYXBwbGljYXRpb25zIGl0 IGNvdWxkCisrICogb3ZlcmZsb3cgYnVmZmVycy4KKysgKi8KKysKKysjZGVmaW5lIAlFVlBfQ0lQ SEVSX0NUWF9GTEFHX1dSQVBfQUxMT1cJMHgxCisrCisgLyogY3RybCgpIHZhbHVlcyAqLworIAor ICNkZWZpbmUJCUVWUF9DVFJMX0lOSVQJCQkweDAKK0BAIC03MjksNiArNzM3LDcgQEAgY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Rlc19jYmModm9pZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rl c19lZGVfY2JjKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jYmModm9p ZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc3hfY2JjKHZvaWQpOworK2NvbnN0IEVWUF9D SVBIRVIgKkVWUF9kZXNfZWRlM193cmFwKHZvaWQpOworIC8qIFRoaXMgc2hvdWxkIG5vdyBiZSBz dXBwb3J0ZWQgdGhyb3VnaCB0aGUgZGV2X2NyeXB0byBFTkdJTkUuIEJ1dCBhbHNvLCB3aHkgYXJl CisgICogcmM0IGFuZCBtZDUgZGVjbGFyYXRpb25zIG1hZGUgaGVyZSBpbnNpZGUgYSAiTk9fREVT IiBwcmVjb21waWxlciBicmFuY2g/ICovCisgI2lmIDAKK0BAIC03ODgsNiArNzk3LDggQEAgY29u c3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY3RyKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIg KkVWUF9hZXNfMTI4X2NjbSh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9n Y20odm9pZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfeHRzKHZvaWQpOworK2Nv bnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X3dyYXAodm9pZCk7CisrY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Flc18xMjhfd3JhcF9wYWQodm9pZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Fl c18xOTJfZWNiKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NiYyh2b2lk KTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jZmIxKHZvaWQpOworQEAgLTc5OCw2 ICs4MDksOCBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9vZmIodm9pZCk7CisgY29u c3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY3RyKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIg KkVWUF9hZXNfMTkyX2NjbSh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9n Y20odm9pZCk7CisrY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfd3JhcCh2b2lkKTsKKytj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml93cmFwX3BhZCh2b2lkKTsKKyBjb25zdCBFVlBf Q0lQSEVSICpFVlBfYWVzXzI1Nl9lY2Iodm9pZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Fl c18yNTZfY2JjKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEodm9p ZCk7CitAQCAtODA5LDYgKzgyMiw4IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2N0 cih2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jY20odm9pZCk7CisgY29u c3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfZ2NtKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIg KkVWUF9hZXNfMjU2X3h0cyh2b2lkKTsKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl93 cmFwKHZvaWQpOworK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXBfcGFkKHZvaWQp OworICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19T SEExKQorIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NiY19obWFjX3NoYTEodm9pZCk7 CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMSh2b2lkKTsKK0BA IC0xMzk3LDYgKzE0MTIsNyBAQCB2b2lkIEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOworICNk ZWZpbmUgRVZQX1JfVU5TVVBQT1JURURfUFJGCQkJCSAxMjUKKyAjZGVmaW5lIEVWUF9SX1VOU1VQ UE9SVEVEX1BSSVZBVEVfS0VZX0FMR09SSVRITQkJIDExOAorICNkZWZpbmUgRVZQX1JfVU5TVVBQ T1JURURfU0FMVF9UWVBFCQkJIDEyNgorKyNkZWZpbmUgRVZQX1JfV1JBUF9NT0RFX05PVF9BTExP V0VECQkJIDE3MAorICNkZWZpbmUgRVZQX1JfV1JPTkdfRklOQUxfQkxPQ0tfTEVOR1RICQkJIDEw OQorICNkZWZpbmUgRVZQX1JfV1JPTkdfUFVCTElDX0tFWV9UWVBFCQkJIDExMAorIAorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnBfbGliLmMud3JhcCBvcGVuc3NsLTEuMC4x aS9jcnlwdG8vZXZwL2V2cF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZw X2xpYi5jLndyYXAJMjAxNC0wOS0wOCAxNTowNzoyNy4yNTY5OTI3NjMgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDE0LTA5LTA4IDE1OjA3OjI3LjMzMjk5 NDUxMyArMDIwMAorQEAgLTY4LDcgKzY4LDE1IEBAIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2Fz bjEoRVZQX0NJUEhFUl8KKyAJaWYgKGMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBO VUxMKQorIAkJcmV0PWMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOworIAll bHNlIGlmIChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCist CQlyZXQ9RVZQX0NJUEhFUl9zZXRfYXNuMV9pdihjLCB0eXBlKTsKKysJCXsKKysJCWlmIChFVlBf Q0lQSEVSX0NUWF9tb2RlKGMpID09IEVWUF9DSVBIX1dSQVBfTU9ERSkKKysJCQl7CisrCQkJQVNO MV9UWVBFX3NldCh0eXBlLCBWX0FTTjFfTlVMTCwgTlVMTCk7CisrCQkJcmV0ID0gMTsKKysJCQl9 CisrCQllbHNlCisrCQkJcmV0PUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYoYywgdHlwZSk7CisrCQl9 CisgCWVsc2UKKyAJCXJldD0tMTsKKyAJcmV0dXJuKHJldCk7CitAQCAtODEsNyArODksMTEgQEAg aW50IEVWUF9DSVBIRVJfYXNuMV90b19wYXJhbShFVlBfQ0lQSEVSXworIAlpZiAoYy0+Y2lwaGVy LT5nZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5nZXRfYXNu MV9wYXJhbWV0ZXJzKGMsdHlwZSk7CisgCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysJCXsKKysJCWlmIChFVlBfQ0lQSEVSX0NUWF9tb2Rl KGMpID09IEVWUF9DSVBIX1dSQVBfTU9ERSkKKysJCQlyZXR1cm4gMTsKKyAJCXJldD1FVlBfQ0lQ SEVSX2dldF9hc24xX2l2KGMsIHR5cGUpOworKwkJfQorIAllbHNlCisgCQlyZXQ9LTE7CisgCXJl dHVybihyZXQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnBfdGVzdC5j LndyYXAgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL2V2cC9ldnBfdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMWkvY3J5cHRvL2V2cC9ldnBfdGVzdC5jLndyYXAJMjAxNC0wOC0wNiAyMzoxMDo1Ni4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cF90ZXN0LmMJMjAx NC0wOS0wOCAxNTowNzoyNy4zMzM5OTQ1MzYgKzAyMDAKK0BAIC0xNDEsNyArMTQxLDcgQEAgc3Rh dGljIHZvaWQgdGVzdDEoY29uc3QgRVZQX0NJUEhFUiAqYyxjbworICAgICB7CisgICAgIEVWUF9D SVBIRVJfQ1RYIGN0eDsKKyAgICAgdW5zaWduZWQgY2hhciBvdXRbNDA5Nl07CistICAgIGludCBv dXRsLG91dGwyOworKyAgICBpbnQgb3V0bCxvdXRsMixtb2RlOworIAorICAgICBwcmludGYoIlRl c3RpbmcgY2lwaGVyICVzJXNcbiIsRVZQX0NJUEhFUl9uYW1lKGMpLAorIAkgICAoZW5jZGVjID09 IDEgPyAiKGVuY3J5cHQpIiA6IChlbmNkZWMgPT0gMCA/ICIoZGVjcnlwdCkiIDogIihlbmNyeXB0 L2RlY3J5cHQpIikpKTsKK0BAIC0xNTEsNiArMTUxLDcgQEAgc3RhdGljIHZvaWQgdGVzdDEoY29u c3QgRVZQX0NJUEhFUiAqYyxjbworICAgICBoZXhkdW1wKHN0ZG91dCwiUGxhaW50ZXh0IixwbGFp bnRleHQscG4pOworICAgICBoZXhkdW1wKHN0ZG91dCwiQ2lwaGVydGV4dCIsY2lwaGVydGV4dCxj bik7CisgICAgIAorKyAgICBtb2RlID0gRVZQX0NJUEhFUl9tb2RlKGMpOyAKKyAgICAgaWYoa24g IT0gYy0+a2V5X2xlbikKKyAJeworIAlmcHJpbnRmKHN0ZGVyciwiS2V5IGxlbmd0aCBkb2Vzbid0 IG1hdGNoLCBnb3QgJWQgZXhwZWN0ZWQgJWx1XG4iLGtuLAorQEAgLTE1OCw5ICsxNTksMTkgQEAg c3RhdGljIHZvaWQgdGVzdDEoY29uc3QgRVZQX0NJUEhFUiAqYyxjbworIAl0ZXN0MV9leGl0KDUp OworIAl9CisgICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAgIEVWUF9DSVBIRVJf Q1RYX3NldF9mbGFncygmY3R4LEVWUF9DSVBIRVJfQ1RYX0ZMQUdfV1JBUF9BTExPVyk7CisgICAg IGlmIChlbmNkZWMgIT0gMCkKKyAgICAgICAgIHsKKy0JaWYoIUVWUF9FbmNyeXB0SW5pdF9leCgm Y3R4LGMsTlVMTCxrZXksaXYpKQorKwlpZiAobW9kZSA9PSBFVlBfQ0lQSF9XUkFQX01PREUpCisr CSAgICB7CisrCSAgICBpZighRVZQX0VuY3J5cHRJbml0X2V4KCZjdHgsYyxOVUxMLGtleSxpbiA/ IGl2IDogTlVMTCkpCisrCSAgICAgICAgeworKwkJZnByaW50ZihzdGRlcnIsIkVuY3J5cHRJbml0 IGZhaWxlZFxuIik7CisrCQlFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisrCQl0ZXN0MV9l eGl0KDEwKTsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighRVZQX0VuY3J5cHRJbml0X2V4KCZj dHgsYyxOVUxMLGtleSxpdikpCisgCSAgICB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwiRW5jcnlw dEluaXQgZmFpbGVkXG4iKTsKKyAJICAgIEVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKK0BA IC0xOTksNyArMjEwLDE2IEBAIHN0YXRpYyB2b2lkIHRlc3QxKGNvbnN0IEVWUF9DSVBIRVIgKmMs Y28KKyAKKyAgICAgaWYgKGVuY2RlYyA8PSAwKQorICAgICAgICAgeworLQlpZighRVZQX0RlY3J5 cHRJbml0X2V4KCZjdHgsYyxOVUxMLGtleSxpdikpCisrCWlmIChtb2RlID09IEVWUF9DSVBIX1dS QVBfTU9ERSkKKysJICAgIHsKKysJICAgIGlmKCFFVlBfRGVjcnlwdEluaXRfZXgoJmN0eCxjLE5V TEwsa2V5LGluID8gaXYgOiBOVUxMKSkKKysJICAgICAgICB7CisrCQlmcHJpbnRmKHN0ZGVyciwi RW5jcnlwdEluaXQgZmFpbGVkXG4iKTsKKysJCUVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsK KysJCXRlc3QxX2V4aXQoMTApOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFFVlBfRGVjcnlw dEluaXRfZXgoJmN0eCxjLE5VTEwsa2V5LGl2KSkKKyAJICAgIHsKKyAJICAgIGZwcmludGYoc3Rk ZXJyLCJEZWNyeXB0SW5pdCBmYWlsZWRcbiIpOworIAkgICAgRVJSX3ByaW50X2Vycm9yc19mcChz dGRlcnIpOworQEAgLTMzOSw3ICszNTksNyBAQCBpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJn dikKKyAJcGVycm9yKHN6VGVzdEZpbGUpOworIAlFWElUKDIpOworIAl9CistCisrICAgIEVSUl9s b2FkX2NyeXB0b19zdHJpbmdzKCk7CisgICAgIC8qIExvYWQgdXAgdGhlIHNvZnR3YXJlIEVWUF9D SVBIRVIgYW5kIEVWUF9NRCBkZWZpbml0aW9ucyAqLworICAgICBPcGVuU1NMX2FkZF9hbGxfY2lw aGVycygpOworICAgICBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cygpOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWkvY3J5cHRvL2V2cC9ldnB0ZXN0cy50eHQud3JhcCBvcGVuc3NsLTEuMC4xaS9jcnlw dG8vZXZwL2V2cHRlc3RzLnR4dAorLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9ldnAvZXZwdGVz dHMudHh0LndyYXAJMjAxNC0wOC0wNiAyMzoxMDo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xaS9jcnlwdG8vZXZwL2V2cHRlc3RzLnR4dAkyMDE0LTA5LTA4IDE1OjA3OjI3LjMz Mzk5NDUzNiArMDIwMAorQEAgLTMzMiwzICszMzIsMTUgQEAgU0VFRC1FQ0I6MDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMAorIFNFRUQtRUNCOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBD MEQwRTBGOjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDpDMTFGMjJGMjAxNDA1MDUw ODQ0ODM1OTdFNDM3MEY0MzoxCisgU0VFRC1FQ0I6NDcwNjQ4MDg1MUU2MUJFODVENzRCRkIzRkQ5 NTYxODU6OjgzQTJGOEEyODg2NDFGQjlBNEU5QTVDQzJGMTMxQzdEOkVFNTREMTNFQkNBRTcwNkQy MjZCQzMxNDJDRDQwRDRBOjEKKyBTRUVELUVDQjoyOERCQzNCQzQ5RkZEODdEQ0ZBNTA5QjExRDQy MkJFNzo6QjQxRTZCRTJFQkE4NEExNDhFMkVFRDg0NTkzQzVFQzc6OUI5QjdCRkNEMTgxM0NCOTVE MEIzNjE4RjQwRjUxMjI6MQorKworKyMgQUVTIHdyYXAgdGVzdHMgZnJvbSBSRkMzMzk0CisraWQt YWVzMTI4LXdyYXA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEY6OjAwMTEyMjMzNDQ1 NTY2Nzc4ODk5QUFCQkNDRERFRUZGOjFGQTY4QjBBODExMkI0NDdBRUYzNEJEOEZCNUE3QjgyOUQz RTg2MjM3MUQyQ0ZFNQorK2lkLWFlczE5Mi13cmFwOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBD MEQwRTBGMTAxMTEyMTMxNDE1MTYxNzo6MDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkY6 OTY3NzhCMjVBRTZDQTQzNUY5MkI1Qjk3QzA1MEFFRDI0NjhBQjhBMTdBRDg0RTVECisraWQtYWVz MjU2LXdyYXA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3 MTgxOTFBMUIxQzFEMUUxRjo6MDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkY6NjRFOEMz RjlDRTBGNUJBMjYzRTk3Nzc5MDU4MThBMkE5M0M4MTkxRTdENkU4QUU3CisraWQtYWVzMTkyLXdy YXA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3OjowMDEx MjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjAwMDEwMjAzMDQwNTA2MDc6MDMxRDMzMjY0RTE1 RDMzMjY4RjI0RUMyNjA3NDNFRENFMUM2QzdEREVFNzI1QTkzNkJBODE0OTE1QzY3NjJEMgorK2lk LWFlczI1Ni13cmFwOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1 MTYxNzE4MTkxQTFCMUMxRDFFMUY6OjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGMDAw MTAyMDMwNDA1MDYwNzpBOEY5QkMxNjEyQzY4QjNGRjZFNkY0RkJFMzBFNzFFNDc2OUM4QjgwQTMy Q0I4OTU4Q0Q1RDE3RDZCMjU0REExCisraWQtYWVzMjU2LXdyYXA6MDAwMTAyMDMwNDA1MDYwNzA4 MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjo6MDAxMTIyMzM0 NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjoy OEM5RjQwNEM0QjgxMEY0Q0JDQ0IzNUNGQjg3RjgyNjNGNTc4NkUyRDgwRUQzMjZDQkM3RjBFNzFB OTlGNDNCRkI5ODhCOUI3QTAyREQyMQorKyMgQUVTIHdyYXAgdGVzdHMgZnJvbSBSRkM1NjQ5Cisr aWQtYWVzMTkyLXdyYXAtcGFkOjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDViZjE2ZWExYWU4MzM4 ZjRkY2MxNzZhODo6YzM3YjdlNjQ5MjU4NDM0MGJlZDEyMjA3ODA4OTQxMTU1MDY4ZjczODoxMzhi ZGVhYTliOGZhN2ZjNjFmOTc3NDJlNzIyNDhlZTVhZTZhZTUzNjBkMWFlNmE1ZjU0ZjM3M2ZhNTQz YjZhCisraWQtYWVzMTkyLXdyYXAtcGFkOjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDViZjE2ZWEx YWU4MzM4ZjRkY2MxNzZhODo6NDY2ZjcyNTA2MTczNjk6YWZiZWIwZjA3ZGZiZjU0MTkyMDBmMmNj YjUwYmIyNGYKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rlcy9NYWtlZmls ZS53cmFwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rlcy9NYWtlZmlsZQorLS0tIG9wZW5zc2wt MS4wLjFpL2NyeXB0by9tb2Rlcy9NYWtlZmlsZS53cmFwCTIwMTQtMDktMDggMTU6MDc6MjcuMjMz OTkyMjMzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL21vZGVzL01ha2VmaWxlCTIw MTQtMDktMDggMTU6MDc6MjcuMzMzOTk0NTM2ICswMjAwCitAQCAtMjIsOSArMjIsOSBAQCBBUFBT PQorIAorIExJQj0kKFRPUCkvbGliY3J5cHRvLmEKKyBMSUJTUkM9IGNiYzEyOC5jIGN0cjEyOC5j IGN0czEyOC5jIGNmYjEyOC5jIG9mYjEyOC5jIGdjbTEyOC5jIFwKKy0JY2NtMTI4LmMgeHRzMTI4 LmMKKysJY2NtMTI4LmMgeHRzMTI4LmMgd3JhcDEyOC5jCisgTElCT0JKPSBjYmMxMjgubyBjdHIx MjgubyBjdHMxMjgubyBjZmIxMjgubyBvZmIxMjgubyBnY20xMjgubyBcCistCWNjbTEyOC5vIHh0 czEyOC5vICQoTU9ERVNfQVNNX09CSikKKysJY2NtMTI4Lm8geHRzMTI4Lm8gd3JhcDEyOC5vICQo TU9ERVNfQVNNX09CSikKKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWkvY3J5cHRvL21vZGVzL21vZGVzLmgud3JhcCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vbW9k ZXMvbW9kZXMuaAorLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rlcy9tb2Rlcy5oLndyYXAJ MjAxNC0wOS0wOCAxNTowNzoyNi44NjU5ODM3NTcgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xaS9j cnlwdG8vbW9kZXMvbW9kZXMuaAkyMDE0LTA5LTA4IDE1OjA3OjI3LjMzMzk5NDUzNiArMDIwMAor QEAgLTEzMywzICsxMzMsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgeHRzMTI4X2NvbnRleHQgWFRTMTI4 X0NPTgorIAorIGludCBDUllQVE9feHRzMTI4X2VuY3J5cHQoY29uc3QgWFRTMTI4X0NPTlRFWFQg KmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBpdlsxNl0sCisgCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmlucCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgbGVuLCBpbnQgZW5jKTsKKysKKytzaXpl X3QgQ1JZUFRPXzEyOF93cmFwKHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisr CQl1bnNpZ25lZCBjaGFyICpvdXQsCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90 IGlubGVuLCBibG9jazEyOF9mIGJsb2NrKTsKKysKKytzaXplX3QgQ1JZUFRPXzEyOF91bndyYXAo dm9pZCAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysJCXVuc2lnbmVkIGNoYXIgKm91 dCwKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2Yg YmxvY2spOworK3NpemVfdCBDUllQVE9fMTI4X3dyYXBfcGFkKHZvaWQgKmtleSwgY29uc3QgdW5z aWduZWQgY2hhciAqaWN2LAorKwkJdW5zaWduZWQgY2hhciAqb3V0LAorKwkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbiwgYmxvY2sxMjhfZiBibG9jayk7Cisrc2l6ZV90IENS WVBUT18xMjhfdW53cmFwX3BhZCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwK KysJCXVuc2lnbmVkIGNoYXIgKm91dCwKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXpl X3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvY3J5 cHRvL21vZGVzL3dyYXAxMjguYy53cmFwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by9tb2Rlcy93cmFw MTI4LmMKKy0tLSBvcGVuc3NsLTEuMC4xaS9jcnlwdG8vbW9kZXMvd3JhcDEyOC5jLndyYXAJMjAx NC0wOS0wOCAxNTowNzoyNy4zMzM5OTQ1MzYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xaS9jcnlw dG8vbW9kZXMvd3JhcDEyOC5jCTIwMTQtMDktMDggMTU6MDc6MjcuMzMzOTk0NTM2ICswMjAwCitA QCAtMCwwICsxLDM3MiBAQAorKy8qIGNyeXB0by9tb2Rlcy93cmFwMTI4LmMgKi8KKysvKiBXcml0 dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9w ZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqIE1vZGUgd2l0aCBwYWRkaW5nIGNvbnRyaWJ1dGVkIGJ5 IFBldHIgU3BhY2VrIChwc3BhY2VrQHJlZGhhdC5jb20pLgorKyAqLworKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICogQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqLworKworKy8qKiAgQmV3YXJlIQorKyAqCisrICogIEZvbGxvd2lu ZyB3cmFwcGluZyBtb2RlcyB3ZXJlIGRlc2lnbmVkIGZvciBBRVMgYnV0IHRoaXMgaW1wbGVtZW50 YXRpb24KKysgKiAgYWxsb3dzIHlvdSB0byB1c2UgdGhlbSBmb3IgYW55IDEyOCBiaXQgYmxvY2sg Y2lwaGVyLgorKyAqLworKworKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorKyNpbmNsdWRlIDxvcGVu c3NsL21vZGVzLmg+CisrCisrLyoqIFJGQyAzMzk0IHNlY3Rpb24gMi4yLjMuMSBEZWZhdWx0IElu aXRpYWwgVmFsdWUgKi8KKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZWZhdWx0X2l2W10g PSB7CisrICAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LCAweEE2LAor K307CisrCisrLyoqIFJGQyA1NjQ5IHNlY3Rpb24gMyBBbHRlcm5hdGl2ZSBJbml0aWFsIFZhbHVl IDMyLWJpdCBjb25zdGFudCAqLworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRlZmF1bHRf YWl2W10gPSB7CisrICAweEE2LCAweDU5LCAweDU5LCAweEE2CisrfTsKKysKKysvKiogSW5wdXQg c2l6ZSBsaW1pdDogbG93ZXIgdGhhbiBtYXhpbXVtIG9mIHN0YW5kYXJkcyBidXQgZmFyIGxhcmdl ciB0aGFuCisrICogIGFueXRoaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGluIHByYWN0aWNlLgorKyAq LworKyNkZWZpbmUgQ1JZUFRPMTI4X1dSQVBfTUFYICgxVUwgPDwgMzEpCisrCisrLyoqIFdyYXBw aW5nIGFjY29yZGluZyB0byBSRkMgMzM5NCBzZWN0aW9uIDIuMi4xLgorKyAqCisrICogIEBwYXJh bVtpbl0gIGtleSAgICBLZXkgdmFsdWUuIAorKyAqICBAcGFyYW1baW5dICBpdiAgICAgSVYgdmFs dWUuIExlbmd0aCA9IDggYnl0ZXMuIE5VTEwgPSB1c2UgZGVmYXVsdF9pdi4KKysgKiAgQHBhcmFt W2luXSAgaW4gICAgIFBsYWluIHRleHQgYXMgbiA2NC1iaXQgYmxvY2tzLCBuID49IDIuCisrICog IEBwYXJhbVtpbl0gIGlubGVuICBMZW5ndGggb2YgaW4uCisrICogIEBwYXJhbVtvdXRdIG91dCAg ICBDaXBoZXIgdGV4dC4gTWluaW1hbCBidWZmZXIgbGVuZ3RoID0gKGlubGVuICsgOCkgYnl0ZXMu CisrICogICAgICAgICAgICAgICAgICAgICBJbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgY2FuIG92 ZXJsYXAgaWYgYmxvY2sgZnVuY3Rpb24KKysgKiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRz IHRoYXQuCisrICogIEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9u LgorKyAqICBAcmV0dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBkb2VzIG5vdCBjb25zaXN0IG9m IG4gNjQtYml0IGJsb2NrcywgbiA+PSAyLgorKyAqICAgICAgICAgICAgICAgICAgICAgb3IgaWYg aW5sZW4gPiBDUllQVE8xMjhfV1JBUF9NQVguCisrICogICAgICAgICAgICAgICAgICAgICBPdXRw dXQgbGVuZ3RoIGlmIHdyYXBwaW5nIHN1Y2NlZWRlZC4KKysgKi8KKytzaXplX3QgQ1JZUFRPXzEy OF93cmFwKHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrCQl1bnNpZ25lZCBj aGFyICpvdXQsCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLCBibG9j azEyOF9mIGJsb2NrKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgKkEsIEJbMTZdLCAqUjsKKysJc2l6 ZV90IGksIGosIHQ7CisrCWlmICgoaW5sZW4gJiAweDcpIHx8IChpbmxlbiA8IDE2KSB8fCAoaW5s ZW4gPiBDUllQVE8xMjhfV1JBUF9NQVgpKQorKwkJcmV0dXJuIDA7CisrCUEgPSBCOworKwl0ID0g MTsKKysJbWVtbW92ZShvdXQgKyA4LCBpbiwgaW5sZW4pOworKwlpZiAoIWl2KQorKwkJaXYgPSBk ZWZhdWx0X2l2OworKworKwltZW1jcHkoQSwgaXYsIDgpOworKworKwlmb3IgKGogPSAwOyBqIDwg NjsgaisrKQorKwkJeworKwkJUiA9IG91dCArIDg7CisrCQlmb3IgKGkgPSAwOyBpIDwgaW5sZW47 IGkgKz0gOCwgdCsrLCBSICs9IDgpCisrCQkJeworKwkJCW1lbWNweShCICsgOCwgUiwgOCk7Cisr CQkJYmxvY2soQiwgQiwga2V5KTsKKysJCQlBWzddIF49ICh1bnNpZ25lZCBjaGFyKSh0ICYgMHhm Zik7CisrCQkJaWYgKHQgPiAweGZmKQkKKysJCQkJeworKwkJCQlBWzZdIF49ICh1bnNpZ25lZCBj aGFyKSgodCA+PiA4KSAmIDB4ZmYpOworKwkJCQlBWzVdIF49ICh1bnNpZ25lZCBjaGFyKSgodCA+ PiAxNikgJiAweGZmKTsKKysJCQkJQVs0XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gMjQpICYg MHhmZik7CisrCQkJCX0KKysJCQltZW1jcHkoUiwgQiArIDgsIDgpOworKwkJCX0KKysJCX0KKysJ bWVtY3B5KG91dCwgQSwgOCk7CisrCXJldHVybiBpbmxlbiArIDg7CisrCX0KKysKKysKKysvKiog VW53cmFwcGluZyBhY2NvcmRpbmcgdG8gUkZDIDMzOTQgc2VjdGlvbiAyLjIuMiBzdGVwcyAxLTIu CisrICogIElWIGNoZWNrIChzdGVwIDMpIGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIu CisrICoKKysgKiAgQHBhcmFtW2luXSAga2V5ICAgIEtleSB2YWx1ZS4gCisrICogIEBwYXJhbVtv dXRdIGl2ICAgICBVbmNoZWNrZWQgSVYgdmFsdWUuIE1pbmltYWwgYnVmZmVyIGxlbmd0aCA9IDgg Ynl0ZXMuCisrICogIEBwYXJhbVtvdXRdIG91dCAgICBQbGFpbiB0ZXh0IHdpdGhvdXQgSVYuCisr ICogICAgICAgICAgICAgICAgICAgICBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSAoaW5sZW4gLSA4 KSBieXRlcy4KKysgKiAgICAgICAgICAgICAgICAgICAgIElucHV0IGFuZCBvdXRwdXQgYnVmZmVy cyBjYW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgorKyAqICAgICAgICAgICAgICAgICAgICAg c3VwcG9ydHMgdGhhdC4KKysgKiAgQHBhcmFtW2luXSAgaW4gICAgIENpcGhlcnRleHQgdGV4dCBh cyBuIDY0LWJpdCBibG9ja3MKKysgKiAgQHBhcmFtW2luXSAgaW5sZW4gIExlbmd0aCBvZiBpbi4K KysgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2NrIHByb2Nlc3NpbmcgZnVuY3Rpb24uCisrICog IEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVuIGlzIG91dCBvZiByYW5nZSBbMjQsIENSWVBU TzEyOF9XUkFQX01BWF0KKysgKiAgICAgICAgICAgICAgICAgICAgIG9yIGlmIGlubGVuIGlzIG5v dCBtdWx0aXBseSBvZiA4LgorKyAqICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IGxlbmd0aCBv dGhlcndpc2UuCisrICovCisrc3RhdGljIHNpemVfdCBjcnlwdG9fMTI4X3Vud3JhcF9yYXcodm9p ZCAqa2V5LCB1bnNpZ25lZCBjaGFyICppdiwKKysJCXVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sCisrCQlzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spCisr CXsKKysJdW5zaWduZWQgY2hhciAqQSwgQlsxNl0sICpSOworKwlzaXplX3QgaSwgaiwgdDsKKysJ aW5sZW4gLT0gODsKKysJaWYgKChpbmxlbiAmIDB4NykgfHwgKGlubGVuIDwgMTYpIHx8IChpbmxl biA+IENSWVBUTzEyOF9XUkFQX01BWCkpCisrCQlyZXR1cm4gMDsKKysJQSA9IEI7CisrCXQgPSAg NiAqIChpbmxlbiA+PiAzKTsKKysJbWVtY3B5KEEsIGluLCA4KTsKKysJbWVtbW92ZShvdXQsIGlu ICsgOCwgaW5sZW4pOworKwlmb3IgKGogPSAwOyBqIDwgNjsgaisrKQorKwkJeworKwkJUiA9IG91 dCArIGlubGVuIC0gODsKKysJCWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSArPSA4LCB0LS0sIFIg LT0gOCkKKysJCQl7CisrCQkJQVs3XSBePSAodW5zaWduZWQgY2hhcikodCAmIDB4ZmYpOworKwkJ CWlmICh0ID4gMHhmZikJCisrCQkJCXsKKysJCQkJQVs2XSBePSAodW5zaWduZWQgY2hhcikoKHQg Pj4gOCkgJiAweGZmKTsKKysJCQkJQVs1XSBePSAodW5zaWduZWQgY2hhcikoKHQgPj4gMTYpICYg MHhmZik7CisrCQkJCUFbNF0gXj0gKHVuc2lnbmVkIGNoYXIpKCh0ID4+IDI0KSAmIDB4ZmYpOwor KwkJCQl9CisrCQkJbWVtY3B5KEIgKyA4LCBSLCA4KTsKKysJCQlibG9jayhCLCBCLCBrZXkpOwor KwkJCW1lbWNweShSLCBCICsgOCwgOCk7CisrCQkJfQorKwkJfQorKwltZW1jcHkoaXYsIEEsIDgp OworKwlyZXR1cm4gaW5sZW47CisrCX0KKysKKysvKiogVW53cmFwcGluZyBhY2NvcmRpbmcgdG8g UkZDIDMzOTQgc2VjdGlvbiAyLjIuMiBpbmNsdWRpbmcgSVYgY2hlY2suCisrICogIEZpcnN0IGJs b2NrIG9mIHBsYWluIHRleHQgaGF2ZSB0byBtYXRjaCBzdXBwbGllZCBJViBvdGhlcndpc2UgYW4g ZXJyb3IgaXMKKysgKiAgcmV0dXJuZWQuCisrICoKKysgKiAgQHBhcmFtW2luXSAga2V5ICAgIEtl eSB2YWx1ZS4gCisrICogIEBwYXJhbVtvdXRdIGl2ICAgICBVbmNoZWNrZWQgSVYgdmFsdWUuIE1p bmltYWwgYnVmZmVyIGxlbmd0aCA9IDggYnl0ZXMuCisrICogIEBwYXJhbVtvdXRdIG91dCAgICBQ bGFpbiB0ZXh0IHdpdGhvdXQgSVYuCisrICogICAgICAgICAgICAgICAgICAgICBNaW5pbWFsIGJ1 ZmZlciBsZW5ndGggPSAoaW5sZW4gLSA4KSBieXRlcy4KKysgKiAgICAgICAgICAgICAgICAgICAg IElucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBjYW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgor KyAqICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgdGhhdC4KKysgKiAgQHBhcmFtW2luXSAg aW4gICAgIENpcGhlcnRleHQgdGV4dCBhcyBuIDY0LWJpdCBibG9ja3MKKysgKiAgQHBhcmFtW2lu XSAgaW5sZW4gIExlbmd0aCBvZiBpbi4KKysgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2NrIHBy b2Nlc3NpbmcgZnVuY3Rpb24uCisrICogIEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVuIGlz IG91dCBvZiByYW5nZSBbMjQsIENSWVBUTzEyOF9XUkFQX01BWF0KKysgKiAgICAgICAgICAgICAg ICAgICAgIG9yIGlmIGlubGVuIGlzIG5vdCBtdWx0aXBseSBvZiA4CisrICogICAgICAgICAgICAg ICAgICAgICBvciBpZiBJViBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkIHZhbHVlLgorKyAqICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0IGxlbmd0aCBvdGhlcndpc2UuCisrICovCisrc2l6ZV90IENS WVBUT18xMjhfdW53cmFwKHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrCQl1 bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4s CisrCQlibG9jazEyOF9mIGJsb2NrKQorKwl7CisrCXNpemVfdCByZXQ7CisrCXVuc2lnbmVkIGNo YXIgZ290X2l2WzhdOworKworKwlyZXQgPSBjcnlwdG9fMTI4X3Vud3JhcF9yYXcoa2V5LCBnb3Rf aXYsIG91dCwgaW4sIGlubGVuLCBibG9jayk7CisrCWlmIChyZXQgIT0gaW5sZW4pCisrCQlyZXR1 cm4gcmV0OworKworKwlpZiAoIWl2KQorKwkJaXYgPSBkZWZhdWx0X2l2OworKwlpZiAoQ1JZUFRP X21lbWNtcChvdXQsIGl2LCA4KSkKKysJCXsKKysJCU9QRU5TU0xfY2xlYW5zZShvdXQsIGlubGVu KTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gaW5sZW47CisrCX0KKysKKysvKiogV3Jh cHBpbmcgYWNjb3JkaW5nIHRvIFJGQyA1NjQ5IHNlY3Rpb24gNC4xLgorKyAqCisrICogIEBwYXJh bVtpbl0gIGtleSAgICBLZXkgdmFsdWUuIAorKyAqICBAcGFyYW1baW5dICBpY3YgICAgKE5vbi1z dGFuZGFyZCkgSVYsIDQgYnl0ZXMuIE5VTEwgPSB1c2UgZGVmYXVsdF9haXYuCisrICogIEBwYXJh bVtvdXRdIG91dCAgICBDaXBoZXIgdGV4dC4gTWluaW1hbCBidWZmZXIgbGVuZ3RoID0gKGlubGVu ICsgMTUpIGJ5dGVzLgorKyAqICAgICAgICAgICAgICAgICAgICAgSW5wdXQgYW5kIG91dHB1dCBi dWZmZXJzIGNhbiBvdmVybGFwIGlmIGJsb2NrIGZ1bmN0aW9uCisrICogICAgICAgICAgICAgICAg ICAgICBzdXBwb3J0cyB0aGF0LgorKyAqICBAcGFyYW1baW5dICBpbiAgICAgUGxhaW4gdGV4dCBh cyBuIDY0LWJpdCBibG9ja3MsIG4gPj0gMi4KKysgKiAgQHBhcmFtW2luXSAgaW5sZW4gIExlbmd0 aCBvZiBpbi4KKysgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2NrIHByb2Nlc3NpbmcgZnVuY3Rp b24uCisrICogIEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVuIGlzIG91dCBvZiByYW5nZSBb MSwgQ1JZUFRPMTI4X1dSQVBfTUFYXS4KKysgKiAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBs ZW5ndGggaWYgd3JhcHBpbmcgc3VjY2VlZGVkLgorKyAqLworK3NpemVfdCBDUllQVE9fMTI4X3dy YXBfcGFkKHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaWN2LAorKwkJdW5zaWduZWQg Y2hhciAqb3V0LAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbiwgYmxv Y2sxMjhfZiBibG9jaykKKysJeworKwkvKiBuOiBudW1iZXIgb2YgNjQtYml0IGJsb2NrcyBpbiB0 aGUgcGFkZGVkIGtleSBkYXRhICovCisrCWNvbnN0IHNpemVfdCBibG9ja3NfcGFkZGVkID0gKGlu bGVuICsgOCkgLyA4OworKwljb25zdCBzaXplX3QgcGFkZGVkX2xlbiA9IGJsb2Nrc19wYWRkZWQg KiA4OworKwljb25zdCBzaXplX3QgcGFkZGluZ19sZW4gPSBwYWRkZWRfbGVuIC0gaW5sZW47Cisr CS8qIFJGQyA1NjQ5IHNlY3Rpb24gMzogQWx0ZXJuYXRpdmUgSW5pdGlhbCBWYWx1ZSAqLworKwl1 bnNpZ25lZCBjaGFyIGFpdls4XTsKKysJaW50IHJldDsKKysKKysJLyogU2VjdGlvbiAxOiB1c2Ug MzItYml0IGZpeGVkIGZpZWxkIGZvciBwbGFpbnRleHQgb2N0ZXQgbGVuZ3RoICovCisrCWlmIChp bmxlbiA9PSAwIHx8IGlubGVuID49IENSWVBUTzEyOF9XUkFQX01BWCkKKysJCXJldHVybiAwOwor KworKwkvKiBTZWN0aW9uIDM6IEFsdGVybmF0aXZlIEluaXRpYWwgVmFsdWUgKi8KKysJaWYgKCFp Y3YpCisrCQltZW1jcHkoYWl2LCBkZWZhdWx0X2FpdiwgNCk7CisrCWVsc2UKKysJCW1lbWNweShh aXYsIGljdiwgNCk7IC8qIFN0YW5kYXJkIGRvZXNuJ3QgbWVudGlvbiB0aGlzLiAqLworKworKwlh aXZbNF0gPSAoaW5sZW4gPj4gMjQpICYgMHhGRjsKKysJYWl2WzVdID0gKGlubGVuID4+IDE2KSAm IDB4RkY7CisrCWFpdls2XSA9IChpbmxlbiA+PiA4KSAmIDB4RkY7CisrCWFpdls3XSA9IGlubGVu ICYgMHhGRjsKKysKKysJaWYgKHBhZGRlZF9sZW4gPT0gOCkKKysJCXsKKysJCS8qIFNlY3Rpb24g NC4xIC0gc3BlY2lhbCBjYXNlIGluIHN0ZXAgMjoKKysJCSAqIElmIHRoZSBwYWRkZWQgcGxhaW50 ZXh0IGNvbnRhaW5zIGV4YWN0bHkgZWlnaHQgb2N0ZXRzLCB0aGVuCisrCQkgKiBwcmVwZW5kIHRo ZSBBSVYgYW5kIGVuY3J5cHQgdGhlIHJlc3VsdGluZyAxMjgtYml0IGJsb2NrCisrCQkgKiB1c2lu ZyBBRVMgaW4gRUNCIG1vZGUuICovCisrCQltZW1tb3ZlKG91dCArIDgsIGluLCBpbmxlbik7Cisr CQltZW1jcHkob3V0LCBhaXYsIDgpOworKwkJbWVtc2V0KG91dCArIDggKyBpbmxlbiwgMCwgcGFk ZGluZ19sZW4pOworKwkJYmxvY2sob3V0LCBvdXQsIGtleSk7CisrCQlyZXQgPSAxNjsgLyogQUlW ICsgcGFkZGVkIGlucHV0ICovCisrCQl9CisrCQllbHNlCisrCQl7CisrCQltZW1tb3ZlKG91dCwg aW4sIGlubGVuKTsKKysJCW1lbXNldChvdXQgKyBpbmxlbiwgMCwgcGFkZGluZ19sZW4pOyAvKiBT ZWN0aW9uIDQuMSBzdGVwIDEgKi8KKysJCXJldCA9IENSWVBUT18xMjhfd3JhcChrZXksIGFpdiwg b3V0LCBvdXQsIHBhZGRlZF9sZW4sIGJsb2NrKTsKKysJCX0KKysKKysJcmV0dXJuIHJldDsKKysJ fQorKworKy8qKiBVbndyYXBwaW5nIGFjY29yZGluZyB0byBSRkMgNTY0OSBzZWN0aW9uIDQuMi4K KysgKgorKyAqICBAcGFyYW1baW5dICBrZXkgICAgS2V5IHZhbHVlLiAKKysgKiAgQHBhcmFtW2lu XSAgaWN2ICAgIChOb24tc3RhbmRhcmQpIElWLCA0IGJ5dGVzLiBOVUxMID0gdXNlIGRlZmF1bHRf YWl2LgorKyAqICBAcGFyYW1bb3V0XSBvdXQgICAgUGxhaW4gdGV4dC4gTWluaW1hbCBidWZmZXIg bGVuZ3RoID0gaW5sZW4gYnl0ZXMuCisrICogICAgICAgICAgICAgICAgICAgICBJbnB1dCBhbmQg b3V0cHV0IGJ1ZmZlcnMgY2FuIG92ZXJsYXAgaWYgYmxvY2sgZnVuY3Rpb24KKysgKiAgICAgICAg ICAgICAgICAgICAgIHN1cHBvcnRzIHRoYXQuCisrICogIEBwYXJhbVtpbl0gIGluICAgICBDaXBo ZXJ0ZXh0IHRleHQgYXMgbiA2NC1iaXQgYmxvY2tzCisrICogIEBwYXJhbVtpbl0gIGlubGVuICBM ZW5ndGggb2YgaW4uCisrICogIEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1 bmN0aW9uLgorKyAqICBAcmV0dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBpcyBvdXQgb2YgcmFu Z2UgWzE2LCBDUllQVE8xMjhfV1JBUF9NQVhdLAorKyAqICAgICAgICAgICAgICAgICAgICAgb3Ig aWYgaW5sZW4gaXMgbm90IG11bHRpcGx5IG9mIDgKKysgKiAgICAgICAgICAgICAgICAgICAgIG9y IGlmIElWIGFuZCBtZXNzYWdlIGxlbmd0aCBpbmRpY2F0b3IgZG9lc24ndCBtYXRjaC4KKysgKiAg ICAgICAgICAgICAgICAgICAgIE91dHB1dCBsZW5ndGggaWYgdW53cmFwcGluZyBzdWNjZWVkZWQg YW5kIElWIG1hdGNoZXMuCisrICovCisrc2l6ZV90IENSWVBUT18xMjhfdW53cmFwX3BhZCh2b2lk ICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwKKysJCXVuc2lnbmVkIGNoYXIgKm91dCwK KysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxv Y2spCisrCXsKKysJLyogbjogbnVtYmVyIG9mIDY0LWJpdCBibG9ja3MgaW4gdGhlIHBhZGRlZCBr ZXkgZGF0YSAqLworKwlzaXplX3QgbiA9IGlubGVuIC8gOCAtIDE7CisrCXNpemVfdCBwYWRkZWRf bGVuOworKwlzaXplX3QgcGFkZGluZ19sZW47CisrCXNpemVfdCBwdGV4dF9sZW47CisrCS8qIFJG QyA1NjQ5IHNlY3Rpb24gMzogQWx0ZXJuYXRpdmUgSW5pdGlhbCBWYWx1ZSAqLworKwl1bnNpZ25l ZCBjaGFyIGFpdls4XTsKKysJc3RhdGljIHVuc2lnbmVkIGNoYXIgemVyb3NbOF0gPSB7MHgwfTsK KysJc2l6ZV90IHJldDsKKysKKysJLyogU2VjdGlvbiA0LjI6IENpcGhlciB0ZXh0IGxlbmd0aCBo YXMgdG8gYmUgKG4rMSkgNjQtYml0IGJsb2Nrcy4gKi8KKysJaWYgKChpbmxlbiAmIDB4NykgIT0g MCB8fCBpbmxlbiA8IDE2IHx8IGlubGVuID49IENSWVBUTzEyOF9XUkFQX01BWCkKKysJCXJldHVy biAwOworKworKwltZW1tb3ZlKG91dCwgaW4sIGlubGVuKTsKKysJaWYgKGlubGVuID09IDE2KQor KwkJeworKwkJLyogU2VjdGlvbiA0LjIgLSBzcGVjaWFsIGNhc2UgaW4gc3RlcCAxOgorKwkJICog V2hlbiBuPTEsIHRoZSBjaXBoZXJ0ZXh0IGNvbnRhaW5zIGV4YWN0bHkgdHdvIDY0LWJpdAorKwkJ ICogYmxvY2tzIGFuZCB0aGV5IGFyZSBkZWNyeXB0ZWQgYXMgYSBzaW5nbGUgQUVTCisrCQkgKiBi bG9jayB1c2luZyBBRVMgaW4gRUNCIG1vZGU6CisrCQkgKiBBSVYgfCBQWzFdID0gREVDKEssIENb MF0gfCBDWzFdKQorKwkJICovCisrCQlibG9jayhvdXQsIG91dCwga2V5KTsKKysJCW1lbWNweShh aXYsIG91dCwgOCk7CisrCQkvKiBSZW1vdmUgQUlWICovCisrCQltZW1tb3ZlKG91dCwgb3V0ICsg OCwgOCk7CisrCQlwYWRkZWRfbGVuID0gODsKKysJCX0KKysJCWVsc2UKKysJCXsKKysJCXBhZGRl ZF9sZW4gPSBpbmxlbiAtIDg7CisrCQlyZXQgPSBjcnlwdG9fMTI4X3Vud3JhcF9yYXcoa2V5LCBh aXYsIG91dCwgb3V0LCBpbmxlbiwgYmxvY2spOworKwkJaWYgKHBhZGRlZF9sZW4gIT0gcmV0KQor KwkJCXsKKysJCQlPUEVOU1NMX2NsZWFuc2Uob3V0LCBpbmxlbik7CisrCQkJcmV0dXJuIDA7Cisr CQkJfQorKwkJfQorKworKwkvKiBTZWN0aW9uIDM6IEFJViBjaGVja3M6IENoZWNrIHRoYXQgTVNC KDMyLEEpID0gQTY1OTU5QTYuCisrCSAqIE9wdGlvbmFsbHkgYSB1c2VyLXN1cHBsaWVkIHZhbHVl IGNhbiBiZSB1c2VkCisrCSAqIChldmVuIGlmIHN0YW5kYXJkIGRvZXNuJ3QgbWVudGlvbiB0aGlz KS4gKi8KKysJaWYgKCghaWN2ICYmIENSWVBUT19tZW1jbXAoYWl2LCBkZWZhdWx0X2FpdiwgNCkp CisrCQl8fCAoaWN2ICYmIENSWVBUT19tZW1jbXAoYWl2LCBpY3YsIDQpKSkKKysJCXsKKysJCU9Q RU5TU0xfY2xlYW5zZShvdXQsIGlubGVuKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwkvKiBD aGVjayB0aGF0IDgqKG4tMSkgPCBMU0IoMzIsQUlWKSA8PSA4Km4uCisrCSAqIElmIHNvLCBsZXQg cHRleHRfbGVuID0gTFNCKDMyLEFJVikuICovCisrCisrCXB0ZXh0X2xlbiA9IChhaXZbNF0gPDwg MjQpIHwgKGFpdls1XSA8PCAxNikgfCAoYWl2WzZdIDw8IDgpIHwgYWl2WzddOworKwlpZiAoOCoo bi0xKSA+PSBwdGV4dF9sZW4gfHwgcHRleHRfbGVuID4gOCpuKQorKwkJeworKwkJT1BFTlNTTF9j bGVhbnNlKG91dCwgaW5sZW4pOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCS8qIENoZWNrIHRo YXQgdGhlIHJpZ2h0bW9zdCBwYWRkaW5nX2xlbiBvY3RldHMgb2YgdGhlIG91dHB1dCBkYXRhCisr CSAqIGFyZSB6ZXJvLiAqLworKwlwYWRkaW5nX2xlbiA9IHBhZGRlZF9sZW4gLSBwdGV4dF9sZW47 CisrCWlmIChDUllQVE9fbWVtY21wKG91dCArIHB0ZXh0X2xlbiwgemVyb3MsIHBhZGRpbmdfbGVu KSAhPSAwKQorKwkJeworKwkJT1BFTlNTTF9jbGVhbnNlKG91dCwgaW5sZW4pOworKwkJcmV0dXJu IDA7CisrCQl9CisrCisrCS8qIFNlY3Rpb24gNC4yIHN0ZXAgMzogUmVtb3ZlIHBhZGRpbmcgKi8K KysJcmV0dXJuIHB0ZXh0X2xlbjsKKysJfQoKZGlmZiAtLWdpdCBhL29wZW5zc2wuc3BlYyBiL29w ZW5zc2wuc3BlYwppbmRleCAwYzZkZmY4Li5kOGY3MzIxIDEwMDY0NAotLS0gYS9vcGVuc3NsLnNw ZWMKKysrIGIvb3BlbnNzbC5zcGVjCkBAIC0yMyw3ICsyMyw3IEBACiBTdW1tYXJ5OiBVdGlsaXRp ZXMgZnJvbSB0aGUgZ2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IHdpdGggVExT IGltcGxlbWVudGF0aW9uCiBOYW1lOiBvcGVuc3NsCiBWZXJzaW9uOiAxLjAuMWkKLVJlbGVhc2U6 IDMlez9kaXN0fQorUmVsZWFzZTogNCV7P2Rpc3R9CiBFcG9jaDogMQogIyBXZSBoYXZlIHRvIHJl bW92ZSBjZXJ0YWluIHBhdGVudGVkIGFsZ29yaXRobXMgZnJvbSB0aGUgb3BlbnNzbCBzb3VyY2UK ICMgdGFyYmFsbCB3aXRoIHRoZSBob2JibGUtb3BlbnNzbCBzY3JpcHQgd2hpY2ggaXMgaW5jbHVk ZWQgYmVsb3cuCkBAIC04NCw2ICs4NCw3IEBAIFBhdGNoOTA6IG9wZW5zc2wtMS4wLjFlLWVuYy1m YWlsLnBhdGNoCiBQYXRjaDkyOiBvcGVuc3NsLTEuMC4xaC1zeXN0ZW0tY2lwaGVybGlzdC5wYXRj aAogUGF0Y2g5Mzogb3BlbnNzbC0xLjAuMWgtZGlzYWJsZS1zc2x2MnYzLnBhdGNoCiAjIEJhY2tw b3J0ZWQgZml4ZXMgaW5jbHVkaW5nIHNlY3VyaXR5IGZpeGVzCitQYXRjaDgwOiBvcGVuc3NsLTEu MC4xaS1ldnAtd3JhcC5wYXRjaAogUGF0Y2g4MTogb3BlbnNzbC0xLjAuMS1iZXRhMi1wYWRsb2Nr NjQucGF0Y2gKIFBhdGNoODQ6IG9wZW5zc2wtMS4wLjFpLXRydXN0ZWQtZmlyc3QucGF0Y2gKIFBh dGNoODU6IG9wZW5zc2wtMS4wLjFlLWFybS11c2UtZWxmLWF1eHYtY2Fwcy5wYXRjaApAQCAtMjA1 LDYgKzIwNiw3IEBAIGNwICV7U09VUkNFMTJ9ICV7U09VUkNFMTN9IGNyeXB0by9lYy8KICVwYXRj aDkyIC1wMSAtYiAuc3lzdGVtCiAlcGF0Y2g5MyAtcDEgLWIgLnYydjMKIAorJXBhdGNoODAgLXAx IC1iIC53cmFwCiAlcGF0Y2g4MSAtcDEgLWIgLnBhZGxvY2s2NAogJXBhdGNoODQgLXAxIC1iIC50 cnVzdGVkLWZpcnN0CiAlcGF0Y2g4NSAtcDEgLWIgLmFybWNhcApAQCAtNDc2LDYgKzQ3OCw5IEBA IHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvJXtfbGliZGlyfS9maXBzY2FuaXN0ZXIuKgogJXBvc3R1 biBsaWJzIC1wIC9zYmluL2xkY29uZmlnCiAKICVjaGFuZ2Vsb2cKKyogTW9uIFNlcCAgOCAyMDE0 IFRvbcOhxaEgTXLDoXogPHRtcmF6QHJlZGhhdC5jb20+IDEuMC4xaS00CistIGFkZCBzdXBwb3J0 IGZvciBSRkMgNTY0OQorCiAqIFN1biBBdWcgMTcgMjAxNCBGZWRvcmEgUmVsZWFzZSBFbmdpbmVl cmluZyA8cmVsLWVuZ0BsaXN0cy5mZWRvcmFwcm9qZWN0Lm9yZz4gLSAxOjEuMC4xaS0zCiAtIFJl YnVpbHQgZm9yIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRvcmFfMjFfMjJfTWFz c19SZWJ1aWxkCiAK