Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kzgNN-0001Bf-2c for pgsql-hackers@arkaria.postgresql.org; Wed, 13 Jan 2021 13:39:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kzgNM-0004ma-0s for pgsql-hackers@arkaria.postgresql.org; Wed, 13 Jan 2021 13:39:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kzgNL-0004mT-C7 for pgsql-hackers@lists.postgresql.org; Wed, 13 Jan 2021 13:39:51 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kzgNC-0002iK-US for pgsql-hackers@lists.postgresql.org; Wed, 13 Jan 2021 13:39:50 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id B819921C234A; Wed, 13 Jan 2021 16:39:40 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1610545180; bh=cxd1BYLtSB6CzrywN6w4z83uqxgtfkwL7RWAItTVZes=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=G9S3z1FEoKCbSLs/Z9AcLxb2TaIeEi5Z32E1PUX6MwdXrWA6Bd/2x+LqpDEcWxK+S OahTOBKNUQ+fnJY6tLcEN/tEwXIqY+uJxFqbo1lGbTeLd1K2Yx3xY2vTPwF/kXAu2c XuVTi/KkeSVymF0+6M8Iw4o7EhS1kXbM/TPIyVEA= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_e92ca95ba97514780925706f5c547b32" Content-Transfer-Encoding: 7bit Date: Wed, 13 Jan 2021 16:39:40 +0300 From: Alexey Kondratov To: michael@paquier.xyz Cc: Justin Pryzby , Alvaro Herrera , Peter Eisentraut , Masahiko Sawada , Steve Singer , pgsql-hackers@lists.postgresql.org, Robert Haas , Alexander Korotkov , Masahiko Sawada , Jose Luis Tallon Subject: Re: Allow CLUSTER, VACUUM FULL and REINDEX to change tablespace on the fly In-Reply-To: References: <7ec67c56-2377-cd05-51a0-691104404abe@enterprisedb.com> <20201216004517.GA18498@alvherre.pgsql> <20201222083204.GL30237@telsasoft.com> <20201222211537.GO30237@telsasoft.com> <2f88c198e80e7352eb03de44017b929a@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <42816383349a44e95558875a0962a0a8@postgrespro.ru> X-Sender: a.kondratov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_e92ca95ba97514780925706f5c547b32 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2021-01-13 14:34, Michael Paquier wrote: > On Wed, Jan 13, 2021 at 05:22:49PM +0900, Michael Paquier wrote: >> Yeah, that makes sense. I'll send an updated patch based on that. > > And here you go as per the attached. I don't think that there was > anything remaining on my radar. This version still needs to be > indented properly though. > > Thoughts? > Thanks. + bits32 options; /* bitmask of CLUSTEROPT_* */ This should say '/* bitmask of CLUOPT_* */', I guess, since there are only CLUOPT's defined. Otherwise, everything looks as per discussed upthread. By the way, something went wrong with the last email subject, so I have changed it back to the original in this response. I also attached your patch (with only this CLUOPT_* correction) to keep it in the thread for sure. Although, postgresql.org's web archive is clever enough to link your email to the same thread even with different subject. Regards -- Alexey Kondratov Postgres Professional https://www.postgrespro.com Russian Postgres Company --=_e92ca95ba97514780925706f5c547b32 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=refactor-utility-opts-michael-6.patch Content-Disposition: attachment; filename=refactor-utility-opts-michael-6.patch; size=31429 ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvaW5kZXguaA0KaW5kZXggOTkwNGE3NjM4Ny4uNDNjZmRlYWE2YiAxMDA2NDQNCi0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaA0KKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9p bmRleC5oDQpAQCAtMzAsMTMgKzMwLDE2IEBAIHR5cGVkZWYgZW51bQ0KIH0gSW5kZXhTdGF0ZUZs YWdzQWN0aW9uOw0KIA0KIC8qIG9wdGlvbnMgZm9yIFJFSU5ERVggKi8NCi10eXBlZGVmIGVudW0g UmVpbmRleE9wdGlvbg0KK3R5cGVkZWYgc3RydWN0IFJlaW5kZXhQYXJhbXMNCiB7DQotCVJFSU5E RVhPUFRfVkVSQk9TRSA9IDEgPDwgMCwJLyogcHJpbnQgcHJvZ3Jlc3MgaW5mbyAqLw0KLQlSRUlO REVYT1BUX1JFUE9SVF9QUk9HUkVTUyA9IDEgPDwgMSwJLyogcmVwb3J0IHBnc3RhdCBwcm9ncmVz cyAqLw0KLQlSRUlOREVYT1BUX01JU1NJTkdfT0sgPSAxIDw8IDIsIC8qIHNraXAgbWlzc2luZyBy ZWxhdGlvbnMgKi8NCi0JUkVJTkRFWE9QVF9DT05DVVJSRU5UTFkgPSAxIDw8IDMJLyogY29uY3Vy cmVudCBtb2RlICovDQotfSBSZWluZGV4T3B0aW9uOw0KKwliaXRzMzIJCW9wdGlvbnM7CQkJLyog Yml0bWFzayBvZiBSRUlOREVYT1BUXyogKi8NCit9IFJlaW5kZXhQYXJhbXM7DQorDQorLyogZmxh ZyBiaXRzIGZvciBSZWluZGV4UGFyYW1zLT5mbGFncyAqLw0KKyNkZWZpbmUgUkVJTkRFWE9QVF9W RVJCT1NFCQkweDAxCS8qIHByaW50IHByb2dyZXNzIGluZm8gKi8NCisjZGVmaW5lIFJFSU5ERVhP UFRfUkVQT1JUX1BST0dSRVNTIDB4MDIgLyogcmVwb3J0IHBnc3RhdCBwcm9ncmVzcyAqLw0KKyNk ZWZpbmUgUkVJTkRFWE9QVF9NSVNTSU5HX09LIAkweDA0CS8qIHNraXAgbWlzc2luZyByZWxhdGlv bnMgKi8NCisjZGVmaW5lIFJFSU5ERVhPUFRfQ09OQ1VSUkVOVExZCTB4MDgJLyogY29uY3VycmVu dCBtb2RlICovDQogDQogLyogc3RhdGUgaW5mbyBmb3IgdmFsaWRhdGVfaW5kZXggYnVsa2RlbGV0 ZSBjYWxsYmFjayAqLw0KIHR5cGVkZWYgc3RydWN0IFZhbGlkYXRlSW5kZXhTdGF0ZQ0KQEAgLTE0 Niw3ICsxNDksNyBAQCBleHRlcm4gdm9pZCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4 SWQsIEluZGV4U3RhdGVGbGFnc0FjdGlvbiBhY3Rpb24pOw0KIGV4dGVybiBPaWQJSW5kZXhHZXRS ZWxhdGlvbihPaWQgaW5kZXhJZCwgYm9vbCBtaXNzaW5nX29rKTsNCiANCiBleHRlcm4gdm9pZCBy ZWluZGV4X2luZGV4KE9pZCBpbmRleElkLCBib29sIHNraXBfY29uc3RyYWludF9jaGVja3MsDQot CQkJCQkJICBjaGFyIHJlbHBlcnNpc3RlbmNlLCBpbnQgb3B0aW9ucyk7DQorCQkJCQkJICBjaGFy IHJlbHBlcnNpc3RlbmNlLCBSZWluZGV4UGFyYW1zICpwYXJhbXMpOw0KIA0KIC8qIEZsYWcgYml0 cyBmb3IgcmVpbmRleF9yZWxhdGlvbigpOiAqLw0KICNkZWZpbmUgUkVJTkRFWF9SRUxfUFJPQ0VT U19UT0FTVAkJCTB4MDENCkBAIC0xNTUsNyArMTU4LDcgQEAgZXh0ZXJuIHZvaWQgcmVpbmRleF9p bmRleChPaWQgaW5kZXhJZCwgYm9vbCBza2lwX2NvbnN0cmFpbnRfY2hlY2tzLA0KICNkZWZpbmUg UkVJTkRFWF9SRUxfRk9SQ0VfSU5ERVhFU19VTkxPR0dFRAkweDA4DQogI2RlZmluZSBSRUlOREVY X1JFTF9GT1JDRV9JTkRFWEVTX1BFUk1BTkVOVCAweDEwDQogDQotZXh0ZXJuIGJvb2wgcmVpbmRl eF9yZWxhdGlvbihPaWQgcmVsaWQsIGludCBmbGFncywgaW50IG9wdGlvbnMpOw0KK2V4dGVybiBi b29sIHJlaW5kZXhfcmVsYXRpb24oT2lkIHJlbGlkLCBpbnQgZmxhZ3MsIFJlaW5kZXhQYXJhbXMg KnBhcmFtcyk7DQogDQogZXh0ZXJuIGJvb2wgUmVpbmRleElzUHJvY2Vzc2luZ0hlYXAoT2lkIGhl YXBPaWQpOw0KIGV4dGVybiBib29sIFJlaW5kZXhJc1Byb2Nlc3NpbmdJbmRleChPaWQgaW5kZXhP aWQpOw0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaA0KaW5kZXggNDAxYTA4MjdhZS4uMTI0NWQ5NDRkYyAx MDA2NDQNCi0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaA0KKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvY2x1c3Rlci5oDQpAQCAtMTgsMTYgKzE4LDE3IEBADQogI2luY2x1ZGUg InN0b3JhZ2UvbG9jay5oIg0KICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIg0KIA0KLQ0KIC8q IG9wdGlvbnMgZm9yIENMVVNURVIgKi8NCi10eXBlZGVmIGVudW0gQ2x1c3Rlck9wdGlvbg0KKyNk ZWZpbmUgQ0xVT1BUX1JFQ0hFQ0sgMHgwMQkJLyogcmVjaGVjayByZWxhdGlvbiBzdGF0ZSAqLw0K KyNkZWZpbmUgQ0xVT1BUX1ZFUkJPU0UgMHgwMgkJLyogcHJpbnQgcHJvZ3Jlc3MgaW5mbyAqLw0K Kw0KK3R5cGVkZWYgc3RydWN0IENsdXN0ZXJQYXJhbXMNCiB7DQotCUNMVU9QVF9SRUNIRUNLID0g MSA8PCAwLAkvKiByZWNoZWNrIHJlbGF0aW9uIHN0YXRlICovDQotCUNMVU9QVF9WRVJCT1NFID0g MSA8PCAxCQkvKiBwcmludCBwcm9ncmVzcyBpbmZvICovDQotfSBDbHVzdGVyT3B0aW9uOw0KKwli aXRzMzIJCW9wdGlvbnM7CQkJLyogYml0bWFzayBvZiBDTFVPUFRfKiAqLw0KK30gQ2x1c3RlclBh cmFtczsNCiANCiBleHRlcm4gdm9pZCBjbHVzdGVyKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ2x1c3Rl clN0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCk7DQotZXh0ZXJuIHZvaWQgY2x1c3Rlcl9yZWwo T2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQsIGludCBvcHRpb25zKTsNCitleHRlcm4gdm9pZCBj bHVzdGVyX3JlbChPaWQgdGFibGVPaWQsIE9pZCBpbmRleE9pZCwgQ2x1c3RlclBhcmFtcyAqcGFy YW1zKTsNCiBleHRlcm4gdm9pZCBjaGVja19pbmRleF9pc19jbHVzdGVyYWJsZShSZWxhdGlvbiBP bGRIZWFwLCBPaWQgaW5kZXhPaWQsDQogCQkJCQkJCQkJICAgYm9vbCByZWNoZWNrLCBMT0NLTU9E RSBsb2NrbW9kZSk7DQogZXh0ZXJuIHZvaWQgbWFya19pbmRleF9jbHVzdGVyZWQoUmVsYXRpb24g cmVsLCBPaWQgaW5kZXhPaWQsIGJvb2wgaXNfaW50ZXJuYWwpOw0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgN CmluZGV4IGUyZDJhNzdjYTQuLjkxMjgxZDZmOGUgMTAwNjQ0DQotLS0gYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9kZWZyZW0uaA0KKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgNCkBA IC0xNCw2ICsxNCw3IEBADQogI2lmbmRlZiBERUZSRU1fSA0KICNkZWZpbmUgREVGUkVNX0gNCiAN CisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIg0KICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFk ZHJlc3MuaCINCiAjaW5jbHVkZSAibm9kZXMvcGFyYW1zLmgiDQogI2luY2x1ZGUgInBhcnNlci9w YXJzZV9ub2RlLmgiDQpAQCAtMzQsMTEgKzM1LDcgQEAgZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVm aW5lSW5kZXgoT2lkIHJlbGF0aW9uSWQsDQogCQkJCQkJCQkgYm9vbCBjaGVja19ub3RfaW5fdXNl LA0KIAkJCQkJCQkJIGJvb2wgc2tpcF9idWlsZCwNCiAJCQkJCQkJCSBib29sIHF1aWV0KTsNCi1l eHRlcm4gaW50CVJlaW5kZXhQYXJzZU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBSZWluZGV4 U3RtdCAqc3RtdCk7DQotZXh0ZXJuIHZvaWQgUmVpbmRleEluZGV4KFJhbmdlVmFyICppbmRleFJl bGF0aW9uLCBpbnQgb3B0aW9ucywgYm9vbCBpc1RvcExldmVsKTsNCi1leHRlcm4gT2lkCVJlaW5k ZXhUYWJsZShSYW5nZVZhciAqcmVsYXRpb24sIGludCBvcHRpb25zLCBib29sIGlzVG9wTGV2ZWwp Ow0KLWV4dGVybiB2b2lkIFJlaW5kZXhNdWx0aXBsZVRhYmxlcyhjb25zdCBjaGFyICpvYmplY3RO YW1lLCBSZWluZGV4T2JqZWN0VHlwZSBvYmplY3RLaW5kLA0KLQkJCQkJCQkJICBpbnQgb3B0aW9u cyk7DQorZXh0ZXJuIHZvaWQgRXhlY1JlaW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLCBSZWluZGV4 U3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKTsNCiBleHRlcm4gY2hhciAqbWFrZU9iamVjdE5h bWUoY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNoYXIgKm5hbWUyLA0KIAkJCQkJCQljb25zdCBj aGFyICpsYWJlbCk7DQogZXh0ZXJuIGNoYXIgKkNob29zZVJlbGF0aW9uTmFtZShjb25zdCBjaGFy ICpuYW1lMSwgY29uc3QgY2hhciAqbmFtZTIsDQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvdmFjdXVtLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaA0KaW5kZXggODU3 NTA5Mjg3ZC4uMTkxY2JiZDAwNCAxMDA2NDQNCi0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Zh Y3V1bS5oDQorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaA0KQEAgLTE3NCwxNyAr MTc0LDE1IEBAIHR5cGVkZWYgc3RydWN0IFZhY0F0dHJTdGF0cw0KIAlpbnQJCQlyb3dzdHJpZGU7 DQogfSBWYWNBdHRyU3RhdHM7DQogDQotdHlwZWRlZiBlbnVtIFZhY3V1bU9wdGlvbg0KLXsNCi0J VkFDT1BUX1ZBQ1VVTSA9IDEgPDwgMCwJCS8qIGRvIFZBQ1VVTSAqLw0KLQlWQUNPUFRfQU5BTFla RSA9IDEgPDwgMSwJLyogZG8gQU5BTFlaRSAqLw0KLQlWQUNPUFRfVkVSQk9TRSA9IDEgPDwgMiwJ LyogcHJpbnQgcHJvZ3Jlc3MgaW5mbyAqLw0KLQlWQUNPUFRfRlJFRVpFID0gMSA8PCAzLAkJLyog RlJFRVpFIG9wdGlvbiAqLw0KLQlWQUNPUFRfRlVMTCA9IDEgPDwgNCwJCS8qIEZVTEwgKG5vbi1j b25jdXJyZW50KSB2YWN1dW0gKi8NCi0JVkFDT1BUX1NLSVBfTE9DS0VEID0gMSA8PCA1LAkvKiBz a2lwIGlmIGNhbm5vdCBnZXQgbG9jayAqLw0KLQlWQUNPUFRfU0tJUFRPQVNUID0gMSA8PCA2LAkv KiBkb24ndCBwcm9jZXNzIHRoZSBUT0FTVCB0YWJsZSwgaWYgYW55ICovDQotCVZBQ09QVF9ESVNB QkxFX1BBR0VfU0tJUFBJTkcgPSAxIDw8IDcJLyogZG9uJ3Qgc2tpcCBhbnkgcGFnZXMgKi8NCi19 IFZhY3V1bU9wdGlvbjsNCisvKiBmbGFnIGJpdHMgZm9yIFZhY3V1bVBhcmFtcy0+b3B0aW9ucyAq Lw0KKyNkZWZpbmUgVkFDT1BUX1ZBQ1VVTSAweDAxCQkvKiBkbyBWQUNVVU0gKi8NCisjZGVmaW5l IFZBQ09QVF9BTkFMWVpFIDB4MDIJCS8qIGRvIEFOQUxZWkUgKi8NCisjZGVmaW5lIFZBQ09QVF9W RVJCT1NFIDB4MDQJCS8qIHByaW50IHByb2dyZXNzIGluZm8gKi8NCisjZGVmaW5lIFZBQ09QVF9G UkVFWkUgMHgwOAkJLyogRlJFRVpFIG9wdGlvbiAqLw0KKyNkZWZpbmUgVkFDT1BUX0ZVTEwgMHgx MAkJLyogRlVMTCAobm9uLWNvbmN1cnJlbnQpIHZhY3V1bSAqLw0KKyNkZWZpbmUgVkFDT1BUX1NL SVBfTE9DS0VEIDB4MjAgLyogc2tpcCBpZiBjYW5ub3QgZ2V0IGxvY2sgKi8NCisjZGVmaW5lIFZB Q09QVF9TS0lQVE9BU1QgMHg0MAkvKiBkb24ndCBwcm9jZXNzIHRoZSBUT0FTVCB0YWJsZSwgaWYg YW55ICovDQorI2RlZmluZSBWQUNPUFRfRElTQUJMRV9QQUdFX1NLSVBQSU5HIDB4ODAJLyogZG9u J3Qgc2tpcCBhbnkgcGFnZXMgKi8NCiANCiAvKg0KICAqIEEgdGVybmFyeSB2YWx1ZSB1c2VkIGJ5 IHZhY3V1bSBwYXJhbWV0ZXJzLg0KQEAgLTIwNyw3ICsyMDUsNyBAQCB0eXBlZGVmIGVudW0gVmFj T3B0VGVybmFyeVZhbHVlDQogICovDQogdHlwZWRlZiBzdHJ1Y3QgVmFjdXVtUGFyYW1zDQogew0K LQlpbnQJCQlvcHRpb25zOwkJLyogYml0bWFzayBvZiBWYWN1dW1PcHRpb24gKi8NCisJYml0czMy CQlvcHRpb25zOwkJLyogYml0bWFzayBvZiBWQUNPUFRfKiAqLw0KIAlpbnQJCQlmcmVlemVfbWlu X2FnZTsgLyogbWluIGZyZWV6ZSBhZ2UsIC0xIHRvIHVzZSBkZWZhdWx0ICovDQogCWludAkJCWZy ZWV6ZV90YWJsZV9hZ2U7CS8qIGFnZSBhdCB3aGljaCB0byBzY2FuIHdob2xlIHRhYmxlICovDQog CWludAkJCW11bHRpeGFjdF9mcmVlemVfbWluX2FnZTsJLyogbWluIG11bHRpeGFjdCBmcmVlemUg YWdlLCAtMSB0bw0KQEAgLTI3NSw5ICsyNzMsMTAgQEAgZXh0ZXJuIHZvaWQgdmFjdXVtX3NldF94 aWRfbGltaXRzKFJlbGF0aW9uIHJlbCwNCiBleHRlcm4gdm9pZCB2YWNfdXBkYXRlX2RhdGZyb3pl bnhpZCh2b2lkKTsNCiBleHRlcm4gdm9pZCB2YWN1dW1fZGVsYXlfcG9pbnQodm9pZCk7DQogZXh0 ZXJuIGJvb2wgdmFjdXVtX2lzX3JlbGF0aW9uX293bmVyKE9pZCByZWxpZCwgRm9ybV9wZ19jbGFz cyByZWx0dXBsZSwNCi0JCQkJCQkJCQkgaW50IG9wdGlvbnMpOw0KKwkJCQkJCQkJCSBiaXRzMzIg b3B0aW9ucyk7DQogZXh0ZXJuIFJlbGF0aW9uIHZhY3V1bV9vcGVuX3JlbGF0aW9uKE9pZCByZWxp ZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLA0KLQkJCQkJCQkJCSBpbnQgb3B0aW9ucywgYm9vbCB2ZXJi b3NlLCBMT0NLTU9ERSBsbW9kZSk7DQorCQkJCQkJCQkJIGJpdHMzMiBvcHRpb25zLCBib29sIHZl cmJvc2UsDQorCQkJCQkJCQkJIExPQ0tNT0RFIGxtb2RlKTsNCiANCiAvKiBpbiBjb21tYW5kcy9h bmFseXplLmMgKi8NCiBleHRlcm4gdm9pZCBhbmFseXplX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFy ICpyZWxhdGlvbiwNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMNCmluZGV4IGNmZmJjMGFjMzguLjlkMmJlM2Q4ZGEg MTAwNjQ0DQotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMNCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvaW5kZXguYw0KQEAgLTM1OTQsNyArMzU5NCw3IEBAIEluZGV4R2V0UmVsYXRp b24oT2lkIGluZGV4SWQsIGJvb2wgbWlzc2luZ19vaykNCiAgKi8NCiB2b2lkDQogcmVpbmRleF9p bmRleChPaWQgaW5kZXhJZCwgYm9vbCBza2lwX2NvbnN0cmFpbnRfY2hlY2tzLCBjaGFyIHBlcnNp c3RlbmNlLA0KLQkJCSAgaW50IG9wdGlvbnMpDQorCQkJICBSZWluZGV4UGFyYW1zICpwYXJhbXMp DQogew0KIAlSZWxhdGlvbglpUmVsLA0KIAkJCQloZWFwUmVsYXRpb247DQpAQCAtMzYwMiw3ICsz NjAyLDcgQEAgcmVpbmRleF9pbmRleChPaWQgaW5kZXhJZCwgYm9vbCBza2lwX2NvbnN0cmFpbnRf Y2hlY2tzLCBjaGFyIHBlcnNpc3RlbmNlLA0KIAlJbmRleEluZm8gICppbmRleEluZm87DQogCXZv bGF0aWxlIGJvb2wgc2tpcHBlZF9jb25zdHJhaW50ID0gZmFsc2U7DQogCVBHUlVzYWdlCXJ1MDsN Ci0JYm9vbAkJcHJvZ3Jlc3MgPSAob3B0aW9ucyAmIFJFSU5ERVhPUFRfUkVQT1JUX1BST0dSRVNT KSAhPSAwOw0KKwlib29sCQlwcm9ncmVzcyA9ICgocGFyYW1zLT5vcHRpb25zICYgUkVJTkRFWE9Q VF9SRVBPUlRfUFJPR1JFU1MpICE9IDApOw0KIA0KIAlwZ19ydXNhZ2VfaW5pdCgmcnUwKTsNCiAN CkBAIC0zNjExLDEyICszNjExLDEyIEBAIHJlaW5kZXhfaW5kZXgoT2lkIGluZGV4SWQsIGJvb2wg c2tpcF9jb25zdHJhaW50X2NoZWNrcywgY2hhciBwZXJzaXN0ZW5jZSwNCiAJICogd2Ugb25seSBu ZWVkIHRvIGJlIHN1cmUgbm8gc2NoZW1hIG9yIGRhdGEgY2hhbmdlcyBhcmUgZ29pbmcgb24uDQog CSAqLw0KIAloZWFwSWQgPSBJbmRleEdldFJlbGF0aW9uKGluZGV4SWQsDQotCQkJCQkJCSAgKG9w dGlvbnMgJiBSRUlOREVYT1BUX01JU1NJTkdfT0spICE9IDApOw0KKwkJCQkJCQkgIChwYXJhbXMt Pm9wdGlvbnMgJiBSRUlOREVYT1BUX01JU1NJTkdfT0spICE9IDApOw0KIAkvKiBpZiByZWxhdGlv biBpcyBtaXNzaW5nLCBsZWF2ZSAqLw0KIAlpZiAoIU9pZElzVmFsaWQoaGVhcElkKSkNCiAJCXJl dHVybjsNCiANCi0JaWYgKChvcHRpb25zICYgUkVJTkRFWE9QVF9NSVNTSU5HX09LKSAhPSAwKQ0K KwlpZiAoKHBhcmFtcy0+b3B0aW9ucyAmIFJFSU5ERVhPUFRfTUlTU0lOR19PSykgIT0gMCkNCiAJ CWhlYXBSZWxhdGlvbiA9IHRyeV90YWJsZV9vcGVuKGhlYXBJZCwgU2hhcmVMb2NrKTsNCiAJZWxz ZQ0KIAkJaGVhcFJlbGF0aW9uID0gdGFibGVfb3BlbihoZWFwSWQsIFNoYXJlTG9jayk7DQpAQCAt Mzc5Miw3ICszNzkyLDcgQEAgcmVpbmRleF9pbmRleChPaWQgaW5kZXhJZCwgYm9vbCBza2lwX2Nv bnN0cmFpbnRfY2hlY2tzLCBjaGFyIHBlcnNpc3RlbmNlLA0KIAl9DQogDQogCS8qIExvZyB3aGF0 IHdlIGRpZCAqLw0KLQlpZiAob3B0aW9ucyAmIFJFSU5ERVhPUFRfVkVSQk9TRSkNCisJaWYgKChw YXJhbXMtPm9wdGlvbnMgJiBSRUlOREVYT1BUX1ZFUkJPU0UpICE9IDApDQogCQllcmVwb3J0KElO Rk8sDQogCQkJCShlcnJtc2coImluZGV4IFwiJXNcIiB3YXMgcmVpbmRleGVkIiwNCiAJCQkJCQln ZXRfcmVsX25hbWUoaW5kZXhJZCkpLA0KQEAgLTM4NDYsNyArMzg0Niw3IEBAIHJlaW5kZXhfaW5k ZXgoT2lkIGluZGV4SWQsIGJvb2wgc2tpcF9jb25zdHJhaW50X2NoZWNrcywgY2hhciBwZXJzaXN0 ZW5jZSwNCiAgKiBpbmRleCByZWJ1aWxkLg0KICAqLw0KIGJvb2wNCi1yZWluZGV4X3JlbGF0aW9u KE9pZCByZWxpZCwgaW50IGZsYWdzLCBpbnQgb3B0aW9ucykNCityZWluZGV4X3JlbGF0aW9uKE9p ZCByZWxpZCwgaW50IGZsYWdzLCBSZWluZGV4UGFyYW1zICpwYXJhbXMpDQogew0KIAlSZWxhdGlv bglyZWw7DQogCU9pZAkJCXRvYXN0X3JlbGlkOw0KQEAgLTM4NjEsNyArMzg2MSw3IEBAIHJlaW5k ZXhfcmVsYXRpb24oT2lkIHJlbGlkLCBpbnQgZmxhZ3MsIGludCBvcHRpb25zKQ0KIAkgKiB0byBw cmV2ZW50IHNjaGVtYSBhbmQgZGF0YSBjaGFuZ2VzIGluIGl0LiAgVGhlIGxvY2sgbGV2ZWwgdXNl ZCBoZXJlDQogCSAqIHNob3VsZCBtYXRjaCBSZWluZGV4VGFibGUoKS4NCiAJICovDQotCWlmICgo b3B0aW9ucyAmIFJFSU5ERVhPUFRfTUlTU0lOR19PSykgIT0gMCkNCisJaWYgKChwYXJhbXMtPm9w dGlvbnMgJiBSRUlOREVYT1BUX01JU1NJTkdfT0spICE9IDApDQogCQlyZWwgPSB0cnlfdGFibGVf b3BlbihyZWxpZCwgU2hhcmVMb2NrKTsNCiAJZWxzZQ0KIAkJcmVsID0gdGFibGVfb3BlbihyZWxp ZCwgU2hhcmVMb2NrKTsNCkBAIC0zOTM1LDcgKzM5MzUsNyBAQCByZWluZGV4X3JlbGF0aW9uKE9p ZCByZWxpZCwgaW50IGZsYWdzLCBpbnQgb3B0aW9ucykNCiAJCX0NCiANCiAJCXJlaW5kZXhfaW5k ZXgoaW5kZXhPaWQsICEoZmxhZ3MgJiBSRUlOREVYX1JFTF9DSEVDS19DT05TVFJBSU5UUyksDQot CQkJCQkgIHBlcnNpc3RlbmNlLCBvcHRpb25zKTsNCisJCQkJCSAgcGVyc2lzdGVuY2UsIHBhcmFt cyk7DQogDQogCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOw0KIA0KQEAgLTM5NjUsOCArMzk2 NSw5IEBAIHJlaW5kZXhfcmVsYXRpb24oT2lkIHJlbGlkLCBpbnQgZmxhZ3MsIGludCBvcHRpb25z KQ0KIAkJICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIGZhaWwgaWYgdGhlIHRvYXN0IHJlbGF0aW9u IGlzIG1pc3NpbmcsIHNvDQogCQkgKiByZXNldCBSRUlOREVYT1BUX01JU1NJTkdfT0suDQogCQkg Ki8NCi0JCXJlc3VsdCB8PSByZWluZGV4X3JlbGF0aW9uKHRvYXN0X3JlbGlkLCBmbGFncywNCi0J CQkJCQkJCSAgIG9wdGlvbnMgJiB+KFJFSU5ERVhPUFRfTUlTU0lOR19PSykpOw0KKwkJUmVpbmRl eFBhcmFtcyBuZXdwYXJhbXMgPSAqcGFyYW1zOw0KKwkJbmV3cGFyYW1zLm9wdGlvbnMgJj0gfihS RUlOREVYT1BUX01JU1NJTkdfT0spOw0KKwkJcmVzdWx0IHw9IHJlaW5kZXhfcmVsYXRpb24odG9h c3RfcmVsaWQsIGZsYWdzLCAmbmV3cGFyYW1zKTsNCiAJfQ0KIA0KIAlyZXR1cm4gcmVzdWx0Ow0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NsdXN0ZXIuYw0KaW5kZXggZDVlZWI0OTNhYy4uMDk2YTA2ZjdiMyAxMDA2NDQN Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYw0KKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY2x1c3Rlci5jDQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQNCiBjbHVzdGVyKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ2x1c3RlclN0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCkNCiB7 DQogCUxpc3RDZWxsICAgKmxjOw0KLQlpbnQJCQlvcHRpb25zID0gMDsNCisJQ2x1c3RlclBhcmFt cyBwYXJhbXMgPSB7MH07DQogCWJvb2wJCXZlcmJvc2UgPSBmYWxzZTsNCiANCiAJLyogUGFyc2Ug b3B0aW9uIGxpc3QgKi8NCkBAIC0xMjEsNyArMTIxLDcgQEAgY2x1c3RlcihQYXJzZVN0YXRlICpw c3RhdGUsIENsdXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpDQogCQkJCQkgcGFyc2Vy X2VycnBvc2l0aW9uKHBzdGF0ZSwgb3B0LT5sb2NhdGlvbikpKTsNCiAJfQ0KIA0KLQlvcHRpb25z ID0gKHZlcmJvc2UgPyBDTFVPUFRfVkVSQk9TRSA6IDApOw0KKwlwYXJhbXMub3B0aW9ucyA9ICh2 ZXJib3NlID8gQ0xVT1BUX1ZFUkJPU0UgOiAwKTsNCiANCiAJaWYgKHN0bXQtPnJlbGF0aW9uICE9 IE5VTEwpDQogCXsNCkBAIC0xOTIsNyArMTkyLDcgQEAgY2x1c3RlcihQYXJzZVN0YXRlICpwc3Rh dGUsIENsdXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpDQogCQl0YWJsZV9jbG9zZShy ZWwsIE5vTG9jayk7DQogDQogCQkvKiBEbyB0aGUgam9iLiAqLw0KLQkJY2x1c3Rlcl9yZWwodGFi bGVPaWQsIGluZGV4T2lkLCBvcHRpb25zKTsNCisJCWNsdXN0ZXJfcmVsKHRhYmxlT2lkLCBpbmRl eE9pZCwgJnBhcmFtcyk7DQogCX0NCiAJZWxzZQ0KIAl7DQpAQCAtMjM0LDE0ICsyMzQsMTYgQEAg Y2x1c3RlcihQYXJzZVN0YXRlICpwc3RhdGUsIENsdXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9w TGV2ZWwpDQogCQlmb3JlYWNoKHJ2LCBydnMpDQogCQl7DQogCQkJUmVsVG9DbHVzdGVyICpydnRj ID0gKFJlbFRvQ2x1c3RlciAqKSBsZmlyc3QocnYpOw0KKwkJCUNsdXN0ZXJQYXJhbXMgY2x1c3Rl cl9wYXJhbXMgPSBwYXJhbXM7DQogDQogCQkJLyogU3RhcnQgYSBuZXcgdHJhbnNhY3Rpb24gZm9y IGVhY2ggcmVsYXRpb24uICovDQogCQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsNCiAJCQkv KiBmdW5jdGlvbnMgaW4gaW5kZXhlcyBtYXkgd2FudCBhIHNuYXBzaG90IHNldCAqLw0KIAkJCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOw0KIAkJCS8qIERvIHRo ZSBqb2IuICovDQorCQkJY2x1c3Rlcl9wYXJhbXMub3B0aW9ucyB8PSBDTFVPUFRfUkVDSEVDSzsN CiAJCQljbHVzdGVyX3JlbChydnRjLT50YWJsZU9pZCwgcnZ0Yy0+aW5kZXhPaWQsDQotCQkJCQkJ b3B0aW9ucyB8IENMVU9QVF9SRUNIRUNLKTsNCisJCQkJCQkmY2x1c3Rlcl9wYXJhbXMpOw0KIAkJ CVBvcEFjdGl2ZVNuYXBzaG90KCk7DQogCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7DQog CQl9DQpAQCAtMjcyLDExICsyNzQsMTEgQEAgY2x1c3RlcihQYXJzZVN0YXRlICpwc3RhdGUsIENs dXN0ZXJTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpDQogICogYW5kIGVycm9yIG1lc3NhZ2Vz IHNob3VsZCByZWZlciB0byB0aGUgb3BlcmF0aW9uIGFzIFZBQ1VVTSBub3QgQ0xVU1RFUi4NCiAg Ki8NCiB2b2lkDQotY2x1c3Rlcl9yZWwoT2lkIHRhYmxlT2lkLCBPaWQgaW5kZXhPaWQsIGludCBv cHRpb25zKQ0KK2NsdXN0ZXJfcmVsKE9pZCB0YWJsZU9pZCwgT2lkIGluZGV4T2lkLCBDbHVzdGVy UGFyYW1zICpwYXJhbXMpDQogew0KIAlSZWxhdGlvbglPbGRIZWFwOw0KLQlib29sCQl2ZXJib3Nl ID0gKChvcHRpb25zICYgQ0xVT1BUX1ZFUkJPU0UpICE9IDApOw0KLQlib29sCQlyZWNoZWNrID0g KChvcHRpb25zICYgQ0xVT1BUX1JFQ0hFQ0spICE9IDApOw0KKwlib29sCQl2ZXJib3NlID0gKChw YXJhbXMtPm9wdGlvbnMgJiBDTFVPUFRfVkVSQk9TRSkgIT0gMCk7DQorCWJvb2wJCXJlY2hlY2sg PSAoKHBhcmFtcy0+b3B0aW9ucyAmIENMVU9QVF9SRUNIRUNLKSAhPSAwKTsNCiANCiAJLyogQ2hl Y2sgZm9yIHVzZXItcmVxdWVzdGVkIGFib3J0LiAqLw0KIAlDSEVDS19GT1JfSU5URVJSVVBUUygp Ow0KQEAgLTEzNTUsNiArMTM1Nyw3IEBAIGZpbmlzaF9oZWFwX3N3YXAoT2lkIE9JRE9sZEhlYXAs IE9pZCBPSUROZXdIZWFwLA0KIAlPYmplY3RBZGRyZXNzIG9iamVjdDsNCiAJT2lkCQkJbWFwcGVk X3RhYmxlc1s0XTsNCiAJaW50CQkJcmVpbmRleF9mbGFnczsNCisJUmVpbmRleFBhcmFtcyByZWlu ZGV4X3BhcmFtcyA9IHswfTsNCiAJaW50CQkJaTsNCiANCiAJLyogUmVwb3J0IHRoYXQgd2UgYXJl IG5vdyBzd2FwcGluZyByZWxhdGlvbiBmaWxlcyAqLw0KQEAgLTE0MTIsNyArMTQxNSw3IEBAIGZp bmlzaF9oZWFwX3N3YXAoT2lkIE9JRE9sZEhlYXAsIE9pZCBPSUROZXdIZWFwLA0KIAlwZ3N0YXRf cHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfUEhBU0UsDQogCQkJCQkJCQkg UFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9SRUJVSUxEX0lOREVYKTsNCiANCi0JcmVpbmRleF9yZWxh dGlvbihPSURPbGRIZWFwLCByZWluZGV4X2ZsYWdzLCAwKTsNCisJcmVpbmRleF9yZWxhdGlvbihP SURPbGRIZWFwLCByZWluZGV4X2ZsYWdzLCAmcmVpbmRleF9wYXJhbXMpOw0KIA0KIAkvKiBSZXBv cnQgdGhhdCB3ZSBhcmUgbm93IGRvaW5nIGNsZWFuIHVwICovDQogCXBnc3RhdF9wcm9ncmVzc191 cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRSwNCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21k cy5jDQppbmRleCA4YzljMzlhNDY3Li5mNjkxYzM0YzJlIDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvaW5kZXhjbWRzLmMNCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jDQpAQCAtODYsMTIgKzg2LDIxIEBAIHN0YXRpYyBjaGFyICpDaG9vc2VJbmRleE5hbWUo Y29uc3QgY2hhciAqdGFibmFtZSwgT2lkIG5hbWVzcGFjZUlkLA0KIAkJCQkJCQkgYm9vbCBwcmlt YXJ5LCBib29sIGlzY29uc3RyYWludCk7DQogc3RhdGljIGNoYXIgKkNob29zZUluZGV4TmFtZUFk ZGl0aW9uKExpc3QgKmNvbG5hbWVzKTsNCiBzdGF0aWMgTGlzdCAqQ2hvb3NlSW5kZXhDb2x1bW5O YW1lcyhMaXN0ICppbmRleEVsZW1zKTsNCitzdGF0aWMgdm9pZCBSZWluZGV4SW5kZXgoUmFuZ2VW YXIgKmluZGV4UmVsYXRpb24sIFJlaW5kZXhQYXJhbXMgKnBhcmFtcywNCisJCWJvb2wgaXNUb3BM ZXZlbCk7DQogc3RhdGljIHZvaWQgUmFuZ2VWYXJDYWxsYmFja0ZvclJlaW5kZXhJbmRleChjb25z dCBSYW5nZVZhciAqcmVsYXRpb24sDQogCQkJCQkJCQkJCQlPaWQgcmVsSWQsIE9pZCBvbGRSZWxJ ZCwgdm9pZCAqYXJnKTsNCitzdGF0aWMgT2lkIFJlaW5kZXhUYWJsZShSYW5nZVZhciAqcmVsYXRp b24sIFJlaW5kZXhQYXJhbXMgKnBhcmFtcywNCisJCWJvb2wgaXNUb3BMZXZlbCk7DQorc3RhdGlj IHZvaWQgUmVpbmRleE11bHRpcGxlVGFibGVzKGNvbnN0IGNoYXIgKm9iamVjdE5hbWUsDQorCQlS ZWluZGV4T2JqZWN0VHlwZSBvYmplY3RLaW5kLCBSZWluZGV4UGFyYW1zICpwYXJhbXMpOw0KIHN0 YXRpYyB2b2lkIHJlaW5kZXhfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJncyk7DQotc3RhdGljIHZv aWQgUmVpbmRleFBhcnRpdGlvbnMoT2lkIHJlbGlkLCBpbnQgb3B0aW9ucywgYm9vbCBpc1RvcExl dmVsKTsNCi1zdGF0aWMgdm9pZCBSZWluZGV4TXVsdGlwbGVJbnRlcm5hbChMaXN0ICpyZWxpZHMs IGludCBvcHRpb25zKTsNCi1zdGF0aWMgYm9vbCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHko T2lkIHJlbGF0aW9uT2lkLCBpbnQgb3B0aW9ucyk7DQorc3RhdGljIHZvaWQgUmVpbmRleFBhcnRp dGlvbnMoT2lkIHJlbGlkLCBSZWluZGV4UGFyYW1zICpwYXJhbXMsDQorCQkJCQkJCSAgYm9vbCBp c1RvcExldmVsKTsNCitzdGF0aWMgdm9pZCBSZWluZGV4TXVsdGlwbGVJbnRlcm5hbChMaXN0ICpy ZWxpZHMsDQorCQkJCQkJCQkJUmVpbmRleFBhcmFtcyAqcGFyYW1zKTsNCitzdGF0aWMgYm9vbCBS ZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoT2lkIHJlbGF0aW9uT2lkLA0KKwkJCQkJCQkJCQlS ZWluZGV4UGFyYW1zICpwYXJhbXMpOw0KIHN0YXRpYyB2b2lkIHVwZGF0ZV9yZWxpc3BhcnRpdGlv bihPaWQgcmVsYXRpb25JZCwgYm9vbCBuZXd2YWwpOw0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRf aW5kZXhzYWZlX3Byb2NmbGFncyh2b2lkKTsNCiANCkBAIC0xMDAsNyArMTA5LDcgQEAgc3RhdGlj IGlubGluZSB2b2lkIHNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKHZvaWQpOw0KICAqLw0KIHN0cnVj dCBSZWluZGV4SW5kZXhDYWxsYmFja1N0YXRlDQogew0KLQlpbnQJCQlvcHRpb25zOwkJLyogb3B0 aW9ucyBmcm9tIHN0YXRlbWVudCAqLw0KKwlSZWluZGV4UGFyYW1zIHBhcmFtczsJCQkvKiBvcHRp b25zIGZyb20gc3RhdGVtZW50ICovDQogCU9pZAkJCWxvY2tlZF90YWJsZV9vaWQ7CS8qIHRyYWNr cyBwcmV2aW91c2x5IGxvY2tlZCB0YWJsZSAqLw0KIH07DQogDQpAQCAtMjQ1MiwxNCArMjQ2MSwx NyBAQCBDaG9vc2VJbmRleENvbHVtbk5hbWVzKExpc3QgKmluZGV4RWxlbXMpDQogfQ0KIA0KIC8q DQotICogUmVpbmRleFBhcnNlT3B0aW9ucw0KLSAqCQlQYXJzZSBsaXN0IG9mIFJFSU5ERVggb3B0 aW9ucywgcmV0dXJuaW5nIGEgYml0bWFzayBvZiBSZWluZGV4T3B0aW9uLg0KKyAqIEV4ZWNSZWlu ZGV4DQorICoNCisgKiBQcmltYXJ5IGVudHJ5IHBvaW50IGZvciBtYW51YWwgUkVJTkRFWCBjb21t YW5kcy4gIFRoaXMgaXMgbWFpbmx5IGENCisgKiBwcmVwYXJhdGlvbiB3cmFwcGVyIGZvciB0aGUg cmVhbCBvcGVyYXRpb25zIHRoYXQgd2lsbCBoYXBwZW4gaW4NCisgKiBlYWNoIHJlaW5kZXggc3Vi LXJvdXRpbmUuDQogICovDQotaW50DQotUmVpbmRleFBhcnNlT3B0aW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsIFJlaW5kZXhTdG10ICpzdG10KQ0KK3ZvaWQNCitFeGVjUmVpbmRleChQYXJzZVN0YXRl ICpwc3RhdGUsIFJlaW5kZXhTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpDQogew0KKwlSZWlu ZGV4UGFyYW1zIHBhcmFtcyA9IHswfTsNCiAJTGlzdENlbGwgICAqbGM7DQotCWludAkJCW9wdGlv bnMgPSAwOw0KIAlib29sCQljb25jdXJyZW50bHkgPSBmYWxzZTsNCiAJYm9vbAkJdmVyYm9zZSA9 IGZhbHNlOw0KIA0KQEAgLTI0ODAsMTkgKzI0OTIsNTEgQEAgUmVpbmRleFBhcnNlT3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsIFJlaW5kZXhTdG10ICpzdG10KQ0KIAkJCQkJIHBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIG9wdC0+bG9jYXRpb24pKSk7DQogCX0NCiANCi0Jb3B0aW9ucyA9DQor CWlmIChjb25jdXJyZW50bHkpDQorCQlQcmV2ZW50SW5UcmFuc2FjdGlvbkJsb2NrKGlzVG9wTGV2 ZWwsDQorCQkJCQkJCQkgICJSRUlOREVYIENPTkNVUlJFTlRMWSIpOw0KKw0KKwlwYXJhbXMub3B0 aW9ucyA9DQogCQkodmVyYm9zZSA/IFJFSU5ERVhPUFRfVkVSQk9TRSA6IDApIHwNCiAJCShjb25j dXJyZW50bHkgPyBSRUlOREVYT1BUX0NPTkNVUlJFTlRMWSA6IDApOw0KIA0KLQlyZXR1cm4gb3B0 aW9uczsNCisJc3dpdGNoIChzdG10LT5raW5kKQ0KKwl7DQorCQljYXNlIFJFSU5ERVhfT0JKRUNU X0lOREVYOg0KKwkJCVJlaW5kZXhJbmRleChzdG10LT5yZWxhdGlvbiwgJnBhcmFtcywgaXNUb3BM ZXZlbCk7DQorCQkJYnJlYWs7DQorCQljYXNlIFJFSU5ERVhfT0JKRUNUX1RBQkxFOg0KKwkJCVJl aW5kZXhUYWJsZShzdG10LT5yZWxhdGlvbiwgJnBhcmFtcywgaXNUb3BMZXZlbCk7DQorCQkJYnJl YWs7DQorCQljYXNlIFJFSU5ERVhfT0JKRUNUX1NDSEVNQToNCisJCWNhc2UgUkVJTkRFWF9PQkpF Q1RfU1lTVEVNOg0KKwkJY2FzZSBSRUlOREVYX09CSkVDVF9EQVRBQkFTRToNCisNCisJCQkvKg0K KwkJCSAqIFRoaXMgY2Fubm90IHJ1biBpbnNpZGUgYSB1c2VyIHRyYW5zYWN0aW9uIGJsb2NrOyBp Zg0KKwkJCSAqIHdlIHdlcmUgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIHRoZW4gaXRzIGNvbW1pdC0g YW5kDQorCQkJICogc3RhcnQtdHJhbnNhY3Rpb24tY29tbWFuZCBjYWxscyB3b3VsZCBub3QgaGF2 ZSB0aGUNCisJCQkgKiBpbnRlbmRlZCBlZmZlY3QhDQorCQkJICovDQorCQkJUHJldmVudEluVHJh bnNhY3Rpb25CbG9jayhpc1RvcExldmVsLA0KKwkJCQkJCQkJCSAgKHN0bXQtPmtpbmQgPT0gUkVJ TkRFWF9PQkpFQ1RfU0NIRU1BKSA/ICJSRUlOREVYIFNDSEVNQSIgOg0KKwkJCQkJCQkJCSAgKHN0 bXQtPmtpbmQgPT0gUkVJTkRFWF9PQkpFQ1RfU1lTVEVNKSA/ICJSRUlOREVYIFNZU1RFTSIgOg0K KwkJCQkJCQkJCSAgIlJFSU5ERVggREFUQUJBU0UiKTsNCisJCQlSZWluZGV4TXVsdGlwbGVUYWJs ZXMoc3RtdC0+bmFtZSwgc3RtdC0+a2luZCwgJnBhcmFtcyk7DQorCQkJYnJlYWs7DQorCQlkZWZh dWx0Og0KKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGU6ICVkIiwNCisJ CQkJIChpbnQpIHN0bXQtPmtpbmQpOw0KKwkJCWJyZWFrOw0KKwl9DQogfQ0KIA0KIC8qDQogICog UmVpbmRleEluZGV4DQogICoJCVJlY3JlYXRlIGEgc3BlY2lmaWMgaW5kZXguDQogICovDQotdm9p ZA0KLVJlaW5kZXhJbmRleChSYW5nZVZhciAqaW5kZXhSZWxhdGlvbiwgaW50IG9wdGlvbnMsIGJv b2wgaXNUb3BMZXZlbCkNCitzdGF0aWMgdm9pZA0KK1JlaW5kZXhJbmRleChSYW5nZVZhciAqaW5k ZXhSZWxhdGlvbiwgUmVpbmRleFBhcmFtcyAqcGFyYW1zLCBib29sIGlzVG9wTGV2ZWwpDQogew0K IAlzdHJ1Y3QgUmVpbmRleEluZGV4Q2FsbGJhY2tTdGF0ZSBzdGF0ZTsNCiAJT2lkCQkJaW5kT2lk Ow0KQEAgLTI1MDksMTAgKzI1NTMsMTAgQEAgUmVpbmRleEluZGV4KFJhbmdlVmFyICppbmRleFJl bGF0aW9uLCBpbnQgb3B0aW9ucywgYm9vbCBpc1RvcExldmVsKQ0KIAkgKiB1cGdyYWRlIHRoZSBs b2NrLCBidXQgdGhhdCdzIE9LLCBiZWNhdXNlIG90aGVyIHNlc3Npb25zIGNhbid0IGhvbGQNCiAJ ICogbG9ja3Mgb24gb3VyIHRlbXBvcmFyeSB0YWJsZS4NCiAJICovDQotCXN0YXRlLm9wdGlvbnMg PSBvcHRpb25zOw0KKwlzdGF0ZS5wYXJhbXMgPSAqcGFyYW1zOw0KIAlzdGF0ZS5sb2NrZWRfdGFi bGVfb2lkID0gSW52YWxpZE9pZDsNCiAJaW5kT2lkID0gUmFuZ2VWYXJHZXRSZWxpZEV4dGVuZGVk KGluZGV4UmVsYXRpb24sDQotCQkJCQkJCQkJICAob3B0aW9ucyAmIFJFSU5ERVhPUFRfQ09OQ1VS UkVOVExZKSAhPSAwID8NCisJCQkJCQkJCQkgIChwYXJhbXMtPm9wdGlvbnMgJiBSRUlOREVYT1BU X0NPTkNVUlJFTlRMWSkgIT0gMCA/DQogCQkJCQkJCQkJICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxv Y2sgOiBBY2Nlc3NFeGNsdXNpdmVMb2NrLA0KIAkJCQkJCQkJCSAgMCwNCiAJCQkJCQkJCQkgIFJh bmdlVmFyQ2FsbGJhY2tGb3JSZWluZGV4SW5kZXgsDQpAQCAtMjUyNiwxMyArMjU3MCwxNyBAQCBS ZWluZGV4SW5kZXgoUmFuZ2VWYXIgKmluZGV4UmVsYXRpb24sIGludCBvcHRpb25zLCBib29sIGlz VG9wTGV2ZWwpDQogCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQoaW5kT2lkKTsNCiANCiAJaWYg KHJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWCkNCi0JCVJlaW5kZXhQYXJ0aXRp b25zKGluZE9pZCwgb3B0aW9ucywgaXNUb3BMZXZlbCk7DQotCWVsc2UgaWYgKChvcHRpb25zICYg UkVJTkRFWE9QVF9DT05DVVJSRU5UTFkpICE9IDAgJiYNCisJCVJlaW5kZXhQYXJ0aXRpb25zKGlu ZE9pZCwgcGFyYW1zLCBpc1RvcExldmVsKTsNCisJZWxzZSBpZiAoKHBhcmFtcy0+b3B0aW9ucyAm IFJFSU5ERVhPUFRfQ09OQ1VSUkVOVExZKSAhPSAwICYmDQogCQkJIHBlcnNpc3RlbmNlICE9IFJF TFBFUlNJU1RFTkNFX1RFTVApDQotCQlSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoaW5kT2lk LCBvcHRpb25zKTsNCisJCVJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShpbmRPaWQsIHBhcmFt cyk7DQogCWVsc2UNCi0JCXJlaW5kZXhfaW5kZXgoaW5kT2lkLCBmYWxzZSwgcGVyc2lzdGVuY2Us DQotCQkJCQkgIG9wdGlvbnMgfCBSRUlOREVYT1BUX1JFUE9SVF9QUk9HUkVTUyk7DQorCXsNCisJ CVJlaW5kZXhQYXJhbXMgbmV3cGFyYW1zID0gKnBhcmFtczsNCisNCisJCW5ld3BhcmFtcy5vcHRp b25zIHw9IFJFSU5ERVhPUFRfUkVQT1JUX1BST0dSRVNTOw0KKwkJcmVpbmRleF9pbmRleChpbmRP aWQsIGZhbHNlLCBwZXJzaXN0ZW5jZSwgJm5ld3BhcmFtcyk7DQorCX0NCiB9DQogDQogLyoNCkBA IC0yNTUzLDcgKzI2MDEsNyBAQCBSYW5nZVZhckNhbGxiYWNrRm9yUmVpbmRleEluZGV4KGNvbnN0 IFJhbmdlVmFyICpyZWxhdGlvbiwNCiAJICogbm9uLWNvbmN1cnJlbnQgY2FzZSBhbmQgdGFibGUg bG9ja3MgdXNlZCBieSBpbmRleF9jb25jdXJyZW50bHlfKigpIGZvcg0KIAkgKiBjb25jdXJyZW50 IGNhc2UuDQogCSAqLw0KLQl0YWJsZV9sb2NrbW9kZSA9ICgoc3RhdGUtPm9wdGlvbnMgJiBSRUlO REVYT1BUX0NPTkNVUlJFTlRMWSkgIT0gMCkgPw0KKwl0YWJsZV9sb2NrbW9kZSA9IChzdGF0ZS0+ cGFyYW1zLm9wdGlvbnMgJiBSRUlOREVYT1BUX0NPTkNVUlJFTlRMWSkgIT0gMCA/DQogCQlTaGFy ZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgOiBTaGFyZUxvY2s7DQogDQogCS8qDQpAQCAtMjYxMCw4ICsy NjU4LDggQEAgUmFuZ2VWYXJDYWxsYmFja0ZvclJlaW5kZXhJbmRleChjb25zdCBSYW5nZVZhciAq cmVsYXRpb24sDQogICogUmVpbmRleFRhYmxlDQogICoJCVJlY3JlYXRlIGFsbCBpbmRleGVzIG9m IGEgdGFibGUgKGFuZCBvZiBpdHMgdG9hc3QgdGFibGUsIGlmIGFueSkNCiAgKi8NCi1PaWQNCi1S ZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJlbGF0aW9uLCBpbnQgb3B0aW9ucywgYm9vbCBpc1RvcExl dmVsKQ0KK3N0YXRpYyBPaWQNCitSZWluZGV4VGFibGUoUmFuZ2VWYXIgKnJlbGF0aW9uLCBSZWlu ZGV4UGFyYW1zICpwYXJhbXMsIGJvb2wgaXNUb3BMZXZlbCkNCiB7DQogCU9pZAkJCWhlYXBPaWQ7 DQogCWJvb2wJCXJlc3VsdDsNCkBAIC0yNjI1LDE3ICsyNjczLDE3IEBAIFJlaW5kZXhUYWJsZShS YW5nZVZhciAqcmVsYXRpb24sIGludCBvcHRpb25zLCBib29sIGlzVG9wTGV2ZWwpDQogCSAqIGxv Y2tzIG9uIG91ciB0ZW1wb3JhcnkgdGFibGUuDQogCSAqLw0KIAloZWFwT2lkID0gUmFuZ2VWYXJH ZXRSZWxpZEV4dGVuZGVkKHJlbGF0aW9uLA0KLQkJCQkJCQkJCSAgIChvcHRpb25zICYgUkVJTkRF WE9QVF9DT05DVVJSRU5UTFkpICE9IDAgPw0KKwkJCQkJCQkJCSAgIChwYXJhbXMtPm9wdGlvbnMg JiBSRUlOREVYT1BUX0NPTkNVUlJFTlRMWSkgIT0gMCA/DQogCQkJCQkJCQkJICAgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrIDogU2hhcmVMb2NrLA0KIAkJCQkJCQkJCSAgIDAsDQogCQkJCQkJCQkJ ICAgUmFuZ2VWYXJDYWxsYmFja093bnNUYWJsZSwgTlVMTCk7DQogDQogCWlmIChnZXRfcmVsX3Jl bGtpbmQoaGVhcE9pZCkgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkNCi0JCVJlaW5kZXhQ YXJ0aXRpb25zKGhlYXBPaWQsIG9wdGlvbnMsIGlzVG9wTGV2ZWwpOw0KLQllbHNlIGlmICgob3B0 aW9ucyAmIFJFSU5ERVhPUFRfQ09OQ1VSUkVOVExZKSAhPSAwICYmDQorCQlSZWluZGV4UGFydGl0 aW9ucyhoZWFwT2lkLCBwYXJhbXMsIGlzVG9wTGV2ZWwpOw0KKwllbHNlIGlmICgocGFyYW1zLT5v cHRpb25zICYgUkVJTkRFWE9QVF9DT05DVVJSRU5UTFkpICE9IDAgJiYNCiAJCQkgZ2V0X3JlbF9w ZXJzaXN0ZW5jZShoZWFwT2lkKSAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQ0KIAl7DQotCQlyZXN1 bHQgPSBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoaGVhcE9pZCwgb3B0aW9ucyk7DQorCQly ZXN1bHQgPSBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoaGVhcE9pZCwgcGFyYW1zKTsNCiAN CiAJCWlmICghcmVzdWx0KQ0KIAkJCWVyZXBvcnQoTk9USUNFLA0KQEAgLTI2NDQsMTAgKzI2OTIs MTMgQEAgUmVpbmRleFRhYmxlKFJhbmdlVmFyICpyZWxhdGlvbiwgaW50IG9wdGlvbnMsIGJvb2wg aXNUb3BMZXZlbCkNCiAJfQ0KIAllbHNlDQogCXsNCisJCVJlaW5kZXhQYXJhbXMgbmV3cGFyYW1z ID0gKnBhcmFtczsNCisNCisJCW5ld3BhcmFtcy5vcHRpb25zIHw9IFJFSU5ERVhPUFRfUkVQT1JU X1BST0dSRVNTOw0KIAkJcmVzdWx0ID0gcmVpbmRleF9yZWxhdGlvbihoZWFwT2lkLA0KIAkJCQkJ CQkJICBSRUlOREVYX1JFTF9QUk9DRVNTX1RPQVNUIHwNCiAJCQkJCQkJCSAgUkVJTkRFWF9SRUxf Q0hFQ0tfQ09OU1RSQUlOVFMsDQotCQkJCQkJCQkgIG9wdGlvbnMgfCBSRUlOREVYT1BUX1JFUE9S VF9QUk9HUkVTUyk7DQorCQkJCQkJCQkgICZuZXdwYXJhbXMpOw0KIAkJaWYgKCFyZXN1bHQpDQog CQkJZXJlcG9ydChOT1RJQ0UsDQogCQkJCQkoZXJybXNnKCJ0YWJsZSBcIiVzXCIgaGFzIG5vIGlu ZGV4ZXMgdG8gcmVpbmRleCIsDQpAQCAtMjY2NSw5ICsyNzE2LDkgQEAgUmVpbmRleFRhYmxlKFJh bmdlVmFyICpyZWxhdGlvbiwgaW50IG9wdGlvbnMsIGJvb2wgaXNUb3BMZXZlbCkNCiAgKiBzZXBh cmF0ZSB0cmFuc2FjdGlvbiwgc28gd2UgY2FuIHJlbGVhc2UgdGhlIGxvY2sgb24gaXQgcmlnaHQg YXdheS4NCiAgKiBUaGF0IG1lYW5zIHRoaXMgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGhpbiBhIHVz ZXIgdHJhbnNhY3Rpb24gYmxvY2shDQogICovDQotdm9pZA0KK3N0YXRpYyB2b2lkDQogUmVpbmRl eE11bHRpcGxlVGFibGVzKGNvbnN0IGNoYXIgKm9iamVjdE5hbWUsIFJlaW5kZXhPYmplY3RUeXBl IG9iamVjdEtpbmQsDQotCQkJCQkgIGludCBvcHRpb25zKQ0KKwkJCQkJICBSZWluZGV4UGFyYW1z ICpwYXJhbXMpDQogew0KIAlPaWQJCQlvYmplY3RPaWQ7DQogCVJlbGF0aW9uCXJlbGF0aW9uUmVs YXRpb247DQpAQCAtMjY4Niw3ICsyNzM3LDcgQEAgUmVpbmRleE11bHRpcGxlVGFibGVzKGNvbnN0 IGNoYXIgKm9iamVjdE5hbWUsIFJlaW5kZXhPYmplY3RUeXBlIG9iamVjdEtpbmQsDQogCQkgICBv YmplY3RLaW5kID09IFJFSU5ERVhfT0JKRUNUX0RBVEFCQVNFKTsNCiANCiAJaWYgKG9iamVjdEtp bmQgPT0gUkVJTkRFWF9PQkpFQ1RfU1lTVEVNICYmDQotCQkob3B0aW9ucyAmIFJFSU5ERVhPUFRf Q09OQ1VSUkVOVExZKSAhPSAwKQ0KKwkJKHBhcmFtcy0+b3B0aW9ucyAmIFJFSU5ERVhPUFRfQ09O Q1VSUkVOVExZKSAhPSAwKQ0KIAkJZXJlcG9ydChFUlJPUiwNCiAJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLA0KIAkJCQkgZXJybXNnKCJjYW5ub3QgcmVpbmRleCBz eXN0ZW0gY2F0YWxvZ3MgY29uY3VycmVudGx5IikpKTsNCkBAIC0yNzk0LDcgKzI4NDUsNyBAQCBS ZWluZGV4TXVsdGlwbGVUYWJsZXMoY29uc3QgY2hhciAqb2JqZWN0TmFtZSwgUmVpbmRleE9iamVj dFR5cGUgb2JqZWN0S2luZCwNCiAJCSAqIFNraXAgc3lzdGVtIHRhYmxlcywgc2luY2UgaW5kZXhf Y3JlYXRlKCkgd291bGQgcmVqZWN0IGluZGV4aW5nIHRoZW0NCiAJCSAqIGNvbmN1cnJlbnRseSAo YW5kIGl0IHdvdWxkIGxpa2VseSBmYWlsIGlmIHdlIHRyaWVkKS4NCiAJCSAqLw0KLQkJaWYgKChv cHRpb25zICYgUkVJTkRFWE9QVF9DT05DVVJSRU5UTFkpICE9IDAgJiYNCisJCWlmICgocGFyYW1z LT5vcHRpb25zICYgUkVJTkRFWE9QVF9DT05DVVJSRU5UTFkpICE9IDAgJiYNCiAJCQlJc0NhdGFs b2dSZWxhdGlvbk9pZChyZWxpZCkpDQogCQl7DQogCQkJaWYgKCFjb25jdXJyZW50X3dhcm5pbmcp DQpAQCAtMjgyOSw3ICsyODgwLDcgQEAgUmVpbmRleE11bHRpcGxlVGFibGVzKGNvbnN0IGNoYXIg Km9iamVjdE5hbWUsIFJlaW5kZXhPYmplY3RUeXBlIG9iamVjdEtpbmQsDQogCSAqIFByb2Nlc3Mg ZWFjaCByZWxhdGlvbiBsaXN0ZWQgaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbi4gIE5vdGUgdGhh dCB0aGlzDQogCSAqIGNvbW1pdHMgYW5kIHRoZW4gc3RhcnRzIGEgbmV3IHRyYW5zYWN0aW9uIGlt bWVkaWF0ZWx5Lg0KIAkgKi8NCi0JUmVpbmRleE11bHRpcGxlSW50ZXJuYWwocmVsaWRzLCBvcHRp b25zKTsNCisJUmVpbmRleE11bHRpcGxlSW50ZXJuYWwocmVsaWRzLCBwYXJhbXMpOw0KIA0KIAlN ZW1vcnlDb250ZXh0RGVsZXRlKHByaXZhdGVfY29udGV4dCk7DQogfQ0KQEAgLTI4NjAsNyArMjkx MSw3IEBAIHJlaW5kZXhfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQ0KICAqIGJ5IHRoZSBjYWxs ZXIuDQogICovDQogc3RhdGljIHZvaWQNCi1SZWluZGV4UGFydGl0aW9ucyhPaWQgcmVsaWQsIGlu dCBvcHRpb25zLCBib29sIGlzVG9wTGV2ZWwpDQorUmVpbmRleFBhcnRpdGlvbnMoT2lkIHJlbGlk LCBSZWluZGV4UGFyYW1zICpwYXJhbXMsIGJvb2wgaXNUb3BMZXZlbCkNCiB7DQogCUxpc3QJICAg KnBhcnRpdGlvbnMgPSBOSUw7DQogCWNoYXIJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocmVs aWQpOw0KQEAgLTI5MzcsNyArMjk4OCw3IEBAIFJlaW5kZXhQYXJ0aXRpb25zKE9pZCByZWxpZCwg aW50IG9wdGlvbnMsIGJvb2wgaXNUb3BMZXZlbCkNCiAJICogUHJvY2VzcyBlYWNoIHBhcnRpdGlv biBsaXN0ZWQgaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbi4gIE5vdGUgdGhhdA0KIAkgKiB0aGlz IGNvbW1pdHMgYW5kIHRoZW4gc3RhcnRzIGEgbmV3IHRyYW5zYWN0aW9uIGltbWVkaWF0ZWx5Lg0K IAkgKi8NCi0JUmVpbmRleE11bHRpcGxlSW50ZXJuYWwocGFydGl0aW9ucywgb3B0aW9ucyk7DQor CVJlaW5kZXhNdWx0aXBsZUludGVybmFsKHBhcnRpdGlvbnMsIHBhcmFtcyk7DQogDQogCS8qDQog CSAqIENsZWFuIHVwIHdvcmtpbmcgc3RvcmFnZSAtLS0gbm90ZSB3ZSBtdXN0IGRvIHRoaXMgYWZ0 ZXINCkBAIC0yOTU1LDcgKzMwMDYsNyBAQCBSZWluZGV4UGFydGl0aW9ucyhPaWQgcmVsaWQsIGlu dCBvcHRpb25zLCBib29sIGlzVG9wTGV2ZWwpDQogICogYW5kIHN0YXJ0cyBhIG5ldyB0cmFuc2Fj dGlvbiB3aGVuIGZpbmlzaGVkLg0KICAqLw0KIHN0YXRpYyB2b2lkDQotUmVpbmRleE11bHRpcGxl SW50ZXJuYWwoTGlzdCAqcmVsaWRzLCBpbnQgb3B0aW9ucykNCitSZWluZGV4TXVsdGlwbGVJbnRl cm5hbChMaXN0ICpyZWxpZHMsIFJlaW5kZXhQYXJhbXMgKnBhcmFtcykNCiB7DQogCUxpc3RDZWxs ICAgKmw7DQogDQpAQCAtMjk5MSwzNSArMzA0MiwzNyBAQCBSZWluZGV4TXVsdGlwbGVJbnRlcm5h bChMaXN0ICpyZWxpZHMsIGludCBvcHRpb25zKQ0KIAkJQXNzZXJ0KHJlbGtpbmQgIT0gUkVMS0lO RF9QQVJUSVRJT05FRF9JTkRFWCAmJg0KIAkJCSAgIHJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJ T05FRF9UQUJMRSk7DQogDQotCQlpZiAoKG9wdGlvbnMgJiBSRUlOREVYT1BUX0NPTkNVUlJFTlRM WSkgIT0gMCAmJg0KKwkJaWYgKChwYXJhbXMtPm9wdGlvbnMgJiBSRUlOREVYT1BUX0NPTkNVUlJF TlRMWSkgIT0gMCAmJg0KIAkJCXJlbHBlcnNpc3RlbmNlICE9IFJFTFBFUlNJU1RFTkNFX1RFTVAp DQogCQl7DQotCQkJKHZvaWQpIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShyZWxpZCwNCi0J CQkJCQkJCQkJCSAgIG9wdGlvbnMgfA0KLQkJCQkJCQkJCQkJICAgUkVJTkRFWE9QVF9NSVNTSU5H X09LKTsNCisJCQlSZWluZGV4UGFyYW1zIG5ld3BhcmFtcyA9ICpwYXJhbXM7DQorDQorCQkJbmV3 cGFyYW1zLm9wdGlvbnMgfD0gUkVJTkRFWE9QVF9NSVNTSU5HX09LOw0KKwkJCSh2b2lkKSBSZWlu ZGV4UmVsYXRpb25Db25jdXJyZW50bHkocmVsaWQsICZuZXdwYXJhbXMpOw0KIAkJCS8qIFJlaW5k ZXhSZWxhdGlvbkNvbmN1cnJlbnRseSgpIGRvZXMgdGhlIHZlcmJvc2Ugb3V0cHV0ICovDQogCQl9 DQogCQllbHNlIGlmIChyZWxraW5kID09IFJFTEtJTkRfSU5ERVgpDQogCQl7DQotCQkJcmVpbmRl eF9pbmRleChyZWxpZCwgZmFsc2UsIHJlbHBlcnNpc3RlbmNlLA0KLQkJCQkJCSAgb3B0aW9ucyB8 DQotCQkJCQkJICBSRUlOREVYT1BUX1JFUE9SVF9QUk9HUkVTUyB8DQotCQkJCQkJICBSRUlOREVY T1BUX01JU1NJTkdfT0spOw0KKwkJCVJlaW5kZXhQYXJhbXMgbmV3cGFyYW1zID0gKnBhcmFtczsN CisNCisJCQluZXdwYXJhbXMub3B0aW9ucyB8PQ0KKwkJCQlSRUlOREVYT1BUX1JFUE9SVF9QUk9H UkVTUyB8IFJFSU5ERVhPUFRfTUlTU0lOR19PSzsNCisJCQlyZWluZGV4X2luZGV4KHJlbGlkLCBm YWxzZSwgcmVscGVyc2lzdGVuY2UsICZuZXdwYXJhbXMpOw0KIAkJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7DQogCQkJLyogcmVpbmRleF9pbmRleCgpIGRvZXMgdGhlIHZlcmJvc2Ugb3V0cHV0ICovDQog CQl9DQogCQllbHNlDQogCQl7DQogCQkJYm9vbAkJcmVzdWx0Ow0KLQ0KKwkJCVJlaW5kZXhQYXJh bXMgbmV3cGFyYW1zID0gKnBhcmFtczsNCisJCQluZXdwYXJhbXMub3B0aW9ucyB8PQ0KKwkJCQlS RUlOREVYT1BUX1JFUE9SVF9QUk9HUkVTUyB8IFJFSU5ERVhPUFRfTUlTU0lOR19PSzsNCiAJCQly ZXN1bHQgPSByZWluZGV4X3JlbGF0aW9uKHJlbGlkLA0KIAkJCQkJCQkJCSAgUkVJTkRFWF9SRUxf UFJPQ0VTU19UT0FTVCB8DQogCQkJCQkJCQkJICBSRUlOREVYX1JFTF9DSEVDS19DT05TVFJBSU5U UywNCi0JCQkJCQkJCQkgIG9wdGlvbnMgfA0KLQkJCQkJCQkJCSAgUkVJTkRFWE9QVF9SRVBPUlRf UFJPR1JFU1MgfA0KLQkJCQkJCQkJCSAgUkVJTkRFWE9QVF9NSVNTSU5HX09LKTsNCisJCQkJCQkJ CQkgICZuZXdwYXJhbXMpOw0KIA0KLQkJCWlmIChyZXN1bHQgJiYgKG9wdGlvbnMgJiBSRUlOREVY T1BUX1ZFUkJPU0UpKQ0KKwkJCWlmIChyZXN1bHQgJiYgKHBhcmFtcy0+b3B0aW9ucyAmIFJFSU5E RVhPUFRfVkVSQk9TRSkgIT0gMCkNCiAJCQkJZXJlcG9ydChJTkZPLA0KIAkJCQkJCShlcnJtc2co InRhYmxlIFwiJXMuJXNcIiB3YXMgcmVpbmRleGVkIiwNCiAJCQkJCQkJCWdldF9uYW1lc3BhY2Vf bmFtZShnZXRfcmVsX25hbWVzcGFjZShyZWxpZCkpLA0KQEAgLTMwNTksNyArMzExMiw3IEBAIFJl aW5kZXhNdWx0aXBsZUludGVybmFsKExpc3QgKnJlbGlkcywgaW50IG9wdGlvbnMpDQogICogYW55 d2F5LCBhbmQgYSBub24tY29uY3VycmVudCByZWluZGV4IGlzIG1vcmUgZWZmaWNpZW50Lg0KICAq Lw0KIHN0YXRpYyBib29sDQotUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KE9pZCByZWxhdGlv bk9pZCwgaW50IG9wdGlvbnMpDQorUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KE9pZCByZWxh dGlvbk9pZCwgUmVpbmRleFBhcmFtcyAqcGFyYW1zKQ0KIHsNCiAJdHlwZWRlZiBzdHJ1Y3QgUmVp bmRleEluZGV4SW5mbw0KIAl7DQpAQCAtMzA5OCw3ICszMTUxLDcgQEAgUmVpbmRleFJlbGF0aW9u Q29uY3VycmVudGx5KE9pZCByZWxhdGlvbk9pZCwgaW50IG9wdGlvbnMpDQogCQkJCQkJCQkJCQki UmVpbmRleENvbmN1cnJlbnQiLA0KIAkJCQkJCQkJCQkJQUxMT0NTRVRfU01BTExfU0laRVMpOw0K IA0KLQlpZiAob3B0aW9ucyAmIFJFSU5ERVhPUFRfVkVSQk9TRSkNCisJaWYgKChwYXJhbXMtPm9w dGlvbnMgJiBSRUlOREVYT1BUX1ZFUkJPU0UpICE9IDApDQogCXsNCiAJCS8qIFNhdmUgZGF0YSBu ZWVkZWQgYnkgUkVJTkRFWCBWRVJCT1NFIGluIHByaXZhdGUgY29udGV4dCAqLw0KIAkJb2xkY29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOw0KQEAgLTMxNDMs NyArMzE5Niw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShPaWQgcmVsYXRpb25PaWQs IGludCBvcHRpb25zKQ0KIAkJCQkJCQkgZXJybXNnKCJjYW5ub3QgcmVpbmRleCBzeXN0ZW0gY2F0 YWxvZ3MgY29uY3VycmVudGx5IikpKTsNCiANCiAJCQkJLyogT3BlbiByZWxhdGlvbiB0byBnZXQg aXRzIGluZGV4ZXMgKi8NCi0JCQkJaWYgKChvcHRpb25zICYgUkVJTkRFWE9QVF9NSVNTSU5HX09L KSAhPSAwKQ0KKwkJCQlpZiAoKHBhcmFtcy0+b3B0aW9ucyAmIFJFSU5ERVhPUFRfTUlTU0lOR19P SykgIT0gMCkNCiAJCQkJew0KIAkJCQkJaGVhcFJlbGF0aW9uID0gdHJ5X3RhYmxlX29wZW4ocmVs YXRpb25PaWQsDQogCQkJCQkJCQkJCQkJICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOw0KQEAg LTMyNTAsNyArMzMwMyw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShPaWQgcmVsYXRp b25PaWQsIGludCBvcHRpb25zKQ0KIAkJY2FzZSBSRUxLSU5EX0lOREVYOg0KIAkJCXsNCiAJCQkJ T2lkCQkJaGVhcElkID0gSW5kZXhHZXRSZWxhdGlvbihyZWxhdGlvbk9pZCwNCi0JCQkJCQkJCQkJ CQkJICAob3B0aW9ucyAmIFJFSU5ERVhPUFRfTUlTU0lOR19PSykgIT0gMCk7DQorCQkJCQkJCQkJ CQkJCSAgKHBhcmFtcy0+b3B0aW9ucyAmIFJFSU5ERVhPUFRfTUlTU0lOR19PSykgIT0gMCk7DQog CQkJCVJlbGF0aW9uCWhlYXBSZWxhdGlvbjsNCiAJCQkJUmVpbmRleEluZGV4SW5mbyAqaWR4Ow0K IA0KQEAgLTMyODAsNyArMzMzMyw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShPaWQg cmVsYXRpb25PaWQsIGludCBvcHRpb25zKQ0KIAkJCQkgKiB0byByZWJ1aWxkIGlzIG5vdCBjb21w bGV0ZSB5ZXQsIGFuZCBSRUlOREVYT1BUX01JU1NJTkdfT0sNCiAJCQkJICogc2hvdWxkIG5vdCBi ZSB1c2VkIG9uY2UgYWxsIHRoZSBzZXNzaW9uIGxvY2tzIGFyZSB0YWtlbi4NCiAJCQkJICovDQot CQkJCWlmICgob3B0aW9ucyAmIFJFSU5ERVhPUFRfTUlTU0lOR19PSykgIT0gMCkNCisJCQkJaWYg KChwYXJhbXMtPm9wdGlvbnMgJiBSRUlOREVYT1BUX01JU1NJTkdfT0spICE9IDApDQogCQkJCXsN CiAJCQkJCWhlYXBSZWxhdGlvbiA9IHRyeV90YWJsZV9vcGVuKGhlYXBJZCwNCiAJCQkJCQkJCQkJ CQkgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7DQpAQCAtMzc1Nyw3ICszODEwLDcgQEAgUmVp bmRleFJlbGF0aW9uQ29uY3VycmVudGx5KE9pZCByZWxhdGlvbk9pZCwgaW50IG9wdGlvbnMpDQog CVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7DQogDQogCS8qIExvZyB3aGF0IHdlIGRpZCAqLw0K LQlpZiAob3B0aW9ucyAmIFJFSU5ERVhPUFRfVkVSQk9TRSkNCisJaWYgKChwYXJhbXMtPm9wdGlv bnMgJiBSRUlOREVYT1BUX1ZFUkJPU0UpICE9IDApDQogCXsNCiAJCWlmIChyZWxraW5kID09IFJF TEtJTkRfSU5ERVgpDQogCQkJZXJlcG9ydChJTkZPLA0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMN CmluZGV4IDk5M2RhNTZkNDMuLmQ3OWQxZmFhODIgMTAwNjQ0DQotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYw0KKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMNCkBAIC0xODU0LDYgKzE4NTQsNyBAQCBFeGVjdXRlVHJ1bmNhdGVHdXRzKExpc3QgKmV4cGxp Y2l0X3JlbHMsIExpc3QgKnJlbGlkcywgTGlzdCAqcmVsaWRzX2xvZ2dlZCwNCiAJCXsNCiAJCQlP aWQJCQloZWFwX3JlbGlkOw0KIAkJCU9pZAkJCXRvYXN0X3JlbGlkOw0KKwkJCVJlaW5kZXhQYXJh bXMgcmVpbmRleF9wYXJhbXMgPSB7MH07DQogDQogCQkJLyoNCiAJCQkgKiBUaGlzIGVmZmVjdGl2 ZWx5IGRlbGV0ZXMgYWxsIHJvd3MgaW4gdGhlIHRhYmxlLCBhbmQgbWF5IGJlIGRvbmUNCkBAIC0x ODkxLDcgKzE4OTIsOCBAQCBFeGVjdXRlVHJ1bmNhdGVHdXRzKExpc3QgKmV4cGxpY2l0X3JlbHMs IExpc3QgKnJlbGlkcywgTGlzdCAqcmVsaWRzX2xvZ2dlZCwNCiAJCQkvKg0KIAkJCSAqIFJlY29u c3RydWN0IHRoZSBpbmRleGVzIHRvIG1hdGNoLCBhbmQgd2UncmUgZG9uZS4NCiAJCQkgKi8NCi0J CQlyZWluZGV4X3JlbGF0aW9uKGhlYXBfcmVsaWQsIFJFSU5ERVhfUkVMX1BST0NFU1NfVE9BU1Qs IDApOw0KKwkJCXJlaW5kZXhfcmVsYXRpb24oaGVhcF9yZWxpZCwgUkVJTkRFWF9SRUxfUFJPQ0VT U19UT0FTVCwNCisJCQkJCQkJICZyZWluZGV4X3BhcmFtcyk7DQogCQl9DQogDQogCQlwZ3N0YXRf Y291bnRfdHJ1bmNhdGUocmVsKTsNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92 YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jDQppbmRleCBiOTdkNDhlZTAx Li40NjJmOWEwZjgyIDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMN CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jDQpAQCAtNTMwLDcgKzUzMCw3IEBA IHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLA0KICAqIEFOQUxZ WkUuDQogICovDQogYm9vbA0KLXZhY3V1bV9pc19yZWxhdGlvbl9vd25lcihPaWQgcmVsaWQsIEZv cm1fcGdfY2xhc3MgcmVsdHVwbGUsIGludCBvcHRpb25zKQ0KK3ZhY3V1bV9pc19yZWxhdGlvbl9v d25lcihPaWQgcmVsaWQsIEZvcm1fcGdfY2xhc3MgcmVsdHVwbGUsIGJpdHMzMiBvcHRpb25zKQ0K IHsNCiAJY2hhcgkgICAqcmVsbmFtZTsNCiANCkBAIC02MDQsNyArNjA0LDcgQEAgdmFjdXVtX2lz X3JlbGF0aW9uX293bmVyKE9pZCByZWxpZCwgRm9ybV9wZ19jbGFzcyByZWx0dXBsZSwgaW50IG9w dGlvbnMpDQogICogb3IgbG9ja2VkLCBhIGxvZyBpcyBlbWl0dGVkIGlmIHBvc3NpYmxlLg0KICAq Lw0KIFJlbGF0aW9uDQotdmFjdXVtX29wZW5fcmVsYXRpb24oT2lkIHJlbGlkLCBSYW5nZVZhciAq cmVsYXRpb24sIGludCBvcHRpb25zLA0KK3ZhY3V1bV9vcGVuX3JlbGF0aW9uKE9pZCByZWxpZCwg UmFuZ2VWYXIgKnJlbGF0aW9uLCBiaXRzMzIgb3B0aW9ucywNCiAJCQkJCSBib29sIHZlcmJvc2Us IExPQ0tNT0RFIGxtb2RlKQ0KIHsNCiAJUmVsYXRpb24Jb25lcmVsOw0KQEAgLTE5MTYsMTcgKzE5 MTYsMTcgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVt UGFyYW1zICpwYXJhbXMpDQogCSAqLw0KIAlpZiAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0ZV TEwpDQogCXsNCi0JCWludAkJCWNsdXN0ZXJfb3B0aW9ucyA9IDA7DQorCQlDbHVzdGVyUGFyYW1z IGNsdXN0ZXJfcGFyYW1zID0gezB9Ow0KIA0KIAkJLyogY2xvc2UgcmVsYXRpb24gYmVmb3JlIHZh Y3V1bWluZywgYnV0IGhvbGQgbG9jayB1bnRpbCBjb21taXQgKi8NCiAJCXJlbGF0aW9uX2Nsb3Nl KG9uZXJlbCwgTm9Mb2NrKTsNCiAJCW9uZXJlbCA9IE5VTEw7DQogDQogCQlpZiAoKHBhcmFtcy0+ b3B0aW9ucyAmIFZBQ09QVF9WRVJCT1NFKSAhPSAwKQ0KLQkJCWNsdXN0ZXJfb3B0aW9ucyB8PSBD TFVPUFRfVkVSQk9TRTsNCisJCQljbHVzdGVyX3BhcmFtcy5vcHRpb25zIHw9IENMVU9QVF9WRVJC T1NFOw0KIA0KIAkJLyogVkFDVVVNIEZVTEwgaXMgbm93IGEgdmFyaWFudCBvZiBDTFVTVEVSOyBz ZWUgY2x1c3Rlci5jICovDQotCQljbHVzdGVyX3JlbChyZWxpZCwgSW52YWxpZE9pZCwgY2x1c3Rl cl9vcHRpb25zKTsNCisJCWNsdXN0ZXJfcmVsKHJlbGlkLCBJbnZhbGlkT2lkLCAmY2x1c3Rlcl9w YXJhbXMpOw0KIAl9DQogCWVsc2UNCiAJCXRhYmxlX3JlbGF0aW9uX3ZhY3V1bShvbmVyZWwsIHBh cmFtcywgdmFjX3N0cmF0ZWd5KTsNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxp dHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jDQppbmRleCA1M2E1MTFmMWRhLi4xZDgx MDcxYzM1IDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMNCisrKyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jDQpAQCAtOTE3LDQ1ICs5MTcsNyBAQCBzdGFuZGFyZF9Q cm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsDQogCQkJYnJlYWs7DQogDQogCQljYXNl IFRfUmVpbmRleFN0bXQ6DQotCQkJew0KLQkJCQlSZWluZGV4U3RtdCAqc3RtdCA9IChSZWluZGV4 U3RtdCAqKSBwYXJzZXRyZWU7DQotCQkJCWludAkJCW9wdGlvbnM7DQotDQotCQkJCW9wdGlvbnMg PSBSZWluZGV4UGFyc2VPcHRpb25zKHBzdGF0ZSwgc3RtdCk7DQotCQkJCWlmICgob3B0aW9ucyAm IFJFSU5ERVhPUFRfQ09OQ1VSUkVOVExZKSAhPSAwKQ0KLQkJCQkJUHJldmVudEluVHJhbnNhY3Rp b25CbG9jayhpc1RvcExldmVsLA0KLQkJCQkJCQkJCQkJICAiUkVJTkRFWCBDT05DVVJSRU5UTFki KTsNCi0NCi0JCQkJc3dpdGNoIChzdG10LT5raW5kKQ0KLQkJCQl7DQotCQkJCQljYXNlIFJFSU5E RVhfT0JKRUNUX0lOREVYOg0KLQkJCQkJCVJlaW5kZXhJbmRleChzdG10LT5yZWxhdGlvbiwgb3B0 aW9ucywgaXNUb3BMZXZlbCk7DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIFJFSU5ERVhfT0JK RUNUX1RBQkxFOg0KLQkJCQkJCVJlaW5kZXhUYWJsZShzdG10LT5yZWxhdGlvbiwgb3B0aW9ucywg aXNUb3BMZXZlbCk7DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIFJFSU5ERVhfT0JKRUNUX1ND SEVNQToNCi0JCQkJCWNhc2UgUkVJTkRFWF9PQkpFQ1RfU1lTVEVNOg0KLQkJCQkJY2FzZSBSRUlO REVYX09CSkVDVF9EQVRBQkFTRToNCi0NCi0JCQkJCQkvKg0KLQkJCQkJCSAqIFRoaXMgY2Fubm90 IHJ1biBpbnNpZGUgYSB1c2VyIHRyYW5zYWN0aW9uIGJsb2NrOyBpZg0KLQkJCQkJCSAqIHdlIHdl cmUgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIHRoZW4gaXRzIGNvbW1pdC0gYW5kDQotCQkJCQkJICog c3RhcnQtdHJhbnNhY3Rpb24tY29tbWFuZCBjYWxscyB3b3VsZCBub3QgaGF2ZSB0aGUNCi0JCQkJ CQkgKiBpbnRlbmRlZCBlZmZlY3QhDQotCQkJCQkJICovDQotCQkJCQkJUHJldmVudEluVHJhbnNh Y3Rpb25CbG9jayhpc1RvcExldmVsLA0KLQkJCQkJCQkJCQkJCSAgKHN0bXQtPmtpbmQgPT0gUkVJ TkRFWF9PQkpFQ1RfU0NIRU1BKSA/ICJSRUlOREVYIFNDSEVNQSIgOg0KLQkJCQkJCQkJCQkJCSAg KHN0bXQtPmtpbmQgPT0gUkVJTkRFWF9PQkpFQ1RfU1lTVEVNKSA/ICJSRUlOREVYIFNZU1RFTSIg Og0KLQkJCQkJCQkJCQkJCSAgIlJFSU5ERVggREFUQUJBU0UiKTsNCi0JCQkJCQlSZWluZGV4TXVs dGlwbGVUYWJsZXMoc3RtdC0+bmFtZSwgc3RtdC0+a2luZCwgb3B0aW9ucyk7DQotCQkJCQkJYnJl YWs7DQotCQkJCQlkZWZhdWx0Og0KLQkJCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2Jq ZWN0IHR5cGU6ICVkIiwNCi0JCQkJCQkJIChpbnQpIHN0bXQtPmtpbmQpOw0KLQkJCQkJCWJyZWFr Ow0KLQkJCQl9DQotCQkJfQ0KKwkJCUV4ZWNSZWluZGV4KHBzdGF0ZSwgKFJlaW5kZXhTdG10ICop IHBhcnNldHJlZSwgaXNUb3BMZXZlbCk7DQogCQkJYnJlYWs7DQogDQogCQkJLyoNCmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0DQppbmRleCBmYjU3YjgzOTNmLi45NDMxNDJjZWQ4IDEwMDY0NA0KLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QNCisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0DQpAQCAtMzQ3LDYgKzM0Nyw3IEBAIENsb3NlUG9ydGFsU3RtdA0K IENsb3NlUHRyVHlwZQ0KIENsdW1wDQogQ2x1c3RlckluZm8NCitDbHVzdGVyUGFyYW1zDQogQ2x1 c3RlclN0bXQNCiBDbWRUeXBlDQogQ29hbGVzY2VFeHByDQpAQCAtMjA2Myw2ICsyMDY0LDcgQEAg UmVnaXN0ZXJlZEJnV29ya2VyDQogUmVpbmRleEVycm9ySW5mbw0KIFJlaW5kZXhJbmRleEluZm8N CiBSZWluZGV4T2JqZWN0VHlwZQ0KK1JlaW5kZXhQYXJhbXMNCiBSZWluZGV4U3RtdA0KIFJlaW5k ZXhUeXBlDQogUmVsRmlsZU5vZGUNCg== --=_e92ca95ba97514780925706f5c547b32--