From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH v2 3/3] tests: Add kms plane alpha blending test, v2. Date: Wed, 15 Aug 2018 12:08:51 +0200 Message-ID: <20180815100851.22219-3-maarten.lankhorst@linux.intel.com> References: <20180815100851.22219-1-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180815100851.22219-1-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: igt-dev@lists.freedesktop.org Cc: Lowry Li , Liviu Dudau , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QWRkIGEgZmV3IHRlc3RzIHRvIHRlc3QgdmFyaW91cyBibGVuZGluZyBtb2Rlcy4KClNvbWUgb2Yg dGhlIHRlc3RzIHdpbGwgc2tpcCBpZiBwaXhlbCBtb2RlIGFscGhhIGNhbm5vdCBiZSBlbmFibGVk CndpdGggcGxhbmUgYWxwaGEgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpcyBmb3IgbWFsaS1kcC4g SSBkaWRuJ3QKdGVzdCBvbiB0aGF0IHBsYXRmb3JtLCBidXQgdGVzdGVkIHdpdGggdGhlIHNhbWUg Y2hlY2sgb24gaTkxNS4KClRoZSB0ZXN0cyB3b24ndCBwYXNzIGk5MTUgb24gcHJlLWdlbjExIGh3 LiBpOTE1IGhhcyBzbWFsbCByb3VuZGluZwplcnJvcnMgd2l0aCAweGZmIGFuZCAweDAwIGFscGhh LCB3aGljaCBnaXZlcyBDUkMgbWlzbWF0Y2hlcy4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gU2VuZCB0 aGUgY29ycmVjdCB2ZXJzaW9uLCB3aXRoIHRoZSBza2lwcyBmb3IgbWFsaS1kcCBpbiBwbGFjZS4K ClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+Ci0tLQogbGliL2lndF9rbXMuYyAgICAgICAgICAgICAgICAgfCAgIDIgKwog bGliL2lndF9rbXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgKwogdGVzdHMvTWFrZWZpbGUuc291 cmNlcyAgICAgICAgfCAgIDEgKwogdGVzdHMva21zX3BsYW5lX2FscGhhX2JsZW5kLmMgfCA1NzEg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAg ICAgICAgICAgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCA1NzcgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19wbGFuZV9hbHBoYV9ibGVuZC5jCgpkaWZmIC0tZ2l0 IGEvbGliL2lndF9rbXMuYyBiL2xpYi9pZ3Rfa21zLmMKaW5kZXggNjJkODQ2ODQxNWM2Li43MDM3 M2JjMzczYTkgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3Rfa21zLmMKKysrIGIvbGliL2lndF9rbXMuYwpA QCAtMTc1LDYgKzE3NSw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBpZ3RfcGxhbmVfcHJvcF9uYW1l c1tJR1RfTlVNX1BMQU5FX1BST1BTXSA9IHsKIAlbSUdUX1BMQU5FX0lOX0ZPUk1BVFNdID0gIklO X0ZPUk1BVFMiLAogCVtJR1RfUExBTkVfQ09MT1JfRU5DT0RJTkddID0gIkNPTE9SX0VOQ09ESU5H IiwKIAlbSUdUX1BMQU5FX0NPTE9SX1JBTkdFXSA9ICJDT0xPUl9SQU5HRSIsCisJW0lHVF9QTEFO RV9QSVhFTF9CTEVORF9NT0RFXSA9ICJwaXhlbCBibGVuZCBtb2RlIiwKKwlbSUdUX1BMQU5FX0FM UEhBXSA9ICJhbHBoYSIsCiB9OwogCiBjb25zdCBjaGFyICogY29uc3QgaWd0X2NydGNfcHJvcF9u YW1lc1tJR1RfTlVNX0NSVENfUFJPUFNdID0gewpkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuaCBi L2xpYi9pZ3Rfa21zLmgKaW5kZXggM2ExMmYyNzgyZWVkLi5mMDUwOWI1MWEwMzggMTAwNjQ0Ci0t LSBhL2xpYi9pZ3Rfa21zLmgKKysrIGIvbGliL2lndF9rbXMuaApAQCAtMjY2LDYgKzI2Niw4IEBA IGVudW0gaWd0X2F0b21pY19wbGFuZV9wcm9wZXJ0aWVzIHsKICAgICAgICBJR1RfUExBTkVfSU5f Rk9STUFUUywKICAgICAgICBJR1RfUExBTkVfQ09MT1JfRU5DT0RJTkcsCiAgICAgICAgSUdUX1BM QU5FX0NPTE9SX1JBTkdFLAorICAgICAgIElHVF9QTEFORV9QSVhFTF9CTEVORF9NT0RFLAorICAg ICAgIElHVF9QTEFORV9BTFBIQSwKICAgICAgICBJR1RfTlVNX1BMQU5FX1BST1BTCiB9OwogCmRp ZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwppbmRleCBjODQ5MzNmMWQ5NzEuLmUxN2ViM2NiMjAyOSAxMDA2NDQKLS0tIGEvdGVzdHMvTWFr ZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xOTQsNiArMTk0 LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCiAJa21zX3BpcGVfYl9jX2l2YiBcCiAJa21zX3BpcGVfY3Jj X2Jhc2ljIFwKIAlrbXNfcGxhbmUgXAorCWttc19wbGFuZV9hbHBoYV9ibGVuZCBcCiAJa21zX3Bs YW5lX2xvd3JlcyBcCiAJa21zX3BsYW5lX211bHRpcGxlIFwKIAlrbXNfcGxhbmVfc2NhbGluZyBc CmRpZmYgLS1naXQgYS90ZXN0cy9rbXNfcGxhbmVfYWxwaGFfYmxlbmQuYyBiL3Rlc3RzL2ttc19w bGFuZV9hbHBoYV9ibGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uM2FhOGYyOTVhN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva21zX3BsYW5lX2FscGhh X2JsZW5kLmMKQEAgLTAsMCArMSw1NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRl bCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOgorICogICBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5r aG9yc3RAbGludXguaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKworSUdUX1RF U1RfREVTQ1JJUFRJT04oIlRlc3QgcGxhbmUgYWxwaGEgYW5kIGJsZW5kaW5nIG1vZGUgcHJvcGVy dGllcyIpOworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGdmeF9mZDsKKwlpZ3RfZGlzcGxheV90 IGRpc3BsYXk7CisJc3RydWN0IGlndF9mYiB4cmdiX2ZiLCBhcmdiX2ZiXzAsIGFyZ2JfZmJfY292 XzAsIGFyZ2JfZmJfN2UsIGFyZ2JfZmJfY292XzdlLCBhcmdiX2ZiX2ZjLCBhcmdiX2ZiX2Nvdl9m YywgYXJnYl9mYl8xMDAsIGJsYWNrX2ZiLCBncmF5X2ZiOworCWlndF9jcmNfdCByZWZfY3JjOwor CWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKK30gZGF0YV90OworCitzdGF0aWMgdm9pZCBfX2Ry YXdfZ3JhZGllbnQoc3RydWN0IGlndF9mYiAqZmIsIGludCB3LCBpbnQgaCwgZG91YmxlIGEsIGNh aXJvX3QgKmNyKQoreworCWNhaXJvX3BhdHRlcm5fdCAqcGF0OworCisJcGF0ID0gY2Fpcm9fcGF0 dGVybl9jcmVhdGVfbGluZWFyKDAsIDAsIHcsIGgpOworCWNhaXJvX3BhdHRlcm5fYWRkX2NvbG9y X3N0b3BfcmdiYShwYXQsIDAuMDAsIDAuMDAsIDAuMDAsIDAuMDAsIDEuKTsKKwljYWlyb19wYXR0 ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEocGF0LCAwLjI1LCAxLjAwLCAxLjAwLCAwLjAwLCAxLik7 CisJY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKHBhdCwgMC41MCwgMC4wMCwgMS4w MCwgMS4wMCwgMS4pOworCWNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXQsIDAu NzUsIDEuMDAsIDAuMDAsIDEuMDAsIDEuKTsKKwljYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9w X3JnYmEocGF0LCAxLjAwLCAxLjAwLCAxLjAwLCAxLjAwLCAxLik7CisKKwljYWlyb19yZWN0YW5n bGUoY3IsIDAsIDAsIHcsIGgpOworCWNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdCk7CisJY2Fpcm9f c2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworCWNhaXJvX3BhaW50X3dp dGhfYWxwaGEoY3IsIGEpOworCWNhaXJvX3BhdHRlcm5fZGVzdHJveShwYXQpOworfQorCitzdGF0 aWMgdm9pZCBkcmF3X2dyYWRpZW50KHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgdywgaW50IGgsIGRv dWJsZSBhKQoreworCWNhaXJvX3QgKmNyID0gaWd0X2dldF9jYWlyb19jdHgoZmItPmZkLCBmYik7 CisKKwlfX2RyYXdfZ3JhZGllbnQoZmIsIHcsIGgsIGEsIGNyKTsKKworCWlndF9wdXRfY2Fpcm9f Y3R4KGZiLT5mZCwgZmIsIGNyKTsKK30KKworc3RhdGljIHZvaWQgZHJhd19ncmFkaWVudF9jb3Zl cmFnZShzdHJ1Y3QgaWd0X2ZiICpmYiwgaW50IHcsIGludCBoLCB1aW50OF90IGEpCit7CisJY2Fp cm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChmYi0+ZmQsIGZiKTsKKwl1aW50OF90ICpkYXRh ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmYi0+Y2Fpcm9fc3VyZmFjZSk7CisJdWlu dDMyX3Qgc3RyaWRlID0gZmItPnN0cmlkZTsKKwlpbnQgaTsKKworCV9fZHJhd19ncmFkaWVudChm YiwgdywgaCwgMS4sIGNyKTsKKworCWZvciAoOyBoLS07IGRhdGEgKz0gc3RyaWRlKQorCQlmb3Ig KGkgPSAwOyBpIDwgdzsgaSsrKQorCQkJZGF0YVtpICogNCArIDNdID0gYTsKKworCWlndF9wdXRf Y2Fpcm9fY3R4KGZiLT5mZCwgZmIsIGNyKTsKK30KKworc3RhdGljIHZvaWQgZHJhd19zcXVhcmVz KHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgdywgaW50IGgsIGRvdWJsZSBhKQoreworCWNhaXJvX3Qg KmNyID0gaWd0X2dldF9jYWlyb19jdHgoZmItPmZkLCBmYik7CisKKwlpZ3RfcGFpbnRfY29sb3Jf YWxwaGEoY3IsIDAsIDAsICAgICAgICAgdyAvIDIsIGggLyAyLCAxLiwgMC4sIDAuLCBhKTsKKwlp Z3RfcGFpbnRfY29sb3JfYWxwaGEoY3IsIHcgLyAyLCAwLCAgICAgdyAvIDIsIGggLyAyLCAwLiwg MS4sIDAuLCBhKTsKKwlpZ3RfcGFpbnRfY29sb3JfYWxwaGEoY3IsIDAsIGggLyAyLCAgICAgdyAv IDIsIGggLyAyLCAwLiwgMC4sIDEuLCBhKTsKKwlpZ3RfcGFpbnRfY29sb3JfYWxwaGEoY3IsIHcg LyAyLCBoIC8gMiwgdyAvIDQsIGggLyAyLCAxLiwgMS4sIDEuLCBhKTsKKwlpZ3RfcGFpbnRfY29s b3JfYWxwaGEoY3IsIDMgKiB3IC8gNCwgaCAvIDIsIHcgLyA0LCBoIC8gMiwgMC4sIDAuLCAwLiwg YSk7CisKKwlpZ3RfcHV0X2NhaXJvX2N0eChmYi0+ZmQsIGZiLCBjcik7Cit9CisKK3N0YXRpYyB2 b2lkIGRyYXdfc3F1YXJlc19jb3ZlcmFnZShzdHJ1Y3QgaWd0X2ZiICpmYiwgaW50IHcsIGludCBo LCB1aW50OF90IGFzKQoreworCWNhaXJvX3QgKmNyID0gaWd0X2dldF9jYWlyb19jdHgoZmItPmZk LCBmYik7CisJaW50IGksIGo7CisJdWludDMyX3QgKmRhdGEgPSAodm9pZCAqKWNhaXJvX2ltYWdl X3N1cmZhY2VfZ2V0X2RhdGEoZmItPmNhaXJvX3N1cmZhY2UpOworCXVpbnQzMl90IHN0cmlkZSA9 IGZiLT5zdHJpZGUgLyA0OworCXVpbnQzMl90IGEgPSBhcyA8PCAyNDsKKworCWZvciAoaiA9IDA7 IGogPCBoIC8gMjsgaisrKSB7CisJCWZvciAoaSA9IDA7IGkgPCB3IC8gMjsgaSsrKQorCQkJZGF0 YVtqICogc3RyaWRlICsgaV0gPSBhIHwgMHhmZjAwMDA7CisKKwkJZm9yICg7IGkgPCB3OyBpKysp CisJCQlkYXRhW2ogKiBzdHJpZGUgKyBpXSA9IGEgfCAweGZmMDA7CisJfQorCisJZm9yIChqID0g aCAvIDI7IGogPCBoOyBqKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHcgLyAyOyBpKyspCisJCQlk YXRhW2ogKiBzdHJpZGUgKyBpXSA9IGEgfCAweGZmOworCisJCWZvciAoOyBpIDwgMyAqIHcgLyA0 OyBpKyspCisJCQlkYXRhW2ogKiBzdHJpZGUgKyBpXSA9IGEgfCAweGZmZmZmZjsKKworCQlmb3Ig KDsgaSA8IHc7IGkrKykKKwkJCWRhdGFbaiAqIHN0cmlkZSArIGldID0gYTsKKwl9CisKKwlpZ3Rf cHV0X2NhaXJvX2N0eChmYi0+ZmQsIGZiLCBjcik7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2Fs cGhhKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gcGlwZSBwaXBlKQoreworCWlndF9wbGFu ZV90ICpwbGFuZTsKKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxh bmUpIHsKKwkJaWYgKGlndF9wbGFuZV9oYXNfcHJvcChwbGFuZSwgSUdUX1BMQU5FX0FMUEhBKSkK KwkJCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0FMUEhBLCAweGZm ZmYpOworCisJCWlmIChpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElHVF9QTEFORV9QSVhFTF9C TEVORF9NT0RFKSkKKwkJCWlndF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJR1RfUExBTkVf UElYRUxfQkxFTkRfTU9ERSwgIlByZS1tdWx0aXBsaWVkIik7CisJfQorfQorCitzdGF0aWMgYm9v bCBoYXNfbXVsdGlwbGllZF9hbHBoYShkYXRhX3QgKmRhdGEsIGlndF9wbGFuZV90ICpwbGFuZSkK K3sKKwlpbnQgcmV0OworCisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExB TkVfQUxQSEEsIDB4ODA4MCk7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2Jf ZmJfMTAwKTsKKwlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlz cGxheSwKKwkJRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01JQ19BTExP V19NT0RFU0VULCBOVUxMKTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9Q TEFORV9BTFBIQSwgMHhmZmZmKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwor CXJldHVybiByZXQgPT0gMDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9jcnRjKGRhdGFfdCAq ZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBwaXBlKQoreworCWRybU1vZGVN b2RlSW5mbyAqbW9kZTsKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7 CisJaW50IHcsIGg7CisJaWd0X3BsYW5lX3QgKnByaW1hcnkgPSBpZ3RfcGlwZV9nZXRfcGxhbmVf dHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCisJ aWd0X2Rpc3BsYXlfcmVzZXQoZGlzcGxheSk7CisJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQs IHBpcGUpOworCisJLyogY3JlYXRlIHRoZSBwaXBlX2NyYyBvYmplY3QgZm9yIHRoaXMgcGlwZSAq LworCWlndF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjKTsKKwlkYXRhLT5waXBlX2NyYyA9 IGlndF9waXBlX2NyY19uZXcoZGF0YS0+Z2Z4X2ZkLCBwaXBlLCBJTlRFTF9QSVBFX0NSQ19TT1VS Q0VfQVVUTyk7CisKKwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCXcgPSBt b2RlLT5oZGlzcGxheTsKKwloID0gbW9kZS0+dmRpc3BsYXk7CisKKwkvKiByZWNyZWF0ZSBhbGwg ZmJzIGlmIGluY29tcGF0aWJsZSAqLworCWlmIChkYXRhLT54cmdiX2ZiLndpZHRoICE9IHcgfHwg ZGF0YS0+eHJnYl9mYi5oZWlnaHQgIT0gaCkgeworCQljYWlyb190ICpjcjsKKworCQlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPnhyZ2JfZmIpOworCQlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmdmeF9mZCwgJmRhdGEtPmFyZ2JfZmJfMCk7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4 X2ZkLCAmZGF0YS0+YXJnYl9mYl9jb3ZfMCk7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2Zk LCAmZGF0YS0+YXJnYl9mYl83ZSk7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0 YS0+YXJnYl9mYl9mYyk7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+YXJn Yl9mYl9jb3ZfN2UpOworCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPmFyZ2Jf ZmJfY292X2ZjKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5hcmdiX2Zi XzEwMCk7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+YmxhY2tfZmIpOwor CQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPmdyYXlfZmIpOworCisJCWlndF9j cmVhdGVfZmIoZGF0YS0+Z2Z4X2ZkLCB3LCBoLAorCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4 OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCSAgICAgICZkYXRhLT54cmdiX2ZiKTsK KwkJZHJhd19ncmFkaWVudCgmZGF0YS0+eHJnYl9mYiwgdywgaCwgMS4pOworCisJCWlndF9jcmVh dGVfZmIoZGF0YS0+Z2Z4X2ZkLCB3LCBoLAorCQkJICAgICAgRFJNX0ZPUk1BVF9BUkdCODg4OCwg TE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCSAgICAgICZkYXRhLT5hcmdiX2ZiX2Nvdl8w KTsKKwkJZHJhd19ncmFkaWVudF9jb3ZlcmFnZSgmZGF0YS0+YXJnYl9mYl9jb3ZfMCwgdywgaCwg MCk7CisKKwkJaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1f Rk9STUFUX0FSR0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRh dGEtPmFyZ2JfZmJfMCk7CisKKwkJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5nZnhfZmQs ICZkYXRhLT5hcmdiX2ZiXzApOworCQlpZ3RfcGFpbnRfY29sb3JfYWxwaGEoY3IsIDAsIDAsIHcs IGgsIDAuLCAwLiwgMC4sIDEuMCk7CisJCWlndF9wdXRfY2Fpcm9fY3R4KGRhdGEtPmdmeF9mZCwg JmRhdGEtPmFyZ2JfZmJfMCwgY3IpOworCisJCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4X2ZkLCB3 LCBoLAorCQkJICAgICAgRFJNX0ZPUk1BVF9BUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0Rf Tk9ORSwKKwkJCSAgICAgICZkYXRhLT5hcmdiX2ZiXzdlKTsKKwkJZHJhd19zcXVhcmVzKCZkYXRh LT5hcmdiX2ZiXzdlLCB3LCBoLCAxMjYuIC8gMjU1Lik7CisKKwkJaWd0X2NyZWF0ZV9mYihkYXRh LT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFUX0FSR0I4ODg4LCBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPmFyZ2JfZmJfY292XzdlKTsKKwkJZHJh d19zcXVhcmVzX2NvdmVyYWdlKCZkYXRhLT5hcmdiX2ZiX2Nvdl83ZSwgdywgaCwgMHg3ZSk7CisK KwkJaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFU X0FSR0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPmFy Z2JfZmJfZmMpOworCQlkcmF3X3NxdWFyZXMoJmRhdGEtPmFyZ2JfZmJfZmMsIHcsIGgsIDI1Mi4g LyAyNTUuKTsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCSAgICAg IERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkgICAg ICAmZGF0YS0+YXJnYl9mYl9jb3ZfZmMpOworCQlkcmF3X3NxdWFyZXNfY292ZXJhZ2UoJmRhdGEt PmFyZ2JfZmJfY292X2ZjLCB3LCBoLCAweGZjKTsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdm eF9mZCwgdywgaCwKKwkJCSAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JN QVRfTU9EX05PTkUsCisJCQkgICAgICAmZGF0YS0+YXJnYl9mYl8xMDApOworCQlkcmF3X2dyYWRp ZW50KCZkYXRhLT5hcmdiX2ZiXzEwMCwgdywgaCwgMS4pOworCisJCWlndF9jcmVhdGVfZmIoZGF0 YS0+Z2Z4X2ZkLCB3LCBoLAorCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfRFJN X0ZPUk1BVF9NT0RfTk9ORSwKKwkJCSAgICAgICZkYXRhLT5ibGFja19mYik7CisKKwkJaWd0X2Ny ZWF0ZV9jb2xvcl9mYihkYXRhLT5nZnhfZmQsIHcsIGgsCisJCQkJICAgIERSTV9GT1JNQVRfWFJH Qjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJICAgIC41LCAuNSwgLjUsICZk YXRhLT5ncmF5X2ZiKTsKKwl9CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZkYXRhLT5i bGFja19mYik7CisJLyogcmVzZXQgYWxwaGEgcHJvcGVydHkgdG8gZGVmYXVsdCAqLworCXJlc2V0 X2FscGhhKGRpc3BsYXksIHBpcGUpOworfQorCitzdGF0aWMgdm9pZCBiYXNpY19hbHBoYShkYXRh X3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjLCBj cmM7CisJaW50IGk7CisKKwkvKiBUZXN0Y2FzZSAxOiBhbHBoYSA9IDAuMCwgcGxhbmUgc2hvdWxk IGJlIHRyYW5zcGFyYW50LiAqLworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlU X0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKKwlpZ3RfcGlw ZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOworCisJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfMCk7CisKKwkvKiB0cmFuc3BhcmFudCBmYiBz aG91bGQgYmUgdHJhbnNwYXJhbnQsIG5vIG1hdHRlciB3aGF0Li4gKi8KKwlmb3IgKGkgPSA3OyBp IDwgMjU2OyBpICs9IDgpIHsKKwkJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1Rf UExBTkVfQUxQSEEsIGkgfCAoaSA8PCA4KSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxh eSwgQ09NTUlUX0FUT01JQyk7CisKKwkJaWd0X3BpcGVfY3JjX2dldF9jdXJyZW50KGRpc3BsYXkt PmRybV9mZCwgZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgm cmVmX2NyYywgJmNyYyk7CisJfQorCisJLyogQW5kIHRlc3QgYWxwaGEgPSAwLCBzaG91bGQgZ2l2 ZSBzYW1lIENSQywgYnV0IGRvZXNuJ3Qgb24gc29tZSBpOTE1IHBsYXRmb3Jtcy4gKi8KKwlpZ3Rf cGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9BTFBIQSwgMCk7CisJaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCWlndF9waXBlX2NyY19n ZXRfY3VycmVudChkaXNwbGF5LT5kcm1fZmQsIGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKKwlpZ3Rf cGlwZV9jcmNfc3RvcChkYXRhLT5waXBlX2NyYyk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJl Zl9jcmMsICZjcmMpOworfQorCitzdGF0aWMgdm9pZCBhcmdiX29wYXF1ZShkYXRhX3QgKmRhdGEs IGVudW0gcGlwZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjLCBjcmM7CisKKwkv KiBhbHBoYSA9IDEuMCwgcGxhbmUgc2hvdWxkIGJlIGZ1bGx5IG9wYXF1ZSwgdGVzdCB3aXRoIGFu IG9wYXF1ZSBmYiAqLworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT54cmdiX2ZiKTsK KwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBl X2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOworCisJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfMTAwKTsKKwlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRh LT5waXBlX2NyYywgJmNyYyk7CisKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyYywgJmNy Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGFyZ2JfdHJhbnNwYXJhbnQoZGF0YV90ICpkYXRhLCBlbnVt IHBpcGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3Bs YXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYywgY3JjOworCisJLyogYWxw aGEgPSAxLjAsIHBsYW5lIHNob3VsZCBiZSBmdWxseSBvcGFxdWUsIHRlc3Qgd2l0aCBhIHRyYW5z cGFyYW50IGZiICovCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisJaWd0X2Rpc3Bs YXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVj dF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsICZkYXRhLT5hcmdiX2ZiXzApOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09N TUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAm Y3JjKTsKKworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKK30KKworc3Rh dGljIHZvaWQgY29uc3RhbnRfYWxwaGFfbWluKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUs IGlndF9wbGFuZV90ICpwbGFuZSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEt PmRpc3BsYXk7CisJaWd0X2NyY190IHJlZl9jcmMsIGNyYzsKKworCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsIE5VTEwpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01J Qyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7 CisKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfZW51bShwbGFuZSwgSUdUX1BMQU5FX1BJWEVMX0JMRU5E X01PREUsICJOb25lIik7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExB TkVfQUxQSEEsIDApOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiXzEw MCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3Rf cGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWlndF9hc3NlcnRf Y3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZk YXRhLT5hcmdiX2ZiXzApOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FU T01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsK KwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyYywgJmNyYyk7Cit9CisKK3N0YXRpYyB2b2lk IGNvbnN0YW50X2FscGhhX21pZChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3RfcGxh bmVfdCAqcGxhbmUpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5 OworCWlndF9jcmNfdCByZWZfY3JjLCBjcmM7CisKKwlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BM QU5FX1RZUEVfUFJJTUFSWSkKKwkJaWd0X3BsYW5lX3NldF9mYihpZ3RfcGlwZV9nZXRfcGxhbmVf dHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpLCAmZGF0 YS0+Z3JheV9mYik7CisKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfZW51bShwbGFuZSwgSUdUX1BMQU5F X1BJWEVMX0JMRU5EX01PREUsICJOb25lIik7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBs YW5lLCBJR1RfUExBTkVfQUxQSEEsIDB4N2ZmZik7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwg JmRhdGEtPnhyZ2JfZmIpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FU T01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2Ny Yyk7CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+YXJnYl9mYl9jb3ZfMCk7CisJ aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2Vx dWFsKCZyZWZfY3JjLCAmY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5h cmdiX2ZiXzEwMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlD KTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWln dF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKK30KKworc3RhdGljIHZvaWQgY29u c3RhbnRfYWxwaGFfbWF4KGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9wbGFuZV90 ICpwbGFuZSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJ aWd0X2NyY190IHJlZl9jcmMsIGNyYzsKKworCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVf VFlQRV9QUklNQVJZKQorCQlpZ3RfcGxhbmVfc2V0X2ZiKGlndF9waXBlX2dldF9wbGFuZV90eXBl KCZkaXNwbGF5LT5waXBlc1twaXBlXSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSksICZkYXRhLT5n cmF5X2ZiKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiXzEwMCk7 CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlw ZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKworCWlndF9wbGFu ZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJR1RfUExBTkVfUElYRUxfQkxFTkRfTU9ERSwgIk5vbmUi KTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9w aXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJaWd0X2Fzc2VydF9j cmNfZXF1YWwoJnJlZl9jcmMsICZjcmMpOworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRh dGEtPmFyZ2JfZmJfY292XzApOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlU X0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3Jj KTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyYywgJmNyYyk7CisKKwlpZ3RfcGxhbmVf c2V0X2ZiKHBsYW5lLCAmZGF0YS0+eHJnYl9mYik7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNw bGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlw ZV9jcmMsICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKwor CWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBhbHBoYV83 ZWZjKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9wbGFuZV90ICpwbGFuZSkKK3sK KwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IHJl Zl9jcmMgPSB7fSwgY3JjID0ge307CisJaW50IGk7CisKKwlpZiAocGxhbmUtPnR5cGUgIT0gRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSkKKwkJaWd0X3BsYW5lX3NldF9mYihpZ3RfcGlwZV9nZXRfcGxh bmVfdHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpLCAm ZGF0YS0+Z3JheV9mYik7CisKKwlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOwor CisJLyogZm9yIGNvdmVyYWdlLCBwbGFuZSBhbHBoYSBhbmQgZmIgYWxwaGEgc2hvdWxkIGJlIHN3 YXBwYWJsZSwgc28gc3dhcCBmYiBhbmQgYWxwaGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBp ICs9IDgpIHsKKwkJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQ SEEsICgoaS8yKSA8PCA4KSB8IChpLzIpKTsKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRh dGEtPmFyZ2JfZmJfZmMpOworCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9B VE9NSUMpOworCisJCWlndF9waXBlX2NyY19nZXRfY3VycmVudChkaXNwbGF5LT5kcm1fZmQsIGRh dGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwkJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBs YW5lLCBJR1RfUExBTkVfQUxQSEEsIChpIDw8IDgpIHwgaSk7CisJCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsICZkYXRhLT5hcmdiX2ZiXzdlKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5 LCBDT01NSVRfQVRPTUlDKTsKKworCQlpZ3RfcGlwZV9jcmNfZ2V0X2N1cnJlbnQoZGlzcGxheS0+ ZHJtX2ZkLCBkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZy ZWZfY3JjLCAmY3JjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvdmVyYWdlXzdlZmMoZGF0YV90 ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNw bGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYyA9IHt9 LCBjcmMgPSB7fTsKKwlpbnQgaTsKKworCWlndF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJ R1RfUExBTkVfUElYRUxfQkxFTkRfTU9ERSwgIkNvdmVyYWdlIik7CisJaWd0X3BpcGVfY3JjX3N0 YXJ0KGRhdGEtPnBpcGVfY3JjKTsKKworCS8qIGZvciBjb3ZlcmFnZSwgcGxhbmUgYWxwaGEgYW5k IGZiIGFscGhhIHNob3VsZCBiZSBzd2FwcGFibGUsIHNvIHN3YXAgZmIgYW5kIGFscGhhICovCisJ Zm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA4KSB7CisJCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1 ZShwbGFuZSwgSUdUX1BMQU5FX0FMUEhBLCAoKGkvMikgPDwgOCkgfCAoaS8yKSk7CisJCWlndF9w bGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiX2Nvdl9mYyk7CisJCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwkJaWd0X3BpcGVfY3JjX2dldF9j dXJyZW50KGRpc3BsYXktPmRybV9mZCwgZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKworCQlp Z3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9BTFBIQSwgKGkgPDwgOCkg fCBpKTsKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfY292XzdlKTsK KwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCQlpZ3Rf cGlwZV9jcmNfZ2V0X2N1cnJlbnQoZGlzcGxheS0+ZHJtX2ZkLCBkYXRhLT5waXBlX2NyYywgJmNy Yyk7CisJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIGNvdmVyYWdlX3ByZW11bHRfY29uc3RhbnQoZGF0YV90ICpkYXRhLCBlbnVtIHBp cGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYyA9IHt9LCBjcmMgPSB7fTsKKwor CS8qIFNldCBhIGJhY2tncm91bmQgY29sb3Igb24gdGhlIHByaW1hcnkgZmIgZm9yIHRlc3Rpbmcg Ki8KKwlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKKwkJaWd0X3Bs YW5lX3NldF9mYihpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0s IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpLCAmZGF0YS0+Z3JheV9mYik7CisKKwlpZ3RfcGxhbmVf c2V0X3Byb3BfZW51bShwbGFuZSwgSUdUX1BMQU5FX1BJWEVMX0JMRU5EX01PREUsICJDb3ZlcmFn ZSIpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiX2Nvdl83ZSk7CisJ aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9j cmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOworCWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEt PnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfZW51bShwbGFuZSwg SUdUX1BMQU5FX1BJWEVMX0JMRU5EX01PREUsICJQcmUtbXVsdGlwbGllZCIpOworCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiXzdlKTsKKwlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBlX2NyY19nZXRfY3VycmVudChkaXNw bGF5LT5kcm1fZmQsIGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVh bCgmcmVmX2NyYywgJmNyYyk7CisKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfZW51bShwbGFuZSwgSUdU X1BMQU5FX1BJWEVMX0JMRU5EX01PREUsICJOb25lIik7CisJaWd0X3BsYW5lX3NldF9wcm9wX3Zh bHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEsIDB4N2U3ZSk7CisJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgJmRhdGEtPmFyZ2JfZmJfY292XzdlKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3Bs YXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBlX2NyY19nZXRfY3VycmVudChkaXNwbGF5LT5k cm1fZmQsIGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVm X2NyYywgJmNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl90ZXN0X29uX3BpcGVfcGxhbmVzKGRh dGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGJvb2wgYmxlbmQsCisJCQkJICAgIGJvb2wgbXVz dF9tdWx0aXBseSwKKwkJCQkgICAgdm9pZCgqdGVzdCkoZGF0YV90ICosIGVudW0gcGlwZSwgaWd0 X3BsYW5lX3QgKikpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5 OworCWlndF9vdXRwdXRfdCAqb3V0cHV0ID0gaWd0X2dldF9zaW5nbGVfb3V0cHV0X2Zvcl9waXBl KGRpc3BsYXksIHBpcGUpOworCWlndF9wbGFuZV90ICpwbGFuZTsKKwlib29sIGZvdW5kID0gZmFs c2U7CisJYm9vbCBtdWx0aXBseSA9IGZhbHNlOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShk aXNwbGF5LCBwaXBlLCBwbGFuZSkgeworCQlpZiAoIWlndF9wbGFuZV9oYXNfcHJvcChwbGFuZSwg SUdUX1BMQU5FX0FMUEhBKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChibGVuZCAmJiAhaWd0X3Bs YW5lX2hhc19wcm9wKHBsYW5lLCBJR1RfUExBTkVfUElYRUxfQkxFTkRfTU9ERSkpCisJCQljb250 aW51ZTsKKworCQlwcmVwYXJlX2NydGMoZGF0YSwgb3V0cHV0LCBwaXBlKTsKKworCQkvKiByZXNl dCBwbGFuZSBhbHBoYSBwcm9wZXJ0aWVzIGJldHdlZW4gZWFjaCBwbGFuZSAqLworCQlyZXNldF9h bHBoYShkaXNwbGF5LCBwaXBlKTsKKworCQlmb3VuZCA9IHRydWU7CisJCWlmIChtdXN0X211bHRp cGx5ICYmICFoYXNfbXVsdGlwbGllZF9hbHBoYShkYXRhLCBwbGFuZSkpCisJCQljb250aW51ZTsK KwkJbXVsdGlwbHkgPSB0cnVlOworCisJCWlndF9pbmZvKCJUZXN0aW5nIHBsYW5lICV1XG4iLCBw bGFuZS0+aW5kZXgpOworCQl0ZXN0KGRhdGEsIHBpcGUsIHBsYW5lKTsKKwkJaWd0X3BsYW5lX3Nl dF9mYihwbGFuZSwgTlVMTCk7CisJfQorCisJaWd0X3JlcXVpcmVfZihmb3VuZCwgIk5vIHBsYW5l cyB3aXRoICVzIHByb3BlcnR5IGZvdW5kXG4iLAorCQkgICAgICBibGVuZCA/ICJwaXhlbCBibGVu ZGluZyBtb2RlIiA6ICJhbHBoYSIpOworCWlndF9yZXF1aXJlX2YobXVsdGlwbHksICJNdWx0aXBs aWVkIChwbGFuZSB4IHBpeGVsKSBhbHBoYSBub3QgYXZhaWxhYmxlXG4iKTsKK30KKworc3RhdGlj IHZvaWQgcnVuX3N1YnRlc3RzKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCit7CisJaWd0 X2ZpeHR1cmUgeworCQlib29sIGZvdW5kID0gZmFsc2U7CisJCWlndF9wbGFuZV90ICpwbGFuZTsK KworCQlpZ3RfZGlzcGxheV9yZXF1aXJlX291dHB1dF9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LCBw aXBlKTsKKwkJZm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwgcGxh bmUpIHsKKwkJCWlmICghaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEp KQorCQkJCWNvbnRpbnVlOworCisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJ CWlndF9yZXF1aXJlX2YoZm91bmQsICJGb3VuZCBubyBwbGFuZSBvbiBwaXBlICVzIHdpdGggYWxw aGEgYmxlbmRpbmcgc3VwcG9ydGVkXG4iLAorCQkJICAgICAga21zdGVzdF9waXBlX25hbWUocGlw ZSkpOworCX0KKworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtYWxwaGEtYmFzaWMiLCBrbXN0ZXN0 X3BpcGVfbmFtZShwaXBlKSkKKwkJcnVuX3Rlc3Rfb25fcGlwZV9wbGFuZXMoZGF0YSwgcGlwZSwg ZmFsc2UsIHRydWUsIGJhc2ljX2FscGhhKTsKKworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtYWxw aGEtN2VmYyIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3Bs YW5lcyhkYXRhLCBwaXBlLCBmYWxzZSwgdHJ1ZSwgYWxwaGFfN2VmYyk7CisKKwlpZ3Rfc3VidGVz dF9mKCJwaXBlLSVzLWNvdmVyYWdlLTdlZmMiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJ cnVuX3Rlc3Rfb25fcGlwZV9wbGFuZXMoZGF0YSwgcGlwZSwgdHJ1ZSwgdHJ1ZSwgY292ZXJhZ2Vf N2VmYyk7CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWNvdmVyYWdlLXZzLXByZW11bHQtdnMt Y29uc3RhbnQiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJcnVuX3Rlc3Rfb25fcGlwZV9w bGFuZXMoZGF0YSwgcGlwZSwgdHJ1ZSwgZmFsc2UsIGNvdmVyYWdlX3ByZW11bHRfY29uc3RhbnQp OworCisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1hbHBoYS10cmFuc3BhcmFudC1mYiIsIGttc3Rl c3RfcGlwZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3BsYW5lcyhkYXRhLCBwaXBl LCBmYWxzZSwgZmFsc2UsIGFyZ2JfdHJhbnNwYXJhbnQpOworCisJaWd0X3N1YnRlc3RfZigicGlw ZS0lcy1hbHBoYS1vcGFxdWUtZmIiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJcnVuX3Rl c3Rfb25fcGlwZV9wbGFuZXMoZGF0YSwgcGlwZSwgZmFsc2UsIGZhbHNlLCBhcmdiX29wYXF1ZSk7 CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWNvbnN0YW50LWFscGhhLW1pbiIsIGttc3Rlc3Rf cGlwZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3BsYW5lcyhkYXRhLCBwaXBlLCB0 cnVlLCBmYWxzZSwgY29uc3RhbnRfYWxwaGFfbWluKTsKKworCWlndF9zdWJ0ZXN0X2YoInBpcGUt JXMtY29uc3RhbnQtYWxwaGEtbWlkIiwga21zdGVzdF9waXBlX25hbWUocGlwZSkpCisJCXJ1bl90 ZXN0X29uX3BpcGVfcGxhbmVzKGRhdGEsIHBpcGUsIHRydWUsIGZhbHNlLCBjb25zdGFudF9hbHBo YV9taWQpOworCisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jb25zdGFudC1hbHBoYS1tYXgiLCBr bXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJcnVuX3Rlc3Rfb25fcGlwZV9wbGFuZXMoZGF0YSwg cGlwZSwgdHJ1ZSwgZmFsc2UsIGNvbnN0YW50X2FscGhhX21heCk7Cit9CisKK2lndF9tYWluCit7 CisJZGF0YV90IGRhdGEgPSB7fTsKKwllbnVtIHBpcGUgcGlwZTsKKworCWlndF9maXh0dXJlIHsK KwkJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOworCisJCWRhdGEuZ2Z4X2ZkID0gZHJtX29wZW5f ZHJpdmVyKERSSVZFUl9BTlkpOworCQlpZ3RfcmVxdWlyZV9waXBlX2NyYyhkYXRhLmdmeF9mZCk7 CisJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlzcGxheSwgZGF0YS5nZnhfZmQpOworCQlpZ3Rf cmVxdWlyZShkYXRhLmRpc3BsYXkuaXNfYXRvbWljKTsKKwl9CisKKwlmb3JfZWFjaF9waXBlX3N0 YXRpYyhwaXBlKQorCQlpZ3Rfc3VidGVzdF9ncm91cAorCQkJcnVuX3N1YnRlc3RzKCZkYXRhLCBw aXBlKTsKKworCWlndF9maXh0dXJlCisJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7 Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmlu ZGV4IDE3ZGViOTQ1ZWM5NS4uNDI0MWQ2OGZiMTc2IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5i dWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMTY5LDYgKzE2OSw3IEBAIHRlc3RfcHJv Z3MgPSBbCiAJJ2ttc19waXBlX2JfY19pdmInLAogCSdrbXNfcGlwZV9jcmNfYmFzaWMnLAogCSdr bXNfcGxhbmUnLAorCSdrbXNfcGxhbmVfYWxwaGFfYmxlbmQnLAogCSdrbXNfcGxhbmVfbG93cmVz JywKIAkna21zX3BsYW5lX211bHRpcGxlJywKIAkna21zX3BsYW5lX3NjYWxpbmcnLAotLSAKMi4x OC4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK