From: Tor Didriksen Date: November 29 2010 11:21am Subject: bzr commit into mysql-trunk-bugfixing branch (tor.didriksen:3250) WL#1393 List-Archive: http://lists.mysql.com/commits/125323 Message-Id: <20101129112129.8ACCD373C@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8164661560481186406==" --===============8164661560481186406== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline I0F0IGZpbGU6Ly8vZXhwb3J0L2hvbWUvZGlkcmlrL3JlcG8vbmV4dC1tci1vcHQtdGVhbS13bDEz OTMtbWVyZ2UvIGJhc2VkIG9uIHJldmlkOnRvci5kaWRyaWtzZW5Ab3JhY2xlLmNvbS0yMDEwMTEy NTA4MDMxNi13NXRreWd3NWU1b2xocXM3CgogMzI1MCBUb3IgRGlkcmlrc2VuCTIwMTAtMTEtMjkK ICAgICAgV0wjMTM5MyBPcHRpbWl6aW5nIGZpbGVzb3J0IHdpdGggc21hbGwgbGltaXQKICAgICAg CiAgICAgIE1hbnkgd2ViIGN1c3RvbWVycyBoYXZlIHRvIGRvCiAgICAgICJTRUxFQ1QgLi4uIE9S REVSIEJZIG5vbl9pbmRleF9jb2x1bW4gTElNSVQgWCIsCiAgICAgIAogICAgICBXaGVuIFggKiA8 Um93IFNpemU+IGlzIHNtYWxsZXIgdGhhbiBzb3J0X2J1ZmZfc2l6ZSB3ZSBjYW4gdXNlCiAgICAg IHRoZSBmb2xsb3dpbmcgYWxnb3JpdG0gdG8gc3BlZWQgdXAgdGhlIHNvcnQ6CiAgICAgIAogICAg ICAtIENyZWF0ZSBhIHF1ZXVlIHRvIGhvbGQgJ2xpbWl0JyBrZXlzLgogICAgICAtIFNjYW4gdGhy b3VnaCB0aGUgdGFibGUgYW5kIHN0b3JlIHRoZSBmaXJzdCAobGFzdCBpZiBERVNDKSBrZXlzIGlu IHRoZSBxdWV1ZQogICAgICAtIFJldHVybiB2YWx1ZXMgZnJvbSBxdWV1ZQogICAgIEAgbGlibXlz cWxkL0NNYWtlTGlzdHMudHh0CiAgICAgICAgQWRkIEJvdW5kZWRfcXVldWUKICAgICBAIGxpYm15 c3FsZC9NYWtlZmlsZS5hbS5USElTCiAgICAgICAgQWRkIEJvdW5kZWRfcXVldWUKICAgICBAIG15 c3FsLXRlc3QvaW5jbHVkZS9vcmRlcl9ieS5pbmMKICAgICAgICBBZGQgbmV3IHRlc3RzLgogICAg IEAgbXlzcWwtdGVzdC9pbmNsdWRlL3NlbGVjdC5pbmMKICAgICAgICBGaXggdHlwbyBpbiBidWcg bnVtYmVyLgogICAgIEAgbXlzcWwtdGVzdC9yL29yZGVyX2J5X25vbmUucmVzdWx0CiAgICAgICAg QWRkZWQgbmV3IHRlc3RzLgogICAgIEAgbXlzcWwtdGVzdC9yL29yZGVyX2J5X3NvcnRrZXkucmVz dWx0CiAgICAgICAgTmV3IHRlc3QuCiAgICAgQCBteXNxbC10ZXN0L3Ivc2VsZWN0X25vbmUucmVz dWx0CiAgICAgICAgRml4IHR5cG8gaW4gYnVnIG51bWJlci4KICAgICBAIG15c3FsLXRlc3QvdC9v cmRlcl9ieV9zb3J0a2V5LnRlc3QKICAgICAgICBOZXcgdGVzdC4KICAgICBAIG15c3lzL0NNYWtl TGlzdHMudHh0CiAgICAgICAgQ29tcGlsZSBzdGFuZGFsb25lIHF1ZXVlcyB0ZXN0IGV4ZWN1dGFi bGUuCiAgICAgQCBteXN5cy9xdWV1ZXMuYwogICAgICAgIEZpeCB1bi1tYWludGFpbmVkIGNvZGU6 IHMvYm9vbC9teV9ib29sLwogICAgIEAgc3FsL0NNYWtlTGlzdHMudHh0CiAgICAgICAgQWRkIEJv dW5kZWRfcXVldWUgdG8gZ3VuaXQgdGVzdHMuCiAgICAgQCBzcWwvTWFrZWZpbGUuYW0uVEhJUwog ICAgICAgIEFkZCBCb3VuZGVkX3F1ZXVlCiAgICAgQCBzcWwvYm91bmRlZF9xdWV1ZS5jYwogICAg ICAgIFNpbmNlIEJvdW5kZWRfcXVldWUgaXMgdGVtcGxhdGl6ZWQsIHRoZSBlbnRpcmUgaW1wbGVt ZW50YXRpb24gbXVzdCBnbyBpbiB0aGUgLmggZmlsZQogICAgICAgIFRoZSBmcmVlIGZ1bmN0aW9u IGdldF9tZXJnZV9tYW55X2J1ZmZzX2Nvc3RfZmFzdCBpcyBoZXJlIHNvIHRoYXQgd2UgY2FuIHVu aXQgdGVzdCBpdC4KICAgICBAIHNxbC9ib3VuZGVkX3F1ZXVlLmgKICAgICAgICBUaGlzIGlzIGEg d3JhcHBlciBvbiB0b3Agb2YgUVVFVUUgYW5kIHRoZSBxdWV1ZV94eHgoKSBmdW5jdGlvbnMuCiAg ICAgQCBzcWwvZmlsZXNvcnQuY2MKICAgICAgICBBZGQgc3VwcG9ydCBmb3IgUHJpb3JpdHkgUXVl dWUgc29ydCBmb3IgcXVlcmllcyB3aXRoIGEgTElNSVQuCiAgICAgICAgCiAgICAgICAgU2ltcGxp ZnkgdXNhZ2Ugb2YgbWFrZV9jaGFyX2FycmF5KCksIGxldCBpdCBhbGxvY2F0ZS9pbml0aWFsaXpl IEZJTEVTT1JUX0lORk8uc29ydF9rZXlzIGRpcmVjdGx5LgogICAgICAgIFJlbmFtZSBTT1JUUEFS QU0gdG8gU29ydF9wYXJhbSwgYW5kIGFkZCBpbml0KCkgZnVuY3Rpb24uCiAgICAgICAgUmVtb3Zl IGRlYWQgY29kZSAob2Jzb2xldGUgI2lmZGVmKQogICAgICAgIFJlbW92ZSBkZWFkIGNvZGUgKGlu ZGV4ZmlsZSB3YXMgYWx3YXlzcyBOVUxMIGluIGZpbmRfYWxsX2tleXMoKSkKICAgICBAIHNxbC9m aWxlc29ydC5oCiAgICAgICAgTmV3IGFyZ3VtZW50IHRvIGZpbGVzb3J0KCkKICAgICBAIHNxbC9z cWxfY29uc3QuaAogICAgICAgIFVzZSBkb3VibGUsIHJhdGhlciB0aGFuIGludCwgbGl0ZXJhbHMg KGF2b2lkcyBsb3RzIG9mIGNhc3RpbmcpLgogICAgIEAgc3FsL3NxbF9kZWxldGUuY2MKICAgICAg ICBOZXcgYXJndW1lbnQgdG8gZmlsZXNvcnQoKQogICAgIEAgc3FsL3NxbF9zZWxlY3QuY2MKICAg ICAgICBIYW5kbGUgbmV3IGZpbGVzb3J0KCkgdXNpbmcgcHJpb3JpdHkgcXVldWU6CiAgICAgICAg LSBBZGQgc29tZSBtb3JlIERCVUdfUFJJTlQgc3RhdGVtZW50cyBiZWZvcmUgY2FsbHMgdG8gY3Jl YXRlX3NvcnRfaW5kZXgoKQogICAgICAgIC0gY3JlYXRlX3NvcnRfaW5kZXgoKSBjYW4gdXNlIHRo ZSBuZXcgUFEgYWxnb3JpdGhtIGlmICghZ3JvdXAgJiYgdGFibGVzPT0xKQogICAgICAgIC0gdXNl IGluZm9ybWF0aW9uIGZyb20gZmlsZXNvcnQoKSBpZiB3ZSBoYXZlIE9QVElPTl9GT1VORF9ST1dT CiAgICAgICAgLSBpbiBlbmRfc2VuZCgpOiBzdG9wIGlmIHdlIGFyZSBhYm91dCB0byByZWFkIG1v cmUgcm93cyB0aGFuIGFsbG9jYXRlZCBieSB0aGUgUFEKICAgICAgICAtIHBhc3MgT1BUSU9OX0ZP VU5EX1JPV1Mgb24gdG8gZmlsZXNvcnQoKSBmb3Igc2luZ2xlLXRhYmxlIHF1ZXJpZXMuCiAgICAg QCBzcWwvc3FsX3NvcnQuaAogICAgICAgIFJlbmFtZSBzdF9zb3J0X3BhcmFtL1NPUlRQQVJBTSB0 byBTb3J0X3BhcmFtLgogICAgICAgIEFkZCBjb25zdHJ1Y3Rvci4KICAgICAgICBBZGQgaW5pdCgp IGZ1bmN0aW9uLgogICAgIEAgc3FsL3NxbF90YWJsZS5jYwogICAgICAgIE5ldyBhcmd1bWVudCB0 byBmaWxlc29ydCgpCiAgICAgQCBzcWwvc3FsX3VwZGF0ZS5jYwogICAgICAgIE5ldyBhcmd1bWVu dCB0byBmaWxlc29ydCgpCiAgICAgQCBzcWwvdW5pcXVlcy5jYwogICAgICAgIFJlbmFtZSBTT1JU UEFSQU0gdG8gU29ydF9wYXJhbS4KICAgICBAIHVuaXR0ZXN0L2d1bml0L0NNYWtlTGlzdHMudHh0 CiAgICAgICAgQWRkIGd1bml0IHRlc3QgZm9yIEJvdW5kZWRfcXVldWUKICAgICBAIHVuaXR0ZXN0 L2d1bml0L2JvdW5kZWRfcXVldWUtdC5jYwogICAgICAgIEFkZCBuZXcgdW5pdCB0ZXN0cyBmb3Ig Qm91bmRlZF9xdWV1ZSBhbmQgbWVyZ2UtY29zdCBlc3RpbWF0aW9uLgogICAgICAgIEFkZCBwZXJm b3JtYW5jZSB0ZXN0cyBmb3IgQm91bmRlZF9xdWV1ZS4KCiAgICBhZGRlZDoKICAgICAgbXlzcWwt dGVzdC9yL29yZGVyX2J5X3NvcnRrZXkucmVzdWx0CiAgICAgIG15c3FsLXRlc3QvdC9vcmRlcl9i eV9zb3J0a2V5LnRlc3QKICAgICAgc3FsL2JvdW5kZWRfcXVldWUuY2MKICAgICAgc3FsL2JvdW5k ZWRfcXVldWUuaAogICAgICB1bml0dGVzdC9ndW5pdC9ib3VuZGVkX3F1ZXVlLXQuY2MKICAgIG1v ZGlmaWVkOgogICAgICBsaWJteXNxbGQvQ01ha2VMaXN0cy50eHQKICAgICAgbXlzcWwtdGVzdC9p bmNsdWRlL29yZGVyX2J5LmluYwogICAgICBteXNxbC10ZXN0L2luY2x1ZGUvc2VsZWN0LmluYwog ICAgICBteXNxbC10ZXN0L3Ivb3JkZXJfYnlfbm9uZS5yZXN1bHQKICAgICAgbXlzcWwtdGVzdC9y L3NlbGVjdF9ub25lLnJlc3VsdAogICAgICBteXN5cy9DTWFrZUxpc3RzLnR4dAogICAgICBteXN5 cy9xdWV1ZXMuYwogICAgICBzcWwvQ01ha2VMaXN0cy50eHQKICAgICAgc3FsL2ZpbGVzb3J0LmNj CiAgICAgIHNxbC9maWxlc29ydC5oCiAgICAgIHNxbC9zcWxfY29uc3QuaAogICAgICBzcWwvc3Fs X2RlbGV0ZS5jYwogICAgICBzcWwvc3FsX3NlbGVjdC5jYwogICAgICBzcWwvc3FsX3NvcnQuaAog ICAgICBzcWwvc3FsX3RhYmxlLmNjCiAgICAgIHNxbC9zcWxfdXBkYXRlLmNjCiAgICAgIHNxbC91 bmlxdWVzLmNjCiAgICAgIHVuaXR0ZXN0L2d1bml0L0NNYWtlTGlzdHMudHh0Cj09PSBtb2RpZmll ZCBmaWxlICdsaWJteXNxbGQvQ01ha2VMaXN0cy50eHQnCi0tLSBhL2xpYm15c3FsZC9DTWFrZUxp c3RzLnR4dAkyMDEwLTExLTI0IDEwOjUwOjE3ICswMDAwCisrKyBiL2xpYm15c3FsZC9DTWFrZUxp c3RzLnR4dAkyMDEwLTExLTI5IDExOjIxOjIyICswMDAwCkBAIC00NCw2ICs0NCw3IEBAIFNFVChT UUxfRU1CRURERURfU09VUkNFUyBlbWJfcWNhY2hlLmNjIGwKICAgICAgICAgICAgLi4vc3FsLWNv bW1vbi9jbGllbnRfcGx1Z2luLmMKICAgICAgICAgICAgLi4vc3FsL3Bhc3N3b3JkLmMgLi4vc3Fs L2Rpc2NvdmVyLmNjIC4uL3NxbC9kZXJyb3IuY2MgCiAgICAgICAgICAgIC4uL3NxbC9maWVsZC5j YyAuLi9zcWwvZmllbGRfY29udi5jYworICAgICAgICAgICAuLi9zcWwvYm91bmRlZF9xdWV1ZS5j YwogICAgICAgICAgICAuLi9zcWwvZmlsZXNvcnQuY2MgLi4vc3FsL2dzdHJlYW0uY2MKICAgICAg ICAgICAgLi4vc3FsL2hhbmRsZXIuY2MgLi4vc3FsL2hhc2hfZmlsby5jYyAuLi9zcWwvaG9zdG5h bWUuY2MgCiAgICAgICAgICAgIC4uL3NxbC9pbml0LmNjIC4uL3NxbC9pdGVtX2J1ZmYuY2MgLi4v c3FsL2l0ZW1fY21wZnVuYy5jYyAKCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0L2luY2x1 ZGUvb3JkZXJfYnkuaW5jJwotLS0gYS9teXNxbC10ZXN0L2luY2x1ZGUvb3JkZXJfYnkuaW5jCTIw MTAtMDktMjcgMTM6MjA6MjQgKzAwMDAKKysrIGIvbXlzcWwtdGVzdC9pbmNsdWRlL29yZGVyX2J5 LmluYwkyMDEwLTExLTI5IDExOjIxOjIyICswMDAwCkBAIC0xMzY0LDYgKzEzNjQsMTYzIEBAIE9S REVSIEJZIHQyLmMgTElNSVQgMTsKIAogRFJPUCBUQUJMRSB0MSx0Mix0MzsKIAorLS1lY2hvICMK Ky0tZWNobyAjIFdMIzEzOTMgLSBPcHRpbWl6aW5nIGZpbGVzb3J0IHdpdGggc21hbGwgbGltaXQK Ky0tZWNobyAjCisKK0NSRUFURSBUQUJMRSB0MShmMCBpbnQgYXV0b19pbmNyZW1lbnQgcHJpbWFy eSBrZXksIGYxIGludCwgZjIgdmFyY2hhcigyMDApKTsKK0lOU0VSVCBJTlRPIHQxKGYxLCBmMikg VkFMVUVTIAorKDAsIjAiKSwoMSwiMSIpLCgyLCIyIiksKDMsIjMiKSwoNCwiNCIpLCg1LCI1Iiks CisoNiwiNiIpLCg3LCI3IiksKDgsIjgiKSwoOSwiOSIpLCgxMCwiMTAiKSwKKygxMSwiMTEiKSwo MTIsIjEyIiksKDEzLCIxMyIpLCgxNCwiMTQiKSwoMTUsIjE1IiksCisoMTYsIjE2IiksKDE3LCIx NyIpLCgxOCwiMTgiKSwoMTksIjE5IiksKDIwLCIyMCIpLAorKDIxLCIyMSIpLCgyMiwiMjIiKSwo MjMsIjIzIiksKDI0LCIyNCIpLCgyNSwiMjUiKSwKKygyNiwiMjYiKSwoMjcsIjI3IiksKDI4LCIy OCIpLCgyOSwiMjkiKSwoMzAsIjMwIiksCisoMzEsIjMxIiksKDMyLCIzMiIpLCgzMywiMzMiKSwo MzQsIjM0IiksKDM1LCIzNSIpLAorKDM2LCIzNiIpLCgzNywiMzciKSwoMzgsIjM4IiksKDM5LCIz OSIpLCg0MCwiNDAiKSwKKyg0MSwiNDEiKSwoNDIsIjQyIiksKDQzLCI0MyIpLCg0NCwiNDQiKSwo NDUsIjQ1IiksCisoNDYsIjQ2IiksKDQ3LCI0NyIpLCg0OCwiNDgiKSwoNDksIjQ5IiksKDUwLCI1 MCIpLAorKDUxLCI1MSIpLCg1MiwiNTIiKSwoNTMsIjUzIiksKDU0LCI1NCIpLCg1NSwiNTUiKSwK Kyg1NiwiNTYiKSwoNTcsIjU3IiksKDU4LCI1OCIpLCg1OSwiNTkiKSwoNjAsIjYwIiksCisoNjEs IjYxIiksKDYyLCI2MiIpLCg2MywiNjMiKSwoNjQsIjY0IiksKDY1LCI2NSIpLAorKDY2LCI2NiIp LCg2NywiNjciKSwoNjgsIjY4IiksKDY5LCI2OSIpLCg3MCwiNzAiKSwKKyg3MSwiNzEiKSwoNzIs IjcyIiksKDczLCI3MyIpLCg3NCwiNzQiKSwoNzUsIjc1IiksCisoNzYsIjc2IiksKDc3LCI3NyIp LCg3OCwiNzgiKSwoNzksIjc5IiksKDgwLCI4MCIpLAorKDgxLCI4MSIpLCg4MiwiODIiKSwoODMs IjgzIiksKDg0LCI4NCIpLCg4NSwiODUiKSwKKyg4NiwiODYiKSwoODcsIjg3IiksKDg4LCI4OCIp LCg4OSwiODkiKSwoOTAsIjkwIiksCisoOTEsIjkxIiksKDkyLCI5MiIpLCg5MywiOTMiKSwoOTQs Ijk0IiksKDk1LCI5NSIpLAorKDk2LCI5NiIpLCg5NywiOTciKSwoOTgsIjk4IiksKDk5LCI5OSIp OworCisjIyMjIyMjIyMjIyMjIyMjCisjIyBUZXN0IHNvcnQgd2hlbiBzb3VyY2UgZGF0YSBmaXRz IGluIG1lbW9yeQorCitTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZIGYxIEFTQywgZjAgTElNSVQg MTAwOworU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMSBBU0MsIGYwIExJTUlUIDMwOworU0VM RUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMSBBU0MsIGYwIExJTUlUIDA7CitTRUxFQ1QgKiBGUk9N IHQxIE9SREVSIEJZIGYyIERFU0MsIGYwIExJTUlUIDMwOworU0VMRUNUICogRlJPTSB0MSBPUkRF UiBCWSBmMiBERVNDLCBmMCBMSU1JVCAwOworU0VMRUNUICogRlJPTSB0MSBXSEVSRSBmMT4xMCBP UkRFUiBCWSBmMiwgZjAgTElNSVQgMjA7CitTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGYxPjEwIE9S REVSIEJZIGYyLCBmMCBMSU1JVCAwOworU0VMRUNUICogRlJPTSB0MSBXSEVSRSBmMT4xMCBPUkRF UiBCWSBmMiwgZjAgTElNSVQgMTAgT0ZGU0VUIDEwOworU0VMRUNUICogRlJPTSB0MSBXSEVSRSBm MT4xMCBPUkRFUiBCWSBmMiwgZjAgTElNSVQgMCBPRkZTRVQgMTA7CisKKyMjIyMjIyMjIyMjIyMj IyMKKyMjIFRlc3Qgc29ydCB3aGVuIHNvdXJjZSBkYXRhIGRvZXMgbm90IGZpdCBpbiBtZW1vcnkK K3NldCBzb3J0X2J1ZmZlcl9zaXplPSAzMjc2ODsKK0NSRUFURSBURU1QT1JBUlkgVEFCTEUgdG1w IChmMSBpbnQsIGYyIHZhcmNoYXIoMjApKTsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsIGYy IEZST00gdDE7CitJTlNFUlQgSU5UTyB0MShmMSwgZjIpIFNFTEVDVCAqIEZST00gdG1wOworSU5T RVJUIElOVE8gdG1wIFNFTEVDVCBmMSwgZjIgRlJPTSB0MTsKK0lOU0VSVCBJTlRPIHQxKGYxLCBm MikgU0VMRUNUICogRlJPTSB0bXA7CisKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjEgQVND LCBmMCBMSU1JVCAzMDsKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjEgQVNDLCBmMCBMSU1J VCAwOworU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMiBERVNDLCBmMCBMSU1JVCAzMDsKK1NF TEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjIgREVTQywgZjAgTElNSVQgMDsKK1NFTEVDVCAqIEZS T00gdDEgV0hFUkUgZjE+MTAgT1JERVIgQlkgZjIsIGYwIExJTUlUIDIwOworU0VMRUNUICogRlJP TSB0MSBXSEVSRSBmMT4xMCBPUkRFUiBCWSBmMiwgZjAgTElNSVQgMDsKK1NFTEVDVCAqIEZST00g dDEgV0hFUkUgZjE+MTAgT1JERVIgQlkgZjIsIGYwIExJTUlUIDEwIE9GRlNFVCAxMDsKK1NFTEVD VCAqIEZST00gdDEgV0hFUkUgZjE+MTAgT1JERVIgQlkgZjIsIGYwIExJTUlUIDAgT0ZGU0VUIDEw OworCisjIyMjIyMjIyMjIyMjIyMjCisjIyBUZXN0IHdpdGggU1FMX0NBTENfRk9VTkRfUk9XUwor c2V0IHNvcnRfYnVmZmVyX3NpemU9IDMyNzY4OworU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1Mg KiBGUk9NIHQxCitPUkRFUiBCWSBmMSwgZjAgTElNSVQgMzA7CitTRUxFQ1QgRk9VTkRfUk9XUygp OworCitTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAqIEZST00gdDEKK09SREVSIEJZIGYxLCBm MCBMSU1JVCAwOworU0VMRUNUIEZPVU5EX1JPV1MoKTsKKworU0VMRUNUIFNRTF9DQUxDX0ZPVU5E X1JPV1MgKiBGUk9NIHQxIFdIRVJFIGYxPjEwCitPUkRFUiBCWSBmMiwgZjAgTElNSVQgMjA7CitT RUxFQ1QgRk9VTkRfUk9XUygpOworCitTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAqIEZST00g dDEgV0hFUkUgZjE+MTAKK09SREVSIEJZIGYyLCBmMCBMSU1JVCAwOworU0VMRUNUIEZPVU5EX1JP V1MoKTsKKworU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1MgKiBGUk9NIHQxIFdIRVJFIGYxPjEw CitPUkRFUiBCWSBmMiwgZjAgTElNSVQgMTAgT0ZGU0VUIDEwOworU0VMRUNUIEZPVU5EX1JPV1Mo KTsKKworU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1MgKiBGUk9NIHQxIFdIRVJFIGYxPjEwCitP UkRFUiBCWSBmMiwgZjAgTElNSVQgMCBPRkZTRVQgMTA7CitTRUxFQ1QgRk9VTkRfUk9XUygpOwor CisjIyMjIyMjIyMjIyMjIyMjCisjIyBUZXN0IHNvcnRpbmcgd2l0aCBqb2luCisjIyBUaGVzZSBh cmUgcmUtd3JpdHRlbiB0byB1c2UgUFEgZHVyaW5nIGV4ZWN1dGlvbi4KK3NldCBzb3J0X2J1ZmZl cl9zaXplPSAzMjc2ODA7CisKK1NFTEVDVCAqIEZST00gdDEgSk9JTiB0bXAgb24gdDEuZjI9dG1w LmYyCitPUkRFUiBCWSB0bXAuZjEsIGYwIExJTUlUIDMwOworCitTRUxFQ1QgKiBGUk9NIHQxIEpP SU4gdG1wIG9uIHQxLmYyPXRtcC5mMgorT1JERVIgQlkgdG1wLmYxLCBmMCBMSU1JVCAzMCBPRkZT RVQgMzA7CisKK1NFTEVDVCBTUUxfQ0FMQ19GT1VORF9ST1dTICogRlJPTSB0MSBKT0lOIHRtcCBv biB0MS5mMj10bXAuZjIKK09SREVSIEJZIHRtcC5mMSwgZjAgTElNSVQgMzAgT0ZGU0VUIDMwOwor U0VMRUNUIEZPVU5EX1JPV1MoKTsKKworU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1MgKiBGUk9N IHQxIEpPSU4gdG1wIG9uIHQxLmYyPXRtcC5mMgorV0hFUkUgdDEuZjI+MjAKK09SREVSIEJZIHRt cC5mMSwgZjAgTElNSVQgMzAgT0ZGU0VUIDMwOworU0VMRUNUIEZPVU5EX1JPV1MoKTsKKworIyMj IyMjIyMjIyMjIyMjIworIyMgVGVzdCB2aWV3cworQ1JFQVRFIFZJRVcgdjEgYXMgU0VMRUNUICog RlJPTSB0MSBPUkRFUiBCWSBmMSwgZjAgTElNSVQgMzA7CitTRUxFQ1QgKiBGUk9NIHYxOworZHJv cCB2aWV3IHYxOworCitDUkVBVEUgVklFVyB2MSBhcyBTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZ IGYxLCBmMCBMSU1JVCAxMDA7CitTRUxFQ1QgKiBGUk9NIHYxIE9SREVSIEJZIGYyLCBmMCBMSU1J VCAzMDsKKworQ1JFQVRFIFZJRVcgdjIgYXMgU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMiwg ZjAgTElNSVQgMTAwOworU0VMRUNUICogRlJPTSB2MSBKT0lOIHYyIG9uIHYxLmYxPXYyLmYxIE9S REVSIEJZIHYxLmYyLHYxLmYwLHYyLmYwCitMSU1JVCAzMDsKKworIyMjIyMjIyMjIyMjIyMjIwor IyMgVGVzdCBncm91cCAmIGhhdmluZworU0VMRUNUIGZsb29yKGYxLzEwKSBmMywgY291bnQoZjIp IEZST00gdDEKK2dyb3VwIGJ5IDEgT1JERVIgQlkgMiwxIExJTUlUIDU7CisKK1NFTEVDVCBmbG9v cihmMS8xMCkgZjMsIGNvdW50KGYyKSBGUk9NIHQxCitncm91cCBieSAxIE9SREVSIEJZIDIsMSBM SU1JVCAwOworCisjIyMjIyMjIyMjIyMjIyMjCisjIyBUZXN0IFNQCitkZWxpbWl0ZXIgfDsKK0NS RUFURSBQUk9DRURVUkUgd2wxMzkzX3NwX3Rlc3QoKQorQkVHSU4KK1NFTEVDVCAqIEZST00gdDEg V0hFUkUgZjE+MTAgT1JERVIgQlkgZjIsIGYwIExJTUlUIDMwOworU0VMRUNUICogRlJPTSB0MSBX SEVSRSBmMT4xMCBPUkRFUiBCWSBmMiwgZjAgTElNSVQgMTUgT0ZGU0VUIDE1OworU0VMRUNUIFNR TF9DQUxDX0ZPVU5EX1JPV1MgKiBGUk9NIHQxIFdIRVJFIGYxPjEwCitPUkRFUiBCWSBmMiwgZjAg TElNSVQgMTUgT0ZGU0VUIDE1OworU0VMRUNUIEZPVU5EX1JPV1MoKTsKK1NFTEVDVCAqIEZST00g djEgT1JERVIgQlkgZjIsIGYwIExJTUlUIDMwOworRU5EfAorQ0FMTCB3bDEzOTNfc3BfdGVzdCgp fAorRFJPUCBQUk9DRURVUkUgd2wxMzkzX3NwX3Rlc3R8CitkZWxpbWl0ZXIgO3wKKworIyMjIyMj IyMjIyMjIyMjIworIyMgVGVzdCB3aXRoIHN1YnF1ZXJpZXMKK1NFTEVDVCBkMS5mMSwgZDEuZjIg RlJPTSB0MQorTEVGVCBKT0lOIChTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZIGYxIExJTUlUIDMw KSBkMSBvbiB0MS5mMT1kMS5mMQorT1JERVIgQlkgZDEuZjIgREVTQyBMSU1JVCAzMDsKKworU0VM RUNUICogRlJPTSB0MSBXSEVSRSBmMSA9IChTRUxFQ1QgZjEgRlJPTSB0MSBPUkRFUiBCWSAxIExJ TUlUIDEpOworCistLWVycm9yIEVSX1NVQlFVRVJZX05PXzFfUk9XCitTRUxFQ1QgKiBGUk9NIHQx IFdIRVJFIGYxID0gKFNFTEVDVCBmMSBGUk9NIHQxIE9SREVSIEJZIDEgTElNSVQgMik7CisKK0RS T1AgVEFCTEUgdDEsIHRtcDsKK0RST1AgVklFVyB2MSwgdjI7CisKKy0tZWNobyAjIGVuZCBvZiBX TCMxMzkzIC0gT3B0aW1pemluZyBmaWxlc29ydCB3aXRoIHNtYWxsIGxpbWl0CiAKICMKICMgQnVn IzM1ODQ0OiBDb3ZlcmluZyBpbmRleCBmb3IgcmVmIGFjY2VzcyBub3QgY29tcGF0aWJsZSB3aXRo IE9SREVSIEJZIGxpc3QKCj09PSBtb2RpZmllZCBmaWxlICdteXNxbC10ZXN0L2luY2x1ZGUvc2Vs ZWN0LmluYycKLS0tIGEvbXlzcWwtdGVzdC9pbmNsdWRlL3NlbGVjdC5pbmMJMjAxMC0xMC0yNiAw OToxMDo1OSArMDAwMAorKysgYi9teXNxbC10ZXN0L2luY2x1ZGUvc2VsZWN0LmluYwkyMDEwLTEx LTI5IDExOjIxOjIyICswMDAwCkBAIC00MTQwLDcgKzQxNDAsNyBAQCBEUk9QIFRBQkxFIHQxOwog LS1lY2hvIEVuZCBvZiA1LjEgdGVzdHMKIAogLS1lY2hvICMKLS0tZWNobyAjIEJ1ZyM0NTI3Nzog TG9zdCBIQVZJTkcgY2xhdXNlIGxlZCB0byBhIHdyb25nIHJlc3VsdC4KKy0tZWNobyAjIEJ1ZyM0 NTIyNzogTG9zdCBIQVZJTkcgY2xhdXNlIGxlZCB0byBhIHdyb25nIHJlc3VsdC4KIC0tZWNobyAj CiBDUkVBVEUgVEFCTEUgYENDYCAoCiAgIGBpbnRfbm9rZXlgIGludCgxMSkgTk9UIE5VTEwsCkBA IC00MTYyLDcgKzQxNjIsNyBAQCBTRUxFQ1QgYHZhcmNoYXJfbm9rZXlgIEcxICBGUk9NIENDICBX SEVSCiAgIEhBVklORyBHMSAgT1JERVIgIEJZIGB2YXJjaGFyX2tleWAgTElNSVQgIDYgICA7CiAK IERST1AgVEFCTEUgQ0M7Ci0tLWVjaG8gIyBFbmQgb2YgdGVzdCM0NTI3NworLS1lY2hvICMgRW5k IG9mIHRlc3QjNDUyMjcKIAogLS1lY2hvICMKIC0tZWNobyAjIEJ1ZyM1NDUxNTogQ3Jhc2ggaW4g b3B0X3JhbmdlLmNjOjpnZXRfYmVzdF9ncm91cF9taW5fbWF4IG9uIAoKPT09IG1vZGlmaWVkIGZp bGUgJ215c3FsLXRlc3Qvci9vcmRlcl9ieV9ub25lLnJlc3VsdCcKLS0tIGEvbXlzcWwtdGVzdC9y L29yZGVyX2J5X25vbmUucmVzdWx0CTIwMTAtMDktMjcgMTM6MjA6MjQgKzAwMDAKKysrIGIvbXlz cWwtdGVzdC9yL29yZGVyX2J5X25vbmUucmVzdWx0CTIwMTAtMTEtMjkgMTE6MjE6MjIgKzAwMDAK QEAgLTE1MDQsNiArMTUwNCw4NTMgQEAgT1JERVIgQlkgdDIuYyBMSU1JVCAxOwogZAogNTIuNQog RFJPUCBUQUJMRSB0MSx0Mix0MzsKKyMKKyMgV0wjMTM5MyAtIE9wdGltaXppbmcgZmlsZXNvcnQg d2l0aCBzbWFsbCBsaW1pdAorIworQ1JFQVRFIFRBQkxFIHQxKGYwIGludCBhdXRvX2luY3JlbWVu dCBwcmltYXJ5IGtleSwgZjEgaW50LCBmMiB2YXJjaGFyKDIwMCkpOworSU5TRVJUIElOVE8gdDEo ZjEsIGYyKSBWQUxVRVMgCisoMCwiMCIpLCgxLCIxIiksKDIsIjIiKSwoMywiMyIpLCg0LCI0Iiks KDUsIjUiKSwKKyg2LCI2IiksKDcsIjciKSwoOCwiOCIpLCg5LCI5IiksKDEwLCIxMCIpLAorKDEx LCIxMSIpLCgxMiwiMTIiKSwoMTMsIjEzIiksKDE0LCIxNCIpLCgxNSwiMTUiKSwKKygxNiwiMTYi KSwoMTcsIjE3IiksKDE4LCIxOCIpLCgxOSwiMTkiKSwoMjAsIjIwIiksCisoMjEsIjIxIiksKDIy LCIyMiIpLCgyMywiMjMiKSwoMjQsIjI0IiksKDI1LCIyNSIpLAorKDI2LCIyNiIpLCgyNywiMjci KSwoMjgsIjI4IiksKDI5LCIyOSIpLCgzMCwiMzAiKSwKKygzMSwiMzEiKSwoMzIsIjMyIiksKDMz LCIzMyIpLCgzNCwiMzQiKSwoMzUsIjM1IiksCisoMzYsIjM2IiksKDM3LCIzNyIpLCgzOCwiMzgi KSwoMzksIjM5IiksKDQwLCI0MCIpLAorKDQxLCI0MSIpLCg0MiwiNDIiKSwoNDMsIjQzIiksKDQ0 LCI0NCIpLCg0NSwiNDUiKSwKKyg0NiwiNDYiKSwoNDcsIjQ3IiksKDQ4LCI0OCIpLCg0OSwiNDki KSwoNTAsIjUwIiksCisoNTEsIjUxIiksKDUyLCI1MiIpLCg1MywiNTMiKSwoNTQsIjU0IiksKDU1 LCI1NSIpLAorKDU2LCI1NiIpLCg1NywiNTciKSwoNTgsIjU4IiksKDU5LCI1OSIpLCg2MCwiNjAi KSwKKyg2MSwiNjEiKSwoNjIsIjYyIiksKDYzLCI2MyIpLCg2NCwiNjQiKSwoNjUsIjY1IiksCiso NjYsIjY2IiksKDY3LCI2NyIpLCg2OCwiNjgiKSwoNjksIjY5IiksKDcwLCI3MCIpLAorKDcxLCI3 MSIpLCg3MiwiNzIiKSwoNzMsIjczIiksKDc0LCI3NCIpLCg3NSwiNzUiKSwKKyg3NiwiNzYiKSwo NzcsIjc3IiksKDc4LCI3OCIpLCg3OSwiNzkiKSwoODAsIjgwIiksCisoODEsIjgxIiksKDgyLCI4 MiIpLCg4MywiODMiKSwoODQsIjg0IiksKDg1LCI4NSIpLAorKDg2LCI4NiIpLCg4NywiODciKSwo ODgsIjg4IiksKDg5LCI4OSIpLCg5MCwiOTAiKSwKKyg5MSwiOTEiKSwoOTIsIjkyIiksKDkzLCI5 MyIpLCg5NCwiOTQiKSwoOTUsIjk1IiksCisoOTYsIjk2IiksKDk3LCI5NyIpLCg5OCwiOTgiKSwo OTksIjk5Iik7CitTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZIGYxIEFTQywgZjAgTElNSVQgMTAw OworZjAJZjEJZjIKKzEJMAkwCisyCTEJMQorMwkyCTIKKzQJMwkzCis1CTQJNAorNgk1CTUKKzcJ Ngk2Cis4CTcJNworOQk4CTgKKzEwCTkJOQorMTEJMTAJMTAKKzEyCTExCTExCisxMwkxMgkxMgor MTQJMTMJMTMKKzE1CTE0CTE0CisxNgkxNQkxNQorMTcJMTYJMTYKKzE4CTE3CTE3CisxOQkxOAkx OAorMjAJMTkJMTkKKzIxCTIwCTIwCisyMgkyMQkyMQorMjMJMjIJMjIKKzI0CTIzCTIzCisyNQky NAkyNAorMjYJMjUJMjUKKzI3CTI2CTI2CisyOAkyNwkyNworMjkJMjgJMjgKKzMwCTI5CTI5Cisz MQkzMAkzMAorMzIJMzEJMzEKKzMzCTMyCTMyCiszNAkzMwkzMworMzUJMzQJMzQKKzM2CTM1CTM1 CiszNwkzNgkzNgorMzgJMzcJMzcKKzM5CTM4CTM4Cis0MAkzOQkzOQorNDEJNDAJNDAKKzQyCTQx CTQxCis0Mwk0Mgk0MgorNDQJNDMJNDMKKzQ1CTQ0CTQ0Cis0Ngk0NQk0NQorNDcJNDYJNDYKKzQ4 CTQ3CTQ3Cis0OQk0OAk0OAorNTAJNDkJNDkKKzUxCTUwCTUwCis1Mgk1MQk1MQorNTMJNTIJNTIK KzU0CTUzCTUzCis1NQk1NAk1NAorNTYJNTUJNTUKKzU3CTU2CTU2Cis1OAk1Nwk1NworNTkJNTgJ NTgKKzYwCTU5CTU5Cis2MQk2MAk2MAorNjIJNjEJNjEKKzYzCTYyCTYyCis2NAk2Mwk2MworNjUJ NjQJNjQKKzY2CTY1CTY1Cis2Nwk2Ngk2NgorNjgJNjcJNjcKKzY5CTY4CTY4Cis3MAk2OQk2OQor NzEJNzAJNzAKKzcyCTcxCTcxCis3Mwk3Mgk3MgorNzQJNzMJNzMKKzc1CTc0CTc0Cis3Ngk3NQk3 NQorNzcJNzYJNzYKKzc4CTc3CTc3Cis3OQk3OAk3OAorODAJNzkJNzkKKzgxCTgwCTgwCis4Mgk4 MQk4MQorODMJODIJODIKKzg0CTgzCTgzCis4NQk4NAk4NAorODYJODUJODUKKzg3CTg2CTg2Cis4 OAk4Nwk4NworODkJODgJODgKKzkwCTg5CTg5Cis5MQk5MAk5MAorOTIJOTEJOTEKKzkzCTkyCTky Cis5NAk5Mwk5MworOTUJOTQJOTQKKzk2CTk1CTk1Cis5Nwk5Ngk5NgorOTgJOTcJOTcKKzk5CTk4 CTk4CisxMDAJOTkJOTkKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjEgQVNDLCBmMCBMSU1J VCAzMDsKK2YwCWYxCWYyCisxCTAJMAorMgkxCTEKKzMJMgkyCis0CTMJMworNQk0CTQKKzYJNQk1 Cis3CTYJNgorOAk3CTcKKzkJOAk4CisxMAk5CTkKKzExCTEwCTEwCisxMgkxMQkxMQorMTMJMTIJ MTIKKzE0CTEzCTEzCisxNQkxNAkxNAorMTYJMTUJMTUKKzE3CTE2CTE2CisxOAkxNwkxNworMTkJ MTgJMTgKKzIwCTE5CTE5CisyMQkyMAkyMAorMjIJMjEJMjEKKzIzCTIyCTIyCisyNAkyMwkyMwor MjUJMjQJMjQKKzI2CTI1CTI1CisyNwkyNgkyNgorMjgJMjcJMjcKKzI5CTI4CTI4CiszMAkyOQky OQorU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMSBBU0MsIGYwIExJTUlUIDA7CitmMAlmMQlm MgorU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMiBERVNDLCBmMCBMSU1JVCAzMDsKK2YwCWYx CWYyCisxMDAJOTkJOTkKKzk5CTk4CTk4Cis5OAk5Nwk5NworOTcJOTYJOTYKKzk2CTk1CTk1Cis5 NQk5NAk5NAorOTQJOTMJOTMKKzkzCTkyCTkyCis5Mgk5MQk5MQorOTEJOTAJOTAKKzEwCTkJOQor OTAJODkJODkKKzg5CTg4CTg4Cis4OAk4Nwk4NworODcJODYJODYKKzg2CTg1CTg1Cis4NQk4NAk4 NAorODQJODMJODMKKzgzCTgyCTgyCis4Mgk4MQk4MQorODEJODAJODAKKzkJOAk4Cis4MAk3OQk3 OQorNzkJNzgJNzgKKzc4CTc3CTc3Cis3Nwk3Ngk3NgorNzYJNzUJNzUKKzc1CTc0CTc0Cis3NAk3 Mwk3MworNzMJNzIJNzIKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjIgREVTQywgZjAgTElN SVQgMDsKK2YwCWYxCWYyCitTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGYxPjEwIE9SREVSIEJZIGYy LCBmMCBMSU1JVCAyMDsKK2YwCWYxCWYyCisxMgkxMQkxMQorMTMJMTIJMTIKKzE0CTEzCTEzCisx NQkxNAkxNAorMTYJMTUJMTUKKzE3CTE2CTE2CisxOAkxNwkxNworMTkJMTgJMTgKKzIwCTE5CTE5 CisyMQkyMAkyMAorMjIJMjEJMjEKKzIzCTIyCTIyCisyNAkyMwkyMworMjUJMjQJMjQKKzI2CTI1 CTI1CisyNwkyNgkyNgorMjgJMjcJMjcKKzI5CTI4CTI4CiszMAkyOQkyOQorMzEJMzAJMzAKK1NF TEVDVCAqIEZST00gdDEgV0hFUkUgZjE+MTAgT1JERVIgQlkgZjIsIGYwIExJTUlUIDA7CitmMAlm MQlmMgorU0VMRUNUICogRlJPTSB0MSBXSEVSRSBmMT4xMCBPUkRFUiBCWSBmMiwgZjAgTElNSVQg MTAgT0ZGU0VUIDEwOworZjAJZjEJZjIKKzIyCTIxCTIxCisyMwkyMgkyMgorMjQJMjMJMjMKKzI1 CTI0CTI0CisyNgkyNQkyNQorMjcJMjYJMjYKKzI4CTI3CTI3CisyOQkyOAkyOAorMzAJMjkJMjkK KzMxCTMwCTMwCitTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGYxPjEwIE9SREVSIEJZIGYyLCBmMCBM SU1JVCAwIE9GRlNFVCAxMDsKK2YwCWYxCWYyCitzZXQgc29ydF9idWZmZXJfc2l6ZT0gMzI3Njg7 CitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRtcCAoZjEgaW50LCBmMiB2YXJjaGFyKDIwKSk7CitJ TlNFUlQgSU5UTyB0bXAgU0VMRUNUIGYxLCBmMiBGUk9NIHQxOworSU5TRVJUIElOVE8gdDEoZjEs IGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsIGYyIEZS T00gdDE7CitJTlNFUlQgSU5UTyB0MShmMSwgZjIpIFNFTEVDVCAqIEZST00gdG1wOworU0VMRUNU ICogRlJPTSB0MSBPUkRFUiBCWSBmMSBBU0MsIGYwIExJTUlUIDMwOworZjAJZjEJZjIKKzEJMAkw CisxMDEJMAkwCisyMDEJMAkwCiszMDEJMAkwCis0MDEJMAkwCisyCTEJMQorMTAyCTEJMQorMjAy CTEJMQorMzAyCTEJMQorNDAyCTEJMQorMwkyCTIKKzEwMwkyCTIKKzIwMwkyCTIKKzMwMwkyCTIK KzQwMwkyCTIKKzQJMwkzCisxMDQJMwkzCisyMDQJMwkzCiszMDQJMwkzCis0MDQJMwkzCis1CTQJ NAorMTA1CTQJNAorMjA1CTQJNAorMzA1CTQJNAorNDA1CTQJNAorNgk1CTUKKzEwNgk1CTUKKzIw Ngk1CTUKKzMwNgk1CTUKKzQwNgk1CTUKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjEgQVND LCBmMCBMSU1JVCAwOworZjAJZjEJZjIKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjIgREVT QywgZjAgTElNSVQgMzA7CitmMAlmMQlmMgorMTAwCTk5CTk5CisyMDAJOTkJOTkKKzMwMAk5OQk5 OQorNDAwCTk5CTk5Cis1MDAJOTkJOTkKKzk5CTk4CTk4CisxOTkJOTgJOTgKKzI5OQk5OAk5OAor Mzk5CTk4CTk4Cis0OTkJOTgJOTgKKzk4CTk3CTk3CisxOTgJOTcJOTcKKzI5OAk5Nwk5NworMzk4 CTk3CTk3Cis0OTgJOTcJOTcKKzk3CTk2CTk2CisxOTcJOTYJOTYKKzI5Nwk5Ngk5NgorMzk3CTk2 CTk2Cis0OTcJOTYJOTYKKzk2CTk1CTk1CisxOTYJOTUJOTUKKzI5Ngk5NQk5NQorMzk2CTk1CTk1 Cis0OTYJOTUJOTUKKzk1CTk0CTk0CisxOTUJOTQJOTQKKzI5NQk5NAk5NAorMzk1CTk0CTk0Cis0 OTUJOTQJOTQKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjIgREVTQywgZjAgTElNSVQgMDsK K2YwCWYxCWYyCitTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGYxPjEwIE9SREVSIEJZIGYyLCBmMCBM SU1JVCAyMDsKK2YwCWYxCWYyCisxMgkxMQkxMQorMTEyCTExCTExCisyMTIJMTEJMTEKKzMxMgkx MQkxMQorNDEyCTExCTExCisxMwkxMgkxMgorMTEzCTEyCTEyCisyMTMJMTIJMTIKKzMxMwkxMgkx MgorNDEzCTEyCTEyCisxNAkxMwkxMworMTE0CTEzCTEzCisyMTQJMTMJMTMKKzMxNAkxMwkxMwor NDE0CTEzCTEzCisxNQkxNAkxNAorMTE1CTE0CTE0CisyMTUJMTQJMTQKKzMxNQkxNAkxNAorNDE1 CTE0CTE0CitTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGYxPjEwIE9SREVSIEJZIGYyLCBmMCBMSU1J VCAwOworZjAJZjEJZjIKK1NFTEVDVCAqIEZST00gdDEgV0hFUkUgZjE+MTAgT1JERVIgQlkgZjIs IGYwIExJTUlUIDEwIE9GRlNFVCAxMDsKK2YwCWYxCWYyCisxNAkxMwkxMworMTE0CTEzCTEzCisy MTQJMTMJMTMKKzMxNAkxMwkxMworNDE0CTEzCTEzCisxNQkxNAkxNAorMTE1CTE0CTE0CisyMTUJ MTQJMTQKKzMxNQkxNAkxNAorNDE1CTE0CTE0CitTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGYxPjEw IE9SREVSIEJZIGYyLCBmMCBMSU1JVCAwIE9GRlNFVCAxMDsKK2YwCWYxCWYyCitzZXQgc29ydF9i dWZmZXJfc2l6ZT0gMzI3Njg7CitTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAqIEZST00gdDEK K09SREVSIEJZIGYxLCBmMCBMSU1JVCAzMDsKK2YwCWYxCWYyCisxCTAJMAorMTAxCTAJMAorMjAx CTAJMAorMzAxCTAJMAorNDAxCTAJMAorMgkxCTEKKzEwMgkxCTEKKzIwMgkxCTEKKzMwMgkxCTEK KzQwMgkxCTEKKzMJMgkyCisxMDMJMgkyCisyMDMJMgkyCiszMDMJMgkyCis0MDMJMgkyCis0CTMJ MworMTA0CTMJMworMjA0CTMJMworMzA0CTMJMworNDA0CTMJMworNQk0CTQKKzEwNQk0CTQKKzIw NQk0CTQKKzMwNQk0CTQKKzQwNQk0CTQKKzYJNQk1CisxMDYJNQk1CisyMDYJNQk1CiszMDYJNQk1 Cis0MDYJNQk1CitTRUxFQ1QgRk9VTkRfUk9XUygpOworRk9VTkRfUk9XUygpCis1MDAKK1NFTEVD VCBTUUxfQ0FMQ19GT1VORF9ST1dTICogRlJPTSB0MQorT1JERVIgQlkgZjEsIGYwIExJTUlUIDA7 CitmMAlmMQlmMgorU0VMRUNUIEZPVU5EX1JPV1MoKTsKK0ZPVU5EX1JPV1MoKQorNTAwCitTRUxF Q1QgU1FMX0NBTENfRk9VTkRfUk9XUyAqIEZST00gdDEgV0hFUkUgZjE+MTAKK09SREVSIEJZIGYy LCBmMCBMSU1JVCAyMDsKK2YwCWYxCWYyCisxMgkxMQkxMQorMTEyCTExCTExCisyMTIJMTEJMTEK KzMxMgkxMQkxMQorNDEyCTExCTExCisxMwkxMgkxMgorMTEzCTEyCTEyCisyMTMJMTIJMTIKKzMx MwkxMgkxMgorNDEzCTEyCTEyCisxNAkxMwkxMworMTE0CTEzCTEzCisyMTQJMTMJMTMKKzMxNAkx MwkxMworNDE0CTEzCTEzCisxNQkxNAkxNAorMTE1CTE0CTE0CisyMTUJMTQJMTQKKzMxNQkxNAkx NAorNDE1CTE0CTE0CitTRUxFQ1QgRk9VTkRfUk9XUygpOworRk9VTkRfUk9XUygpCis0NDUKK1NF TEVDVCBTUUxfQ0FMQ19GT1VORF9ST1dTICogRlJPTSB0MSBXSEVSRSBmMT4xMAorT1JERVIgQlkg ZjIsIGYwIExJTUlUIDA7CitmMAlmMQlmMgorU0VMRUNUIEZPVU5EX1JPV1MoKTsKK0ZPVU5EX1JP V1MoKQorNDQ1CitTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAqIEZST00gdDEgV0hFUkUgZjE+ MTAKK09SREVSIEJZIGYyLCBmMCBMSU1JVCAxMCBPRkZTRVQgMTA7CitmMAlmMQlmMgorMTQJMTMJ MTMKKzExNAkxMwkxMworMjE0CTEzCTEzCiszMTQJMTMJMTMKKzQxNAkxMwkxMworMTUJMTQJMTQK KzExNQkxNAkxNAorMjE1CTE0CTE0CiszMTUJMTQJMTQKKzQxNQkxNAkxNAorU0VMRUNUIEZPVU5E X1JPV1MoKTsKK0ZPVU5EX1JPV1MoKQorNDQ1CitTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAq IEZST00gdDEgV0hFUkUgZjE+MTAKK09SREVSIEJZIGYyLCBmMCBMSU1JVCAwIE9GRlNFVCAxMDsK K2YwCWYxCWYyCitTRUxFQ1QgRk9VTkRfUk9XUygpOworRk9VTkRfUk9XUygpCis0NDUKK3NldCBz b3J0X2J1ZmZlcl9zaXplPSAzMjc2ODA7CitTRUxFQ1QgKiBGUk9NIHQxIEpPSU4gdG1wIG9uIHQx LmYyPXRtcC5mMgorT1JERVIgQlkgdG1wLmYxLCBmMCBMSU1JVCAzMDsKK2YwCWYxCWYyCWYxCWYy CisxCTAJMAkwCTAKKzEJMAkwCTAJMAorMQkwCTAJMAkwCisxMDEJMAkwCTAJMAorMTAxCTAJMAkw CTAKKzEwMQkwCTAJMAkwCisyMDEJMAkwCTAJMAorMjAxCTAJMAkwCTAKKzIwMQkwCTAJMAkwCisz MDEJMAkwCTAJMAorMzAxCTAJMAkwCTAKKzMwMQkwCTAJMAkwCis0MDEJMAkwCTAJMAorNDAxCTAJ MAkwCTAKKzQwMQkwCTAJMAkwCisyCTEJMQkxCTEKKzIJMQkxCTEJMQorMgkxCTEJMQkxCisxMDIJ MQkxCTEJMQorMTAyCTEJMQkxCTEKKzEwMgkxCTEJMQkxCisyMDIJMQkxCTEJMQorMjAyCTEJMQkx CTEKKzIwMgkxCTEJMQkxCiszMDIJMQkxCTEJMQorMzAyCTEJMQkxCTEKKzMwMgkxCTEJMQkxCis0 MDIJMQkxCTEJMQorNDAyCTEJMQkxCTEKKzQwMgkxCTEJMQkxCitTRUxFQ1QgKiBGUk9NIHQxIEpP SU4gdG1wIG9uIHQxLmYyPXRtcC5mMgorT1JERVIgQlkgdG1wLmYxLCBmMCBMSU1JVCAzMCBPRkZT RVQgMzA7CitmMAlmMQlmMglmMQlmMgorMwkyCTIJMgkyCiszCTIJMgkyCTIKKzMJMgkyCTIJMgor MTAzCTIJMgkyCTIKKzEwMwkyCTIJMgkyCisxMDMJMgkyCTIJMgorMjAzCTIJMgkyCTIKKzIwMwky CTIJMgkyCisyMDMJMgkyCTIJMgorMzAzCTIJMgkyCTIKKzMwMwkyCTIJMgkyCiszMDMJMgkyCTIJ MgorNDAzCTIJMgkyCTIKKzQwMwkyCTIJMgkyCis0MDMJMgkyCTIJMgorNAkzCTMJMwkzCis0CTMJ MwkzCTMKKzQJMwkzCTMJMworMTA0CTMJMwkzCTMKKzEwNAkzCTMJMwkzCisxMDQJMwkzCTMJMwor MjA0CTMJMwkzCTMKKzIwNAkzCTMJMwkzCisyMDQJMwkzCTMJMworMzA0CTMJMwkzCTMKKzMwNAkz CTMJMwkzCiszMDQJMwkzCTMJMworNDA0CTMJMwkzCTMKKzQwNAkzCTMJMwkzCis0MDQJMwkzCTMJ MworU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1MgKiBGUk9NIHQxIEpPSU4gdG1wIG9uIHQxLmYy PXRtcC5mMgorT1JERVIgQlkgdG1wLmYxLCBmMCBMSU1JVCAzMCBPRkZTRVQgMzA7CitmMAlmMQlm MglmMQlmMgorMwkyCTIJMgkyCiszCTIJMgkyCTIKKzMJMgkyCTIJMgorMTAzCTIJMgkyCTIKKzEw MwkyCTIJMgkyCisxMDMJMgkyCTIJMgorMjAzCTIJMgkyCTIKKzIwMwkyCTIJMgkyCisyMDMJMgky CTIJMgorMzAzCTIJMgkyCTIKKzMwMwkyCTIJMgkyCiszMDMJMgkyCTIJMgorNDAzCTIJMgkyCTIK KzQwMwkyCTIJMgkyCis0MDMJMgkyCTIJMgorNAkzCTMJMwkzCis0CTMJMwkzCTMKKzQJMwkzCTMJ MworMTA0CTMJMwkzCTMKKzEwNAkzCTMJMwkzCisxMDQJMwkzCTMJMworMjA0CTMJMwkzCTMKKzIw NAkzCTMJMwkzCisyMDQJMwkzCTMJMworMzA0CTMJMwkzCTMKKzMwNAkzCTMJMwkzCiszMDQJMwkz CTMJMworNDA0CTMJMwkzCTMKKzQwNAkzCTMJMwkzCis0MDQJMwkzCTMJMworU0VMRUNUIEZPVU5E X1JPV1MoKTsKK0ZPVU5EX1JPV1MoKQorMTUwMAorU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1Mg KiBGUk9NIHQxIEpPSU4gdG1wIG9uIHQxLmYyPXRtcC5mMgorV0hFUkUgdDEuZjI+MjAKK09SREVS IEJZIHRtcC5mMSwgZjAgTElNSVQgMzAgT0ZGU0VUIDMwOworZjAJZjEJZjIJZjEJZjIKKzI0CTIz CTIzCTIzCTIzCisyNAkyMwkyMwkyMwkyMworMjQJMjMJMjMJMjMJMjMKKzEyNAkyMwkyMwkyMwky MworMTI0CTIzCTIzCTIzCTIzCisxMjQJMjMJMjMJMjMJMjMKKzIyNAkyMwkyMwkyMwkyMworMjI0 CTIzCTIzCTIzCTIzCisyMjQJMjMJMjMJMjMJMjMKKzMyNAkyMwkyMwkyMwkyMworMzI0CTIzCTIz CTIzCTIzCiszMjQJMjMJMjMJMjMJMjMKKzQyNAkyMwkyMwkyMwkyMworNDI0CTIzCTIzCTIzCTIz Cis0MjQJMjMJMjMJMjMJMjMKKzI1CTI0CTI0CTI0CTI0CisyNQkyNAkyNAkyNAkyNAorMjUJMjQJ MjQJMjQJMjQKKzEyNQkyNAkyNAkyNAkyNAorMTI1CTI0CTI0CTI0CTI0CisxMjUJMjQJMjQJMjQJ MjQKKzIyNQkyNAkyNAkyNAkyNAorMjI1CTI0CTI0CTI0CTI0CisyMjUJMjQJMjQJMjQJMjQKKzMy NQkyNAkyNAkyNAkyNAorMzI1CTI0CTI0CTI0CTI0CiszMjUJMjQJMjQJMjQJMjQKKzQyNQkyNAky NAkyNAkyNAorNDI1CTI0CTI0CTI0CTI0Cis0MjUJMjQJMjQJMjQJMjQKK1NFTEVDVCBGT1VORF9S T1dTKCk7CitGT1VORF9ST1dTKCkKKzExODUKK0NSRUFURSBWSUVXIHYxIGFzIFNFTEVDVCAqIEZS T00gdDEgT1JERVIgQlkgZjEsIGYwIExJTUlUIDMwOworU0VMRUNUICogRlJPTSB2MTsKK2YwCWYx CWYyCisxCTAJMAorMTAxCTAJMAorMjAxCTAJMAorMzAxCTAJMAorNDAxCTAJMAorMgkxCTEKKzEw MgkxCTEKKzIwMgkxCTEKKzMwMgkxCTEKKzQwMgkxCTEKKzMJMgkyCisxMDMJMgkyCisyMDMJMgky CiszMDMJMgkyCis0MDMJMgkyCis0CTMJMworMTA0CTMJMworMjA0CTMJMworMzA0CTMJMworNDA0 CTMJMworNQk0CTQKKzEwNQk0CTQKKzIwNQk0CTQKKzMwNQk0CTQKKzQwNQk0CTQKKzYJNQk1Cisx MDYJNQk1CisyMDYJNQk1CiszMDYJNQk1Cis0MDYJNQk1Citkcm9wIHZpZXcgdjE7CitDUkVBVEUg VklFVyB2MSBhcyBTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZIGYxLCBmMCBMSU1JVCAxMDA7CitT RUxFQ1QgKiBGUk9NIHYxIE9SREVSIEJZIGYyLCBmMCBMSU1JVCAzMDsKK2YwCWYxCWYyCisxCTAJ MAorMTAxCTAJMAorMjAxCTAJMAorMzAxCTAJMAorNDAxCTAJMAorMgkxCTEKKzEwMgkxCTEKKzIw MgkxCTEKKzMwMgkxCTEKKzQwMgkxCTEKKzExCTEwCTEwCisxMTEJMTAJMTAKKzIxMQkxMAkxMAor MzExCTEwCTEwCis0MTEJMTAJMTAKKzEyCTExCTExCisxMTIJMTEJMTEKKzIxMgkxMQkxMQorMzEy CTExCTExCis0MTIJMTEJMTEKKzEzCTEyCTEyCisxMTMJMTIJMTIKKzIxMwkxMgkxMgorMzEzCTEy CTEyCis0MTMJMTIJMTIKKzE0CTEzCTEzCisxMTQJMTMJMTMKKzIxNAkxMwkxMworMzE0CTEzCTEz Cis0MTQJMTMJMTMKK0NSRUFURSBWSUVXIHYyIGFzIFNFTEVDVCAqIEZST00gdDEgT1JERVIgQlkg ZjIsIGYwIExJTUlUIDEwMDsKK1NFTEVDVCAqIEZST00gdjEgSk9JTiB2MiBvbiB2MS5mMT12Mi5m MSBPUkRFUiBCWSB2MS5mMix2MS5mMCx2Mi5mMAorTElNSVQgMzA7CitmMAlmMQlmMglmMAlmMQlm MgorMQkwCTAJMQkwCTAKKzEJMAkwCTEwMQkwCTAKKzEJMAkwCTIwMQkwCTAKKzEJMAkwCTMwMQkw CTAKKzEJMAkwCTQwMQkwCTAKKzEwMQkwCTAJMQkwCTAKKzEwMQkwCTAJMTAxCTAJMAorMTAxCTAJ MAkyMDEJMAkwCisxMDEJMAkwCTMwMQkwCTAKKzEwMQkwCTAJNDAxCTAJMAorMjAxCTAJMAkxCTAJ MAorMjAxCTAJMAkxMDEJMAkwCisyMDEJMAkwCTIwMQkwCTAKKzIwMQkwCTAJMzAxCTAJMAorMjAx CTAJMAk0MDEJMAkwCiszMDEJMAkwCTEJMAkwCiszMDEJMAkwCTEwMQkwCTAKKzMwMQkwCTAJMjAx CTAJMAorMzAxCTAJMAkzMDEJMAkwCiszMDEJMAkwCTQwMQkwCTAKKzQwMQkwCTAJMQkwCTAKKzQw MQkwCTAJMTAxCTAJMAorNDAxCTAJMAkyMDEJMAkwCis0MDEJMAkwCTMwMQkwCTAKKzQwMQkwCTAJ NDAxCTAJMAorMgkxCTEJMgkxCTEKKzIJMQkxCTEwMgkxCTEKKzIJMQkxCTIwMgkxCTEKKzIJMQkx CTMwMgkxCTEKKzIJMQkxCTQwMgkxCTEKK1NFTEVDVCBmbG9vcihmMS8xMCkgZjMsIGNvdW50KGYy KSBGUk9NIHQxCitncm91cCBieSAxIE9SREVSIEJZIDIsMSBMSU1JVCA1OworZjMJY291bnQoZjIp CiswCTUwCisxCTUwCisyCTUwCiszCTUwCis0CTUwCitTRUxFQ1QgZmxvb3IoZjEvMTApIGYzLCBj b3VudChmMikgRlJPTSB0MQorZ3JvdXAgYnkgMSBPUkRFUiBCWSAyLDEgTElNSVQgMDsKK2YzCWNv dW50KGYyKQorQ1JFQVRFIFBST0NFRFVSRSB3bDEzOTNfc3BfdGVzdCgpCitCRUdJTgorU0VMRUNU ICogRlJPTSB0MSBXSEVSRSBmMT4xMCBPUkRFUiBCWSBmMiwgZjAgTElNSVQgMzA7CitTRUxFQ1Qg KiBGUk9NIHQxIFdIRVJFIGYxPjEwIE9SREVSIEJZIGYyLCBmMCBMSU1JVCAxNSBPRkZTRVQgMTU7 CitTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAqIEZST00gdDEgV0hFUkUgZjE+MTAKK09SREVS IEJZIGYyLCBmMCBMSU1JVCAxNSBPRkZTRVQgMTU7CitTRUxFQ1QgRk9VTkRfUk9XUygpOworU0VM RUNUICogRlJPTSB2MSBPUkRFUiBCWSBmMiwgZjAgTElNSVQgMzA7CitFTkR8CitDQUxMIHdsMTM5 M19zcF90ZXN0KCl8CitmMAlmMQlmMgorMTIJMTEJMTEKKzExMgkxMQkxMQorMjEyCTExCTExCisz MTIJMTEJMTEKKzQxMgkxMQkxMQorMTMJMTIJMTIKKzExMwkxMgkxMgorMjEzCTEyCTEyCiszMTMJ MTIJMTIKKzQxMwkxMgkxMgorMTQJMTMJMTMKKzExNAkxMwkxMworMjE0CTEzCTEzCiszMTQJMTMJ MTMKKzQxNAkxMwkxMworMTUJMTQJMTQKKzExNQkxNAkxNAorMjE1CTE0CTE0CiszMTUJMTQJMTQK KzQxNQkxNAkxNAorMTYJMTUJMTUKKzExNgkxNQkxNQorMjE2CTE1CTE1CiszMTYJMTUJMTUKKzQx NgkxNQkxNQorMTcJMTYJMTYKKzExNwkxNgkxNgorMjE3CTE2CTE2CiszMTcJMTYJMTYKKzQxNwkx NgkxNgorZjAJZjEJZjIKKzE1CTE0CTE0CisxMTUJMTQJMTQKKzIxNQkxNAkxNAorMzE1CTE0CTE0 Cis0MTUJMTQJMTQKKzE2CTE1CTE1CisxMTYJMTUJMTUKKzIxNgkxNQkxNQorMzE2CTE1CTE1Cis0 MTYJMTUJMTUKKzE3CTE2CTE2CisxMTcJMTYJMTYKKzIxNwkxNgkxNgorMzE3CTE2CTE2Cis0MTcJ MTYJMTYKK2YwCWYxCWYyCisxNQkxNAkxNAorMTE1CTE0CTE0CisyMTUJMTQJMTQKKzMxNQkxNAkx NAorNDE1CTE0CTE0CisxNgkxNQkxNQorMTE2CTE1CTE1CisyMTYJMTUJMTUKKzMxNgkxNQkxNQor NDE2CTE1CTE1CisxNwkxNgkxNgorMTE3CTE2CTE2CisyMTcJMTYJMTYKKzMxNwkxNgkxNgorNDE3 CTE2CTE2CitGT1VORF9ST1dTKCkKKzQ0NQorZjAJZjEJZjIKKzEJMAkwCisxMDEJMAkwCisyMDEJ MAkwCiszMDEJMAkwCis0MDEJMAkwCisyCTEJMQorMTAyCTEJMQorMjAyCTEJMQorMzAyCTEJMQor NDAyCTEJMQorMTEJMTAJMTAKKzExMQkxMAkxMAorMjExCTEwCTEwCiszMTEJMTAJMTAKKzQxMQkx MAkxMAorMTIJMTEJMTEKKzExMgkxMQkxMQorMjEyCTExCTExCiszMTIJMTEJMTEKKzQxMgkxMQkx MQorMTMJMTIJMTIKKzExMwkxMgkxMgorMjEzCTEyCTEyCiszMTMJMTIJMTIKKzQxMwkxMgkxMgor MTQJMTMJMTMKKzExNAkxMwkxMworMjE0CTEzCTEzCiszMTQJMTMJMTMKKzQxNAkxMwkxMworRFJP UCBQUk9DRURVUkUgd2wxMzkzX3NwX3Rlc3R8CitTRUxFQ1QgZDEuZjEsIGQxLmYyIEZST00gdDEK K0xFRlQgSk9JTiAoU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMSBMSU1JVCAzMCkgZDEgb24g dDEuZjE9ZDEuZjEKK09SREVSIEJZIGQxLmYyIERFU0MgTElNSVQgMzA7CitmMQlmMgorNQk1Cis1 CTUKKzUJNQorNQk1Cis1CTUKKzUJNQorNQk1Cis1CTUKKzUJNQorNQk1Cis1CTUKKzUJNQorNQk1 Cis1CTUKKzUJNQorNQk1Cis1CTUKKzUJNQorNQk1Cis1CTUKKzUJNQorNQk1Cis1CTUKKzUJNQor NQk1Cis0CTQKKzQJNAorNAk0Cis0CTQKKzQJNAorU0VMRUNUICogRlJPTSB0MSBXSEVSRSBmMSA9 IChTRUxFQ1QgZjEgRlJPTSB0MSBPUkRFUiBCWSAxIExJTUlUIDEpOworZjAJZjEJZjIKKzEJMAkw CisxMDEJMAkwCisyMDEJMAkwCiszMDEJMAkwCis0MDEJMAkwCitTRUxFQ1QgKiBGUk9NIHQxIFdI RVJFIGYxID0gKFNFTEVDVCBmMSBGUk9NIHQxIE9SREVSIEJZIDEgTElNSVQgMik7CitFUlJPUiAy MTAwMDogU3VicXVlcnkgcmV0dXJucyBtb3JlIHRoYW4gMSByb3cKK0RST1AgVEFCTEUgdDEsIHRt cDsKK0RST1AgVklFVyB2MSwgdjI7CisjIGVuZCBvZiBXTCMxMzkzIC0gT3B0aW1pemluZyBmaWxl c29ydCB3aXRoIHNtYWxsIGxpbWl0CiBDUkVBVEUgVEFCTEUgdDEgKAogaWQxIElOVCBOVUxMLAog aWQyIElOVCAgTk9UIE5VTEwsCgo9PT0gYWRkZWQgZmlsZSAnbXlzcWwtdGVzdC9yL29yZGVyX2J5 X3NvcnRrZXkucmVzdWx0JwotLS0gYS9teXNxbC10ZXN0L3Ivb3JkZXJfYnlfc29ydGtleS5yZXN1 bHQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgYi9teXNxbC10ZXN0L3Ivb3JkZXJfYnlf c29ydGtleS5yZXN1bHQJMjAxMC0xMS0yOSAxMToyMToyMiArMDAwMApAQCAtMCwwICsxLDE2MSBA QAorQ1JFQVRFIFRBQkxFIHQxKAorZjAgaW50IGF1dG9faW5jcmVtZW50IFBSSU1BUlkgS0VZLAor ZjEgaW50LAorZjIgdmFyY2hhcigyMDApCispIEVOR0lORT1NeUlTQU07CitJTlNFUlQgSU5UTyB0 MShmMSwgZjIpIFZBTFVFUyAKKygwLCIwIiksKDEsIjEiKSwoMiwiMiIpLCgzLCIzIiksKDQsIjQi KSwoNSwiNSIpLAorKDYsIjYiKSwoNywiNyIpLCg4LCI4IiksKDksIjkiKSwoMTAsIjEwIiksCiso MTEsIjExIiksKDEyLCIxMiIpLCgxMywiMTMiKSwoMTQsIjE0IiksKDE1LCIxNSIpLAorKDE2LCIx NiIpLCgxNywiMTciKSwoMTgsIjE4IiksKDE5LCIxOSIpLCgyMCwiMjAiKSwKKygyMSwiMjEiKSwo MjIsIjIyIiksKDIzLCIyMyIpLCgyNCwiMjQiKSwoMjUsIjI1IiksCisoMjYsIjI2IiksKDI3LCIy NyIpLCgyOCwiMjgiKSwoMjksIjI5IiksKDMwLCIzMCIpLAorKDMxLCIzMSIpLCgzMiwiMzIiKSwo MzMsIjMzIiksKDM0LCIzNCIpLCgzNSwiMzUiKSwKKygzNiwiMzYiKSwoMzcsIjM3IiksKDM4LCIz OCIpLCgzOSwiMzkiKSwoNDAsIjQwIiksCisoNDEsIjQxIiksKDQyLCI0MiIpLCg0MywiNDMiKSwo NDQsIjQ0IiksKDQ1LCI0NSIpLAorKDQ2LCI0NiIpLCg0NywiNDciKSwoNDgsIjQ4IiksKDQ5LCI0 OSIpLCg1MCwiNTAiKSwKKyg1MSwiNTEiKSwoNTIsIjUyIiksKDUzLCI1MyIpLCg1NCwiNTQiKSwo NTUsIjU1IiksCisoNTYsIjU2IiksKDU3LCI1NyIpLCg1OCwiNTgiKSwoNTksIjU5IiksKDYwLCI2 MCIpLAorKDYxLCI2MSIpLCg2MiwiNjIiKSwoNjMsIjYzIiksKDY0LCI2NCIpLCg2NSwiNjUiKSwK Kyg2NiwiNjYiKSwoNjcsIjY3IiksKDY4LCI2OCIpLCg2OSwiNjkiKSwoNzAsIjcwIiksCisoNzEs IjcxIiksKDcyLCI3MiIpLCg3MywiNzMiKSwoNzQsIjc0IiksKDc1LCI3NSIpLAorKDc2LCI3NiIp LCg3NywiNzciKSwoNzgsIjc4IiksKDc5LCI3OSIpLCg4MCwiODAiKSwKKyg4MSwiODEiKSwoODIs IjgyIiksKDgzLCI4MyIpLCg4NCwiODQiKSwoODUsIjg1IiksCisoODYsIjg2IiksKDg3LCI4NyIp LCg4OCwiODgiKSwoODksIjg5IiksKDkwLCI5MCIpLAorKDkxLCI5MSIpLCg5MiwiOTIiKSwoOTMs IjkzIiksKDk0LCI5NCIpLCg5NSwiOTUiKSwKKyg5NiwiOTYiKSwoOTcsIjk3IiksKDk4LCI5OCIp LCg5OSwiOTkiKTsKK0NSRUFURSBURU1QT1JBUlkgVEFCTEUgdG1wIChmMSBpbnQsIGYyIHZhcmNo YXIoMjApKTsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJ TlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1Qg ZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsK K0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsKK0lOU0VSVCBJTlRPIHRt cCBTRUxFQ1QgZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBG Uk9NIHRtcDsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJ TlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1Qg ZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsK K0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJTlRPIHQxKGYx LGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsZjIgRlJP TSB0MTsKK0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsKK0lOU0VSVCBJ TlRPIHRtcCBTRUxFQ1QgZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxF Q1QgKiBGUk9NIHRtcDsKK3NldCBzb3J0X2J1ZmZlcl9zaXplPSAzMjc2ODsKK0ZMVVNIIFNUQVRV UzsKK1NIT1cgU0VTU0lPTiBTVEFUVVMgTElLRSAnU29ydCUnOworVmFyaWFibGVfbmFtZQlWYWx1 ZQorU29ydF9tZXJnZV9wYXNzZXMJMAorU29ydF9yYW5nZQkwCitTb3J0X3Jvd3MJMAorU29ydF9z Y2FuCTAKK1NFTEVDVCAqIEZST00gdDEgT1JERVIgQlkgZjIgTElNSVQgMTAwOworZjAJZjEJZjIK KzEJMAkwCisxMDEJMAkwCisyMDEJMAkwCiszMDEJMAkwCis0MDEJMAkwCis1MDEJMAkwCis2MDEJ MAkwCis3MDEJMAkwCis4MDEJMAkwCis5MDEJMAkwCisxMDAxCTAJMAorMTEwMQkwCTAKKzEyMDEJ MAkwCisxMzAxCTAJMAorMTQwMQkwCTAKKzE1MDEJMAkwCisxNjAxCTAJMAorMTcwMQkwCTAKKzE4 MDEJMAkwCisxOTAxCTAJMAorMjAwMQkwCTAKKzIxMDEJMAkwCisyMjAxCTAJMAorMjMwMQkwCTAK KzI0MDEJMAkwCisyNTAxCTAJMAorMjYwMQkwCTAKKzI3MDEJMAkwCisyODAxCTAJMAorMjkwMQkw CTAKKzMwMDEJMAkwCiszMTAxCTAJMAorMzIwMQkwCTAKKzMzMDEJMAkwCiszNDAxCTAJMAorMzUw MQkwCTAKKzM2MDEJMAkwCiszNzAxCTAJMAorMzgwMQkwCTAKKzM5MDEJMAkwCis0MDAxCTAJMAor NDEwMQkwCTAKKzQyMDEJMAkwCis0MzAxCTAJMAorNDQwMQkwCTAKKzQ1MDEJMAkwCis0NjAxCTAJ MAorNDcwMQkwCTAKKzQ4MDEJMAkwCis0OTAxCTAJMAorNTAwMQkwCTAKKzUxMDEJMAkwCis1MjAx CTAJMAorNTMwMQkwCTAKKzU0MDEJMAkwCis1NTAxCTAJMAorNTYwMQkwCTAKKzU3MDEJMAkwCis1 ODAxCTAJMAorNTkwMQkwCTAKKzYwMDEJMAkwCis2MTAxCTAJMAorNjIwMQkwCTAKKzYzMDEJMAkw Cis2NDAxCTAJMAorNjUwMQkwCTAKKzY2MDEJMAkwCis2NzAxCTAJMAorNjgwMQkwCTAKKzY5MDEJ MAkwCis3MDAxCTAJMAorNzEwMQkwCTAKKzcyMDEJMAkwCis3MzAxCTAJMAorNzQwMQkwCTAKKzc1 MDEJMAkwCis3NjAxCTAJMAorNzcwMQkwCTAKKzc4MDEJMAkwCis3OTAxCTAJMAorODAwMQkwCTAK KzgxMDEJMAkwCis4MjAxCTAJMAorODMwMQkwCTAKKzg0MDEJMAkwCis4NTAxCTAJMAorODYwMQkw CTAKKzg3MDEJMAkwCis4ODAxCTAJMAorODkwMQkwCTAKKzkwMDEJMAkwCis5MTAxCTAJMAorOTIw MQkwCTAKKzkzMDEJMAkwCis5NDAxCTAJMAorOTUwMQkwCTAKKzk2MDEJMAkwCis5NzAxCTAJMAor OTgwMQkwCTAKKzk5MDEJMAkwCitTSE9XIFNFU1NJT04gU1RBVFVTIExJS0UgJ1NvcnQlJzsKK1Zh cmlhYmxlX25hbWUJVmFsdWUKK1NvcnRfbWVyZ2VfcGFzc2VzCTAKK1NvcnRfcmFuZ2UJMAorU29y dF9yb3dzCTEwMAorU29ydF9zY2FuCTEKK0RST1AgVEFCTEUgdDEsIHRtcDsKCj09PSBtb2RpZmll ZCBmaWxlICdteXNxbC10ZXN0L3Ivc2VsZWN0X25vbmUucmVzdWx0JwotLS0gYS9teXNxbC10ZXN0 L3Ivc2VsZWN0X25vbmUucmVzdWx0CTIwMTAtMTAtMjYgMDk6MTA6NTkgKzAwMDAKKysrIGIvbXlz cWwtdGVzdC9yL3NlbGVjdF9ub25lLnJlc3VsdAkyMDEwLTExLTI5IDExOjIxOjIyICswMDAwCkBA IC00ODc1LDcgKzQ4NzUsNyBAQCBTRUxFQ1QgMSBGUk9NIHQxIE9SREVSIEJZIGEgQ09MTEFURSBs YXRpCiBEUk9QIFRBQkxFIHQxOwogRW5kIG9mIDUuMSB0ZXN0cwogIwotIyBCdWcjNDUyNzc6IExv c3QgSEFWSU5HIGNsYXVzZSBsZWQgdG8gYSB3cm9uZyByZXN1bHQuCisjIEJ1ZyM0NTIyNzogTG9z dCBIQVZJTkcgY2xhdXNlIGxlZCB0byBhIHdyb25nIHJlc3VsdC4KICMKIENSRUFURSBUQUJMRSBg Q0NgICgKIGBpbnRfbm9rZXlgIGludCgxMSkgTk9UIE5VTEwsCkBAIC00OTA0LDcgKzQ5MDQsNyBA QCBXYXJuaW5nCTEyOTIJVHJ1bmNhdGVkIGluY29ycmVjdCBET1VCTEUgCiBXYXJuaW5nCTEyOTIJ VHJ1bmNhdGVkIGluY29ycmVjdCBET1VCTEUgdmFsdWU6ICdtJwogV2FybmluZwkxMjkyCVRydW5j YXRlZCBpbmNvcnJlY3QgRE9VQkxFIHZhbHVlOiAnaicKIERST1AgVEFCTEUgQ0M7Ci0jIEVuZCBv ZiB0ZXN0IzQ1Mjc3CisjIEVuZCBvZiB0ZXN0IzQ1MjI3CiAjCiAjIEJ1ZyM1NDUxNTogQ3Jhc2gg aW4gb3B0X3JhbmdlLmNjOjpnZXRfYmVzdF9ncm91cF9taW5fbWF4IG9uIAogIyAgICAgICAgICAg IFNFTEVDVCBmcm9tIFZJRVcgd2l0aCBHUk9VUCBCWQoKPT09IGFkZGVkIGZpbGUgJ215c3FsLXRl c3QvdC9vcmRlcl9ieV9zb3J0a2V5LnRlc3QnCi0tLSBhL215c3FsLXRlc3QvdC9vcmRlcl9ieV9z b3J0a2V5LnRlc3QJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgYi9teXNxbC10ZXN0L3Qv b3JkZXJfYnlfc29ydGtleS50ZXN0CTIwMTAtMTEtMjkgMTE6MjE6MjIgKzAwMDAKQEAgLTAsMCAr MSw2NiBAQAorIworIyBXTCMxMzkzIC0gT1JERVIgQlkgd2l0aCBMSU1JVCB0ZXN0cworIworIyBB IGJpZyB0ZXN0IGluIGEgc2VwYXJhdGUgZmlsZSwgc28gdGhhdCB3ZSBjYW4gcnVuIHRoZSBvcmln aW5hbAorIyBvcmRlcl9ieSB0ZXN0IHdpdGggLS1kZWJ1ZyB3aXRob3V0IHRpbWVvdXQuCisjCisj IEFsbCB0aGUgc29ydCBrZXlzIGZpdCBpbiBtZW1vcnksIGJ1dCB0aGUgYWRkb24gZmllbGRzIGRv IG5vdC4KKyMKK0NSRUFURSBUQUJMRSB0MSgKKyAgZjAgaW50IGF1dG9faW5jcmVtZW50IFBSSU1B UlkgS0VZLAorICBmMSBpbnQsCisgIGYyIHZhcmNoYXIoMjAwKQorKSBFTkdJTkU9TXlJU0FNOwor CitJTlNFUlQgSU5UTyB0MShmMSwgZjIpIFZBTFVFUyAKKygwLCIwIiksKDEsIjEiKSwoMiwiMiIp LCgzLCIzIiksKDQsIjQiKSwoNSwiNSIpLAorKDYsIjYiKSwoNywiNyIpLCg4LCI4IiksKDksIjki KSwoMTAsIjEwIiksCisoMTEsIjExIiksKDEyLCIxMiIpLCgxMywiMTMiKSwoMTQsIjE0IiksKDE1 LCIxNSIpLAorKDE2LCIxNiIpLCgxNywiMTciKSwoMTgsIjE4IiksKDE5LCIxOSIpLCgyMCwiMjAi KSwKKygyMSwiMjEiKSwoMjIsIjIyIiksKDIzLCIyMyIpLCgyNCwiMjQiKSwoMjUsIjI1IiksCiso MjYsIjI2IiksKDI3LCIyNyIpLCgyOCwiMjgiKSwoMjksIjI5IiksKDMwLCIzMCIpLAorKDMxLCIz MSIpLCgzMiwiMzIiKSwoMzMsIjMzIiksKDM0LCIzNCIpLCgzNSwiMzUiKSwKKygzNiwiMzYiKSwo MzcsIjM3IiksKDM4LCIzOCIpLCgzOSwiMzkiKSwoNDAsIjQwIiksCisoNDEsIjQxIiksKDQyLCI0 MiIpLCg0MywiNDMiKSwoNDQsIjQ0IiksKDQ1LCI0NSIpLAorKDQ2LCI0NiIpLCg0NywiNDciKSwo NDgsIjQ4IiksKDQ5LCI0OSIpLCg1MCwiNTAiKSwKKyg1MSwiNTEiKSwoNTIsIjUyIiksKDUzLCI1 MyIpLCg1NCwiNTQiKSwoNTUsIjU1IiksCisoNTYsIjU2IiksKDU3LCI1NyIpLCg1OCwiNTgiKSwo NTksIjU5IiksKDYwLCI2MCIpLAorKDYxLCI2MSIpLCg2MiwiNjIiKSwoNjMsIjYzIiksKDY0LCI2 NCIpLCg2NSwiNjUiKSwKKyg2NiwiNjYiKSwoNjcsIjY3IiksKDY4LCI2OCIpLCg2OSwiNjkiKSwo NzAsIjcwIiksCisoNzEsIjcxIiksKDcyLCI3MiIpLCg3MywiNzMiKSwoNzQsIjc0IiksKDc1LCI3 NSIpLAorKDc2LCI3NiIpLCg3NywiNzciKSwoNzgsIjc4IiksKDc5LCI3OSIpLCg4MCwiODAiKSwK Kyg4MSwiODEiKSwoODIsIjgyIiksKDgzLCI4MyIpLCg4NCwiODQiKSwoODUsIjg1IiksCisoODYs Ijg2IiksKDg3LCI4NyIpLCg4OCwiODgiKSwoODksIjg5IiksKDkwLCI5MCIpLAorKDkxLCI5MSIp LCg5MiwiOTIiKSwoOTMsIjkzIiksKDk0LCI5NCIpLCg5NSwiOTUiKSwKKyg5NiwiOTYiKSwoOTcs Ijk3IiksKDk4LCI5OCIpLCg5OSwiOTkiKTsKKworQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0bXAg KGYxIGludCwgZjIgdmFyY2hhcigyMCkpOworSU5TRVJUIElOVE8gdG1wIFNFTEVDVCBmMSxmMiBG Uk9NIHQxOworSU5TRVJUIElOVE8gdDEoZjEsZjIpIFNFTEVDVCAqIEZST00gdG1wOworSU5TRVJU IElOVE8gdG1wIFNFTEVDVCBmMSxmMiBGUk9NIHQxOworSU5TRVJUIElOVE8gdDEoZjEsZjIpIFNF TEVDVCAqIEZST00gdG1wOyAKK0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRt cDsKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsZjIgRlJPTSB0MTsKK0lOU0VSVCBJTlRPIHQx KGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsgCitJTlNFUlQgSU5UTyB0bXAgU0VMRUNUIGYxLGYy IEZST00gdDE7CitJTlNFUlQgSU5UTyB0MShmMSxmMikgU0VMRUNUICogRlJPTSB0bXA7IAorSU5T RVJUIElOVE8gdG1wIFNFTEVDVCBmMSxmMiBGUk9NIHQxOworSU5TRVJUIElOVE8gdDEoZjEsZjIp IFNFTEVDVCAqIEZST00gdG1wOyAKK0lOU0VSVCBJTlRPIHRtcCBTRUxFQ1QgZjEsZjIgRlJPTSB0 MTsKK0lOU0VSVCBJTlRPIHQxKGYxLGYyKSBTRUxFQ1QgKiBGUk9NIHRtcDsgCitJTlNFUlQgSU5U TyB0bXAgU0VMRUNUIGYxLGYyIEZST00gdDE7CitJTlNFUlQgSU5UTyB0MShmMSxmMikgU0VMRUNU ICogRlJPTSB0bXA7IAorSU5TRVJUIElOVE8gdG1wIFNFTEVDVCBmMSxmMiBGUk9NIHQxOworSU5T RVJUIElOVE8gdDEoZjEsZjIpIFNFTEVDVCAqIEZST00gdG1wOworCisjIFRlc3Qgd2hlbiBvbmx5 IHNvcnRrZXlzIGZpdHMgdG8gbWVtb3J5CitzZXQgc29ydF9idWZmZXJfc2l6ZT0gMzI3Njg7IAor CitGTFVTSCBTVEFUVVM7CitTSE9XIFNFU1NJT04gU1RBVFVTIExJS0UgJ1NvcnQlJzsKKworU0VM RUNUICogRlJPTSB0MSBPUkRFUiBCWSBmMiBMSU1JVCAxMDA7CisKK1NIT1cgU0VTU0lPTiBTVEFU VVMgTElLRSAnU29ydCUnOworCitEUk9QIFRBQkxFIHQxLCB0bXA7Cgo9PT0gbW9kaWZpZWQgZmls ZSAnbXlzeXMvQ01ha2VMaXN0cy50eHQnCi0tLSBhL215c3lzL0NNYWtlTGlzdHMudHh0CTIwMTAt MDgtMTIgMTU6Mjc6NTMgKzAwMDAKKysrIGIvbXlzeXMvQ01ha2VMaXN0cy50eHQJMjAxMC0xMS0y OSAxMToyMToyMiArMDAwMApAQCAtNzcsMyArNzcsOCBAQCBEVFJBQ0VfSU5TVFJVTUVOVChteXN5 cykKIEFERF9FWEVDVVRBQkxFKHRocl9sb2NrIHRocl9sb2NrLmMpCiBUQVJHRVRfTElOS19MSUJS QVJJRVModGhyX2xvY2sgbXlzeXMpCiBTRVRfVEFSR0VUX1BST1BFUlRJRVModGhyX2xvY2sgUFJP UEVSVElFUyBDT01QSUxFX0ZMQUdTICItRE1BSU4iKQorCitBRERfRVhFQ1VUQUJMRShxdWV1ZXMg cXVldWVzLmMpCitUQVJHRVRfTElOS19MSUJSQVJJRVMocXVldWVzIG15c3lzKQorU0VUX1RBUkdF VF9QUk9QRVJUSUVTKHF1ZXVlcyBQUk9QRVJUSUVTIENPTVBJTEVfRkxBR1MgIi1ETUFJTiIpCitB RERfVEVTVChxdWV1ZXNfdGVzdCBxdWV1ZXMpCgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzeXMvcXVl dWVzLmMnCi0tLSBhL215c3lzL3F1ZXVlcy5jCTIwMTAtMDctMDggMjE6MjA6MDggKzAwMDAKKysr IGIvbXlzeXMvcXVldWVzLmMJMjAxMC0xMS0yOSAxMToyMToyMiArMDAwMApAQCAtMzcwLDggKzM3 MCw4IEBAIHZvaWQgcXVldWVfZml4KFFVRVVFICpxdWV1ZSkKICAgIEEgdGVzdCBwcm9ncmFtIGZv ciB0aGUgcHJpb3JpdHkgcXVldWUgaW1wbGVtZW50YXRpb24uCiAgICBJdCBjYW4gYWxzbyBiZSB1 c2VkIHRvIGJlbmNobWFyayBjaGFuZ2VzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgQnVpbGQg YnkgZG9pbmcgdGhlIGZvbGxvd2luZyBpbiB0aGUgZGlyZWN0b3J5IG15c3lzCi0gICBtYWtlIHRl c3RfcHJpb3JpdHlfcXVldWUKLSAgIC4vdGVzdF9wcmlvcml0eV9xdWV1ZQorICAgbWFrZSBxdWV1 ZXMKKyAgIC4vcXVldWVzCiAKICAgIFdyaXR0ZW4gYnkgTWlrYWVsIFJvbnN0csO2bSwgMjAwNQog ICovCkBAIC0zODEsMTEgKzM4MSwxMSBAQCBzdGF0aWMgdWludCB0b3Rfbm9fcGFydHM9IDA7CiBz dGF0aWMgdWludCB0b3Rfbm9fbG9vcHM9IDA7CiBzdGF0aWMgdWludCBleHBlY3RlZF9wYXJ0PSAw Owogc3RhdGljIHVpbnQgZXhwZWN0ZWRfbnVtPSAwOwotc3RhdGljIGJvb2wgbWF4X2luZD0gMDsK LXN0YXRpYyBib29sIGZpeF91c2VkPSAwOworc3RhdGljIG15X2Jvb2wgbWF4X2luZD0gMDsKK3N0 YXRpYyBteV9ib29sIGZpeF91c2VkPSAwOwogc3RhdGljIHVsb25nbG9uZyBzdGFydF90aW1lPSAw OwogCi1zdGF0aWMgYm9vbCBpc19kaXZpc2libGVfYnkodWludCBudW0sIHVpbnQgZGl2aXNvcikK K3N0YXRpYyBteV9ib29sIGlzX2RpdmlzaWJsZV9ieSh1aW50IG51bSwgdWludCBkaXZpc29yKQog ewogICB1aW50IHF1b3RpZW50PSBudW0gLyBkaXZpc29yOwogICBpZiAocXVvdGllbnQgKiBkaXZp c29yID09IG51bSkKQEAgLTQ3OSw2ICs0NzksNyBAQCBzdGF0aWMgaW50IHRlc3RfY29tcGFyZSh2 b2lkICpudWxsX2FyZywgCiAgIHVpbnQgYV9udW09ICgqKHVpbnQqKWEpICYgMHgzRkZGRkY7CiAg IHVpbnQgYl9udW09ICgqKHVpbnQqKWIpICYgMHgzRkZGRkY7CiAgIHVpbnQgYV9wYXJ0LCBiX3Bh cnQ7CisgICh2b2lkKSBudWxsX2FyZzsKICAgaWYgKGFfbnVtID4gYl9udW0pCiAgICAgcmV0dXJu ICsxOwogICBpZiAoYV9udW0gPCBiX251bSkKQEAgLTQ5Miw3ICs0OTMsNyBAQCBzdGF0aWMgaW50 IHRlc3RfY29tcGFyZSh2b2lkICpudWxsX2FyZywgCiAgIHJldHVybiAwOwogfQogCi1ib29sIGNo ZWNrX251bSh1aW50IG51bV9wYXJ0KQorbXlfYm9vbCBjaGVja19udW0odWludCBudW1fcGFydCkK IHsKICAgdWludCBwYXJ0PSBudW1fcGFydCA+PiAyMjsKICAgdWludCBudW09IG51bV9wYXJ0ICYg MHgzRkZGRkY7CkBAIC01NDMsNyArNTQ0LDcgQEAgdm9pZCBwZXJmb3JtX2luc2VydChRVUVVRSAq cXVldWUpCiAgIH0KIH0KIAotYm9vbCBwZXJmb3JtX2luc19kZWwoUVVFVUUgKnF1ZXVlLCBib29s IG1heF9pbmQpCitteV9ib29sIHBlcmZvcm1faW5zX2RlbChRVUVVRSAqcXVldWUsIG15X2Jvb2wg bWF4X2luZCkKIHsKICAgdWludCBpPSAwLCBub19sb29wcz0gdG90X25vX2xvb3BzLCBqPSB0b3Rf bm9fcGFydHM7CiAgIGRvCkBAIC01NzEsMTAgKzU3MiwxMCBAQCBib29sIHBlcmZvcm1faW5zX2Rl bChRVUVVRSAqcXVldWUsIGJvb2wgCiAgIHJldHVybiBGQUxTRTsKIH0KIAotYm9vbCBkb190ZXN0 KHVpbnQgbm9fcGFydHMsIHVpbnQgbF9tYXhfaW5kLCBib29sIGxfZml4X3VzZWQpCitteV9ib29s IGRvX3Rlc3QodWludCBub19wYXJ0cywgdWludCBsX21heF9pbmQsIG15X2Jvb2wgbF9maXhfdXNl ZCkKIHsKICAgUVVFVUUgcXVldWU7Ci0gIGJvb2wgcmVzdWx0OworICBteV9ib29sIHJlc3VsdDsK ICAgbWF4X2luZD0gbF9tYXhfaW5kOwogICBmaXhfdXNlZD0gbF9maXhfdXNlZDsKICAgaW5pdF9x dWV1ZSgmcXVldWUsIG5vX3BhcnRzLCAwLCBtYXhfaW5kLCB0ZXN0X2NvbXBhcmUsIE5VTEwpOwoK PT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9DTWFrZUxpc3RzLnR4dCcKLS0tIGEvc3FsL0NNYWtlTGlz dHMudHh0CTIwMTAtMTEtMjMgMjI6Mzc6NTkgKzAwMDAKKysrIGIvc3FsL0NNYWtlTGlzdHMudHh0 CTIwMTAtMTEtMjkgMTE6MjE6MjIgKzAwMDAKQEAgLTQwLDYgKzQwLDcgQEAgRU5ESUYoKQogU0VU IChTUUxfU09VUkNFCiAgICAgICAgICAgICAgIC4uL3NxbC1jb21tb24vY2xpZW50LmMgZGVycm9y LmNjIGRlc19rZXlfZmlsZS5jYwogICAgICAgICAgICAgICAgZGlzY292ZXIuY2MgLi4vbGlibXlz cWwvZXJybXNnLmMgZmllbGQuY2MgIGZpZWxkX2NvbnYuY2MgCisgICAgICAgICAgICAgICBib3Vu ZGVkX3F1ZXVlLmNjCiAgICAgICAgICAgICAgICBmaWxlc29ydC5jYyBnc3RyZWFtLmNjIHNoYTIu Y2MKICAgICAgICAgICAgICAgIGhhbmRsZXIuY2MgaGFzaF9maWxvLmggc3FsX3BsdWdpbl9zZXJ2 aWNlcy5oCiAgICAgICAgICAgICAgICBob3N0bmFtZS5jYyBpbml0LmNjIGl0ZW0uY2MgaXRlbV9i dWZmLmNjIGl0ZW1fY21wZnVuYy5jYyAKQEAgLTExMCw3ICsxMTEsOCBAQCBTRVQgKFNMQVZFX1NP VVJDRSBycGxfc2xhdmUuY2MgcnBsX3JlcG9yCiAJCSAgcnBsX2luZm9fdGFibGVfYWNjZXNzLmNj IHNlcnZlcl9pZHMuaCkKIEFERF9MSUJSQVJZKHNsYXZlICR7U0xBVkVfU09VUkNFfSkKIEFERF9E RVBFTkRFTkNJRVMoc2xhdmUgR2VuRXJyb3IpCi1BRERfTElCUkFSWShzcWxndW5pdGxpYiBtZGwu Y2Mgc3FsX2xpc3QuY2Mgc3FsX3N0cmluZy5jYyB0aHJfbWFsbG9jLmNjKQorQUREX0xJQlJBUlko c3FsZ3VuaXRsaWIKKyAgYm91bmRlZF9xdWV1ZS5jYyBtZGwuY2Mgc3FsX2xpc3QuY2Mgc3FsX3N0 cmluZy5jYyB0aHJfbWFsbG9jLmNjKQogQUREX0RFUEVOREVOQ0lFUyhzcWxndW5pdGxpYiBHZW5F cnJvcikKIAogCgo9PT0gYWRkZWQgZmlsZSAnc3FsL2JvdW5kZWRfcXVldWUuY2MnCi0tLSBhL3Nx bC9ib3VuZGVkX3F1ZXVlLmNjCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvc3FsL2Jv dW5kZWRfcXVldWUuY2MJMjAxMC0xMS0yOSAxMToyMToyMiArMDAwMApAQCAtMCwwICsxLDg2IEBA CisvKiBDb3B5cmlnaHQgKGMpIDIwMTAsIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFs bCByaWdodHMgcmVzZXJ2ZWQuIAorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0 aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt MTMwNyAgVVNBICovCisKKyNpbmNsdWRlICJib3VuZGVkX3F1ZXVlLmgiCisjaW5jbHVkZSAic3Fs X2NvbnN0LmgiCisjaW5jbHVkZSAic3FsX3NvcnQuaCIKKworCituYW1lc3BhY2UgeworLyoqCisg ICBBIGxvY2FsIGhlbHBlciBmdW5jdGlvbi4gU2VlIGNvbW1lbnRzIGZvciBnZXRfbWVyZ2VfYnVm ZmVyc19jb3N0KCkuCisgKi8KK2RvdWJsZSBnZXRfbWVyZ2VfY29zdChoYV9yb3dzIG51bV9lbGVt ZW50cywgaGFfcm93cyBudW1fYnVmZmVycywgdWludCBlbGVtX3NpemUpCit7CisgIHJldHVybiAK KyAgICAyLjAgKiAoKGRvdWJsZSkgbnVtX2VsZW1lbnRzICogZWxlbV9zaXplKSAvIElPX1NJWkUK KyAgICArIChkb3VibGUpIG51bV9lbGVtZW50cyAqIGxvZygoZG91YmxlKSBudW1fYnVmZmVycykg LworICAgICAgKFRJTUVfRk9SX0NPTVBBUkVfUk9XSUQgKiBNX0xOMik7Cit9Cit9CisKKy8qKgor ICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQsIGFuZCBmYXN0ZXIgdmVyc2lvbiBvZiBAc2VlIGdldF9t ZXJnZV9tYW55X2J1ZmZzX2Nvc3QoKS4KKyAgIFdlIGNhbGN1bGF0ZSB0aGUgY29zdCBvZiBtZXJn aW5nIGJ1ZmZlcnMsIGJ5IHNpbXVsYXRpbmcgdGhlIGFjdGlvbnMKKyAgIG9mIEBzZWUgbWVyZ2Vf bWFueV9idWZmLiBGb3IgZXhwbGFuYXRpb25zIG9mIGZvcm11bGFzIGJlbG93LAorICAgc2VlIGNv bW1lbnRzIGZvciBnZXRfbWVyZ2VfYnVmZmVyc19jb3N0KCkuCisgICBUT0RPOiBVc2UgdGhpcyBm dW5jdGlvbiBmb3IgVW5pcXVlOjpnZXRfdXNlX2Nvc3QoKS4KKyovCitkb3VibGUgZ2V0X21lcmdl X21hbnlfYnVmZnNfY29zdF9mYXN0KGhhX3Jvd3MgbnVtX3Jvd3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhhX3Jvd3MgbnVtX2tleXNfcGVyX2J1ZmZlciwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCAgICBlbGVtX3NpemUpCit7Cisg IGhhX3Jvd3MgbnVtX2J1ZmZlcnM9IG51bV9yb3dzIC8gbnVtX2tleXNfcGVyX2J1ZmZlcjsKKyAg aGFfcm93cyBsYXN0X25fZWxlbXM9IG51bV9yb3dzICUgbnVtX2tleXNfcGVyX2J1ZmZlcjsKKyAg ZG91YmxlIHRvdGFsX2Nvc3Q7CisKKyAgLyogQ2FsY3VsYXRlIENQVSBjb3N0IG9mIHNvcnRpbmcg YnVmZmVycy4gKi8KKyAgdG90YWxfY29zdD0KKyAgICAoIG51bV9idWZmZXJzICogbnVtX2tleXNf cGVyX2J1ZmZlciAqIGxvZygxLjAgKyBudW1fa2V5c19wZXJfYnVmZmVyKSArCisgICAgICBsYXN0 X25fZWxlbXMgKiBsb2coMS4wICsgbGFzdF9uX2VsZW1zKSApCisgICAgLyBUSU1FX0ZPUl9DT01Q QVJFX1JPV0lEOworICAKKyAgLyogU2ltdWxhdGUgYmVoYXZpb3Igb2YgbWVyZ2VfbWFueV9idWZm KCkuICovCisgIHdoaWxlIChudW1fYnVmZmVycyA+PSBNRVJHRUJVRkYyKQorICB7CisgICAgLyog Q2FsY3VsYXRlICMgb2YgY2FsbHMgdG8gbWVyZ2VfYnVmZmVycygpICovCisgICAgY29uc3QgaGFf cm93cyBsb29wX2xpbWl0PSBudW1fYnVmZmVycyAtIE1FUkdFQlVGRiozLzI7CisgICAgY29uc3Qg aGFfcm93cyBudW1fbWVyZ2VfY2FsbHM9IDEgKyBsb29wX2xpbWl0L01FUkdFQlVGRjsKKyAgICBj b25zdCBoYV9yb3dzIGlfZW5kX3ZhbHVlPSBudW1fbWVyZ2VfY2FsbHMgKiBNRVJHRUJVRkY7CisK KyAgICAvKiBDb3N0IG9mIG1lcmdlIHNvcnQgJ251bV9tZXJnZV9jYWxscycgKi8KKyAgICB0b3Rh bF9jb3N0Kz0KKyAgICAgIG51bV9tZXJnZV9jYWxscyAqCisgICAgICBnZXRfbWVyZ2VfY29zdChu dW1fa2V5c19wZXJfYnVmZmVyICogTUVSR0VCVUZGLCBNRVJHRUJVRkYsIGVsZW1fc2l6ZSk7CisK KyAgICAvKiAjIG9mIHJlY29yZHMgaW4gcmVtYWluaW5nIGJ1ZmZlcnMuICovCisgICAgbGFzdF9u X2VsZW1zKz0gKG51bV9idWZmZXJzIC0gaV9lbmRfdmFsdWUpICogbnVtX2tleXNfcGVyX2J1ZmZl cjsKKworICAgIC8qIENvc3Qgb2YgbWVyZ2Ugc29ydCBvZiByZW1haW5pbmcgYnVmZmVycy4gKi8K KyAgICB0b3RhbF9jb3N0Kz0gZ2V0X21lcmdlX2Nvc3QobGFzdF9uX2VsZW1zLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBudW1fYnVmZmVycyAtIGlfZW5kX3ZhbHVlLCBlbGVtX3Np emUpOworCisgICAgbnVtX2J1ZmZlcnM9IG51bV9tZXJnZV9jYWxsczsKKyAgICBudW1fa2V5c19w ZXJfYnVmZmVyKj0gTUVSR0VCVUZGOworICB9CisKKyAgLyogU2ltdWxhdGUgZmluYWwgbWVyZ2Vf YnVmZiBjYWxsLiAqLworICBsYXN0X25fZWxlbXMrPSBudW1fa2V5c19wZXJfYnVmZmVyICogbnVt X2J1ZmZlcnM7CisgIHRvdGFsX2Nvc3QrPSBnZXRfbWVyZ2VfY29zdChsYXN0X25fZWxlbXMsIG51 bV9idWZmZXJzLCBlbGVtX3NpemUpOworCisgIHJldHVybiB0b3RhbF9jb3N0OworfQorCisKCj09 PSBhZGRlZCBmaWxlICdzcWwvYm91bmRlZF9xdWV1ZS5oJwotLS0gYS9zcWwvYm91bmRlZF9xdWV1 ZS5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvc3FsL2JvdW5kZWRfcXVldWUuaAky MDEwLTExLTI5IDExOjIxOjIyICswMDAwCkBAIC0wLDAgKzEsMjA0IEBACisvKiBDb3B5cmlnaHQg KGMpIDIwMTAsIE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuIAorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICovCisK KyNpZm5kZWYgQk9VTkRFRF9RVUVVRV9JTkNMVURFRAorI2RlZmluZSBCT1VOREVEX1FVRVVFX0lO Q0xVREVECisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJteV9nbG9iYWwuaCIKKyNp bmNsdWRlICJteV9iYXNlLmgiCisjaW5jbHVkZSAibXlfc3lzLmgiCisjaW5jbHVkZSAicXVldWVz LmgiCisKK2NsYXNzIFNvcnRfcGFyYW07CisKKy8qKgorICBBIHByaW9yaXR5IHF1ZXVlIHdpdGgg YSBmaXhlZCwgbGltaXRlZCBzaXplLgorCisgIFRoaXMgaXMgYSB3cmFwcGVyIG9uIHRvcCBvZiBR VUVVRSBhbmQgdGhlIHF1ZXVlX3h4eCgpIGZ1bmN0aW9ucy4KKyAgSXQga2VlcHMgdGhlIHRvcC1O IGVsZW1lbnRzIHdoaWNoIGFyZSBpbnNlcnRlZC4KKworICBFbGVtZW50cyBvZiB0eXBlIEVsZW1l bnRfdHlwZSBhcmUgcHVzaGVkIGludG8gdGhlIHF1ZXVlLgorICBGb3IgZWFjaCBlbGVtZW50LCB3 ZSBjYWxsIGEgdXNlci1zdXBwbGllZCBrZXltYWtlcl9mdW5jdGlvbiwKKyAgdG8gZ2VuZXJhdGUg YSBrZXkgb2YgdHlwZSBLZXlfdHlwZSBmb3IgdGhlIGVsZW1lbnQuCisgIEluc3RhbmNlcyBvZiBL ZXlfdHlwZSBhcmUgY29tcGFyZWQgd2l0aCB0aGUgdXNlci1zdXBwbGllZCBjb21wYXJlX2Z1bmN0 aW9uLgorICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50X3R5cGUsIHR5cGVuYW1lIEtleV90 eXBlPgorY2xhc3MgQm91bmRlZF9xdWV1ZQoreworcHVibGljOgorICBCb3VuZGVkX3F1ZXVlKCkK KyAgeworICAgIG1lbXNldCgmbV9xdWV1ZSwgMCwgc2l6ZW9mKG1fcXVldWUpKTsKKyAgfQorCisg IH5Cb3VuZGVkX3F1ZXVlKCkKKyAgeworICAgIGRlbGV0ZV9xdWV1ZSgmbV9xdWV1ZSk7CisgIH0K KworICAvKioKKyAgICAgRnVuY3Rpb24gZm9yIG1ha2luZyBzb3J0LWtleSBmcm9tIGlucHV0IGRh dGEuCisgICAgIEBwYXJhbSBwYXJhbSBTb3J0IHBhcmFtZXRlcnMuCisgICAgIEBwYXJhbSB0byAg ICBXaGVyZSB0byBwdXQgdGhlIGtleS4KKyAgICAgQHBhcmFtIGZyb20gIFRoZSBpbnB1dCBkYXRh LgorICAqLworICB0eXBlZGVmIHZvaWQgKCprZXltYWtlcl9mdW5jdGlvbikoU29ydF9wYXJhbSAq cGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlfdHlwZSAqdG8s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50X3R5cGUgKmZyb20p OworCisgIC8qKgorICAgICBGdW5jdGlvbiBmb3IgY29tcGFyaW5nIHR3byBrZXlzLgorICAgICBA cGFyYW0gIG4gUG9pbnRlciB0byBudW1iZXIgb2YgYnl0ZXMgdG8gY29tcGFyZS4KKyAgICAgQHBh cmFtICBhIEZpcnN0IGtleS4KKyAgICAgQHBhcmFtICBiIFNlY29uZCBrZXkuCisgICAgIEByZXR2 YWwgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGxlZnQgYXJndW1lbnQgaXMg CisgICAgICAgICAgICAgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBy aWdodCBhcmd1bWVudC4KKyAgICovCisgIHR5cGVkZWYgaW50ICgqY29tcGFyZV9mdW5jdGlvbiko c2l6ZV90ICpuLCBLZXlfdHlwZSAqKmEsIEtleV90eXBlICoqYik7CisKKyAgLyoqCisgICAgSW5p dGlhbGl6ZSB0aGUgcXVldWUuCisKKyAgICBAcGFyYW0gbWF4X2VsZW1lbnRzICAgVGhlIHNpemUg b2YgdGhlIHF1ZXVlLgorICAgIEBwYXJhbSBvZmZzZXRfdG9fa2V5ICBPZmZzZXQgdG8ga2V5IGlu IGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgcXVldWUuCisgICAgQHBhcmFtIG1heF9hdF90b3AgICAg IFNldCB0byAxIGlmIHlvdSB3YW50IGJpZ2dlc3QgZWxlbWVudCBvbiB0b3AuCisgICAgQHBhcmFt IGNvbXBhcmUgICAgICAgIENvbXBhcmUgZnVuY3Rpb24gZm9yIGVsZW1lbnRzLCB0YWtlcyAzIGFy Z3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgTlVMTCwgd2UgdXNlIGdldF9w dHJfY29tcGFyZShjb21wYXJlX2xlbmd0aCkuCisgICAgQHBhcmFtIGNvbXBhcmVfbGVuZ3RoIExl bmd0aCBvZiB0aGUgZGF0YSAoaS5lLiB0aGUga2V5cykgdXNlZCBmb3Igc29ydGluZy4KKyAgICBA cGFyYW0ga2V5bWFrZXIgICAgICAgRnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVzIGtleXMgZm9yIGVs ZW1lbnRzLgorICAgIEBwYXJhbSBzb3J0X3BhcmFtICAgICBTb3J0IHBhcmFtZXRlcnMuCisgICAg QHBhcmFtIHNvcnRfa2V5cyAgICAgIEFycmF5IG9mIHBvaW50ZXJzIHRvIGtleXMgdG8gc29ydC4K KworICAgIEByZXR2YWwgMCBPSywgMSBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LgorCisgICAg V2UgZG8gKm5vdCogdGFrZSBvd25lcnNoaXAgb2YgYW55IG9mIHRoZSBpbnB1dCBwb2ludGVyIGFy Z3VtZW50cy4KKyAgICovCisgIGludCBpbml0KGhhX3Jvd3MgbWF4X2VsZW1lbnRzLCB1aW50IG9m ZnNldF90b19rZXksIGJvb2wgbWF4X2F0X3RvcCwKKyAgICAgICAgICAgY29tcGFyZV9mdW5jdGlv biBjb21wYXJlLCBzaXplX3QgY29tcGFyZV9sZW5ndGgsCisgICAgICAgICAgIGtleW1ha2VyX2Z1 bmN0aW9uIGtleW1ha2VyLCBTb3J0X3BhcmFtICpzb3J0X3BhcmFtLAorICAgICAgICAgICBLZXlf dHlwZSAqKnNvcnRfa2V5cyk7CisKKyAgLyoqCisgICAgUHVzaGVzIGFuIGVsZW1lbnQgb24gdGhl IHF1ZXVlLgorICAgIElmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGZ1bGwsIHdlIGRpc2NhcmQgb25l IGVsZW1lbnQuCisgICAgQ2FsbHMga2V5bWFrZXJfZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBrZXkg Zm9yIHRoZSBlbGVtZW50LgorCisgICAgQHBhcmFtIGVsZW1lbnQgICAgICAgIFRoZSBlbGVtZW50 IHRvIGJlIHB1c2hlZC4KKyAgICovCisgIHZvaWQgcHVzaChFbGVtZW50X3R5cGUgKmVsZW1lbnQp OworCisgIC8qKgorICAgIFJlbW92ZXMgdGhlIHRvcCBlbGVtZW50IGZyb20gdGhlIHF1ZXVlLgor CisgICAgQHJldHZhbCBQb2ludGVyIHRvIHRoZSAoa2V5IG9mIHRoZSkgcmVtb3ZlZCBlbGVtZW50 LgorICAgKi8KKyAgS2V5X3R5cGUgKipwb3AoKQorICB7CisgICAgLy8gRG9uJ3QgcmV0dXJuIHRo ZSBleHRyYSBlbGVtZW50IHRvIHRoZSBjbGllbnQgY29kZS4KKyAgICBpZiAocXVldWVfaXNfZnVs bCgoJm1fcXVldWUpKSkKKyAgICAgIHF1ZXVlX3JlbW92ZSgmbV9xdWV1ZSwgMCk7CisgICAgcmV0 dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8S2V5X3R5cGUqKj4ocXVldWVfcmVtb3ZlKCZtX3F1ZXVlLCAw KSk7CisgIH0KKworICAvKioKKyAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBxdWV1 ZS4KKyAgICovCisgIHVpbnQgbnVtX2VsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZS5l bGVtZW50czsgfQorCisgIC8qKgorICAgIElzIHRoZSBxdWV1ZSBpbml0aWFsaXplZD8KKyAgICov CisgIGJvb2wgaXNfaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlLm1heF9lbGVt ZW50cyA+IDA7IH0KKworcHJpdmF0ZToKKyAgS2V5X3R5cGUgICAgICAgICAqKm1fc29ydF9rZXlz OworICBzaXplX3QgICAgICAgICAgICAgbV9jb21wYXJlX2xlbmd0aDsKKyAga2V5bWFrZXJfZnVu Y3Rpb24gIG1fa2V5bWFrZXI7CisgIFNvcnRfcGFyYW0gICAgICAgICptX3NvcnRfcGFyYW07Cisg IHN0X3F1ZXVlICAgICAgICAgICBtX3F1ZXVlOworfTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBF bGVtZW50X3R5cGUsIHR5cGVuYW1lIEtleV90eXBlPgoraW50IEJvdW5kZWRfcXVldWU8RWxlbWVu dF90eXBlLCBLZXlfdHlwZT46OmluaXQoaGFfcm93cyBtYXhfZWxlbWVudHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50IG9mZnNldF90b19rZXks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1h eF9hdF90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb21wYXJlX2Z1bmN0aW9uIGNvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tcGFyZV9sZW5ndGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXltYWtlcl9mdW5jdGlvbiBrZXlt YWtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv cnRfcGFyYW0gKnNvcnRfcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBLZXlfdHlwZSAqKnNvcnRfa2V5cykKK3sKKyAgREJVR19BU1NFUlQoc29y dF9rZXlzICE9IE5VTEwpOworCisgIG1fc29ydF9rZXlzPSAgICAgIHNvcnRfa2V5czsKKyAgbV9j b21wYXJlX2xlbmd0aD0gY29tcGFyZV9sZW5ndGg7CisgIG1fa2V5bWFrZXI9ICAgICAgIGtleW1h a2VyOworICBtX3NvcnRfcGFyYW09ICAgICBzb3J0X3BhcmFtOworICAvLyBpbml0X3F1ZXVlKCkg dGFrZXMgYW4gdWludCwgYW5kIGFsc28gZG9lcyAobWF4X2VsZW1lbnRzICsgMSkKKyAgaWYgKG1h eF9lbGVtZW50cyA+PSAoVUlOVF9NQVggLSAxKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKGNvbXBh cmUgPT0gTlVMTCkKKyAgICBjb21wYXJlPQorICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb21wYXJl X2Z1bmN0aW9uPihnZXRfcHRyX2NvbXBhcmUoY29tcGFyZV9sZW5ndGgpKTsKKyAgLy8gV2UgYWxs b2NhdGUgc3BhY2UgZm9yIG9uZSBleHRyYSBlbGVtZW50LCBmb3IgcmVwbGFjZSB3aGVuIHF1ZXVl IGlzIGZ1bGwuCisgIHJldHVybiBpbml0X3F1ZXVlKCZtX3F1ZXVlLCAodWludCkgbWF4X2VsZW1l bnRzICsgMSwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3RvX2tleSwgbWF4X2F0X3RvcCwK KyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxxdWV1ZV9jb21wYXJlPihjb21w YXJlKSwKKyAgICAgICAgICAgICAgICAgICAgJm1fY29tcGFyZV9sZW5ndGgpOworfQorCisKK3Rl bXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRfdHlwZSwgdHlwZW5hbWUgS2V5X3R5cGU+Cit2b2lkIEJv dW5kZWRfcXVldWU8RWxlbWVudF90eXBlLCBLZXlfdHlwZT46OnB1c2goRWxlbWVudF90eXBlICpl bGVtZW50KQoreworICBEQlVHX0FTU0VSVChpc19pbml0aWFsaXplZCgpKTsKKyAgaWYgKHF1ZXVl X2lzX2Z1bGwoKCZtX3F1ZXVlKSkpCisgIHsKKyAgICAvLyBSZXBsYWNlIHRvcCBlbGVtZW50IHdp dGggbmV3IGtleSwgYW5kIHJlLW9yZGVyIHRoZSBxdWV1ZS4KKyAgICBLZXlfdHlwZSAqKnBxX3Rv cD0gcmVpbnRlcnByZXRfY2FzdDxLZXlfdHlwZSAqKj4ocXVldWVfdG9wKCZtX3F1ZXVlKSk7Cisg ICAgKCptX2tleW1ha2VyKShtX3NvcnRfcGFyYW0sICpwcV90b3AsIGVsZW1lbnQpOworICAgIHF1 ZXVlX3JlcGxhY2VkKCZtX3F1ZXVlKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBJbnNlcnQgbmV3IGtl eSBpbnRvIHRoZSBxdWV1ZS4KKyAgICAoKm1fa2V5bWFrZXIpKG1fc29ydF9wYXJhbSwgbV9zb3J0 X2tleXNbbV9xdWV1ZS5lbGVtZW50c10sIGVsZW1lbnQpOworICAgIHF1ZXVlX2luc2VydCgmbV9x dWV1ZSwKKyAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KCZtX3NvcnRf a2V5c1ttX3F1ZXVlLmVsZW1lbnRzXSkpOworICB9Cit9CisKKworLyoKKyAgQ2FsY3VsYXRlIGNv c3Qgb2YgbWVyZ2Ugc29ydAorCisgICAgQHBhcmFtIG51bV9yb3dzICAgICAgICAgICAgVG90YWwg bnVtYmVyIG9mIHJvd3MuCisgICAgQHBhcmFtIG51bV9rZXlzX3Blcl9idWZmZXIgTnVtYmVyIG9m IGtleXMgcGVyIGJ1ZmZlci4KKyAgICBAcGFyYW0gZWxlbV9zaXplICAgICAgICAgICBTaXplIG9m IGVhY2ggZWxlbWVudC4KKworICAgIENhbGN1bGF0ZXMgY29zdCBvZiBtZXJnZSBzb3J0IGJ5IHNp bXVsYXRpbmcgY2FsbCB0byBtZXJnZV9tYW55X2J1ZmYoKS4KKworICBAcmV0dmFsCisgICAgY29t cHV0ZWQgY29zdCBvZiBtZXJnZSBzb3J0CisKKyAgQG5vdGUKKyAgICBEZWNsYXJlZCBoZXJlIGlu IG9yZGVyIHRvIGJlIGFibGUgdG8gdW5pdCB0ZXN0IGl0LAorICAgIHNpbmNlIGxpYnJhcnkgZGVw ZW5kZW5jaWVzIGhhdmUgbm90IGJlZW4gc29ydGVkIG91dCB5ZXQuCisqLworZG91YmxlIGdldF9t ZXJnZV9tYW55X2J1ZmZzX2Nvc3RfZmFzdChoYV9yb3dzIG51bV9yb3dzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoYV9yb3dzIG51bV9rZXlzX3Blcl9idWZmZXIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQgICAgZWxlbV9zaXplKTsK KworI2VuZGlmICAvLyBCT1VOREVEX1FVRVVFX0lOQ0xVREVECgo9PT0gbW9kaWZpZWQgZmlsZSAn c3FsL2ZpbGVzb3J0LmNjJwotLS0gYS9zcWwvZmlsZXNvcnQuY2MJMjAxMC0wOC0wNCAxMDozNDow MSArMDAwMAorKysgYi9zcWwvZmlsZXNvcnQuY2MJMjAxMC0xMS0yOSAxMToyMToyMiArMDAwMApA QCAtMzIsMTEgKzMyLDE3IEBACiAjaW5jbHVkZSAicHJvYmVzX215c3FsLmgiCiAjaW5jbHVkZSAi c3FsX3Rlc3QuaCIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBURVNUX2ZpbGVzb3J0CiAj aW5jbHVkZSAib3B0X3JhbmdlLmgiICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTUUxfU0VM RUNUCisjaW5jbHVkZSAiYm91bmRlZF9xdWV1ZS5oIgorI2luY2x1ZGUgInNxbF9zZWxlY3QuaCIK IAogI2lmbmRlZiBUSFJFQUQKICNkZWZpbmUgU0tJUF9EQlVHX0lOX0ZJTEVTT1JUCiAjZW5kaWYK IAorI2lmZGVmIEhBVkVfRVhQTElDSVRfVEVNUExBVEVfSU5TVEFOVElBVElPTgordGVtcGxhdGUg Y2xhc3MgQm91bmRlZF9xdWV1ZTx1Y2hhciwgdWNoYXI+OworI2VuZGlmCisKIC8vLyBIb3cgdG8g d3JpdGUgcmVjb3JkX3JlZi4KICNkZWZpbmUgV1JJVEVfUkVGKGZpbGUsZnJvbSkgXAogaWYgKG15 X2Jfd3JpdGUoKGZpbGUpLCh1Y2hhciopIChmcm9tKSxwYXJhbS0+cmVmX2xlbmd0aCkpIFwKQEAg LTQ0LDMwICs1MCw2OCBAQCBpZiAobXlfYl93cml0ZSgoZmlsZSksKHVjaGFyKikgKGZyb20pLHBh CiAKIAkvKiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgKi8KIAotc3RhdGljIGNoYXIg KiptYWtlX2NoYXJfYXJyYXkoY2hhciAqKm9sZF9wb3MsIHJlZ2lzdGVyIHVpbnQgZmllbGRzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBsZW5ndGgsIG15ZiBteV9mbGFnKTsK K3N0YXRpYyB2b2lkIG1ha2VfY2hhcl9hcnJheShGSUxFU09SVF9JTkZPICppbmZvLCB1aW50IGZp ZWxkcywgdWludCBsZW5ndGgpOwogc3RhdGljIHVjaGFyICpyZWFkX2J1ZmZwZWtfZnJvbV9maWxl KElPX0NBQ0hFICpidWZmZXJfZmlsZSwgdWludCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1Y2hhciAqYnVmKTsKLXN0YXRpYyBoYV9yb3dzIGZpbmRfYWxsX2tl eXMoU09SVFBBUkFNICpwYXJhbSxTUUxfU0VMRUNUICpzZWxlY3QsCi0JCQkgICAgIHVjaGFyICog KnNvcnRfa2V5cywgSU9fQ0FDSEUgKmJ1ZmZlcl9maWxlLAotCQkJICAgICBJT19DQUNIRSAqdGVt cGZpbGUsSU9fQ0FDSEUgKmluZGV4ZmlsZSk7Ci1zdGF0aWMgaW50IHdyaXRlX2tleXMoU09SVFBB UkFNICpwYXJhbSx1Y2hhciAqICpzb3J0X2tleXMsCi0JCSAgICAgIHVpbnQgY291bnQsIElPX0NB Q0hFICpidWZmZXJfZmlsZSwgSU9fQ0FDSEUgKnRlbXBmaWxlKTsKLXN0YXRpYyB2b2lkIG1ha2Vf c29ydGtleShTT1JUUEFSQU0gKnBhcmFtLHVjaGFyICp0bywgdWNoYXIgKnJlZl9wb3MpOwotc3Rh dGljIHZvaWQgcmVnaXN0ZXJfdXNlZF9maWVsZHMoU09SVFBBUkFNICpwYXJhbSk7Ci1zdGF0aWMg aW50IG1lcmdlX2luZGV4KFNPUlRQQVJBTSAqcGFyYW0sdWNoYXIgKnNvcnRfYnVmZmVyLAotCQkg ICAgICAgQlVGRlBFSyAqYnVmZnBlaywKLQkJICAgICAgIHVpbnQgbWF4YnVmZmVyLElPX0NBQ0hF ICp0ZW1wZmlsZSwKLQkJICAgICAgIElPX0NBQ0hFICpvdXRmaWxlKTsKLXN0YXRpYyBib29sIHNh dmVfaW5kZXgoU09SVFBBUkFNICpwYXJhbSx1Y2hhciAqKnNvcnRfa2V5cywgdWludCBjb3VudCwg CitzdGF0aWMgaGFfcm93cyBmaW5kX2FsbF9rZXlzKFNvcnRfcGFyYW0gKnBhcmFtLFNRTF9TRUxF Q1QgKnNlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNoYXIgKipzb3J0X2tl eXMsIElPX0NBQ0hFICpidWZmZXJfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SU9fQ0FDSEUgKnRlbXBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb3VuZGVk X3F1ZXVlPHVjaGFyLCB1Y2hhcj4gKnBxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo YV9yb3dzICpmb3VuZF9yb3dzKTsKK3N0YXRpYyBpbnQgd3JpdGVfa2V5cyhTb3J0X3BhcmFtICpw YXJhbSx1Y2hhciAqICpzb3J0X2tleXMsCisgICAgICAgICAgICAgICAgICAgICAgdWludCBjb3Vu dCwgSU9fQ0FDSEUgKmJ1ZmZlcl9maWxlLCBJT19DQUNIRSAqdGVtcGZpbGUpOworc3RhdGljIHZv aWQgbWFrZV9zb3J0a2V5KFNvcnRfcGFyYW0gKnBhcmFtLHVjaGFyICp0bywgdWNoYXIgKnJlZl9w b3MpOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfdXNlZF9maWVsZHMoU29ydF9wYXJhbSAqcGFyYW0p Oworc3RhdGljIGludCBtZXJnZV9pbmRleChTb3J0X3BhcmFtICpwYXJhbSx1Y2hhciAqc29ydF9i dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIEJVRkZQRUsgKmJ1ZmZwZWssCisgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQgbWF4YnVmZmVyLElPX0NBQ0hFICp0ZW1wZmlsZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgSU9fQ0FDSEUgKm91dGZpbGUpOworc3RhdGljIGJvb2wgc2F2ZV9p bmRleChTb3J0X3BhcmFtICpwYXJhbSx1Y2hhciAqKnNvcnRfa2V5cywgdWludCBjb3VudCwgCiAg ICAgICAgICAgICAgICAgICAgICAgIEZJTEVTT1JUX0lORk8gKnRhYmxlX3NvcnQpOwogc3RhdGlj IHVpbnQgc3VmZml4X2xlbmd0aCh1bG9uZyBzdHJpbmdfbGVuZ3RoKTsKIHN0YXRpYyB1aW50IHNv cnRsZW5ndGgoVEhEICp0aGQsIFNPUlRfRklFTEQgKnNvcnRvcmRlciwgdWludCBzX2xlbmd0aCwK IAkJICAgICAgIGJvb2wgKm11bHRpX2J5dGVfY2hhcnNldCk7Ci1zdGF0aWMgU09SVF9BRERPTl9G SUVMRCAqZ2V0X2FkZG9uX2ZpZWxkcyhUSEQgKnRoZCwgRmllbGQgKipwdGFiZmllbGQsCitzdGF0 aWMgU09SVF9BRERPTl9GSUVMRCAqZ2V0X2FkZG9uX2ZpZWxkcyh1bG9uZyBtYXhfbGVuZ3RoX2Zv cl9zb3J0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWVsZCAqKnB0YWJmaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQgc29ydGxlbmd0aCwgdWludCAqcGxlbmd0aCk7CiBzdGF0aWMgdm9pZCB1bnBhY2tf YWRkb25fZmllbGRzKHN0cnVjdCBzdF9zb3J0X2FkZG9uX2ZpZWxkICphZGRvbl9maWVsZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNoYXIgKmJ1ZmYpOworc3RhdGljIGJvb2wg Y2hlY2tfaWZfcHFfYXBwbGljYWJsZShTb3J0X3BhcmFtICpwYXJhbSwgRklMRVNPUlRfSU5GTyAq aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEUgKnRhYmxlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYV9yb3dzIHJlY29yZHMsIHVsb25n IG1lbW9yeV9hdmFpbGFibGUpOworCisKK3ZvaWQgU29ydF9wYXJhbTo6aW5pdCh1aW50IHNvcnRs ZW4sIFRBQkxFICp0YWJsZSwgdWxvbmcgbWF4X2xlbmd0aF9mb3Jfc29ydF9kYXRhLAorICAgICAg ICAgICAgICAgICAgICAgIGhhX3Jvd3MgbWF4cm93cywgYm9vbCBzb3J0X3Bvc2l0aW9ucykKK3sK KyAgc29ydF9sZW5ndGg9IHNvcnRsZW47CisgIHJlZl9sZW5ndGg9IHRhYmxlLT5maWxlLT5yZWZf bGVuZ3RoOworICBpZiAoISh0YWJsZS0+ZmlsZS0+aGFfdGFibGVfZmxhZ3MoKSAmIEhBX0ZBU1Rf S0VZX1JFQUQpICYmCisgICAgICAhdGFibGUtPmZ1bGx0ZXh0X3NlYXJjaGVkICYmICFzb3J0X3Bv c2l0aW9ucykKKyAgeworICAgIC8qIAorICAgICAgR2V0IHRoZSBkZXNjcmlwdG9ycyBvZiBhbGwg ZmllbGRzIHdob3NlIHZhbHVlcyBhcmUgYXBwZW5kZWQgCisgICAgICB0byBzb3J0ZWQgZmllbGRz IGFuZCBnZXQgaXRzIHRvdGFsIGxlbmd0aCBpbiBhZGRvbl9sZW5ndGguCisgICAgKi8KKyAgICBh ZGRvbl9maWVsZD0gZ2V0X2FkZG9uX2ZpZWxkcyhtYXhfbGVuZ3RoX2Zvcl9zb3J0X2RhdGEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUtPmZpZWxkLCBzb3J0X2xlbmd0 aCwgJmFkZG9uX2xlbmd0aCk7CisgIH0KKyAgaWYgKGFkZG9uX2ZpZWxkKQorICAgIHJlc19sZW5n dGg9IGFkZG9uX2xlbmd0aDsKKyAgZWxzZQorICB7CisgICAgcmVzX2xlbmd0aD0gcmVmX2xlbmd0 aDsKKyAgICAvKiAKKyAgICAgIFRoZSByZWZlcmVuY2UgdG8gdGhlIHJlY29yZCBpcyBjb25zaWRl cmVkIAorICAgICAgYXMgYW4gYWRkaXRpb25hbCBzb3J0ZWQgZmllbGQKKyAgICAqLworICAgIHNv cnRfbGVuZ3RoKz0gcmVmX2xlbmd0aDsKKyAgfQorICByZWNfbGVuZ3RoPSBzb3J0X2xlbmd0aCAr IGFkZG9uX2xlbmd0aDsKKyAgbWF4X3Jvd3M9IG1heHJvd3M7Cit9CisKKwogLyoqCiAgIFNvcnQg YSB0YWJsZS4KICAgQ3JlYXRlcyBhIHNldCBvZiBwb2ludGVycyB0aGF0IGNhbiBiZSB1c2VkIHRv IHJlYWQgdGhlIHJvd3MKQEAgLTgwLDE4ICsxMjQsMTcgQEAgc3RhdGljIHZvaWQgdW5wYWNrX2Fk ZG9uX2ZpZWxkcyhzdHJ1Y3QgcwogICBUaGUgcmVzdWx0IHNldCBpcyBzdG9yZWQgaW4gdGFibGUt PmlvX2NhY2hlIG9yCiAgIHRhYmxlLT5yZWNvcmRfcG9pbnRlcnMuCiAKLSAgQHBhcmFtIHRoZCAg ICAgICAgICAgQ3VycmVudCB0aHJlYWQKLSAgQHBhcmFtIHRhYmxlCQlUYWJsZSB0byBzb3J0Ci0g IEBwYXJhbSBzb3J0b3JkZXIJSG93IHRvIHNvcnQgdGhlIHRhYmxlCi0gIEBwYXJhbSBzX2xlbmd0 aAlOdW1iZXIgb2YgZWxlbWVudHMgaW4gc29ydG9yZGVyCi0gIEBwYXJhbSBzZWxlY3QJCWNvbmRp dGlvbiB0byBhcHBseSB0byB0aGUgcm93cwotICBAcGFyYW0gbWF4X3Jvd3MJUmV0dXJuIG9ubHkg dGhpcyBtYW55IHJvd3MKLSAgQHBhcmFtIHNvcnRfcG9zaXRpb25zCVNldCB0byAxIGlmIHdlIHdh bnQgdG8gZm9yY2Ugc29ydGluZyBieSBwb3NpdGlvbgotCQkJKE5lZWRlZCBieSBVUERBVEUvSU5T RVJUIG9yIEFMVEVSIFRBQkxFKQotICBAcGFyYW0gZXhhbWluZWRfcm93cwlTdG9yZSBudW1iZXIg b2YgZXhhbWluZWQgcm93cyBoZXJlCisgIEBwYXJhbSAgICAgIHRoZCAgICAgICAgICAgIEN1cnJl bnQgdGhyZWFkCisgIEBwYXJhbSAgICAgIHRhYmxlICAgICAgICAgIFRhYmxlIHRvIHNvcnQKKyAg QHBhcmFtICAgICAgc29ydG9yZGVyICAgICAgSG93IHRvIHNvcnQgdGhlIHRhYmxlCisgIEBwYXJh bSAgICAgIHNfbGVuZ3RoICAgICAgIE51bWJlciBvZiBlbGVtZW50cyBpbiBzb3J0b3JkZXIKKyAg QHBhcmFtICAgICAgc2VsZWN0ICAgICAgICAgQ29uZGl0aW9uIHRvIGFwcGx5IHRvIHRoZSByb3dz CisgIEBwYXJhbSAgICAgIG1heF9yb3dzICAgICAgIFJldHVybiBvbmx5IHRoaXMgbWFueSByb3dz CisgIEBwYXJhbSAgICAgIHNvcnRfcG9zaXRpb25zIFNldCB0byBUUlVFIGlmIHdlIHdhbnQgdG8g Zm9yY2Ugc29ydGluZyBieSBwb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo TmVlZGVkIGJ5IFVQREFURS9JTlNFUlQgb3IgQUxURVIgVEFCTEUpCisgIEBwYXJhbVtvdXRdIGV4 YW1pbmVkX3Jvd3MgIFN0b3JlIG51bWJlciBvZiBleGFtaW5lZCByb3dzIGhlcmUKKyAgQHBhcmFt ICAgICAgb3B0aW9ucyAgICAgICAgMCBvciBPUFRJT05fRk9VTkRfUk9XUwogCi0gIEB0b2RvCi0g ICAgY2hlY2sgd2h5IHdlIGRvIHRoaXMgKHBhcmFtLmtleXMtLSkKICAgQG5vdGUKICAgICBJZiB3 ZSBzb3J0IGJ5IHBvc2l0aW9uIChsaWtlIGlmIHNvcnRfcG9zaXRpb25zIGlzIDEpIGZpbGVzb3J0 KCkgd2lsbAogICAgIGNhbGwgdGFibGUtPnByZXBhcmVfZm9yX3Bvc2l0aW9uKCkuCkBAIC0xMDAs MjkgKzE0MywzMCBAQCBzdGF0aWMgdm9pZCB1bnBhY2tfYWRkb25fZmllbGRzKHN0cnVjdCBzCiAg ICAgSEFfUE9TX0VSUk9SCUVycm9yCiAgIEByZXR2YWwKICAgICBcIwkJCU51bWJlciBvZiByb3dz Ci0gIEByZXR2YWwKLSAgICBleGFtaW5lZF9yb3dzCXdpbGwgYmUgc2V0IHRvIG51bWJlciBvZiBl eGFtaW5lZCByb3dzCiAqLwogCiBoYV9yb3dzIGZpbGVzb3J0KFRIRCAqdGhkLCBUQUJMRSAqdGFi bGUsIFNPUlRfRklFTEQgKnNvcnRvcmRlciwgdWludCBzX2xlbmd0aCwKIAkJIFNRTF9TRUxFQ1Qg KnNlbGVjdCwgaGFfcm93cyBtYXhfcm93cywKLSAgICAgICAgICAgICAgICAgYm9vbCBzb3J0X3Bv c2l0aW9ucywgaGFfcm93cyAqZXhhbWluZWRfcm93cykKKyAgICAgICAgICAgICAgICAgYm9vbCBz b3J0X3Bvc2l0aW9ucywgaGFfcm93cyAqZXhhbWluZWRfcm93cywKKyAgICAgICAgICAgICAgICAg dWxvbmdsb25nIG9wdGlvbnMpCiB7CiAgIGludCBlcnJvcjsKLSAgdWxvbmcgbWVtYXZsLCBtaW5f c29ydF9tZW1vcnk7CisgIHVsb25nIG1lbW9yeV9hdmFpbGFibGU9IHRoZC0+dmFyaWFibGVzLnNv cnRidWZmX3NpemU7CiAgIHVpbnQgbWF4YnVmZmVyOwogICBCVUZGUEVLICpidWZmcGVrOwotICBo YV9yb3dzIHJlY29yZHM9IEhBX1BPU19FUlJPUjsKLSAgdWNoYXIgKipzb3J0X2tleXM9IDA7Ci0g IElPX0NBQ0hFIHRlbXBmaWxlLCBidWZmcGVrX3BvaW50ZXJzLCAqc2VsZWN0ZWRfcmVjb3Jkc19m aWxlLCAqb3V0ZmlsZTsgCi0gIFNPUlRQQVJBTSBwYXJhbTsKKyAgaGFfcm93cyBudW1fcm93cz0g SEFfUE9TX0VSUk9SOworICB1Y2hhciAqKnNvcnRfa2V5cz0gTlVMTDsKKyAgSU9fQ0FDSEUgdGVt cGZpbGUsIGJ1ZmZwZWtfcG9pbnRlcnMsICpvdXRmaWxlOyAKKyAgU29ydF9wYXJhbSBwYXJhbTsK ICAgYm9vbCBtdWx0aV9ieXRlX2NoYXJzZXQ7CisgIGhhX3Jvd3MgZm91bmRfcm93czsKKyAgQm91 bmRlZF9xdWV1ZTx1Y2hhciwgdWNoYXI+IHBxOworCiAgIERCVUdfRU5URVIoImZpbGVzb3J0Iik7 CiAgIERCVUdfRVhFQ1VURSgiaW5mbyIsVEVTVF9maWxlc29ydChzb3J0b3JkZXIsc19sZW5ndGgp Oyk7CiAjaWZkZWYgU0tJUF9EQlVHX0lOX0ZJTEVTT1JUCiAgIERCVUdfUFVTSCgiIik7CQkvKiBO byBEQlVHIGhlcmUgKi8KICNlbmRpZgotICBGSUxFU09SVF9JTkZPIHRhYmxlX3NvcnQ7CiAgIFRB QkxFX0xJU1QgKnRhYj0gdGFibGUtPnBvc19pbl90YWJsZV9saXN0OwogICBJdGVtX3N1YnNlbGVj dCAqc3Vic2VsZWN0PSB0YWIgPyB0YWItPmNvbnRhaW5pbmdfc3Vic2VsZWN0KCkgOiAwOwogCkBA IC0xMzksNyArMTgzLDcgQEAgaGFfcm93cyBmaWxlc29ydChUSEQgKnRoZCwgVEFCTEUgKnRhYmxl LAogICAgIFFVSUNLX0lOREVYX01FUkdFX1NFTEVDVC4gV29yayB3aXRoIGEgY29weSBhbmQgcHV0 IGl0IGJhY2sgYXQgdGhlIGVuZCAKICAgICB3aGVuIGluZGV4X21lcmdlIHNlbGVjdCBoYXMgZmlu aXNoZWQgd2l0aCBpdC4KICAgKi8KLSAgbWVtY3B5KCZ0YWJsZV9zb3J0LCAmdGFibGUtPnNvcnQs IHNpemVvZihGSUxFU09SVF9JTkZPKSk7CisgIEZJTEVTT1JUX0lORk8gdGFibGVfc29ydD0gdGFi bGUtPnNvcnQ7CiAgIHRhYmxlLT5zb3J0LmlvX2NhY2hlPSBOVUxMOwogICAKICAgb3V0ZmlsZT0g dGFibGVfc29ydC5pb19jYWNoZTsKQEAgLTE0NywxMTcgKzE5MSw5NSBAQCBoYV9yb3dzIGZpbGVz b3J0KFRIRCAqdGhkLCBUQUJMRSAqdGFibGUsCiAgIG15X2JfY2xlYXIoJmJ1ZmZwZWtfcG9pbnRl cnMpOwogICBidWZmcGVrPTA7CiAgIGVycm9yPSAxOwotICBiemVybygoY2hhciopICZwYXJhbSxz aXplb2YocGFyYW0pKTsKLSAgcGFyYW0uc29ydF9sZW5ndGg9IHNvcnRsZW5ndGgodGhkLCBzb3J0 b3JkZXIsIHNfbGVuZ3RoLCAmbXVsdGlfYnl0ZV9jaGFyc2V0KTsKKworICBwYXJhbS5pbml0KHNv cnRsZW5ndGgodGhkLCBzb3J0b3JkZXIsIHNfbGVuZ3RoLCAmbXVsdGlfYnl0ZV9jaGFyc2V0KSwK KyAgICAgICAgICAgICB0YWJsZSwKKyAgICAgICAgICAgICB0aGQtPnZhcmlhYmxlcy5tYXhfbGVu Z3RoX2Zvcl9zb3J0X2RhdGEsIG1heF9yb3dzLCBzb3J0X3Bvc2l0aW9ucyk7CiAgIC8qIGZpbGVz b3J0IGNhbm5vdCBoYW5kbGUgemVyby1sZW5ndGggcmVjb3Jkcy4gKi8KICAgREJVR19BU1NFUlQo cGFyYW0uc29ydF9sZW5ndGgpOwotICBwYXJhbS5yZWZfbGVuZ3RoPSB0YWJsZS0+ZmlsZS0+cmVm X2xlbmd0aDsKLSAgcGFyYW0uYWRkb25fZmllbGQ9IDA7Ci0gIHBhcmFtLmFkZG9uX2xlbmd0aD0g MDsKLSAgaWYgKCEodGFibGUtPmZpbGUtPmhhX3RhYmxlX2ZsYWdzKCkgJiBIQV9GQVNUX0tFWV9S RUFEKSAmJgotICAgICAgIXRhYmxlLT5mdWxsdGV4dF9zZWFyY2hlZCAmJiAhc29ydF9wb3NpdGlv bnMpCi0gIHsKLSAgICAvKiAKLSAgICAgIEdldCB0aGUgZGVzY3JpcHRvcnMgb2YgYWxsIGZpZWxk cyB3aG9zZSB2YWx1ZXMgYXJlIGFwcGVuZGVkIAotICAgICAgdG8gc29ydGVkIGZpZWxkcyBhbmQg Z2V0IGl0cyB0b3RhbCBsZW5ndGggaW4gcGFyYW0uc3BhY2tfbGVuZ3RoLgotICAgICovCi0gICAg cGFyYW0uYWRkb25fZmllbGQ9IGdldF9hZGRvbl9maWVsZHModGhkLCB0YWJsZS0+ZmllbGQsIAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnNvcnRfbGVuZ3Ro LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbS5hZGRvbl9s ZW5ndGgpOwotICB9CiAKICAgdGFibGVfc29ydC5hZGRvbl9idWY9IDA7CiAgIHRhYmxlX3NvcnQu YWRkb25fbGVuZ3RoPSBwYXJhbS5hZGRvbl9sZW5ndGg7CiAgIHRhYmxlX3NvcnQuYWRkb25fZmll bGQ9IHBhcmFtLmFkZG9uX2ZpZWxkOwogICB0YWJsZV9zb3J0LnVucGFjaz0gdW5wYWNrX2FkZG9u X2ZpZWxkczsKLSAgaWYgKHBhcmFtLmFkZG9uX2ZpZWxkKQotICB7Ci0gICAgcGFyYW0ucmVzX2xl bmd0aD0gcGFyYW0uYWRkb25fbGVuZ3RoOwotICAgIGlmICghKHRhYmxlX3NvcnQuYWRkb25fYnVm PSAodWNoYXIgKikgbXlfbWFsbG9jKHBhcmFtLmFkZG9uX2xlbmd0aCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWUYoTVlfV01FKSkpKQorICBp ZiAocGFyYW0uYWRkb25fZmllbGQgJiYKKyAgICAgICEodGFibGVfc29ydC5hZGRvbl9idWY9Cisg ICAgICAgICh1Y2hhciAqKSBteV9tYWxsb2MocGFyYW0uYWRkb25fbGVuZ3RoLCBNWUYoTVlfV01F KSkpKQogICAgICAgZ290byBlcnI7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgcGFyYW0ucmVzX2xl bmd0aD0gcGFyYW0ucmVmX2xlbmd0aDsKLSAgICAvKiAKLSAgICAgIFRoZSByZWZlcmVuY2UgdG8g dGhlIHJlY29yZCBpcyBjb25zaWRlcmVkIAotICAgICAgYXMgYW4gYWRkaXRpb25hbCBzb3J0ZWQg ZmllbGQKLSAgICAqLwotICAgIHBhcmFtLnNvcnRfbGVuZ3RoKz0gcGFyYW0ucmVmX2xlbmd0aDsK LSAgfQotICBwYXJhbS5yZWNfbGVuZ3RoPSBwYXJhbS5zb3J0X2xlbmd0aCtwYXJhbS5hZGRvbl9s ZW5ndGg7Ci0gIHBhcmFtLm1heF9yb3dzPSBtYXhfcm93czsKIAogICBpZiAoc2VsZWN0ICYmIHNl bGVjdC0+cXVpY2spCi0gIHsKICAgICBzdGF0dXNfdmFyX2luY3JlbWVudCh0aGQtPnN0YXR1c192 YXIuZmlsZXNvcnRfcmFuZ2VfY291bnQpOwotICB9CiAgIGVsc2UKLSAgewogICAgIHN0YXR1c192 YXJfaW5jcmVtZW50KHRoZC0+c3RhdHVzX3Zhci5maWxlc29ydF9zY2FuX2NvdW50KTsKLSAgfQot I2lmZGVmIENBTl9UUlVTVF9SQU5HRQotICBpZiAoc2VsZWN0ICYmIHNlbGVjdC0+cXVpY2sgJiYg c2VsZWN0LT5xdWljay0+cmVjb3JkcyA+IDBMKQotICB7Ci0gICAgcmVjb3Jkcz1taW4oKGhhX3Jv d3MpIChzZWxlY3QtPnF1aWNrLT5yZWNvcmRzKjIrRVhUUkFfUkVDT1JEUyoyKSwKLQkJdGFibGUt PmZpbGUtPnN0YXRzLnJlY29yZHMpK0VYVFJBX1JFQ09SRFM7Ci0gICAgc2VsZWN0ZWRfcmVjb3Jk c19maWxlPTA7Ci0gIH0KLSAgZWxzZQotI2VuZGlmCi0gIHsKLSAgICByZWNvcmRzPSB0YWJsZS0+ ZmlsZS0+ZXN0aW1hdGVfcm93c191cHBlcl9ib3VuZCgpOwotICAgIC8qCi0gICAgICBJZiBudW1i ZXIgb2YgcmVjb3JkcyBpcyBub3Qga25vd24sIHVzZSBhcyBtdWNoIG9mIHNvcnQgYnVmZmVyIAot ICAgICAgYXMgcG9zc2libGUuIAotICAgICovCi0gICAgaWYgKHJlY29yZHMgPT0gSEFfUE9TX0VS Uk9SKQotICAgICAgcmVjb3Jkcy0tOyAgLy8gd2UgdXNlICdyZWNvcmRzKzEnIGJlbG93LgotICAg IHNlbGVjdGVkX3JlY29yZHNfZmlsZT0gMDsKLSAgfQorCisgIC8qCisgICAgSWYgbnVtYmVyIG9m IHJvd3MgaXMgbm90IGtub3duLCB1c2UgYXMgbXVjaCBvZiBzb3J0IGJ1ZmZlciBhcyBwb3NzaWJs ZS4gCisgICovCisgIG51bV9yb3dzPSB0YWJsZS0+ZmlsZS0+ZXN0aW1hdGVfcm93c191cHBlcl9i b3VuZCgpOwogCiAgIGlmIChtdWx0aV9ieXRlX2NoYXJzZXQgJiYKICAgICAgICEocGFyYW0udG1w X2J1ZmZlcj0gKGNoYXIqKSBteV9tYWxsb2MocGFyYW0uc29ydF9sZW5ndGgsTVlGKE1ZX1dNRSkp KSkKICAgICBnb3RvIGVycjsKIAotICBtZW1hdmw9IHRoZC0+dmFyaWFibGVzLnNvcnRidWZmX3Np emU7Ci0gIG1pbl9zb3J0X21lbW9yeT0gbWF4KE1JTl9TT1JUX01FTU9SWSwgcGFyYW0uc29ydF9s ZW5ndGgqTUVSR0VCVUZGMik7Ci0gIHdoaWxlIChtZW1hdmwgPj0gbWluX3NvcnRfbWVtb3J5KQot ICB7Ci0gICAgdWxvbmcgb2xkX21lbWF2bDsKLSAgICB1bG9uZyBrZXlzPSBtZW1hdmwvKHBhcmFt LnJlY19sZW5ndGgrc2l6ZW9mKGNoYXIqKSk7Ci0gICAgcGFyYW0ua2V5cz0odWludCkgbWluKHJl Y29yZHMrMSwga2V5cyk7Ci0gICAgaWYgKCh0YWJsZV9zb3J0LnNvcnRfa2V5cz0KLQkgKHVjaGFy ICoqKSBtYWtlX2NoYXJfYXJyYXkoKGNoYXIgKiopIHRhYmxlX3NvcnQuc29ydF9rZXlzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ua2V5cywgcGFyYW0ucmVjX2xl bmd0aCwgTVlGKDApKSkpCi0gICAgICBicmVhazsKLSAgICBvbGRfbWVtYXZsPW1lbWF2bDsKLSAg ICBpZiAoKG1lbWF2bD1tZW1hdmwvNCozKSA8IG1pbl9zb3J0X21lbW9yeSAmJiBvbGRfbWVtYXZs ID4gbWluX3NvcnRfbWVtb3J5KQotICAgICAgbWVtYXZsPSBtaW5fc29ydF9tZW1vcnk7CisgIGlm IChjaGVja19pZl9wcV9hcHBsaWNhYmxlKCZwYXJhbSwgJnRhYmxlX3NvcnQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRhYmxlLCBudW1fcm93cywgbWVtb3J5X2F2YWlsYWJsZSkpCisg IHsKKyAgICBEQlVHX1BSSU5UKCJpbmZvIiwgKCJmaWxlc29ydCBQUSBpcyBhcHBsaWNhYmxlIikp OworICAgIGNvbnN0IHNpemVfdCBjb21wYXJlX2xlbmd0aD0gcGFyYW0uc29ydF9sZW5ndGg7Cisg ICAgaWYgKHBxLmluaXQocGFyYW0ubWF4X3Jvd3MsIDAsIHRydWUsCisgICAgICAgICAgICAgICAg TlVMTCwKKyAgICAgICAgICAgICAgICBjb21wYXJlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAm bWFrZV9zb3J0a2V5LCAmcGFyYW0sIHRhYmxlX3NvcnQuc29ydF9rZXlzKSkKKyAgICB7CisgICAg ICAvLyBJZiBmYWlsZWQgdG8gaW5pdCBwcSwgZmFsbCBiYWNrIHRvIG1lcmdlLXNvcnQuCisgICAg ICBteV9mcmVlKHRhYmxlX3NvcnQuc29ydF9rZXlzKTsKKyAgICAgIHRhYmxlX3NvcnQuc29ydF9r ZXlzPSBOVUxMOworICAgIH0KICAgfQotICBzb3J0X2tleXM9IHRhYmxlX3NvcnQuc29ydF9rZXlz OwotICBpZiAobWVtYXZsIDwgbWluX3NvcnRfbWVtb3J5KQorICBlbHNlCiAgIHsKLSAgICBteV9l cnJvcihFUl9PVVRfT0ZfU09SVE1FTU9SWSxNWUYoTUVfRVJST1IrTUVfV0FJVFRBTkcpKTsKLSAg ICBnb3RvIGVycjsKKyAgICBEQlVHX1BSSU5UKCJpbmZvIiwgKCJmaWxlc29ydCBQUSBpcyBub3Qg YXBwbGljYWJsZSIpKTsKKworICAgIGNvbnN0IHVsb25nIG1pbl9zb3J0X21lbW9yeT0KKyAgICAg IG1heChNSU5fU09SVF9NRU1PUlksIHBhcmFtLnNvcnRfbGVuZ3RoKk1FUkdFQlVGRjIpOworICAg IHdoaWxlIChtZW1vcnlfYXZhaWxhYmxlID49IG1pbl9zb3J0X21lbW9yeSkKKyAgICB7CisgICAg ICB1bG9uZyBvbGRfbWVtb3J5X2F2YWlsYWJsZTsKKyAgICAgIHVsb25nIGtleXM9IG1lbW9yeV9h dmFpbGFibGUgLyAocGFyYW0ucmVjX2xlbmd0aCtzaXplb2YoY2hhciopKTsKKyAgICAgIHBhcmFt Lm51bV9rZXlzX3Blcl9idWZmZXI9ICh1aW50KSBtaW4obnVtX3Jvd3MsIGtleXMpOworICAgICAg bWFrZV9jaGFyX2FycmF5KCZ0YWJsZV9zb3J0LCBwYXJhbS5udW1fa2V5c19wZXJfYnVmZmVyLCBw YXJhbS5yZWNfbGVuZ3RoKTsKKyAgICAgIGlmICh0YWJsZV9zb3J0LnNvcnRfa2V5cykKKyAgICAg ICAgYnJlYWs7CisgICAgICBvbGRfbWVtb3J5X2F2YWlsYWJsZT0gbWVtb3J5X2F2YWlsYWJsZTsK KyAgICAgIGlmICgobWVtb3J5X2F2YWlsYWJsZT0gbWVtb3J5X2F2YWlsYWJsZS80KjMpIDwgbWlu X3NvcnRfbWVtb3J5ICYmCisgICAgICAgICAgb2xkX21lbW9yeV9hdmFpbGFibGUgPiBtaW5fc29y dF9tZW1vcnkpCisgICAgICAgIG1lbW9yeV9hdmFpbGFibGU9IG1pbl9zb3J0X21lbW9yeTsKKyAg ICB9CisgICAgaWYgKG1lbW9yeV9hdmFpbGFibGUgPCBtaW5fc29ydF9tZW1vcnkpCisgICAgewor ICAgICAgbXlfZXJyb3IoRVJfT1VUX09GX1NPUlRNRU1PUlksTVlGKE1FX0VSUk9SK01FX1dBSVRU QU5HKSk7CisgICAgICBnb3RvIGVycjsKKyAgICB9CiAgIH0KKworICBzb3J0X2tleXM9IHRhYmxl X3NvcnQuc29ydF9rZXlzOwogICBpZiAob3Blbl9jYWNoZWRfZmlsZSgmYnVmZnBla19wb2ludGVy cyxteXNxbF90bXBkaXIsVEVNUF9QUkVGSVgsCiAJCSAgICAgICBESVNLX0JVRkZFUl9TSVpFLCBN WUYoTVlfV01FKSkpCiAgICAgZ290byBlcnI7CiAKLSAgcGFyYW0ua2V5cy0tOyAgCQkJLyogVE9E TzogY2hlY2sgd2h5IHdlIGRvIHRoaXMgKi8KICAgcGFyYW0uc29ydF9mb3JtPSB0YWJsZTsKICAg cGFyYW0uZW5kPShwYXJhbS5sb2NhbF9zb3J0b3JkZXI9c29ydG9yZGVyKStzX2xlbmd0aDsKLSAg aWYgKChyZWNvcmRzPWZpbmRfYWxsX2tleXMoJnBhcmFtLHNlbGVjdCxzb3J0X2tleXMsICZidWZm cGVrX3BvaW50ZXJzLAotCQkJICAgICAmdGVtcGZpbGUsIHNlbGVjdGVkX3JlY29yZHNfZmlsZSkp ID09CisgIGlmICgobnVtX3Jvd3M9IGZpbmRfYWxsX2tleXMoJnBhcmFtLCBzZWxlY3QsIHNvcnRf a2V5cywgJmJ1ZmZwZWtfcG9pbnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnRlbXBmaWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcS5pc19pbml0aWFs aXplZCgpID8gJnBxIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm91 bmRfcm93cykpID09CiAgICAgICBIQV9QT1NfRVJST1IpCiAgICAgZ290byBlcnI7CiAgIG1heGJ1 ZmZlcj0gKHVpbnQpIChteV9iX3RlbGwoJmJ1ZmZwZWtfcG9pbnRlcnMpL3NpemVvZigqYnVmZnBl aykpOwogCiAgIGlmIChtYXhidWZmZXIgPT0gMCkJCQkvLyBUaGUgd2hvbGUgc2V0IGlzIGluIG1l bW9yeQogICB7Ci0gICAgaWYgKHNhdmVfaW5kZXgoJnBhcmFtLHNvcnRfa2V5cywodWludCkgcmVj b3JkcywgJnRhYmxlX3NvcnQpKQorICAgIGlmIChzYXZlX2luZGV4KCZwYXJhbSwgc29ydF9rZXlz LCAodWludCkgbnVtX3Jvd3MsICZ0YWJsZV9zb3J0KSkKICAgICAgIGdvdG8gZXJyOwogICB9CiAg IGVsc2UKQEAgLTI4Niw4ICszMDgsOSBAQCBoYV9yb3dzIGZpbGVzb3J0KFRIRCAqdGhkLCBUQUJM RSAqdGFibGUsCiAgICAgICBVc2UgYWxzbyB0aGUgc3BhY2UgcHJldmlvdXNseSB1c2VkIGJ5IHN0 cmluZyBwb2ludGVycyBpbiBzb3J0X2J1ZmZlcgogICAgICAgZm9yIHRlbXBvcmFyeSBrZXkgc3Rv cmFnZS4KICAgICAqLwotICAgIHBhcmFtLmtleXM9KChwYXJhbS5rZXlzKihwYXJhbS5yZWNfbGVu Z3RoK3NpemVvZihjaGFyKikpKSAvCi0JCXBhcmFtLnJlY19sZW5ndGgtMSk7CisgICAgcGFyYW0u bnVtX2tleXNfcGVyX2J1ZmZlcj0oKHBhcmFtLm51bV9rZXlzX3Blcl9idWZmZXIgKgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyYW0ucmVjX2xlbmd0aCArIHNpemVvZihjaGFy KikpKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmVjX2xlbmd0aCAt IDEpOwogICAgIG1heGJ1ZmZlci0tOwkJCQkvLyBPZmZzZXQgZnJvbSAwCiAgICAgaWYgKG1lcmdl X21hbnlfYnVmZigmcGFyYW0sKHVjaGFyKikgc29ydF9rZXlzLGJ1ZmZwZWssJm1heGJ1ZmZlciwK IAkJCSZ0ZW1wZmlsZSkpCkBAIC0yOTksOSArMzIyLDI5IEBAIGhhX3Jvd3MgZmlsZXNvcnQoVEhE ICp0aGQsIFRBQkxFICp0YWJsZSwKIAkJICAgIG91dGZpbGUpKQogICAgICAgZ290byBlcnI7CiAg IH0KLSAgaWYgKHJlY29yZHMgPiBwYXJhbS5tYXhfcm93cykKLSAgICByZWNvcmRzPXBhcmFtLm1h eF9yb3dzOwotICBlcnJvciA9MDsKKworICBpZiAocHEuaXNfaW5pdGlhbGl6ZWQoKSAmJiAob3B0 aW9ucyAmIE9QVElPTl9GT1VORF9ST1dTKSkKKyAgeworICAgIERCVUdfUFJJTlQoImluZm8iLCAo ImZpbGVzb3J0IFBRIGFuZCBPUFRJT05fRk9VTkRfUk9XUyIpKTsKKyAgfQorCisgIGlmIChvcHRp b25zICYgT1BUSU9OX0ZPVU5EX1JPV1MpCisgIHsKKyAgICAvKgorICAgICAgVGhlIGNsaWVudCBt YXkgZG8gJ1NFTEVDVCBGT1VORF9ST1dTKCknIHNvIHJldHVybiB0aGUgdG90YWwKKyAgICAgIG51 bWJlciBvZiByb3dzIHNjYW5uZWQgYnkgZmluZF9hbGxfa2V5cygpLCByYXRoZXIgdGhhbgorICAg ICAgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSByZXN1bHQgc2V0LgorICAgICovCisgICAgbnVt X3Jvd3M9IGZvdW5kX3Jvd3M7CisgIH0KKyAgZWxzZSBpZiAobnVtX3Jvd3MgPiBwYXJhbS5tYXhf cm93cykKKyAgeworICAgIC8qCisgICAgICBJZiBmaW5kX2FsbF9rZXlzKCkgcHJvZHVjZWQgbW9y ZSByZXN1bHRzIHRoYW4gdGhlIHF1ZXJ5IExJTUlULgorICAgICAqLworICAgIG51bV9yb3dzPSBw YXJhbS5tYXhfcm93czsKKyAgfQorICBlcnJvcj0gMDsKIAogIGVycjoKICAgbXlfZnJlZShwYXJh bS50bXBfYnVmZmVyKTsKQEAgLTMzMiwxNSArMzc1LDE2IEBAIGhhX3Jvd3MgZmlsZXNvcnQoVEhE ICp0aGQsIFRBQkxFICp0YWJsZSwKICAgICAgICAgICAgICAgIE1ZRihNRV9FUlJPUitNRV9XQUlU VEFORykpOwogICBlbHNlCiAgICAgc3RhdGlzdGljX2FkZCh0aGQtPnN0YXR1c192YXIuZmlsZXNv cnRfcm93cywKLQkJICAodWxvbmcpIHJlY29yZHMsICZMT0NLX3N0YXR1cyk7CisgICAgICAgICAg ICAgICAgICAodWxvbmcpIG51bV9yb3dzLCAmTE9DS19zdGF0dXMpOwogICAqZXhhbWluZWRfcm93 cz0gcGFyYW0uZXhhbWluZWRfcm93czsKICNpZmRlZiBTS0lQX0RCVUdfSU5fRklMRVNPUlQKICAg REJVR19QT1AoKTsJCQkvKiBPayB0byBEQlVHICovCiAjZW5kaWYKLSAgbWVtY3B5KCZ0YWJsZS0+ c29ydCwgJnRhYmxlX3NvcnQsIHNpemVvZihGSUxFU09SVF9JTkZPKSk7Ci0gIERCVUdfUFJJTlQo ImV4aXQiLCgicmVjb3JkczogJWxkIiwgKGxvbmcpIHJlY29yZHMpKTsKLSAgTVlTUUxfRklMRVNP UlRfRE9ORShlcnJvciwgcmVjb3Jkcyk7Ci0gIERCVUdfUkVUVVJOKGVycm9yID8gSEFfUE9TX0VS Uk9SIDogcmVjb3Jkcyk7CisgIHRhYmxlLT5zb3J0PSB0YWJsZV9zb3J0OworICBEQlVHX1BSSU5U KCJleGl0IiwoIm51bV9yb3dzOiAlbGQgZXhhbWluZWRfcm93czogJWxkIiwKKyAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBudW1fcm93cywgKGxvbmcpICpleGFtaW5lZF9yb3dzKSk7CisgIE1Z U1FMX0ZJTEVTT1JUX0RPTkUoZXJyb3IsIG51bV9yb3dzKTsKKyAgREJVR19SRVRVUk4oZXJyb3Ig PyBIQV9QT1NfRVJST1IgOiBudW1fcm93cyk7CiB9IC8qIGZpbGVzb3J0ICovCiAKIApAQCAtMzY0 LDI1ICs0MDgsMjYgQEAgdm9pZCBmaWxlc29ydF9mcmVlX2J1ZmZlcnMoVEFCTEUgKnRhYmxlLAog ICB0YWJsZS0+c29ydC5hZGRvbl9maWVsZD0gTlVMTDsKIH0KIAotLyoqIE1ha2UgYSBhcnJheSBv ZiBzdHJpbmcgcG9pbnRlcnMuICovCisvKiogTWFrZXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHBvaW50 ZXJzIGZvciBpbmZvLT5zb3J0X2tleXMuICovCiAKLXN0YXRpYyBjaGFyICoqbWFrZV9jaGFyX2Fy cmF5KGNoYXIgKipvbGRfcG9zLCByZWdpc3RlciB1aW50IGZpZWxkcywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQgbGVuZ3RoLCBteWYgbXlfZmxhZykKK3N0YXRpYyB2b2lkIG1h a2VfY2hhcl9hcnJheShGSUxFU09SVF9JTkZPICppbmZvLCB1aW50IGZpZWxkcywgdWludCBsZW5n dGgpCiB7Ci0gIHJlZ2lzdGVyIGNoYXIgKipwb3M7Ci0gIGNoYXIgKmNoYXJfcG9zOwogICBEQlVH X0VOVEVSKCJtYWtlX2NoYXJfYXJyYXkiKTsKIAotICBpZiAob2xkX3BvcyB8fAotICAgICAgKG9s ZF9wb3M9IChjaGFyKiopIG15X21hbGxvYygodWludCkgZmllbGRzKihsZW5ndGgrc2l6ZW9mKGNo YXIqKSksCi0JCQkJICAgbXlfZmxhZykpKQorICBpZiAoIWluZm8tPnNvcnRfa2V5cykKKyAgICBp bmZvLT5zb3J0X2tleXM9IAorICAgICAgKHVjaGFyKiopIG15X21hbGxvYyhmaWVsZHMgKiAobGVu Z3RoICsgc2l6ZW9mKHVjaGFyKikpLCBNWUYoMCkpOworCisgIGlmIChpbmZvLT5zb3J0X2tleXMp CiAgIHsKLSAgICBwb3M9b2xkX3BvczsgY2hhcl9wb3M9KChjaGFyKikgKHBvcytmaWVsZHMpKSAt bGVuZ3RoOwotICAgIHdoaWxlIChmaWVsZHMtLSkgKihwb3MrKykgPSAoY2hhcl9wb3MrPSBsZW5n dGgpOworICAgIHVjaGFyICoqcG9zPSBpbmZvLT5zb3J0X2tleXM7CisgICAgdWNoYXIgKmNoYXJf cG9zPSAoKHVjaGFyKikgKHBvcytmaWVsZHMpKSAtIGxlbmd0aDsKKyAgICB3aGlsZSAoZmllbGRz LS0pCisgICAgICAqKHBvcysrKSA9IChjaGFyX3Bvcys9IGxlbmd0aCk7CiAgIH0KIAotICBEQlVH X1JFVFVSTihvbGRfcG9zKTsKLX0gLyogbWFrZV9jaGFyX2FycmF5ICovCisgIERCVUdfVk9JRF9S RVRVUk47Cit9CiAKIAogLyoqIFJlYWQgJ2NvdW50JyBudW1iZXIgb2YgYnVmZmVyIHBvaW50ZXJz IGludG8gbWVtb3J5LiAqLwpAQCAtNDYxLDcgKzUwNiw4IEBAIHN0YXRpYyB2b2lkIGRidWdfcHJp bnRfcmVjb3JkKFRBQkxFICp0YWIKICNlbmRpZiAKIAogLyoqCi0gIFNlYXJjaCBhZnRlciBzb3J0 X2tleXMgYW5kIHdyaXRlIHRoZW0gaW50byB0ZW1wZmlsZS4KKyAgU2VhcmNoIGFmdGVyIHNvcnRf a2V5cywgYW5kIHdyaXRlIHRoZW0gaW50byB0ZW1wZmlsZQorICAoaWYgd2UgcnVuIG91dCBvZiBz cGFjZSBpbiB0aGUgc29ydF9rZXlzIGJ1ZmZlcikuCiAgIEFsbCBwcm9kdWNlZCBzZXF1ZW5jZXMg YXJlIGd1YXJhbnRlZWQgdG8gYmUgbm9uLWVtcHR5LgogCiAgIEBwYXJhbSBwYXJhbSAgICAgICAg ICAgICBTb3J0aW5nIHBhcmFtZXRlcgpAQCAtNDcwLDIwICs1MTYsMjYgQEAgc3RhdGljIHZvaWQg ZGJ1Z19wcmludF9yZWNvcmQoVEFCTEUgKnRhYgogICBAcGFyYW0gYnVmZnBla19wb2ludGVycyAg RmlsZSB0byB3cml0ZSBCVUZGUEVLcyBkZXNjcmliaW5nIHNvcnRlZCBzZWdtZW50cwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW4gdGVtcGZpbGUuCiAgIEBwYXJhbSB0ZW1wZmlsZSAgICAg ICAgICBGaWxlIHRvIHdyaXRlIHNvcnRlZCBzZXF1ZW5jZXMgb2Ygc29ydGtleXMgdG8uCi0gIEBw YXJhbSBpbmRleGZpbGUgICAgICAgICBJZiAhTlVMTCwgdXNlIGl0IGZvciBzb3VyY2UgZGF0YSAo Y29udGFpbnMgcm93aWRzKQorICBAcGFyYW0gcHEgICAgICAgICAgICAgICAgSWYgIU5VTEwsIHVz ZSBpdCBmb3Iga2VlcGluZyB0b3AgTiBlbGVtZW50cworICBAcGFyYW0gW291dF0gZm91bmRfcm93 cyAgVGhlIG51bWJlciBvZiBGT1VORF9ST1dTKCkuCiAKICAgQG5vdGUKICAgICBCYXNpYyBpZGVh OgogICAgIEB2ZXJiYXRpbQogICAgICB3aGlsZSAoZ2V0X25leHRfc29ydGtleSgpKQogICAgICB7 Ci0gICAgICAgaWYgKG5vIGZyZWUgc3BhY2UgaW4gc29ydF9rZXlzIGJ1ZmZlcnMpCisgICAgICAg aWYgKHVzaW5nIHByaW9yaXR5IHF1ZXVlKQorICAgICAgICAgcHVzaCBzb3J0IGtleSBpbnRvIHF1 ZXVlCisgICAgICAgZWxzZQogICAgICAgIHsKLSAgICAgICAgIHNvcnQgc29ydF9rZXlzIGJ1ZmZl cjsKLSAgICAgICAgIGR1bXAgc29ydGVkIHNlcXVlbmNlIHRvICd0ZW1wZmlsZSc7Ci0gICAgICAg ICBkdW1wIEJVRkZQRUsgZGVzY3JpYmluZyBzZXF1ZW5jZSBsb2NhdGlvbiBpbnRvICdidWZmcGVr X3BvaW50ZXJzJzsKKyAgICAgICAgIGlmIChubyBmcmVlIHNwYWNlIGluIHNvcnRfa2V5cyBidWZm ZXJzKQorICAgICAgICAgeworICAgICAgICAgICBzb3J0IHNvcnRfa2V5cyBidWZmZXI7CisgICAg ICAgICAgIGR1bXAgc29ydGVkIHNlcXVlbmNlIHRvICd0ZW1wZmlsZSc7CisgICAgICAgICAgIGR1 bXAgQlVGRlBFSyBkZXNjcmliaW5nIHNlcXVlbmNlIGxvY2F0aW9uIGludG8gJ2J1ZmZwZWtfcG9p bnRlcnMnOworICAgICAgICAgfQorICAgICAgICAgcHV0IHNvcnQga2V5IGludG8gJ3NvcnRfa2V5 cyc7CiAgICAgICAgfQotICAgICAgIHB1dCBzb3J0IGtleSBpbnRvICdzb3J0X2tleXMnOwogICAg ICB9CiAgICAgIGlmIChzb3J0X2tleXMgaGFzIHNvbWUgZWxlbWVudHMgJiYgZHVtcGVkIGF0IGxl YXN0IG9uY2UpCiAgICAgICAgc29ydC1kdW1wLWR1bXAgYXMgYWJvdmU7CkBAIC00OTcsMTAgKzU0 OSwxMiBAQCBzdGF0aWMgdm9pZCBkYnVnX3ByaW50X3JlY29yZChUQUJMRSAqdGFiCiAgICAgSEFf UE9TX0VSUk9SIG9uIGVycm9yLgogKi8KIAotc3RhdGljIGhhX3Jvd3MgZmluZF9hbGxfa2V5cyhT T1JUUEFSQU0gKnBhcmFtLCBTUUxfU0VMRUNUICpzZWxlY3QsCi0JCQkgICAgIHVjaGFyICoqc29y dF9rZXlzLAotCQkJICAgICBJT19DQUNIRSAqYnVmZnBla19wb2ludGVycywKLQkJCSAgICAgSU9f Q0FDSEUgKnRlbXBmaWxlLCBJT19DQUNIRSAqaW5kZXhmaWxlKQorc3RhdGljIGhhX3Jvd3MgZmlu ZF9hbGxfa2V5cyhTb3J0X3BhcmFtICpwYXJhbSwgU1FMX1NFTEVDVCAqc2VsZWN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1Y2hhciAqKnNvcnRfa2V5cywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU9fQ0FDSEUgKmJ1ZmZwZWtfcG9pbnRlcnMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElPX0NBQ0hFICp0ZW1wZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQm91bmRlZF9xdWV1ZTx1Y2hhciwgdWNoYXI+ICpwcSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaGFfcm93cyAqZm91bmRfcm93cykKIHsKICAgaW50IGVycm9yLGZsYWcs cXVpY2tfc2VsZWN0OwogICB1aW50IGlkeCxpbmRleHBvcyxyZWZfbGVuZ3RoOwpAQCAtNTEyLDEx ICs1NjYsMTIgQEAgc3RhdGljIGhhX3Jvd3MgZmluZF9hbGxfa2V5cyhTT1JUUEFSQU0gKgogICBo YW5kbGVyICpmaWxlOwogICBNWV9CSVRNQVAgKnNhdmVfcmVhZF9zZXQsICpzYXZlX3dyaXRlX3Nl dDsKICAgYm9vbCBza2lwX3JlY29yZDsKKwogICBEQlVHX0VOVEVSKCJmaW5kX2FsbF9rZXlzIik7 CiAgIERCVUdfUFJJTlQoImluZm8iLCgidXNpbmc6ICVzIiwKICAgICAgICAgICAgICAgICAgICAg IChzZWxlY3QgPyBzZWxlY3QtPnF1aWNrID8gInJhbmdlcyIgOiAid2hlcmUiOgogICAgICAgICAg ICAgICAgICAgICAgICJldmVyeSByb3ciKSkpOwotCisgIAogICBpZHg9aW5kZXhwb3M9MDsKICAg ZXJyb3I9cXVpY2tfc2VsZWN0PTA7CiAgIHNvcnRfZm9ybT1wYXJhbS0+c29ydF9mb3JtOwpAQCAt NTI1LDEyICs1ODAsMTIgQEAgc3RhdGljIGhhX3Jvd3MgZmluZF9hbGxfa2V5cyhTT1JUUEFSQU0g KgogICByZWZfcG9zPSByZWZfYnVmZjsKICAgcXVpY2tfc2VsZWN0PXNlbGVjdCAmJiBzZWxlY3Qt PnF1aWNrOwogICByZWNvcmQ9MDsKLSAgZmxhZz0gKCghaW5kZXhmaWxlICYmIGZpbGUtPmhhX3Rh YmxlX2ZsYWdzKCkgJiBIQV9SRUNfTk9UX0lOX1NFUSkKLQkgfHwgcXVpY2tfc2VsZWN0KTsKLSAg aWYgKGluZGV4ZmlsZSB8fCBmbGFnKQorICAqZm91bmRfcm93cz0gMDsKKyAgZmxhZz0gKChmaWxl LT5oYV90YWJsZV9mbGFncygpICYgSEFfUkVDX05PVF9JTl9TRVEpIHx8IHF1aWNrX3NlbGVjdCk7 CisgIGlmIChmbGFnKQogICAgIHJlZl9wb3M9ICZmaWxlLT5yZWZbMF07CiAgIG5leHRfcG9zPXJl Zl9wb3M7Ci0gIGlmICghIGluZGV4ZmlsZSAmJiAhIHF1aWNrX3NlbGVjdCkKKyAgaWYgKCFxdWlj a19zZWxlY3QpCiAgIHsKICAgICBuZXh0X3Bvcz0odWNoYXIqKSAwOwkJCS8qIEZpbmQgcmVjb3Jk cyBpbiBzZXF1ZW5jZSAqLwogICAgIGZpbGUtPmhhX3JuZF9pbml0KDEpOwpAQCAtNTc3LDE2ICs2 MzIsNiBAQCBzdGF0aWMgaGFfcm93cyBmaW5kX2FsbF9rZXlzKFNPUlRQQVJBTSAqCiAgICAgfQog ICAgIGVsc2UJCQkJCS8qIE5vdCBxdWljay1zZWxlY3QgKi8KICAgICB7Ci0gICAgICBpZiAoaW5k ZXhmaWxlKQotICAgICAgewotCWlmIChteV9iX3JlYWQoaW5kZXhmaWxlLCh1Y2hhciopIHJlZl9w b3MscmVmX2xlbmd0aCkpIC8qIHB1cmVjb3Y6IGRlYWRjb2RlICovCi0JewotCSAgZXJyb3I9IG15 X2Vycm5vID8gbXlfZXJybm8gOiAtMTsJCS8qIEFib3J0ICovCi0JICBicmVhazsKLQl9Ci0JZXJy b3I9IGZpbGUtPmhhX3JuZF9wb3Moc29ydF9mb3JtLT5yZWNvcmRbMF0sIG5leHRfcG9zKTsKLSAg ICAgIH0KLSAgICAgIGVsc2UKICAgICAgIHsKIAllcnJvcj0gZmlsZS0+aGFfcm5kX25leHQoc29y dF9mb3JtLT5yZWNvcmRbMF0pOwogCWlmICghZmxhZykKQEAgLTYwNCw3ICs2NDksNyBAQCBzdGF0 aWMgaGFfcm93cyBmaW5kX2FsbF9rZXlzKFNPUlRQQVJBTSAqCiAgICAgaWYgKCpraWxsZWQpCiAg ICAgewogICAgICAgREJVR19QUklOVCgiaW5mbyIsKCJTb3J0IGtpbGxlZCBieSB1c2VyIikpOwot ICAgICAgaWYgKCFpbmRleGZpbGUgJiYgIXF1aWNrX3NlbGVjdCkKKyAgICAgIGlmICghcXVpY2tf c2VsZWN0KQogICAgICAgewogICAgICAgICAodm9pZCkgZmlsZS0+ZXh0cmEoSEFfRVhUUkFfTk9f Q0FDSEUpOwogICAgICAgICBmaWxlLT5oYV9ybmRfZW5kKCk7CkBAIC02MTYsMTQgKzY2MSwyMyBA QCBzdGF0aWMgaGFfcm93cyBmaW5kX2FsbF9rZXlzKFNPUlRQQVJBTSAqCiAgICAgaWYgKCFlcnJv ciAmJiAoIXNlbGVjdCB8fAogICAgICAgICAgICAgICAgICAgICghc2VsZWN0LT5za2lwX3JlY29y ZCh0aGQsICZza2lwX3JlY29yZCkgJiYgIXNraXBfcmVjb3JkKSkpCiAgICAgewotICAgICAgaWYg KGlkeCA9PSBwYXJhbS0+a2V5cykKKyAgICAgICsrKCpmb3VuZF9yb3dzKTsKKyAgICAgIGlmIChw cSkKICAgICAgIHsKLQlpZiAod3JpdGVfa2V5cyhwYXJhbSxzb3J0X2tleXMsaWR4LGJ1ZmZwZWtf cG9pbnRlcnMsdGVtcGZpbGUpKQotCSAgREJVR19SRVRVUk4oSEFfUE9TX0VSUk9SKTsKLQlpZHg9 MDsKLQlpbmRleHBvcysrOworICAgICAgICBwcS0+cHVzaChyZWZfcG9zKTsKKyAgICAgICAgaWR4 PSBwcS0+bnVtX2VsZW1lbnRzKCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAg ICAgIGlmIChpZHggPT0gcGFyYW0tPm51bV9rZXlzX3Blcl9idWZmZXIpCisgICAgICAgIHsKKyAg ICAgICAgICBpZiAod3JpdGVfa2V5cyhwYXJhbSxzb3J0X2tleXMsIGlkeCwgYnVmZnBla19wb2lu dGVycywgdGVtcGZpbGUpKQorICAgICAgICAgICAgIERCVUdfUkVUVVJOKEhBX1BPU19FUlJPUik7 CisgICAgICAgICAgaWR4PSAwOworICAgICAgICAgIGluZGV4cG9zKys7CisgICAgICAgIH0KKyAg ICAgICAgbWFrZV9zb3J0a2V5KHBhcmFtLCBzb3J0X2tleXNbaWR4KytdLCByZWZfcG9zKTsKICAg ICAgIH0KLSAgICAgIG1ha2Vfc29ydGtleShwYXJhbSxzb3J0X2tleXNbaWR4KytdLHJlZl9wb3Mp OwogICAgIH0KICAgICBlbHNlCiAgICAgICBmaWxlLT51bmxvY2tfcm93KCk7CkBAIC02NTMsOSAr NzA3LDExIEBAIHN0YXRpYyBoYV9yb3dzIGZpbmRfYWxsX2tleXMoU09SVFBBUkFNICoKICAgaWYg KGluZGV4cG9zICYmIGlkeCAmJgogICAgICAgd3JpdGVfa2V5cyhwYXJhbSxzb3J0X2tleXMsaWR4 LGJ1ZmZwZWtfcG9pbnRlcnMsdGVtcGZpbGUpKQogICAgIERCVUdfUkVUVVJOKEhBX1BPU19FUlJP Uik7CQkJLyogcHVyZWNvdjogaW5zcGVjdGVkICovCi0gIERCVUdfUkVUVVJOKG15X2JfaW5pdGVk KHRlbXBmaWxlKSA/Ci0JICAgICAgKGhhX3Jvd3MpIChteV9iX3RlbGwodGVtcGZpbGUpL3BhcmFt LT5yZWNfbGVuZ3RoKSA6Ci0JICAgICAgaWR4KTsKKyAgY29uc3QgaGFfcm93cyByZXR2YWw9IAor ICAgIG15X2JfaW5pdGVkKHRlbXBmaWxlKSA/CisgICAgKGhhX3Jvd3MpIChteV9iX3RlbGwodGVt cGZpbGUpL3BhcmFtLT5yZWNfbGVuZ3RoKSA6IGlkeDsKKyAgREJVR19QUklOVCgiaW5mbyIsICgi ZmluZF9hbGxfa2V5cyByZXR1cm4gJXUiLCAodWludCkgcmV0dmFsKSk7CisgIERCVUdfUkVUVVJO KHJldHZhbCk7CiB9IC8qIGZpbmRfYWxsX2tleXMgKi8KIAogCkBAIC02ODIsNyArNzM4LDcgQEAg c3RhdGljIGhhX3Jvd3MgZmluZF9hbGxfa2V5cyhTT1JUUEFSQU0gKgogKi8KIAogc3RhdGljIGlu dAotd3JpdGVfa2V5cyhTT1JUUEFSQU0gKnBhcmFtLCByZWdpc3RlciB1Y2hhciAqKnNvcnRfa2V5 cywgdWludCBjb3VudCwKK3dyaXRlX2tleXMoU29ydF9wYXJhbSAqcGFyYW0sIHJlZ2lzdGVyIHVj aGFyICoqc29ydF9rZXlzLCB1aW50IGNvdW50LAogICAgICAgICAgICBJT19DQUNIRSAqYnVmZnBl a19wb2ludGVycywgSU9fQ0FDSEUgKnRlbXBmaWxlKQogewogICBzaXplX3Qgc29ydF9sZW5ndGgs IHJlY19sZW5ndGg7CkBAIC03NDUsOCArODAxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN0b3Jl X2xlbmd0aCh1Y2hhciAqdAogCiAvKiogTWFrZSBhIHNvcnQta2V5IGZyb20gcmVjb3JkLiAqLwog Ci1zdGF0aWMgdm9pZCBtYWtlX3NvcnRrZXkocmVnaXN0ZXIgU09SVFBBUkFNICpwYXJhbSwKLQkJ CSByZWdpc3RlciB1Y2hhciAqdG8sIHVjaGFyICpyZWZfcG9zKQorc3RhdGljIHZvaWQgbWFrZV9z b3J0a2V5KHJlZ2lzdGVyIFNvcnRfcGFyYW0gKnBhcmFtLAorICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZ2lzdGVyIHVjaGFyICp0bywgdWNoYXIgKnJlZl9wb3MpCiB7CiAgIHJlZzMgRmllbGQg KmZpZWxkOwogICByZWcxIFNPUlRfRklFTEQgKnNvcnRfZmllbGQ7CkBAIC05OTgsNyArMTA1NCw3 IEBAIHN0YXRpYyB2b2lkIG1ha2Vfc29ydGtleShyZWdpc3RlciBTT1JUUEEKICAgUmVnaXN0ZXIg ZmllbGRzIHVzZWQgYnkgc29ydGluZyBpbiB0aGUgc29ydGVkIHRhYmxlJ3MgcmVhZCBzZXQKICov CiAKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX3VzZWRfZmllbGRzKFNPUlRQQVJBTSAqcGFyYW0pCitz dGF0aWMgdm9pZCByZWdpc3Rlcl91c2VkX2ZpZWxkcyhTb3J0X3BhcmFtICpwYXJhbSkKIHsKICAg cmVnMSBTT1JUX0ZJRUxEICpzb3J0X2ZpZWxkOwogICBUQUJMRSAqdGFibGU9cGFyYW0tPnNvcnRf Zm9ybTsKQEAgLTEwMzYsMTcgKzEwOTIsMTcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfdXNlZF9m aWVsZHMoU09SVFBBUgogfQogCiAKLXN0YXRpYyBib29sIHNhdmVfaW5kZXgoU09SVFBBUkFNICpw YXJhbSwgdWNoYXIgKipzb3J0X2tleXMsIHVpbnQgY291bnQsIAorc3RhdGljIGJvb2wgc2F2ZV9p bmRleChTb3J0X3BhcmFtICpwYXJhbSwgdWNoYXIgKipzb3J0X2tleXMsIHVpbnQgY291bnQsIAog ICAgICAgICAgICAgICAgICAgICAgICBGSUxFU09SVF9JTkZPICp0YWJsZV9zb3J0KQogewogICB1 aW50IG9mZnNldCxyZXNfbGVuZ3RoOwogICB1Y2hhciAqdG87CiAgIERCVUdfRU5URVIoInNhdmVf aW5kZXgiKTsKIAotICBteV9zdHJpbmdfcHRyX3NvcnQoKHVjaGFyKikgc29ydF9rZXlzLCAodWlu dCkgY291bnQsIHBhcmFtLT5zb3J0X2xlbmd0aCk7CisgIG15X3N0cmluZ19wdHJfc29ydCgodWNo YXIqKSBzb3J0X2tleXMsIGNvdW50LCBwYXJhbS0+c29ydF9sZW5ndGgpOwogICByZXNfbGVuZ3Ro PSBwYXJhbS0+cmVzX2xlbmd0aDsKICAgb2Zmc2V0PSBwYXJhbS0+cmVjX2xlbmd0aC1yZXNfbGVu Z3RoOwotICBpZiAoKGhhX3Jvd3MpIGNvdW50ID4gcGFyYW0tPm1heF9yb3dzKQorICBpZiAoKGhh X3Jvd3MpIGNvdW50ID4gcGFyYW0tPm1heF9yb3dzICYmIHBhcmFtLT5tYXhfcm93cyA+IDApCiAg ICAgY291bnQ9KHVpbnQpIHBhcmFtLT5tYXhfcm93czsKICAgaWYgKCEodG89IHRhYmxlX3NvcnQt PnJlY29yZF9wb2ludGVycz0gCiAgICAgICAgICh1Y2hhciopIG15X21hbGxvYyhyZXNfbGVuZ3Ro KmNvdW50LCBNWUYoTVlfV01FKSkpKQpAQCAtMTA2MCwxMCArMTExNiwxNDggQEAgc3RhdGljIGJv b2wgc2F2ZV9pbmRleChTT1JUUEFSQU0gKnBhcmFtLAogfQogCiAKKy8qKgorICBUZXN0IHdoZXRo ZXIgcHJpb3JpdHkgcXVldWUgaXMgd29ydGggdXNpbmcgdG8gZ2V0IHRvcCBlbGVtZW50cyBvZiBh bgorICBvcmRlcmVkIHJlc3VsdCBzZXQuIElmIGl0IGlzIHRoZW4gYWxsb2NhdGVzIGJ1ZmZlciBm b3IgcmVxdWlyZWQgYW1vdW50IG9mCisgIHJlY29yZHMKKworICBAcGFyYW0gcGFyYW0gICAgICAg ICAgICBTb3J0IHBhcmFtZXRlcnMuCisgIEBwYXJhbSBmaWxlc29ydF9pbmZvICAgIEZpbGVzb3J0 IGluZm9ybWF0aW9uLgorICBAcGFyYW0gdGFibGUgICAgICAgICAgICBUYWJsZSB0byBzb3J0Lgor ICBAcGFyYW0gbnVtX3Jvd3MgICAgICAgICBFc3RpbWF0ZSBvZiBudW1iZXIgb2Ygcm93cyBpbiBz b3VyY2UgcmVjb3JkIHNldC4KKyAgQHBhcmFtIG1lbW9yeV9hdmFpbGFibGUgTWVtb3J5IGF2YWls YWJsZSBmb3Igc29ydGluZy4KKworICBERVNDUklQVElPTgorICAgIEdpdmVuIGEgcXVlcnkgbGlr ZSB0aGlzOgorICAgICAgU0VMRUNUIC4uLiBGUk9NIHQgT1JERVIgQlkgYTEsLi4uLGFuIExJTUlU IG1heF9yb3dzOworICAgIFRoaXMgZnVuY3Rpb24gdGVzdHMgd2hldGhlciBhIHByaW9yaXR5IHF1 ZXVlIHNob3VsZCBiZSB1c2VkIHRvIGtlZXAKKyAgICB0aGUgcmVzdWx0LiBOZWNlc3NhcnkgY29u ZGl0aW9ucyBhcmU6CisgICAgLSBlc3RpbWF0ZSB0aGF0IGl0IGlzIGFjdHVhbGx5IGNoZWFwZXIg dGhhbiBtZXJnZS1zb3J0CisgICAgLSBlbm91Z2ggbWVtb3J5IHRvIHN0b3JlIHRoZSA8bWF4X3Jv d3M+IHJlY29yZHMuCisKKyAgICBJZiB3ZSBkb24ndCBoYXZlIHNwYWNlIGZvciA8bWF4X3Jvd3M+ IHJlY29yZHMsIGJ1dCB3ZSAqZG8qIGhhdmUKKyAgICBzcGFjZSBmb3IgPG1heF9yb3dzPiBrZXlz LCB3ZSBtYXkgcmV3cml0ZSAndGFibGUnIHRvIHNvcnQgd2l0aAorICAgIHJlZmVyZW5jZXMgdG8g cmVjb3JkcyBpbnN0ZWFkIG9mIGFkZGl0aW9uYWwgZGF0YS4KKyAgICAoYWdhaW4sIGJhc2VkIG9u IGVzdGltYXRlcyB0aGF0IGl0IHdpbGwgYWN0dWFsbHkgYmUgY2hlYXBlcikuCisKKyAgIEByZXR2 YWwKKyAgICB0cnVlICAtIGlmIGl0J3Mgb2sgdG8gdXNlIFBRCisgICAgZmFsc2UgLSBQUSB3aWxs IGJlIHNsb3dlciB0aGFuIG1lcmdlLXNvcnQsIG9yIHRoZXJlIGlzIG5vdCBlbm91Z2ggbWVtb3J5 LgorKi8KKworYm9vbCBjaGVja19pZl9wcV9hcHBsaWNhYmxlKFNvcnRfcGFyYW0gKnBhcmFtLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVTT1JUX0lORk8gKmZpbGVzb3J0X2luZm8s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEUgKnRhYmxlLCBoYV9yb3dzIG51bV9y b3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nIG1lbW9yeV9hdmFpbGFibGUp Cit7CisgIERCVUdfRU5URVIoImNoZWNrX2lmX3BxX2FwcGxpY2FibGUiKTsKKworICAvKgorICAg IEhvdyBtdWNoIFByaW9yaXR5IFF1ZXVlIHNvcnQgaXMgc2xvd2VyIHRoYW4gcXNvcnQuCisgICAg Rm9yIHFzb3J0IHdlIGhhdmUgYW4gYXZlcmFnZSBjYXNlIGNvbXBsZXhpdHkgb2YgTyhuKmxvZyhu KSkgY29tcGFyaXNvbnMuCisgICAgV2hlbiB1c2luZyBhIHByaW9yaXR5IHF1ZXVlLCB3ZSBoYXZl IGxvZyhuKSBjb21wYXJpc29ucyBlYWNoIHRpbWUgd2UKKyAgICBwdXNoIGEgbmV3IGVsZW1lbnQu IEZvciBQUSB3ZSBhbHNvIGNhbGwgcXNvcnQgYXQgdGhlIGVuZC4KKyAgICBNZWFzdXJlbWVudHMg c2hvdyB0aGF0IHRoZXJlIGlzIHNvbWUgZXh0cmEgb3ZlcmhlYWQgaW4gUVVFVUUsCisgICAgc28g d2Ugc2V0IGl0IHRvIDMuMCByYXRoZXIgdGhhbiAyLjAuCisgICovCisgIGNvbnN0IGRvdWJsZSBQ UV9zbG93bmVzcz0gMy4wOworCisgIGlmIChwYXJhbS0+bWF4X3Jvd3MgPT0gSEFfUE9TX0VSUk9S KQorICB7CisgICAgREJVR19QUklOVCgiaW5mbyIsICgibWF4X3Jvd3MgPSBIQV9QT1NfRVJST1Ii KSk7CisgICAgREJVR19SRVRVUk4oTlVMTCk7CisgIH0KKworICBpZiAocGFyYW0tPm1heF9yb3dz ICsgMiA+PSBVSU5UX01BWCkKKyAgeworICAgIERCVUdfUFJJTlQoImluZm8iLCAoIlRvbyBsYXJn ZSBMSU1JVCIpKTsKKyAgICBEQlVHX1JFVFVSTihOVUxMKTsKKyAgfQorCisgIHVsb25nIG51bV9h dmFpbGFibGVfa2V5cz0KKyAgICBtZW1vcnlfYXZhaWxhYmxlIC8gKHBhcmFtLT5yZWNfbGVuZ3Ro ICsgc2l6ZW9mKGNoYXIqKSk7CisgIHBhcmFtLT5udW1fa2V5c19wZXJfYnVmZmVyPSAodWludCkg cGFyYW0tPm1heF9yb3dzICsgMTsKKworICBpZiAobnVtX3Jvd3MgPCBudW1fYXZhaWxhYmxlX2tl eXMpCisgIHsKKyAgICAvKiBUaGUgd2hvbGUgc291cmNlIHNldCBmaXRzIGludG8gbWVtb3J5LiAq LworICAgIGlmIChwYXJhbS0+bWF4X3Jvd3MgPCBudW1fcm93cy9QUV9zbG93bmVzcyApCisgICAg eworICAgICAgbWFrZV9jaGFyX2FycmF5KGZpbGVzb3J0X2luZm8sCisgICAgICAgICAgICAgICAg ICAgICAgcGFyYW0tPm51bV9rZXlzX3Blcl9idWZmZXIsIHBhcmFtLT5yZWNfbGVuZ3RoKTsKKyAg ICAgIGlmIChmaWxlc29ydF9pbmZvLT5zb3J0X2tleXMpCisgICAgICAgIERCVUdfUkVUVVJOKHRy dWUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogUFEgd2lsbCBiZSBzbG93ZXIg Ki8KKyAgICAgIERCVUdfUkVUVVJOKGZhbHNlKTsKKyAgICB9CisgIH0KKworICBpZiAocGFyYW0t Pm51bV9rZXlzX3Blcl9idWZmZXIgPCBudW1fYXZhaWxhYmxlX2tleXMpCisgIHsKKyAgICBtYWtl X2NoYXJfYXJyYXkoZmlsZXNvcnRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0tPm51 bV9rZXlzX3Blcl9idWZmZXIsIHBhcmFtLT5yZWNfbGVuZ3RoKTsKKyAgICBpZiAoZmlsZXNvcnRf aW5mby0+c29ydF9rZXlzKQorICAgICAgREJVR19SRVRVUk4odHJ1ZSk7CisgIH0KKworICAvKiBU cnkgdG8gc3RyaXAgb2ZmIGFkZG9uIGZpZWxkcyAqLworICBpZiAocGFyYW0tPmFkZG9uX2ZpZWxk KQorICB7CisgICAgY29uc3QgdWxvbmcgcm93X2xlbmd0aD0KKyAgICAgIHBhcmFtLT5zb3J0X2xl bmd0aCArIHBhcmFtLT5yZWZfbGVuZ3RoICsgc2l6ZW9mKGNoYXIqKTsKKyAgICBudW1fYXZhaWxh YmxlX2tleXM9IG1lbW9yeV9hdmFpbGFibGUgLyByb3dfbGVuZ3RoOworCisgICAgaWYgKHBhcmFt LT5udW1fa2V5c19wZXJfYnVmZmVyIDwgbnVtX2F2YWlsYWJsZV9rZXlzKQorICAgIHsKKyAgICAg IGNvbnN0IGRvdWJsZSBzb3J0X21lcmdlX2Nvc3Q9CisgICAgICAgIGdldF9tZXJnZV9tYW55X2J1 ZmZzX2Nvc3RfZmFzdChudW1fcm93cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG51bV9hdmFpbGFibGVfa2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJvd19sZW5ndGgpOworCisgICAgICAvKgorICAgICAgICBQUSBoYXMgY29zdDoK KyAgICAgICAgKGluc2VydCArIHFzb3J0KSAqIGxvZyhxdWV1ZSBzaXplKSAvIFRJTUVfRk9SX0NP TVBBUkVfUk9XSUQgKworICAgICAgICBjb3N0IG9mIGZpbGUgbG9va3VwIGFmdGVyd2FyZHMuCisg ICAgICAqLworICAgICAgY29uc3QgZG91YmxlIHBxX2Nvc3Q9CisgICAgICAgIChQUV9zbG93bmVz cyAqIG51bV9yb3dzICsgcGFyYW0tPm51bV9rZXlzX3Blcl9idWZmZXIpICoKKyAgICAgICAgbG9n KHBhcmFtLT5tYXhfcm93cyArIDEuMCkgLyBUSU1FX0ZPUl9DT01QQVJFX1JPV0lEICsKKyAgICAg ICAgcGFyYW0tPm1heF9yb3dzICogdGFibGUtPmZpbGUtPnNjYW5fdGltZSgpOworCisgICAgICBp ZiAoc29ydF9tZXJnZV9jb3N0IDwgcHFfY29zdCkKKyAgICAgICAgREJVR19SRVRVUk4oZmFsc2Up OworCisgICAgICBtYWtlX2NoYXJfYXJyYXkoZmlsZXNvcnRfaW5mbywKKyAgICAgICAgICAgICAg ICAgICAgICBwYXJhbS0+bnVtX2tleXNfcGVyX2J1ZmZlciwgcGFyYW0tPnJlY19sZW5ndGgpOwor ICAgICAgaWYgKGZpbGVzb3J0X2luZm8tPnNvcnRfa2V5cykKKyAgICAgIHsKKyAgICAgICAgLy8g TWFrZSBhdHRhY2hlZCBkYXRhIHRvIGJlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBmaWVsZHMuCisg ICAgICAgIG15X2ZyZWUoZmlsZXNvcnRfaW5mby0+YWRkb25fYnVmKTsKKyAgICAgICAgbXlfZnJl ZShmaWxlc29ydF9pbmZvLT5hZGRvbl9maWVsZCk7CisgICAgICAgIGZpbGVzb3J0X2luZm8tPmFk ZG9uX2J1Zj0gTlVMTDsKKyAgICAgICAgZmlsZXNvcnRfaW5mby0+YWRkb25fZmllbGQ9IE5VTEw7 CisgICAgICAgIHBhcmFtLT5hZGRvbl9maWVsZD0gTlVMTDsKKyAgICAgICAgcGFyYW0tPmFkZG9u X2xlbmd0aD0gMDsKKworICAgICAgICBwYXJhbS0+cmVzX2xlbmd0aD0gcGFyYW0tPnJlZl9sZW5n dGg7CisgICAgICAgIHBhcmFtLT5zb3J0X2xlbmd0aCs9IHBhcmFtLT5yZWZfbGVuZ3RoOworICAg ICAgICBwYXJhbS0+cmVjX2xlbmd0aD0gcGFyYW0tPnNvcnRfbGVuZ3RoOworCisgICAgICAgIERC VUdfUkVUVVJOKHRydWUpOworICAgICAgfQorICAgIH0KKyAgfQorICBEQlVHX1JFVFVSTihmYWxz ZSk7Cit9CisKKwogLyoqIE1lcmdlIGJ1ZmZlcnMgdG8gbWFrZSA8IE1FUkdFQlVGRjIgYnVmZmVy cy4gKi8KIAotaW50IG1lcmdlX21hbnlfYnVmZihTT1JUUEFSQU0gKnBhcmFtLCB1Y2hhciAqc29y dF9idWZmZXIsCi0JCSAgICBCVUZGUEVLICpidWZmcGVrLCB1aW50ICptYXhidWZmZXIsIElPX0NB Q0hFICp0X2ZpbGUpCitpbnQgbWVyZ2VfbWFueV9idWZmKFNvcnRfcGFyYW0gKnBhcmFtLCB1Y2hh ciAqc29ydF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgIEJVRkZQRUsgKmJ1ZmZwZWssIHVp bnQgKm1heGJ1ZmZlciwgSU9fQ0FDSEUgKnRfZmlsZSkKIHsKICAgcmVnaXN0ZXIgdWludCBpOwog ICBJT19DQUNIRSB0X2ZpbGUyLCpmcm9tX2ZpbGUsKnRvX2ZpbGUsKnRlbXA7CkBAIC0xMTkyLDcg KzEzODYsNyBAQCB2b2lkIHJldXNlX2ZyZWVkX2J1ZmYoUVVFVUUgKnF1ZXVlLCBCVUZGCiAgICAg b3RoZXIgIGVycm9yCiAqLwogCi1pbnQgbWVyZ2VfYnVmZmVycyhTT1JUUEFSQU0gKnBhcmFtLCBJ T19DQUNIRSAqZnJvbV9maWxlLAoraW50IG1lcmdlX2J1ZmZlcnMoU29ydF9wYXJhbSAqcGFyYW0s IElPX0NBQ0hFICpmcm9tX2ZpbGUsCiAgICAgICAgICAgICAgICAgICBJT19DQUNIRSAqdG9fZmls ZSwgdWNoYXIgKnNvcnRfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgQlVGRlBFSyAqbGFzdGJ1 ZmYsIEJVRkZQRUsgKkZiLCBCVUZGUEVLICpUYiwKICAgICAgICAgICAgICAgICAgIGludCBmbGFn KQpAQCAtMTIyNCw3ICsxNDE4LDcgQEAgaW50IG1lcmdlX2J1ZmZlcnMoU09SVFBBUkFNICpwYXJh bSwgSU9fQwogICByZXNfbGVuZ3RoPSBwYXJhbS0+cmVzX2xlbmd0aDsKICAgc29ydF9sZW5ndGg9 IHBhcmFtLT5zb3J0X2xlbmd0aDsKICAgb2Zmc2V0PSByZWNfbGVuZ3RoLXJlc19sZW5ndGg7Ci0g IG1heGNvdW50PSAodWxvbmcpIChwYXJhbS0+a2V5cy8oKHVpbnQpIChUYi1GYikgKzEpKTsKKyAg bWF4Y291bnQ9ICh1bG9uZykgKHBhcmFtLT5udW1fa2V5c19wZXJfYnVmZmVyIC8gKCh1aW50KSAo VGItRmIpICsxKSk7CiAgIHRvX3N0YXJ0X2ZpbGVwb3M9IG15X2JfdGVsbCh0b19maWxlKTsKICAg c3RycG9zPSAodWNoYXIqKSBzb3J0X2J1ZmZlcjsKICAgb3JnX21heF9yb3dzPW1heF9yb3dzPSBw YXJhbS0+bWF4X3Jvd3M7CkBAIC0xMjQ5LDggKzE0NDMsNyBAQCBpbnQgbWVyZ2VfYnVmZmVycyhT T1JUUEFSQU0gKnBhcmFtLCBJT19DCiAgIHsKICAgICBidWZmcGVrLT5iYXNlPSBzdHJwb3M7CiAg ICAgYnVmZnBlay0+bWF4X2tleXM9IG1heGNvdW50OwotICAgIHN0cnBvcys9ICh1aW50KSAoZXJy b3I9IChpbnQpIHJlYWRfdG9fYnVmZmVyKGZyb21fZmlsZSwgYnVmZnBlaywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWNfbGVuZ3RoKSk7CisgICAgc3RycG9zKz0gKHVpbnQpIChlcnJvcj0gKGludClyZWFk X3RvX2J1ZmZlcihmcm9tX2ZpbGUsIGJ1ZmZwZWssIHJlY19sZW5ndGgpKTsKICAgICBpZiAoZXJy b3IgPT0gLTEpCiAgICAgICBnb3RvIGVycjsJCQkJCS8qIHB1cmVjb3Y6IGluc3BlY3RlZCAqLwog ICAgIGJ1ZmZwZWstPm1heF9rZXlzPSBidWZmcGVrLT5tZW1fY291bnQ7CS8vIElmIGxlc3MgZGF0 YSBpbiBidWZmZXJzIHRoYW4gZXhwZWN0ZWQKQEAgLTEzNDAsNyArMTUzMyw3IEBAIGludCBtZXJn ZV9idWZmZXJzKFNPUlRQQVJBTSAqcGFyYW0sIElPX0MKICAgfQogICBidWZmcGVrPSAoQlVGRlBF SyopIHF1ZXVlX3RvcCgmcXVldWUpOwogICBidWZmcGVrLT5iYXNlPSBzb3J0X2J1ZmZlcjsKLSAg YnVmZnBlay0+bWF4X2tleXM9IHBhcmFtLT5rZXlzOworICBidWZmcGVrLT5tYXhfa2V5cz0gcGFy YW0tPm51bV9rZXlzX3Blcl9idWZmZXI7CiAKICAgLyoKICAgICBBcyB3ZSBrbm93IGFsbCBlbnRy aWVzIGluIHRoZSBidWZmZXIgYXJlIHVuaXF1ZSwgd2Ugb25seSBoYXZlIHRvCkBAIC0xNDAwLDkg KzE1OTMsOSBAQCBlcnI6CiAKIAkvKiBEbyBhIG1lcmdlIHRvIG91dHB1dC1maWxlIChzYXZlIG9u bHkgcG9zaXRpb25zKSAqLwogCi1zdGF0aWMgaW50IG1lcmdlX2luZGV4KFNPUlRQQVJBTSAqcGFy YW0sIHVjaGFyICpzb3J0X2J1ZmZlciwKLQkJICAgICAgIEJVRkZQRUsgKmJ1ZmZwZWssIHVpbnQg bWF4YnVmZmVyLAotCQkgICAgICAgSU9fQ0FDSEUgKnRlbXBmaWxlLCBJT19DQUNIRSAqb3V0Zmls ZSkKK3N0YXRpYyBpbnQgbWVyZ2VfaW5kZXgoU29ydF9wYXJhbSAqcGFyYW0sIHVjaGFyICpzb3J0 X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgQlVGRlBFSyAqYnVmZnBlaywgdWludCBt YXhidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIElPX0NBQ0hFICp0ZW1wZmlsZSwgSU9f Q0FDSEUgKm91dGZpbGUpCiB7CiAgIERCVUdfRU5URVIoIm1lcmdlX2luZGV4Iik7CiAgIGlmICht ZXJnZV9idWZmZXJzKHBhcmFtLHRlbXBmaWxlLG91dGZpbGUsc29ydF9idWZmZXIsYnVmZnBlayxi dWZmcGVrLApAQCAtMTU1NCw3ICsxNzQ3LDggQEAgc29ydGxlbmd0aChUSEQgKnRoZCwgU09SVF9G SUVMRCAqc29ydG9yZAogKi8KIAogc3RhdGljIFNPUlRfQURET05fRklFTEQgKgotZ2V0X2FkZG9u X2ZpZWxkcyhUSEQgKnRoZCwgRmllbGQgKipwdGFiZmllbGQsIHVpbnQgc29ydGxlbmd0aCwgdWlu dCAqcGxlbmd0aCkKK2dldF9hZGRvbl9maWVsZHModWxvbmcgbWF4X2xlbmd0aF9mb3Jfc29ydF9k YXRhLAorICAgICAgICAgICAgICAgICBGaWVsZCAqKnB0YWJmaWVsZCwgdWludCBzb3J0bGVuZ3Ro LCB1aW50ICpwbGVuZ3RoKQogewogICBGaWVsZCAqKnBmaWVsZDsKICAgRmllbGQgKmZpZWxkOwpA QCAtMTU5MCw3ICsxNzg0LDcgQEAgZ2V0X2FkZG9uX2ZpZWxkcyhUSEQgKnRoZCwgRmllbGQgKipw dGFiZgogICAgIHJldHVybiAwOwogICBsZW5ndGgrPSAobnVsbF9maWVsZHMrNykvODsKIAotICBp ZiAobGVuZ3RoK3NvcnRsZW5ndGggPiB0aGQtPnZhcmlhYmxlcy5tYXhfbGVuZ3RoX2Zvcl9zb3J0 X2RhdGEgfHwKKyAgaWYgKGxlbmd0aCtzb3J0bGVuZ3RoID4gbWF4X2xlbmd0aF9mb3Jfc29ydF9k YXRhIHx8CiAgICAgICAhKGFkZG9uZj0gKFNPUlRfQURET05fRklFTEQgKikgbXlfbWFsbG9jKHNp emVvZihTT1JUX0FERE9OX0ZJRUxEKSoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGZpZWxkcysxKSwgTVlGKE1ZX1dNRSkpKSkKICAgICByZXR1cm4gMDsK Cj09PSBtb2RpZmllZCBmaWxlICdzcWwvZmlsZXNvcnQuaCcKLS0tIGEvc3FsL2ZpbGVzb3J0LmgJ MjAxMC0wNy0wMiAwMjo1ODo1MSArMDAwMAorKysgYi9zcWwvZmlsZXNvcnQuaAkyMDEwLTExLTI5 IDExOjIxOjIyICswMDAwCkBAIC0yOSw3ICsyOSw3IEBAIHR5cGVkZWYgc3RydWN0IHN0X3NvcnRf ZmllbGQgU09SVF9GSUVMRDsKIGhhX3Jvd3MgZmlsZXNvcnQoVEhEICp0aGQsIFRBQkxFICp0YWJs ZSwgc3Rfc29ydF9maWVsZCAqc29ydG9yZGVyLAogICAgICAgICAgICAgICAgICB1aW50IHNfbGVu Z3RoLCBTUUxfU0VMRUNUICpzZWxlY3QsCiAgICAgICAgICAgICAgICAgIGhhX3Jvd3MgbWF4X3Jv d3MsIGJvb2wgc29ydF9wb3NpdGlvbnMsCi0gICAgICAgICAgICAgICAgIGhhX3Jvd3MgKmV4YW1p bmVkX3Jvd3MpOworICAgICAgICAgICAgICAgICBoYV9yb3dzICpleGFtaW5lZF9yb3dzLCB1bG9u Z2xvbmcgb3B0aW9ucyk7CiB2b2lkIGZpbGVzb3J0X2ZyZWVfYnVmZmVycyhUQUJMRSAqdGFibGUs IGJvb2wgZnVsbCk7CiB2b2lkIGNoYW5nZV9kb3VibGVfZm9yX3NvcnQoZG91YmxlIG5yLHVjaGFy ICp0byk7CiAKCj09PSBtb2RpZmllZCBmaWxlICdzcWwvc3FsX2NvbnN0LmgnCi0tLSBhL3NxbC9z cWxfY29uc3QuaAkyMDEwLTA3LTEzIDE3OjI5OjQ0ICswMDAwCisrKyBiL3NxbC9zcWxfY29uc3Qu aAkyMDEwLTExLTI5IDExOjIxOjIyICswMDAwCkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogICBpbnN0 ZWFkIG9mIHJlYWRpbmcgd2l0aCBrZXlzLiAgVGhlIG51bWJlciBzYXlzIGhvdyBtYW55IGV2YWx1 YXRpb24gb2YgdGhlCiAgIFdIRVJFIGNsYXVzZSBpcyBjb21wYXJhYmxlIHRvIHJlYWRpbmcgb25l IGV4dHJhIHJvdyBmcm9tIGEgdGFibGUuCiAqLwotI2RlZmluZSBUSU1FX0ZPUl9DT01QQVJFICAg NQkvLyA1IGNvbXBhcmVzID09IG9uZSByZWFkCisjZGVmaW5lIFRJTUVfRk9SX0NPTVBBUkUgICA1 LjAJLy8gNSBjb21wYXJlcyA9PSBvbmUgcmVhZAogCiAvKioKICAgTnVtYmVyIG9mIGNvbXBhcmlz b25zIG9mIHRhYmxlIHJvd2lkcyBlcXVpdmFsZW50IHRvIHJlYWRpbmcgb25lIHJvdyBmcm9tIGEg CiAgIHRhYmxlLgogKi8KLSNkZWZpbmUgVElNRV9GT1JfQ09NUEFSRV9ST1dJRCAgKFRJTUVfRk9S X0NPTVBBUkUqMikKKyNkZWZpbmUgVElNRV9GT1JfQ09NUEFSRV9ST1dJRCAgKFRJTUVfRk9SX0NP TVBBUkUqMi4wKQogCiAvKgogICBGb3Igc2VxdWVudGlhbCBkaXNrIHNlZWtzIHRoZSBjb3N0IGZv cm11bGEgaXM6Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL3NxbF9kZWxldGUuY2MnCi0tLSBhL3Nx bC9zcWxfZGVsZXRlLmNjCTIwMTAtMTAtMjEgMTE6MzQ6MTcgKzAwMDAKKysrIGIvc3FsL3NxbF9k ZWxldGUuY2MJMjAxMC0xMS0yOSAxMToyMToyMiArMDAwMApAQCAtMjQzLDcgKzI0Myw3IEBAIGJv b2wgbXlzcWxfZGVsZXRlKFRIRCAqdGhkLCBUQUJMRV9MSVNUICoKICAgICAgIGlmICghKHNvcnRv cmRlcj0gbWFrZV91bmlyZWdfc29ydG9yZGVyKG9yZGVyLCAmbGVuZ3RoLCBOVUxMKSkgfHwKIAkg ICh0YWJsZS0+c29ydC5mb3VuZF9yZWNvcmRzID0gZmlsZXNvcnQodGhkLCB0YWJsZSwgc29ydG9y ZGVyLCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZWxlY3QsIEhBX1BPU19FUlJPUiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZleGFtaW5lZF9yb3dzKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGFtaW5lZF9yb3dzLCAwKSkKIAkgID09 IEhBX1BPU19FUlJPUikKICAgICAgIHsKICAgICAgICAgZGVsZXRlIHNlbGVjdDsKCj09PSBtb2Rp ZmllZCBmaWxlICdzcWwvc3FsX3NlbGVjdC5jYycKLS0tIGEvc3FsL3NxbF9zZWxlY3QuY2MJMjAx MC0xMS0yNSAwODowMzoxNiArMDAwMAorKysgYi9zcWwvc3FsX3NlbGVjdC5jYwkyMDEwLTExLTI5 IDExOjIxOjIyICswMDAwCkBAIC0yNTU5LDYgKzI1NTksNyBAQCBKT0lOOjpvcHRpbWl6ZSgpCiAK ICAgICAgIGlmICghZ3JvdXBfbGlzdCAmJiAhIGV4ZWNfdG1wX3RhYmxlMS0+ZGlzdGluY3QgJiYg b3JkZXIgJiYgc2ltcGxlX29yZGVyKQogICAgICAgeworICAgICAgICBEQlVHX1BSSU5UKCJpbmZv IiwoIlNvcnRpbmcgZm9yIG9yZGVyIikpOwogICAgICAgICB0aGRfcHJvY19pbmZvKHRoZCwgIlNv cnRpbmcgZm9yIG9yZGVyIik7CiAgICAgICAgIGlmIChjcmVhdGVfc29ydF9pbmRleCh0aGQsIHRo aXMsIG9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFfUE9TX0VSUk9SLCBI QV9QT1NfRVJST1IsIFRSVUUpKQpAQCAtMjczNiw2ICsyNzM3LDggQEAgSk9JTjo6ZXhlYygpCiAg IGludCAgICAgIHRtcF9lcnJvcjsKICAgREJVR19FTlRFUigiSk9JTjo6ZXhlYyIpOwogCisgIGNv bnN0IGJvb2wgaGFzX2dyb3VwX2J5PSB0aGlzLT5ncm91cDsKKwogICB0aGRfcHJvY19pbmZvKHRo ZCwgImV4ZWN1dGluZyIpOwogICBlcnJvcj0gMDsKICAgaWYgKHByb2NlZHVyZSkKQEAgLTMwMjEs MTEgKzMwMjQsMTIgQEAgSk9JTjo6ZXhlYygpCiAgICAgICB9CiAgICAgICBpZiAoY3Vycl9qb2lu LT5ncm91cF9saXN0KQogICAgICAgewotCXRoZF9wcm9jX2luZm8odGhkLCAiQ3JlYXRpbmcgc29y dCBpbmRleCIpOwogCWlmIChjdXJyX2pvaW4tPmpvaW5fdGFiID09IGpvaW5fdGFiICYmIHNhdmVf am9pbl90YWIoKSkKIAl7CiAJICBEQlVHX1ZPSURfUkVUVVJOOwogCX0KKwlEQlVHX1BSSU5UKCJp bmZvIiwoIlNvcnRpbmcgZm9yIGluZGV4IikpOworCXRoZF9wcm9jX2luZm8odGhkLCAiQ3JlYXRp bmcgc29ydCBpbmRleCIpOwogCWlmIChjcmVhdGVfc29ydF9pbmRleCh0aGQsIGN1cnJfam9pbiwg Y3Vycl9qb2luLT5ncm91cF9saXN0LAogCQkJICAgICAgSEFfUE9TX0VSUk9SLCBIQV9QT1NfRVJS T1IsIEZBTFNFKSB8fAogCSAgICBtYWtlX2dyb3VwX2ZpZWxkcyh0aGlzLCBjdXJyX2pvaW4pKQpA QCAtMzI1MSwxMiArMzI1NSwyNSBAQCBKT0lOOjpleGVjKCkKIAl0aGUgcXVlcnkuIFhYWDogaXQn cyBuZXZlciBzaG93biBpbiBFWFBMQUlOIQogCU9QVElPTl9GT1VORF9ST1dTIHN1cGVyc2VkZXMg TElNSVQgYW5kIGlzIHRha2VuIGludG8gYWNjb3VudC4KICAgICAgICovCi0gICAgICBpZiAoY3Jl YXRlX3NvcnRfaW5kZXgodGhkLCBjdXJyX2pvaW4sCi0JCQkgICAgY3Vycl9qb2luLT5ncm91cF9s aXN0ID8gCi0JCQkgICAgY3Vycl9qb2luLT5ncm91cF9saXN0IDogY3Vycl9qb2luLT5vcmRlciwK LQkJCSAgICBjdXJyX2pvaW4tPnNlbGVjdF9saW1pdCwKLQkJCSAgICAoc2VsZWN0X29wdGlvbnMg JiBPUFRJT05fRk9VTkRfUk9XUyA/Ci0JCQkgICAgIEhBX1BPU19FUlJPUiA6IHVuaXQtPnNlbGVj dF9saW1pdF9jbnQpLAorICAgICAgREJVR19QUklOVCgiaW5mbyIsKCJTb3J0aW5nIGZvciBvcmRl ciBieS9ncm91cCBieSIpKTsKKyAgICAgIE9SREVSICpvcmRlcl9hcmc9CisgICAgICAgIGN1cnJf am9pbi0+Z3JvdXBfbGlzdCA/IGN1cnJfam9pbi0+Z3JvdXBfbGlzdCA6IGN1cnJfam9pbi0+b3Jk ZXI7CisgICAgICAvKgorICAgICAgICBmaWxlc29ydF9saW1pdDoJTWF4IG51bWJlciBvZiByb3dz IHRoYXQgbmVlZHMgdG8gYmUgc29ydGVkLgorICAgICAgICBXZSBjYW4gdXNlIHNlbGVjdF9saW1p dF9jbnQgb25seSBpZiB3ZSBoYXZlIG5vIGdyb3VwX2J5IGFuZCAxIHRhYmxlLgorICAgICAgICov CisgICAgICBjb25zdCBoYV9yb3dzIGZpbGVzb3J0X2xpbWl0X2FyZz0KKyAgICAgICAgKGhhc19n cm91cF9ieSB8fCBjdXJyX2pvaW4tPnRhYmxlcyA+IDEpCisgICAgICAgID8gY3Vycl9qb2luLT5z ZWxlY3RfbGltaXQgOiB1bml0LT5zZWxlY3RfbGltaXRfY250OworICAgICAgY29uc3QgaGFfcm93 cyBzZWxlY3RfbGltaXRfYXJnPQorICAgICAgICBzZWxlY3Rfb3B0aW9ucyAmIE9QVElPTl9GT1VO RF9ST1dTCisgICAgICAgID8gSEFfUE9TX0VSUk9SIDogdW5pdC0+c2VsZWN0X2xpbWl0X2NudDsK KworICAgICAgaWYgKGNyZWF0ZV9zb3J0X2luZGV4KHRoZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdXJyX2pvaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJfYXJn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzb3J0X2xpbWl0X2FyZywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RfbGltaXRfYXJnLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN1cnJfam9pbi0+Z3JvdXBfbGlzdCA/IEZBTFNFIDogVFJVRSkpCiAJREJV R19WT0lEX1JFVFVSTjsKICAgICAgIHNvcnRvcmRlcj0gY3Vycl9qb2luLT5zb3J0b3JkZXI7CkBA IC0zMjg5LDYgKzMzMDYsMTUgQEAgSk9JTjo6ZXhlYygpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFByb3RvY29sOjpTRU5EX05VTV9ST1dTIHwgUHJvdG9jb2w6OlNFTkRfRU9G KTsKICAgZXJyb3I9IGRvX3NlbGVjdChjdXJyX2pvaW4sIGN1cnJfZmllbGRzX2xpc3QsIE5VTEws IHByb2NlZHVyZSk7CiAgIHRoZC0+bGltaXRfZm91bmRfcm93cz0gY3Vycl9qb2luLT5zZW5kX3Jl Y29yZHM7CisgIGlmIChjdXJyX2pvaW4tPm9yZGVyICYmCisgICAgICBjdXJyX2pvaW4tPnNvcnRv cmRlciAmJgorICAgICAgY3Vycl9qb2luLT5zZWxlY3Rfb3B0aW9ucyAmIE9QVElPTl9GT1VORF9S T1dTKQorICB7CisgICAgLyogVXNlIGluZm8gcHJvdmlkZWQgYnkgZmlsZXNvcnQuICovCisgICAg REJVR19BU1NFUlQoY3Vycl9qb2luLT50YWJsZXMgPiBjdXJyX2pvaW4tPmNvbnN0X3RhYmxlcyk7 CisgICAgSk9JTl9UQUIgKnRhYj0gY3Vycl9qb2luLT5qb2luX3RhYiArIGN1cnJfam9pbi0+Y29u c3RfdGFibGVzOworICAgIHRoZC0+bGltaXRfZm91bmRfcm93cz0gdGFiLT5yZWNvcmRzOworICB9 CiAKICAgLyogQWNjdW11bGF0ZSB0aGUgY291bnRzIGZyb20gYWxsIGpvaW4gaXRlcmF0aW9ucyBv ZiBhbGwgam9pbiBwYXJ0cy4gKi8KICAgdGhkLT5leGFtaW5lZF9yb3dfY291bnQrPSBjdXJyX2pv aW4tPmV4YW1pbmVkX3Jvd3M7CkBAIC0xODM3OSw4ICsxODQwNSwyNiBAQCBlbmRfc2VuZChKT0lO ICpqb2luLCBKT0lOX1RBQiAqam9pbl90YWIgCiAgICAgICBlcnJvcj1qb2luLT5yZXN1bHQtPnNl bmRfZGF0YSgqam9pbi0+ZmllbGRzKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICBEQlVHX1JFVFVS TihORVNURURfTE9PUF9FUlJPUik7IC8qIHB1cmVjb3Y6IGluc3BlY3RlZCAqLwotICAgIGlmICgr K2pvaW4tPnNlbmRfcmVjb3JkcyA+PSBqb2luLT51bml0LT5zZWxlY3RfbGltaXRfY250ICYmCi0J am9pbi0+ZG9fc2VuZF9yb3dzKQorCisgICAgKytqb2luLT5zZW5kX3JlY29yZHM7CisgICAgaWYg KGpvaW4tPnNlbmRfcmVjb3JkcyA+PSBqb2luLT51bml0LT5zZWxlY3RfbGltaXRfY250ICYmCisg ICAgICAgICFqb2luLT5kb19zZW5kX3Jvd3MpCisgICAgeworICAgICAgLyoKKyAgICAgICAgSWYg ZmlsZXNvcnQgaXMgdXNlZCBmb3Igc29ydGluZywgc3RvcCBhZnRlciBzZWxlY3RfbGltaXRfY250 KzEKKyAgICAgICAgcmVjb3JkcyBhcmUgcmVhZC4gQmVjYXVzZSBvZiBvcHRpbWl6YXRpb24gaW4g c29tZSBjYXNlcyBpdCBjYW4KKyAgICAgICAgcHJvdmlkZSBvbmx5IHNlbGVjdF9saW1pdF9jbnQr MSByZWNvcmRzLgorICAgICAgKi8KKyAgICAgIGlmIChqb2luLT5vcmRlciAmJgorICAgICAgICAg IGpvaW4tPnNvcnRvcmRlciAmJgorICAgICAgICAgIGpvaW4tPnNlbGVjdF9vcHRpb25zICYgT1BU SU9OX0ZPVU5EX1JPV1MpCisgICAgICB7CisgICAgICAgIERCVUdfUFJJTlQoImluZm8iLCAoImZp bGVzb3J0IE5FU1RFRF9MT09QX1FVRVJZX0xJTUlUIikpOworICAgICAgICBEQlVHX1JFVFVSTihO RVNURURfTE9PUF9RVUVSWV9MSU1JVCk7CisgICAgICB9CisgICAgfQorICAgIGlmIChqb2luLT5z ZW5kX3JlY29yZHMgPj0gam9pbi0+dW5pdC0+c2VsZWN0X2xpbWl0X2NudCAmJgorICAgICAgICBq b2luLT5kb19zZW5kX3Jvd3MpCiAgICAgewogICAgICAgaWYgKGpvaW4tPnNlbGVjdF9vcHRpb25z ICYgT1BUSU9OX0ZPVU5EX1JPV1MpCiAgICAgICB7CkBAIC0yMDAyNyw3ICsyMDA3MSw3IEBAIHVz ZV9maWxlc29ydDoKICAgU1lOT1BTSVMKICAgIGNyZWF0ZV9zb3J0X2luZGV4KCkKICAgICAgdGhk CQlUaHJlYWQgaGFuZGxlcgotICAgICB0YWIJCVRhYmxlIHRvIHNvcnQgKGluIGpvaW4gc3RydWN0 dXJlKQorICAgICBqb2luCQlUaGUgam9pbgogICAgICBvcmRlcgkJSG93IHRhYmxlIHNob3VsZCBi ZSBzb3J0ZWQKICAgICAgZmlsZXNvcnRfbGltaXQJTWF4IG51bWJlciBvZiByb3dzIHRoYXQgbmVl ZHMgdG8gYmUgc29ydGVkCiAgICAgIHNlbGVjdF9saW1pdAlNYXggbnVtYmVyIG9mIHJvd3MgaW4g ZmluYWwgb3V0cHV0CkBAIC0yMDEyOSw5ICsyMDE3MywxMSBAQCBjcmVhdGVfc29ydF9pbmRleChU SEQgKnRoZCwgSk9JTiAqam9pbiwgCiAKICAgaWYgKHRhYmxlLT5zLT50bXBfdGFibGUpCiAgICAg dGFibGUtPmZpbGUtPmluZm8oSEFfU1RBVFVTX1ZBUklBQkxFKTsJLy8gR2V0IHJlY29yZCBjb3Vu dAotICB0YWJsZS0+c29ydC5mb3VuZF9yZWNvcmRzPWZpbGVzb3J0KHRoZCwgdGFibGUsam9pbi0+ c29ydG9yZGVyLCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2VsZWN0LCBmaWxlc29ydF9saW1pdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZXhhbWluZWRfcm93cyk7CisgIHRhYmxlLT5zb3J0LmZvdW5kX3JlY29yZHM9IGZp bGVzb3J0KHRoZCwgdGFibGUsIGpvaW4tPnNvcnRvcmRlciwgbGVuZ3RoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QsIGZpbGVzb3J0X2xpbWl0LCAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhhbWluZWRfcm93cywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbi0+dGFibGVzICE9IDEgPyAwIDoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbi0+c2VsZWN0X29wdGlv bnMgJiBPUFRJT05fRk9VTkRfUk9XUyk7CiAgIHRhYi0+cmVjb3Jkcz0gdGFibGUtPnNvcnQuZm91 bmRfcmVjb3JkczsJLy8gRm9yIFNRTF9DQUxDX1JPV1MKICAgaWYgKHNlbGVjdCkKICAgewpAQCAt MjA0NzgsNyArMjA1MjQsNyBAQCBTT1JUX0ZJRUxEICptYWtlX3VuaXJlZ19zb3J0b3JkZXIoT1JE RVIgCiAgIHBvcz0gc29ydD0gc29ydG9yZGVyOwogCiAgIGlmICghcG9zKQotICAgIHJldHVybiAw OworICAgIERCVUdfUkVUVVJOKDApOwogCiAgIGZvciAoO29yZGVyO29yZGVyPW9yZGVyLT5uZXh0 LHBvcysrKQogICB7CkBAIC0yMDQ5NSw2ICsyMDU0MSw3IEBAIFNPUlRfRklFTEQgKm1ha2VfdW5p cmVnX3NvcnRvcmRlcihPUkRFUiAKICAgICBlbHNlCiAgICAgICBwb3MtPml0ZW09ICpvcmRlci0+ aXRlbTsKICAgICBwb3MtPnJldmVyc2U9ISBvcmRlci0+YXNjOworICAgIERCVUdfQVNTRVJUKHBv cy0+ZmllbGQgIT0gTlVMTCB8fCBwb3MtPml0ZW0gIT0gTlVMTCk7CiAgIH0KICAgKmxlbmd0aD1j b3VudDsKICAgREJVR19SRVRVUk4oc29ydCk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsL3NxbF9z b3J0LmgnCi0tLSBhL3NxbC9zcWxfc29ydC5oCTIwMTAtMDctMDIgMTg6MTU6MjEgKzAwMDAKKysr IGIvc3FsL3NxbF9zb3J0LmgJMjAxMC0xMS0yOSAxMToyMToyMiArMDAwMApAQCAtMTYsNiArMTYs NyBAQAogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICAgIDUxIEZyYW5rbGluIFN0cmVldCwgU3VpdGUgNTAw LCBCb3N0b24sIE1BIDAyMTEwLTEzMzUgVVNBICovCiAKKyNpbmNsdWRlICJtX3N0cmluZy5oIiAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCAqLwogI2luY2x1ZGUgIm15X2dsb2Jh bC5oIiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdWNoYXIgKi8KICNpbmNsdWRlICJteV9i YXNlLmgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhhX3Jvd3MgKi8KICNpbmNsdWRl ICJteV9zeXMuaCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHFzb3J0Ml9jbXAgKi8K QEAgLTI3LDcgKzI4LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3Rfc29ydF9maWVsZCBTT1JUX0ZJRUxE OwogY2xhc3MgRmllbGQ7CiBzdHJ1Y3QgVEFCTEU7CiAKLQogLyogRGVmaW5lcyB1c2VkIGJ5IGZp bGVzb3J0IGFuZCB1bmlxdWVzICovCiAKICNkZWZpbmUgTUVSR0VCVUZGCQk3CkBAIC03MSwxNSAr NzEsMTcgQEAgc3RydWN0IEJVRkZQRUtfQ09NUEFSRV9DT05URVhUCiAgIHZvaWQgKmtleV9jb21w YXJlX2FyZzsKIH07CiAKLXR5cGVkZWYgc3RydWN0IHN0X3NvcnRfcGFyYW0gewotICB1aW50IHJl Y19sZW5ndGg7ICAgICAgICAgIC8qIExlbmd0aCBvZiBzb3J0ZWQgcmVjb3JkcyAqLwotICB1aW50 IHNvcnRfbGVuZ3RoOwkJCS8qIExlbmd0aCBvZiBzb3J0ZWQgY29sdW1ucyAqLwotICB1aW50IHJl Zl9sZW5ndGg7CQkJLyogTGVuZ3RoIG9mIHJlY29yZCByZWYuICovCi0gIHVpbnQgYWRkb25fbGVu Z3RoOyAgICAgICAgLyogTGVuZ3RoIG9mIGFkZGVkIHBhY2tlZCBmaWVsZHMgKi8KLSAgdWludCBy ZXNfbGVuZ3RoOyAgICAgICAgICAvKiBMZW5ndGggb2YgcmVjb3JkcyBpbiBmaW5hbCBzb3J0ZWQg ZmlsZS9idWZmZXIgKi8KLSAgdWludCBrZXlzOwkJCQkvKiBNYXgga2V5cyAvIGJ1ZmZlciAqLwot ICBoYV9yb3dzIG1heF9yb3dzLGV4YW1pbmVkX3Jvd3M7Ci0gIFRBQkxFICpzb3J0X2Zvcm07CQkJ LyogRm9yIHF1aWNrZXIgbWFrZV9zb3J0a2V5ICovCitjbGFzcyBTb3J0X3BhcmFtIHsKK3B1Ymxp YzoKKyAgdWludCByZWNfbGVuZ3RoOyAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzb3J0ZWQgcmVj b3JkcyAqLworICB1aW50IHNvcnRfbGVuZ3RoOyAgICAgICAgICAgLyogTGVuZ3RoIG9mIHNvcnRl ZCBjb2x1bW5zICovCisgIHVpbnQgcmVmX2xlbmd0aDsgICAgICAgICAgICAvKiBMZW5ndGggb2Yg cmVjb3JkIHJlZi4gKi8KKyAgdWludCBhZGRvbl9sZW5ndGg7ICAgICAgICAgIC8qIExlbmd0aCBv ZiBhZGRlZCBwYWNrZWQgZmllbGRzICovCisgIHVpbnQgcmVzX2xlbmd0aDsgICAgICAgICAgICAv KiBMZW5ndGggb2YgcmVjb3JkcyBpbiBmaW5hbCBzb3J0ZWQgZmlsZS9idWZmZXIgKi8KKyAgdWlu dCBudW1fa2V5c19wZXJfYnVmZmVyOyAgIC8qIE1heCBrZXlzIC8gYnVmZmVyICovCisgIGhhX3Jv d3MgbWF4X3Jvd3M7ICAgICAgICAgICAvKiBTZWxlY3QgbGltaXQsIG9yIEhBX1BPU19FUlJPUiBp ZiB1bmxpbWl0ZWQgKi8KKyAgaGFfcm93cyBleGFtaW5lZF9yb3dzOyAgICAgIC8qIE51bWJlciBv ZiBleGFtaW5lZCByb3dzICovCisgIFRBQkxFICpzb3J0X2Zvcm07ICAgICAgICAgICAvKiBGb3Ig cXVpY2tlciBtYWtlX3NvcnRrZXkgKi8KICAgU09SVF9GSUVMRCAqbG9jYWxfc29ydG9yZGVyOwog ICBTT1JUX0ZJRUxEICplbmQ7CiAgIFNPUlRfQURET05fRklFTEQgKmFkZG9uX2ZpZWxkOyAvKiBE ZXNjcmlwdG9ycyBmb3IgY29tcGFuaW9uIGZpZWxkcyAqLwpAQCAtODksMTggKzkxLDI1IEBAIHR5 cGVkZWYgc3RydWN0IHN0X3NvcnRfcGFyYW0gewogICAvKiBUaGUgZmllbGRzIGJlbG93IGFyZSB1 c2VkIG9ubHkgYnkgVW5pcXVlIGNsYXNzICovCiAgIHFzb3J0Ml9jbXAgY29tcGFyZTsKICAgQlVG RlBFS19DT01QQVJFX0NPTlRFWFQgY21wX2NvbnRleHQ7Ci19IFNPUlRQQVJBTTsKKworICBTb3J0 X3BhcmFtKCkKKyAgeworICAgIG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsKKyAgfQor ICB2b2lkIGluaXQodWludCBzb3J0bGVuLCBUQUJMRSAqdGFibGUsIHVsb25nIG1heF9sZW5ndGhf Zm9yX3NvcnRfZGF0YSwKKyAgICAgICAgICAgIGhhX3Jvd3MgbWF4cm93cywgYm9vbCBzb3J0X3Bv c2l0aW9ucyk7Cit9OwogCiAKLWludCBtZXJnZV9tYW55X2J1ZmYoU09SVFBBUkFNICpwYXJhbSwg dWNoYXIgKnNvcnRfYnVmZmVyLAoraW50IG1lcmdlX21hbnlfYnVmZihTb3J0X3BhcmFtICpwYXJh bSwgdWNoYXIgKnNvcnRfYnVmZmVyLAogCQkgICAgQlVGRlBFSyAqYnVmZnBlaywKIAkJICAgIHVp bnQgKm1heGJ1ZmZlciwgSU9fQ0FDSEUgKnRfZmlsZSk7CiB1aW50IHJlYWRfdG9fYnVmZmVyKElP X0NBQ0hFICpmcm9tZmlsZSxCVUZGUEVLICpidWZmcGVrLAogCQkgICAgdWludCBzb3J0X2xlbmd0 aCk7Ci1pbnQgbWVyZ2VfYnVmZmVycyhTT1JUUEFSQU0gKnBhcmFtLElPX0NBQ0hFICpmcm9tX2Zp bGUsCi0JCSAgSU9fQ0FDSEUgKnRvX2ZpbGUsIHVjaGFyICpzb3J0X2J1ZmZlciwKLQkJICBCVUZG UEVLICpsYXN0YnVmZixCVUZGUEVLICpGYiwKLQkJICBCVUZGUEVLICpUYixpbnQgZmxhZyk7Citp bnQgbWVyZ2VfYnVmZmVycyhTb3J0X3BhcmFtICpwYXJhbSxJT19DQUNIRSAqZnJvbV9maWxlLAor ICAgICAgICAgICAgICAgICAgSU9fQ0FDSEUgKnRvX2ZpbGUsIHVjaGFyICpzb3J0X2J1ZmZlciwK KyAgICAgICAgICAgICAgICAgIEJVRkZQRUsgKmxhc3RidWZmLEJVRkZQRUsgKkZiLAorICAgICAg ICAgICAgICAgICAgQlVGRlBFSyAqVGIsaW50IGZsYWcpOwogdm9pZCByZXVzZV9mcmVlZF9idWZm KFFVRVVFICpxdWV1ZSwgQlVGRlBFSyAqcmV1c2UsIHVpbnQga2V5X2xlbmd0aCk7CiAKICNlbmRp ZiAvKiBTUUxfU09SVF9JTkNMVURFRCAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9zcWxfdGFi bGUuY2MnCi0tLSBhL3NxbC9zcWxfdGFibGUuY2MJMjAxMC0xMS0xOSAwOToxNTozMCArMDAwMAor KysgYi9zcWwvc3FsX3RhYmxlLmNjCTIwMTAtMTEtMjkgMTE6MjE6MjIgKzAwMDAKQEAgLTcxNTUs NyArNzE1NSw3IEBAIGNvcHlfZGF0YV9iZXR3ZWVuX3RhYmxlcyhUQUJMRSAqZnJvbSxUQUIKICAg ICAgICAgICAhKHNvcnRvcmRlcj0gbWFrZV91bmlyZWdfc29ydG9yZGVyKG9yZGVyLCAmbGVuZ3Ro LCBOVUxMKSkgfHwKICAgICAgICAgICAoZnJvbS0+c29ydC5mb3VuZF9yZWNvcmRzPSBmaWxlc29y dCh0aGQsIGZyb20sIHNvcnRvcmRlciwgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChTUUxfU0VMRUNUICopIDAsIEhBX1BPU19FUlJPUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmZXhhbWluZWRf cm93cykpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MSwgJmV4YW1pbmVkX3Jvd3MsIDApKSA9PQogICAgICAgICAgIEhBX1BPU19FUlJPUikKICAgICAg ICAgZ290byBlcnI7CiAgICAgfQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NxbC9zcWxfdXBkYXRlLmNj JwotLS0gYS9zcWwvc3FsX3VwZGF0ZS5jYwkyMDEwLTExLTE4IDE2OjM0OjU2ICswMDAwCisrKyBi L3NxbC9zcWxfdXBkYXRlLmNjCTIwMTAtMTEtMjkgMTE6MjE6MjIgKzAwMDAKQEAgLTQ3OSw3ICs0 NzksNyBAQCBpbnQgbXlzcWxfdXBkYXRlKFRIRCAqdGhkLAogICAgICAgaWYgKCEoc29ydG9yZGVy PW1ha2VfdW5pcmVnX3NvcnRvcmRlcihvcmRlciwgJmxlbmd0aCwgTlVMTCkpIHx8CiAgICAgICAg ICAgKHRhYmxlLT5zb3J0LmZvdW5kX3JlY29yZHM9IGZpbGVzb3J0KHRoZCwgdGFibGUsIHNvcnRv cmRlciwgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZWxlY3QsIGxpbWl0LCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZXhhbWluZWRfcm93cykpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZleGFtaW5lZF9yb3dzLCAwKSkKICAgICAgICAgICA9PSBI QV9QT1NfRVJST1IpCiAgICAgICB7CiAJZ290byBlcnI7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Fs L3VuaXF1ZXMuY2MnCi0tLSBhL3NxbC91bmlxdWVzLmNjCTIwMTAtMTEtMDUgMjI6MTQ6MjkgKzAw MDAKKysrIGIvc3FsL3VuaXF1ZXMuY2MJMjAxMC0xMS0yOSAxMToyMToyMiArMDAwMApAQCAtNTc3 LDcgKzU3Nyw2IEBAIGJvb2wgVW5pcXVlOjp3YWxrKHRyZWVfd2Fsa19hY3Rpb24gYWN0aW8KIAog Ym9vbCBVbmlxdWU6OmdldChUQUJMRSAqdGFibGUpCiB7Ci0gIFNPUlRQQVJBTSBzb3J0X3BhcmFt OwogICB0YWJsZS0+c29ydC5mb3VuZF9yZWNvcmRzPWVsZW1lbnRzK3RyZWUuZWxlbWVudHNfaW5f dHJlZTsKIAogICBpZiAobXlfYl90ZWxsKCZmaWxlKSA9PSAwKQpAQCAtNjEyLDE5ICs2MTEsMjAg QEAgYm9vbCBVbmlxdWU6OmdldChUQUJMRSAqdGFibGUpCiAgICAgcmV0dXJuIDE7CiAgIHJlaW5p dF9pb19jYWNoZShvdXRmaWxlLFdSSVRFX0NBQ0hFLDBMLDAsMCk7CiAKLSAgYnplcm8oKGNoYXIq KSAmc29ydF9wYXJhbSxzaXplb2Yoc29ydF9wYXJhbSkpOworICBTb3J0X3BhcmFtIHNvcnRfcGFy YW07CiAgIHNvcnRfcGFyYW0ubWF4X3Jvd3M9IGVsZW1lbnRzOwogICBzb3J0X3BhcmFtLnNvcnRf Zm9ybT10YWJsZTsKICAgc29ydF9wYXJhbS5yZWNfbGVuZ3RoPSBzb3J0X3BhcmFtLnNvcnRfbGVu Z3RoPSBzb3J0X3BhcmFtLnJlZl9sZW5ndGg9CiAgICAgc2l6ZTsKLSAgc29ydF9wYXJhbS5rZXlz PSAodWludCkgKG1heF9pbl9tZW1vcnlfc2l6ZSAvIHNvcnRfcGFyYW0uc29ydF9sZW5ndGgpOwor ICBzb3J0X3BhcmFtLm51bV9rZXlzX3Blcl9idWZmZXI9CisgICAgKHVpbnQpIChtYXhfaW5fbWVt b3J5X3NpemUgLyBzb3J0X3BhcmFtLnNvcnRfbGVuZ3RoKTsKICAgc29ydF9wYXJhbS5ub3Rfa2ls bGFibGU9MTsKIAotICBpZiAoIShzb3J0X2J1ZmZlcj0odWNoYXIqKSBteV9tYWxsb2MoKHNvcnRf cGFyYW0ua2V5cysxKSAqCisgIGlmICghKHNvcnRfYnVmZmVyPSh1Y2hhciopIG15X21hbGxvYygo c29ydF9wYXJhbS5udW1fa2V5c19wZXJfYnVmZmVyICsgMSkgKgogCQkJCSAgICAgICBzb3J0X3Bh cmFtLnNvcnRfbGVuZ3RoLAogCQkJCSAgICAgICBNWUYoMCkpKSkKICAgICByZXR1cm4gMTsKLSAg c29ydF9wYXJhbS51bmlxdWVfYnVmZj0gc29ydF9idWZmZXIrKHNvcnRfcGFyYW0ua2V5cyoKKyAg c29ydF9wYXJhbS51bmlxdWVfYnVmZj0gc29ydF9idWZmZXIrKHNvcnRfcGFyYW0ubnVtX2tleXNf cGVyX2J1ZmZlciAqCiAJCQkJICAgICAgIHNvcnRfcGFyYW0uc29ydF9sZW5ndGgpOwogCiAgIHNv cnRfcGFyYW0uY29tcGFyZT0gKHFzb3J0Ml9jbXApIGJ1ZmZwZWtfY29tcGFyZTsKCj09PSBtb2Rp ZmllZCBmaWxlICd1bml0dGVzdC9ndW5pdC9DTWFrZUxpc3RzLnR4dCcKLS0tIGEvdW5pdHRlc3Qv Z3VuaXQvQ01ha2VMaXN0cy50eHQJMjAxMC0xMS0xOSAyMzo1NzoyMiArMDAwMAorKysgYi91bml0 dGVzdC9ndW5pdC9DTWFrZUxpc3RzLnR4dAkyMDEwLTExLTI5IDExOjIxOjIyICswMDAwCkBAIC0y MDYsOCArMjA2LDE3IEBAIElGIChDTUFLRV9DWFhfQ09NUElMRVJfSUQgU1RSRVFVQUwgIlN1blAK ICAgQUREX0RFRklOSVRJT05TKCItbGlicmFyeT1zdGxwb3J0NCIpCiBFTkRJRigpCiAKLSMgQWRk IHRlc3RzIChsaW5rIHRoZW0gd2l0aCBzcWwgbGlicmFyeSkgCi1TRVQoVEVTVFMgZGJ1ZyBzcWxf bGlzdCBtZGwgbWRsX215dGFwIG15X3JlZ2V4IHRocmVhZF91dGlscykKKyMgQWRkIHRlc3RzIChs aW5rIHRoZW0gd2l0aCBndW5pdCBsaWJyYXJ5KSAKK1NFVChURVNUUworICBib3VuZGVkX3F1ZXVl CisgIGRidWcKKyAgbWRsCisgIG1kbF9teXRhcAorICBteV9yZWdleAorICBzcWxfbGlzdAorICB0 aHJlYWRfdXRpbHMKKyAgKQorCiBGT1JFQUNIKHRlc3QgJHtURVNUU30pCiAgIEFERF9FWEVDVVRB QkxFKCR7dGVzdH0tdCAke3Rlc3R9LXQuY2MpCiAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke3Rl c3R9LXQgZ3VuaXQgc3FsZ3VuaXRsaWIgc3RyaW5ncyBkYnVnIHJlZ2V4KQoKPT09IGFkZGVkIGZp bGUgJ3VuaXR0ZXN0L2d1bml0L2JvdW5kZWRfcXVldWUtdC5jYycKLS0tIGEvdW5pdHRlc3QvZ3Vu aXQvYm91bmRlZF9xdWV1ZS10LmNjCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvdW5p dHRlc3QvZ3VuaXQvYm91bmRlZF9xdWV1ZS10LmNjCTIwMTAtMTEtMjkgMTE6MjE6MjIgKzAwMDAK QEAgLTAsMCArMSw0MDMgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMCwgT3JhY2xlIGFuZC9vciBp dHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC b3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgKi8KKworLy8gRmlyc3QgaW5jbHVkZSAodGhlIGdl bmVyYXRlZCkgbXlfY29uZmlnLmgsIHRvIGdldCBjb3JyZWN0IHBsYXRmb3JtIGRlZmluZXMsCisv LyB0aGVuIGd0ZXN0LmggKGJlZm9yZSBhbnkgb3RoZXIgTXlTUUwgaGVhZGVycyksIHRvIGF2b2lk IG1pbigpIG1hY3JvcyBldGMgLi4uCisjaW5jbHVkZSAibXlfY29uZmlnLmgiCisjaW5jbHVkZSA8 Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RkZGVmLmg+ CisKKyNpbmNsdWRlICJib3VuZGVkX3F1ZXVlLmgiCisjaW5jbHVkZSAibXlfc3lzLmgiCisKK25h bWVzcGFjZSB7CisKK2NvbnN0IGludCBudW1fZWxlbWVudHM9IDE0OworCisvLyBBIHNpbXBsZSBo ZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGFycmF5IHNpemUuCit0ZW1wbGF0ZSA8Y2xhc3Mg VCwgaW50IHNpemU+CitpbnQgYXJyYXlfc2l6ZShjb25zdCBUICgmKVtzaXplXSkKK3sKKyAgcmV0 dXJuIHNpemU7Cit9CisKKworLyoKKyAgRWxlbWVudHMgdG8gYmUgc29ydGVkIGJ5IHRlc3RzIGJl bG93LgorICBXZSBwdXQgc29tZSBkYXRhIGluIGZyb250IG9mICd2YWwnIHRvIHZlcmlmeSAod2hl biBkZWJ1Z2dpbmcpCisgIHRoYXQgYWxsIHRoZSByZWludGVycHJldF9jYXN0cyBpbnZvbHZlZCB3 aGVuIHVzaW5nIFFVRVVFIGFyZSBjb3JyZWN0LgorKi8KK3N0cnVjdCBUZXN0X2VsZW1lbnQKK3sK KyAgVGVzdF9lbGVtZW50KCkgICAgICB7ICp0aGlzPSAtMTsgfQorICBUZXN0X2VsZW1lbnQoaW50 IGkpIHsgKnRoaXM9IGk7IH0KKworICBUZXN0X2VsZW1lbnQgJm9wZXJhdG9yPShpbnQgaSkKKyAg eworICAgIHZhbD0gaTsKKyAgICBzbnByaW50Zih0ZXh0LCBhcnJheV9zaXplKHRleHQpLCAiJTRk IiwgaSk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgY2hhciB0ZXh0WzhdOyAvLyBTb21l IGRhdGEuCisgIGludCAgdmFsOyAgICAgLy8gVGhlIHZhbHVlIHdlIHVzZSBmb3IgZ2VuZXJhdGlu ZyB0aGUga2V5LgorfTsKKworCisvKgorICBUaGUga2V5LCB3aGljaCBpcyBhY3R1YWxseSBzb3J0 ZWQgYnkgcXVldWVfeHh4KCkgZnVuY3Rpb25zLgorICBXZSBzb3J0IG9uIHRoZSBrZXkgb25seS4K KyAqLworc3RydWN0IFRlc3Rfa2V5Cit7CisgIFRlc3Rfa2V5KCkgOiBlbGVtZW50KE5VTEwpLCBr ZXkoLTEpIHt9CisKKyAgVGVzdF9lbGVtZW50ICplbGVtZW50OyAvLyBUaGUgYWN0dWFsIGRhdGEg ZWxlbWVudC4KKyAgaW50ICAgICAgICAgICBrZXk7ICAgICAvLyBUaGUgZ2VuZXJhdGVkIGtleSBm b3IgdGhlIGRhdGEgZWxlbWVudC4KK307CisKKworLyoKKyAgQ29tcGFyaXNvbiBmdW5jdGlvbiBm b3IgVGVzdF9rZXkgb2JqZWN0cy4KKyAqLworaW50IHRlc3Rfa2V5X2NvbXBhcmUoc2l6ZV90ICpj bXBfYXJnLCBUZXN0X2tleSAqKmEsIFRlc3Rfa2V5ICoqYikKK3sKKyAgRVhQRUNUX0VRKCpjbXBf YXJnLCBzaXplb2YoaW50KSk7CisKKyAgaW50IGFfbnVtPSAoKmEpLT5rZXk7CisgIGludCBiX251 bT0gKCpiKS0+a2V5OworCisgIGlmIChhX251bSA+IGJfbnVtKQorICAgIHJldHVybiArMTsKKyAg aWYgKGFfbnVtIDwgYl9udW0pCisgICAgcmV0dXJuIC0xOworICByZXR1cm4gMDsKK30KKworCisv KgorICBHZW5lcmF0ZXMgYSBUZXN0X2tleSBmb3IgYSBnaXZlbiBUZXN0X2VsZW1lbnQuCisgKi8K K3ZvaWQgdGVzdF9rZXltYWtlcihTb3J0X3BhcmFtICpzcCwgVGVzdF9rZXkgKmtleSwgVGVzdF9l bGVtZW50ICplbGVtZW50KQoreworICBrZXktPmVsZW1lbnQ9IGVsZW1lbnQ7CisgIGtleS0+a2V5 PSBlbGVtZW50LT52YWw7Cit9CisKKworLyoKKyAgQSBzdHJ1Y3QgdG8gd3JhcCB0aGUgYWN0dWFs IGtleXMsIGFuZCBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGUga2V5cy4KKyAqLwordGVtcGxh dGU8aW50IHN6LCB0eXBlbmFtZSBLZXlfdHlwZT4KK3N0cnVjdCBLZXlfY29udGFpbmVyCit7Cisg IEtleV9jb250YWluZXIoKQorICB7CisgICAgZm9yIChpbnQgaXg9IDA7IGl4IDw9IHN6OyArK2l4 KQorICAgICAga2V5X3B0cnNbaXhdPSAma2V5X2RhdGFbaXhdOworICB9CisKKyAgS2V5X3R5cGUg KmtleV9wdHJzW3N6KzFdOworICBLZXlfdHlwZSAga2V5X2RhdGFbc3orMV07Cit9OworCisKK2Ns YXNzIEJvdW5kZWRRdWV1ZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0Cit7Citwcm90ZWN0 ZWQ6CisgIEJvdW5kZWRRdWV1ZVRlc3QoKSA6IG1fa2V5X3NpemUoc2l6ZW9mKGludCkpCisgIHsK KyAgfQorCisgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgIHsKKyAgICBpbnQgaXg7CisgICAgZm9y IChpeD0wOyBpeCA8IGFycmF5X3NpemUobV90ZXN0X2RhdGEpOyArK2l4KQorICAgICAgbV90ZXN0 X2RhdGFbaXhdPSBpeDsKKyAgICBzdGQ6OnJhbmRvbV9zaHVmZmxlKCZtX3Rlc3RfZGF0YVswXSwg Jm1fdGVzdF9kYXRhW2FycmF5X3NpemUobV90ZXN0X2RhdGEpXSk7CisgIH0KKworICAvLyBLZXkg cG9pbnRlcnMgYW5kIGRhdGEsIHVzZWQgYnkgdGhlIHF1ZXVlX3h4eCgpIGZ1bmN0aW9ucy4KKyAg S2V5X2NvbnRhaW5lcjxudW1fZWxlbWVudHMgLyAyLCBUZXN0X2tleT4gbV9rZXlzOworCisgIC8v IFNvbWUgcmFuZG9tIGludHB1dCBkYXRhLCB0byBiZSBzb3J0ZWQuCisgIFRlc3RfZWxlbWVudCAg bV90ZXN0X2RhdGFbbnVtX2VsZW1lbnRzXTsKKworICBzaXplX3QgbV9rZXlfc2l6ZTsKKyAgQm91 bmRlZF9xdWV1ZTxUZXN0X2VsZW1lbnQsIFRlc3Rfa2V5PiBtX3F1ZXVlOworcHJpdmF0ZToKKyAg R1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhCb3VuZGVkUXVldWVUZXN0KTsKK307CisK KworLy8gR29vZ2xlIFRlc3QgcmVjb21tZW5kcyBEZWF0aFRlc3Qgc3VmZml4IGZvciBjbGFzc2Vz IHVzZWQgaW4gZGVhdGggdGVzdHMuCit0eXBlZGVmIEJvdW5kZWRRdWV1ZVRlc3QgQm91bmRlZFF1 ZXVlRGVhdGhUZXN0OworCisjaWYgIWRlZmluZWQoREJVR19PRkYpCisvKgorICBWZXJpZmllcyB0 aGF0IHdlIERCVUdfQVNTRVJUIGlmIHRyeWluZyB0byBwdXNoIHRvIGFuIHVuLWluaXRpYWxpemVk IHF1ZXVlLgorICovCitURVNUX0YoQm91bmRlZFF1ZXVlRGVhdGhUZXN0LCBkaWVfaWZfbm90X2lu aXRpYWxpemVkKQoreworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUg PSAidGhyZWFkc2FmZSI7CisgIFRlc3RfZWxlbWVudCBmb289IDE7CisgIEVYUEVDVF9ERUFUSF9J Rl9TVVBQT1JURUQobV9xdWV1ZS5wdXNoKCZmb28pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIuKkFzc2VydGlvbiAuKmlzX2luaXRpYWxpemVkLioiKTsKK30KKyNlbmRpZiAgLy8gIWRl ZmluZWQoREJVR19PRkYpCisKKworLyoKKyAgVmVyaWZpZXMgdGhhdCBjb25zdHJ1Y3QsIGluaXRp YWxpemUsIGRlc3Ryb3kgd29ya3MuCisgKi8KK1RFU1RfRihCb3VuZGVkUXVldWVUZXN0LCBjb25z dHJ1Y3RfYW5kX2Rlc3RydWN0KQoreworICBFWFBFQ1RfRVEoMCwgbV9xdWV1ZS5pbml0KG51bV9l bGVtZW50cy8yLCAwLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfa2V5 X2NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9rZXlfc2l6ZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdGVzdF9rZXltYWtlciwgTlVMTCwgbV9rZXlzLmtleV9w dHJzKSk7Cit9CisKKworLyoKKyAgVmVyaWZpZXMgdGhhdCB3ZSByZWplY3QgdG9vIGxhcmdlIHF1 ZXVlcy4KKyAqLworVEVTVF9GKEJvdW5kZWRRdWV1ZVRlc3QsIHRvb19tYW55X2VsZW1lbnRzKQor eworICBFWFBFQ1RfRVEoMSwgbV9xdWV1ZS5pbml0KFVJTlRfTUFYLCAwLCB0cnVlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfa2V5X2NvbXBhcmUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbV9rZXlfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGVz dF9rZXltYWtlciwgTlVMTCwgbV9rZXlzLmtleV9wdHJzKSk7CisgIEVYUEVDVF9FUSgxLCBtX3F1 ZXVlLmluaXQoVUlOVF9NQVggLSAxLCAwLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRlc3Rfa2V5X2NvbXBhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9rZXlf c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGVzdF9rZXltYWtlciwgTlVMTCwg bV9rZXlzLmtleV9wdHJzKSk7Cit9CisKKworLyoKKyAgVmVyaWZpZXMgdGhhdCBwdXNoIGFuZCBi b3VuZGVkIHNpemUgd29ya3MsIGFuZCB0aGF0IHBvcCgpIGdpdmVzIHNvcnRlZCBvcmRlci4KKyAq LworVEVTVF9GKEJvdW5kZWRRdWV1ZVRlc3QsIHB1c2hfYW5kX3BvcCkKK3sKKyAgRVhQRUNUX0VR KDAsIG1fcXVldWUuaW5pdChudW1fZWxlbWVudHMvMiwgMCwgdHJ1ZSwgdGVzdF9rZXlfY29tcGFy ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2tleV9zaXplLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ0ZXN0X2tleW1ha2VyLCBOVUxMLCBtX2tleXMua2V5X3B0cnMpKTsK KyAgZm9yIChpbnQgaXg9IDA7IGl4IDwgYXJyYXlfc2l6ZShtX3Rlc3RfZGF0YSk7ICsraXgpCisg IHsKKyAgICBtX3F1ZXVlLnB1c2goJm1fdGVzdF9kYXRhW2l4XSk7CisgIH0KKyAgLy8gV2UgZXhw ZWN0IHRoZSBxdWV1ZSB0byBjb250YWluIFswIC4uIG4tMV0KKyAgd2hpbGUgKG1fcXVldWUubnVt X2VsZW1lbnRzKCkgPiAwKQorICB7CisgICAgVGVzdF9rZXkgKip0b3A9IG1fcXVldWUucG9wKCk7 CisgICAgaW50IGV4cGVjdGVkX2tleV92YWw9IG1fcXVldWUubnVtX2VsZW1lbnRzKCk7CisgICAg aW50IGtleV92YWw9ICgqdG9wKS0+a2V5OworICAgIEVYUEVDVF9FUShleHBlY3RlZF9rZXlfdmFs LCBrZXlfdmFsKTsKKyAgICBUZXN0X2VsZW1lbnQgKmVsZW1lbnQ9ICgqdG9wKS0+ZWxlbWVudDsK KyAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfa2V5X3ZhbCwgZWxlbWVudC0+dmFsKTsKKyAgfQorfQor CisKKy8qCisgIFZlcmlmaWVzIHRoYXQgcHVzaCwgd2l0aCBib3VuZGVkIHNpemUsIGZvbGxvd2Vk IGJ5IHNvcnQoKSB3b3Jrcy4KKyAqLworVEVTVF9GKEJvdW5kZWRRdWV1ZVRlc3QsIGluc2VydF9h bmRfc29ydCkKK3sKKyAgRVhQRUNUX0VRKDAsIG1fcXVldWUuaW5pdChudW1fZWxlbWVudHMvMiwg MCwgdHJ1ZSwgdGVzdF9rZXlfY29tcGFyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt X2tleV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXN0X2tleW1ha2VyLCBO VUxMLCBtX2tleXMua2V5X3B0cnMpKTsKKyAgZm9yIChpbnQgaXg9IDA7IGl4IDwgYXJyYXlfc2l6 ZShtX3Rlc3RfZGF0YSk7ICsraXgpCisgIHsKKyAgICBtX3F1ZXVlLnB1c2goJm1fdGVzdF9kYXRh W2l4XSk7CisgIH0KKworICB1Y2hhciAqYmFzZT0gICh1Y2hhciopICZtX2tleXMua2V5X3B0cnNb MF07CisgIHNpemVfdCBzaXplPSAgc2l6ZW9mKFRlc3Rfa2V5KTsKKyAgLy8gV2Ugc29ydCBvdXIg a2V5cyBhcyBzdHJpbmdzLCBzbyBlcmFzZSBhbGwgdGhlIGVsZW1lbnQgcG9pbnRlcnMgZmlyc3Qu CisgIGZvciAoaW50IGlpPSAwOyBpaSA8IGFycmF5X3NpemUobV9rZXlzLmtleV9kYXRhKTsgKytp aSkKKyAgICBtX2tleXMua2V5X2RhdGFbaWldLmVsZW1lbnQ9IE5VTEw7CisKKyAgbXlfc3RyaW5n X3B0cl9zb3J0KGJhc2UsIGFycmF5X3NpemUobV9rZXlzLmtleV9wdHJzKSwgc2l6ZSk7CisgIGZv ciAoaW50IGlpPSAwOyBpaSA8IG51bV9lbGVtZW50cy8yOyArK2lpKQorICB7CisgICAgVGVzdF9r ZXkgKnNvcnRlZF9rZXk9IG1fa2V5cy5rZXlfcHRyc1tpaV07CisgICAgRVhQRUNUX0VRKGlpLCBz b3J0ZWRfa2V5LT5rZXkpOworICB9Cit9CisKKworLyoKKyAgQSB0ZXN0IG9mIHRoZSBmdW5jdGlv biBnZXRfbWVyZ2VfbWFueV9idWZmc19jb3N0X2Zhc3QoKQorICovCitURVNUKENvc3RFc3RpbWF0 aW9uVGVzdCwgbWVyZ2VfbWFueV9idWZmKQoreworICBoYV9yb3dzIG51bV9yb3dzPSA1MTI7Cisg IHVsb25nIG51bV9rZXlzPSAxMDA7CisgIHVsb25nIHJvd19sZW5naHQ9IDEwMDsKKyAgZG91Ymxl IHByZXZfY29zdD0gMC4wOworICB3aGlsZSAobnVtX3Jvd3MgPD0gTUFYX0ZJTEVfU0laRS80KQor ICB7CisgICAgZG91YmxlIG1lcmdlX2Nvc3Q9CisgICAgICBnZXRfbWVyZ2VfbWFueV9idWZmc19j b3N0X2Zhc3QobnVtX3Jvd3MsIG51bV9rZXlzLCByb3dfbGVuZ2h0KTsKKyAgICBFWFBFQ1RfTFQo MC4wLCBtZXJnZV9jb3N0KTsKKyAgICBFWFBFQ1RfTFQocHJldl9jb3N0LCBtZXJnZV9jb3N0KTsK KyAgICBudW1fcm93cyo9IDI7CisgICAgcHJldl9jb3N0PSBtZXJnZV9jb3N0OworICB9Cit9CisK KworLyoKKyAgQ29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50ZWdlcnMuCisgKi8KK2ludCBpbnRf cHRyX2NvbXBhcmUoc2l6ZV90ICpjbXBfYXJnLCBpbnQgKiphLCBpbnQgKipiKQoreworICBFWFBF Q1RfRVEoKmNtcF9hcmcsIHNpemVvZihpbnQpKTsKKworICBpbnQgYV9udW09ICoqYTsKKyAgaW50 IGJfbnVtPSAqKmI7CisKKyAgaWYgKGFfbnVtID4gYl9udW0pCisgICAgcmV0dXJuICsxOworICBp ZiAoYV9udW0gPCBiX251bSkKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiAwOworfQorCisKKy8q CisgIEdlbmVyYXRlcyBhbiBpbnRlZ2VyIGtleSBmb3IgYSBnaXZlbiBpbnRlZ2VyIGVsZW1lbnQu CisgKi8KK3ZvaWQgaW50X2tleW1ha2VyKFNvcnRfcGFyYW0gKnNwLCBpbnQgKnRvLCBpbnQgKmZy b20pCit7CisgIG1lbWNweSh0bywgZnJvbSwgc2l6ZW9mKGludCkpOworfQorCisKKy8qCisgIFNv bWUgYmFzaWMgcGVyZm9ybWFuY2UgdGVzdGluZywgdG8gY29tcHV0ZSB0aGUgb3ZlcmhlYWQgb2Yg Qm91bmRlZF9xdWV1ZS4KKyAgUnVuIHRoZSB3aXRoICdib3VuZGVkX3F1ZXVlLXQgLS1kaXNhYmxl LXRhcC1vdXRwdXQnIHRvIHNlZSB0aGUKKyAgbWlsbGlzZWNvbmQgb3V0cHV0IGZyb20gR29vZ2xl IFRlc3QuCisgKi8KK2NvbnN0IGludCBudW1fcm93cz0gMTAwMDA7Citjb25zdCBpbnQgcm93X2xp bWl0PSAxMDA7Citjb25zdCBpbnQgbnVtX2l0ZXJhdGlvbnM9IDEwMDA7CisKK2NsYXNzIFBlcmZU ZXN0U21hbGwgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0Cit7CitwdWJsaWM6CisgIC8qCisgICAg VGhlIGV4dHJhIG92ZXJoZWFkIG9mIG1hbGxvYy9mcmVlIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBt ZWFzdXJlbWVudCwKKyAgICBzbyB3ZSBkbyBub3QgZGVmaW5lIHRoZSBrZXkgY29udGFpbmVyIGFz IGEgbWVtYmVyIGhlcmUuCisgICovCisgIHR5cGVkZWYgS2V5X2NvbnRhaW5lcjxyb3dfbGltaXQs IGludD4gQ29udGFpbmVyOworICBlbnVtIHsgbGltaXQ9IHJvd19saW1pdCB9OworfTsKKworY2xh c3MgUGVyZlRlc3RMYXJnZSA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QKK3sKK3B1YmxpYzoKKyAg LyoKKyAgICBUaGUgZXh0cmEgb3ZlcmhlYWQgb2YgbWFsbG9jL2ZyZWUgc2hvdWxkIGJlIHBhcnQg b2YgdGhlIG1lYXN1cmVtZW50LAorICAgIHNvIHdlIGRvIG5vdCBkZWZpbmUgdGhlIGtleSBjb250 YWluZXIgYXMgYSBtZW1iZXIgaGVyZS4KKyAgKi8KKyAgdHlwZWRlZiBLZXlfY29udGFpbmVyPG51 bV9yb3dzLCBpbnQ+IENvbnRhaW5lcjsKKyAgZW51bSB7IGxpbWl0PSBudW1fcm93cyB9OworfTsK KworCit0ZW1wbGF0ZSA8aW50IGxpbWl0Pgordm9pZCBpbnNlcnRfYW5kX3NvcnQoKQoreworICB0 eXBlZGVmIEtleV9jb250YWluZXI8bGltaXQsIGludD4gQ29udGFpbmVyOworICBmb3IgKGludCBp dD0gMDsgaXQgPCBudW1faXRlcmF0aW9uczsgKytpdCkKKyAgeworICAgIENvbnRhaW5lciAqa2V5 cz0gbmV3IENvbnRhaW5lcjsKKyAgICBzcmFuZCgwKTsKKyAgICBCb3VuZGVkX3F1ZXVlPGludCwg aW50PiBxdWV1ZTsKKyAgICBFWFBFQ1RfRVEoMCwgcXVldWUuaW5pdChsaW1pdCwgMCwgdHJ1ZSwg aW50X3B0cl9jb21wYXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnQp LCAmaW50X2tleW1ha2VyLCBOVUxMLCBrZXlzLT5rZXlfcHRycykpOworICAgIGZvciAoaW50IGl4 PSAwOyBpeCA8IGxpbWl0OyArK2l4KQorICAgIHsKKyAgICAgIGludCBkYXRhPSByYW5kKCk7Cisg ICAgICBxdWV1ZS5wdXNoKCZkYXRhKTsKKyAgICB9CisgICAgbXlfc3RyaW5nX3B0cl9zb3J0KCh1 Y2hhciopICZrZXlzLT5rZXlfcHRyc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgcXVldWUu bnVtX2VsZW1lbnRzKCksIHNpemVvZihpbnQpKTsKKyAgICBkZWxldGUga2V5czsKKyAgfQorfQor CisKKy8qCisgIFRlc3Qgd2l0aCBCb3VuZGVkX3F1ZXVlIHNpemUgPT0gPGxpbWl0Pi4KKyAqLwor VEVTVF9GKFBlcmZUZXN0U21hbGwsIGluc2VydF9hbmRfc29ydCkKK3sKKyAgaW5zZXJ0X2FuZF9z b3J0PGxpbWl0PigpOworfQorCisKKy8qCisgIFRlc3Qgd2l0aCBCb3VuZGVkX3F1ZXVlIHNpemUg PT0gPG51bWJlciBvZiByb3dzPgorICovCitURVNUX0YoUGVyZlRlc3RMYXJnZSwgaW5zZXJ0X2Fu ZF9zb3J0KQoreworICBpbnNlcnRfYW5kX3NvcnQ8bGltaXQ+KCk7Cit9CisKKworLyoKKyAgVGVz dCB3aXRob3V0IGJvdW5kZWQgcXVldWUsIGkuZS4gaW5zZXJ0IGtleXMgaW50byBhcnJheSwgYW5k IHNvcnQgaXQuCisgKi8KK1RFU1RfRihQZXJmVGVzdExhcmdlLCB3aXRob3V0X3F1ZXVlKQorewor ICBmb3IgKGludCBpdD0gMDsgaXQgPCBudW1faXRlcmF0aW9uczsgKytpdCkKKyAgeworICAgIENv bnRhaW5lciAqa2V5cz0gbmV3IENvbnRhaW5lcjsKKyAgICBzcmFuZCgwKTsKKyAgICBmb3IgKGlu dCBpeD0gMDsgaXggPCBsaW1pdDsgKytpeCkKKyAgICB7CisgICAgICBpbnQgZGF0YT0gcmFuZCgp OworICAgICAga2V5cy0+a2V5X2RhdGFbaXhdPSBkYXRhOworICAgIH0KKyAgICBteV9zdHJpbmdf cHRyX3NvcnQoKHVjaGFyKikgJmtleXMtPmtleV9wdHJzWzBdLCBsaW1pdCwgc2l6ZW9mKGludCkp OworICAgIGRlbGV0ZSBrZXlzOworICB9Cit9CisKKworLyoKKyAgQ29tcHV0ZXMgdGhlIG92ZXJo ZWFkIG9mIHNldHRpbmcgdXAgc29ydCBhcnJheXMsIGFuZCByYW5kKCkgY2FsbHMuCisgKi8KK1RF U1RfRihQZXJmVGVzdExhcmdlLCBub19zb3J0aW5nKQoreworICBmb3IgKGludCBpdD0gMDsgaXQg PCBudW1faXRlcmF0aW9uczsgKytpdCkKKyAgeworICAgIENvbnRhaW5lciAqa2V5cz0gbmV3IENv bnRhaW5lcjsKKyAgICBzcmFuZCgwKTsKKyAgICBmb3IgKGludCBpeD0gMDsgaXggPCBsaW1pdDsg KytpeCkKKyAgICB7CisgICAgICBpbnQgZGF0YT0gcmFuZCgpOworICAgICAga2V5cy0+a2V5X2Rh dGFbaXhdPSBkYXRhOworICAgIH0KKyAgICBkZWxldGUga2V5czsKKyAgfQorfQorCit9ICAvLyBu YW1lc3BhY2UKCg== --===============8164661560481186406== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/tor.didriksen@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: tor.didriksen@stripped\ # 1gcohnwxp2wpjkvp # target_branch: file:///export/home/didrik/repo/next-mr-opt-team-\ # wl1393-merge/ # testament_sha1: db81664ef800cd640494bd47755bc67d5f5a229e # timestamp: 2010-11-29 12:21:29 +0100 # base_revision_id: tor.didriksen@stripped\ # w5tkygw5e5olhqs7 # # Begin bundle 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 --===============8164661560481186406==--