From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dhanya Pillai Subject: [PATCH] tests/kms_color:Color IGT Date: Fri, 10 Jul 2015 16:02:53 +0530 Message-ID: <1436524373-16836-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 098E789D30 for ; Fri, 10 Jul 2015 03:26:30 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Dhanya List-Id: intel-gfx@lists.freedesktop.org RnJvbTogRGhhbnlhIDxkaGFueWEucC5yQGludGVsLmNvbT4KClRoaXMgcGF0Y2ggd2lsbCB2ZXJp ZnkgY29sb3IgY29ycmVjdGlvbiBjYXBhYmlsaXR5IG9mIGEgZGlzcGxheSBkcml2ZXIuCkdhbW1h L0NTQy9EZS1nYW1tYSBzdXBwb3J0ZWQuCgpTaWduZWQtb2ZmLWJ5OiBEaGFueWEgPGRoYW55YS5w LnJAaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDMgKwogdGVzdHMv a21zX2NvbG9yLmMgICAgICB8IDYzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDY0MiBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2NvbG9yLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA5OTRjMzFiLi5mNDlj Mzk2IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKQEAgLTc3LDkgKzc3LDEyIEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJa21zX3Nl dG1vZGUgXAogCWttc191bml2ZXJzYWxfcGxhbmUgXAogCWttc192YmxhbmsgXAorCWttc19jb2xv ciBcCisJY29sb3ItY29ycmVjdGlvbglcCiAJa21zX2NydGNfYmFja2dyb3VuZF9jb2xvciBcCiAJ a21zX3BsYW5lX3NjYWxpbmcgXAogCWttc19wYW5lbF9maXR0aW5nIFwKKwlrbXNfcmVuZGVyX2Nv bXByZXNzaW9uIFwKIAlwbV9scHNwIFwKIAlwbV9ycG0gXAogCXBtX3JwcyBcCmRpZmYgLS1naXQg YS90ZXN0cy9rbXNfY29sb3IuYyBiL3Rlc3RzL2ttc19jb2xvci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjRmNmUxNTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNf Y29sb3IuYwpAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqIENvcHllaWdodCDCqSAyMDEzLDIwMTQg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09G VFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiZHJtdGVzdC5o IgorI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiaWd0X2ttcy5oIgorI2luY2x1 ZGUgImlndF9jb3JlLmgiCisjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgorI2luY2x1ZGUgImln dF9hdXguaCIKKyNpbmNsdWRlPHVuaXN0ZC5oPgorI2luY2x1ZGU8c3RkbGliLmg+CitJR1RfVEVT VF9ERVNDUklQVElPTigiVGVzdCBDb2xvciBGZWF0dXJlcyBhdCBQbGFuZS9QaXBlIGxldmVsIik7 CisKKworI2RlZmluZSBDSFZfQ1NDX1ZBTFMgICAgOQorI2RlZmluZSBJOTE1X1BJUEVfQ1NDICAg ICAgICAgICAoMTw8MCkKKyNkZWZpbmUgSTkxNV9QTEFORV9DU0MgICgxPDwxKQorCisjZGVmaW5l IENTQ19NQU5USVNTQV9NQVhfQklUUyAgICAxCisjZGVmaW5lIENTQ19NQU5USVNTQV9NQVhfVkFM VUUgICAoKDEgPDwgQ1NDX01BTlRJU1NBX01BWF9CSVRTKSAtIDEpCisjZGVmaW5lIENTQ19GUkFD VElPTl9NQVhfQklUUyAgICAxMAorI2RlZmluZSBHQU1NQV9SRURfU0hJRlQJMTYKKyNkZWZpbmUg R0FNTUFfR1JFRU5fU0hJRlQJOAorI2RlZmluZSBTVEFOREFSRF9HQU1NQQkJCQkyLjIKKyNkZWZp bmUgSTkxNV9HQU1NQV9GTEFHX0RFR0FNTUEJCSgxPDwwKQorI2RlZmluZSBJOTE1X1BJUEVfR0FN TUEJCSgxPDwwKQorI2RlZmluZSBJOTE1X1BMQU5FX0dBTU1BCSgxPDwxKQorI2RlZmluZSBJOTE1 X0dBTU1BX1BSRUNJU0lPTl9VTktOT1dOCTAKKyNkZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJT05f Q1VSUkVOVAkweEZGRkZGRkZGCisjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OX0xFR0FDWQko MTw8MCkKKyNkZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTBCSVQJKDE8PDEpCisjZGVmaW5l IEk5MTVfR0FNTUFfUFJFQ0lTSU9OXzEyQklUCSgxPDwyKQorI2RlZmluZSBJOTE1X0dBTU1BX1BS RUNJU0lPTl8xNEJJVAkoMTw8MykKKyNkZWZpbmUgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTZCSVQJ KDE8PDQpCisjZGVmaW5lIENIVl9ERUdBTU1BX01BWF9JTkRFWAk2NAorI2RlZmluZSBDSFZfREVH QU1NQV9WQUxTCTY1CisjZGVmaW5lIENIVl84QklUX0dBTU1BX01BWF9JTkRFWAkyNTYKKyNkZWZp bmUgQ0hWXzhCSVRfR0FNTUFfTUFYX1ZBTFMJQ0hWXzhCSVRfR0FNTUFfTUFYX0lOREVYCisjZGVm aW5lIENIVl8xMEJJVF9HQU1NQV9NQVhfSU5ERVgJMjU2CisjZGVmaW5lIENIVl8xMEJJVF9HQU1N QV9NQVhfVkFMUwkoQ0hWXzEwQklUX0dBTU1BX01BWF9JTkRFWCArIDEpCisjZGVmaW5lIERFRkFV TFQgMAorI2RlZmluZSBSQU5ET00gMQorI2RlZmluZSBEUk1fSU9DVExfTU9ERV9DUkVBVEVQUk9Q QkxPQglcCisJRFJNX0lPV1IoMHhCRCwgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9ibG9iKQorCitz dHJ1Y3QgZHJtX2ludGVsX2NzYyB7CisJdWludDMyX3QgdmVyc2lvbjsKKwlpbnQgY3NjX21hdHJp eFs5XTsKKworfTsKKworc3RydWN0IENVUlZFX1NMSURFUl9WQUxVRVMgeworCWludDMyX3QgYnJp Z2h0bmVzczsKKwlpbnQzMl90IGNvbnRyYXN0OworCWZsb2F0IGdhbW1hOworfTsKKworc3RydWN0 IHJnYl9waXhlbCB7CisJdWludDMyX3QgcmVkOworCXVpbnQzMl90IGdyZWVuOworCXVpbnQzMl90 IGJsdWU7Cit9OworCitzdHJ1Y3QgZHJtX2ludGVsX2dhbW1hIHsKKwl1aW50MzJfdCB2ZXJzaW9u OworCXVpbnQzMl90IG51bV9zYW1wbGVzOworCXN0cnVjdCByZ2JfcGl4ZWwgZ2FtbWFfdmFsdWVz WzI1N107Cit9Oworc3RydWN0IGRybV9pbnRlbF9kZWdhbW1hIHsKKwl1aW50MzJfdCB2ZXJzaW9u OworCXVpbnQzMl90IG51bV9zYW1wbGVzOworCXN0cnVjdCByZ2JfcGl4ZWwgZGVnYW1tYV92YWx1 ZXNbNjVdOworfTsKKworc3RhdGljIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxvYiB7CisJdWlu dDY0X3QgZGF0YTsKKwl1aW50MzJfdCBsZW5ndGg7CisJdWludDMyX3QgYmxvYl9pZDsKK307CisK Kworc3RydWN0IGRhdGFfdCB7CisJaW50IGZiX2luaXRpYWw7CisJaW50IGRybV9mZDsKKwlpbnQg dywgaDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJc3RydWN0IGlndF9mYiBmYl9wcmVwOwor CXN0cnVjdCBpZ3RfZmIgZmIsIGZiMTsKK307CisKKwlzdGF0aWMgdm9pZAorcGFpbnRfY29sb3Io c3RydWN0IGRhdGFfdCAqZCwgc3RydWN0IGlndF9mYiAqZmIsIHVpbnQxNl90IHcsIHVpbnQxNl90 IGgpCit7CisJY2Fpcm9fdCAqY3I7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGQtPmRybV9m ZCwgZmIpOworCWlndF9wYWludF90ZXN0X3BhdHRlcm4oY3IsIHcsIGgpOworCWNhaXJvX2Rlc3Ry b3koY3IpOworfQorCitpbnQgY3JlYXRlX2Jsb2IoaW50IGZkLCB1aW50NjRfdCAqZGF0YSwgaW50 IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgYmxvYjsKKwlpbnQgcmV0 ID0gLTE7CisKKwlibG9iLmRhdGEgPSAodWludDY0X3QpZGF0YTsKKwlibG9iLmxlbmd0aCA9IGxl bmd0aDsKKwlibG9iLmJsb2JfaWQgPSAtMTsKKwlyZXQgPSBpb2N0bChmZCwgRFJNX0lPQ1RMX01P REVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIGJsb2IuYmxv Yl9pZDsKKwlwcmludGYoIkJsb2IgY3JlYXRpb24gaW9jdGwgZmFpbGVkIik7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9jcnRjKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGln dF9vdXRwdXRfdCAqb3V0cHV0LAorCQllbnVtIHBpcGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5l LCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCisJCWVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKQorewor CWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKworCWlndF9vdXRwdXRf c2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCisJLyogYmVmb3JlIGFsbG9jYXRpbmcsIGZyZWUg aWYgYW55IG9sZGVyIGZiICovCisJaWYgKGRhdGEtPmZiX2luaXRpYWwpIHsKKwkJaWd0X3JlbW92 ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYl9wcmVwKTsKKwkJZGF0YS0+ZmJfaW5pdGlhbCA9 IDA7CisJfQorCisJLyogYWxsb2NhdGUgZmIgZm9yIHBsYW5lIDEgKi8KKwlkYXRhLT5mYl9pbml0 aWFsID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCisJCQltb2RlLT5oZGlzcGxh eSwgbW9kZS0+dmRpc3BsYXksCisJCQlEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQsIC8qIHRpbGVkICovCisJCQkwLCAwLCAxLjAsCisJCQkmZGF0 YS0+ZmJfcHJlcCk7CisJaWd0X2Fzc2VydChkYXRhLT5mYl9pbml0aWFsKTsKKworCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYl9wcmVwKTsKKwlpZiAocyA9PSBDT01NSVRfTEVHQUNZ KSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gZHJtTW9kZVNldENydGMoZGF0YS0+ZHJtX2ZkLAor CQkJCW91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkJZGF0YS0+ZmJfaW5pdGlhbCwK KwkJCQlwbGFuZS0+cGFuX3gsIHBsYW5lLT5wYW5feSwKKwkJCQkmb3V0cHV0LT5pZCwKKwkJCQkx LAorCQkJCW1vZGUpOworCQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKwl9IGVsc2UgeworCQlpZ3Rf ZGlzcGxheV9jb21taXQyKGRpc3BsYXksIHMpOworCX0KK30KK3N0YXRpYyB2b2lkIGNsZWFudXBf ZmIoc3RydWN0IGRhdGFfdCAqZGF0YSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7CisKKwlpZiAoZGF0YS0+ZmJfaW5pdGlhbCkgeworCQlpZ3RfcmVtb3ZlX2Zi KGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiX3ByZXApOworCQlkYXRhLT5mYl9pbml0aWFsID0gMDsK Kwl9CisJaWYgKGRhdGEtPmZiLmZiX2lkKQorCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwg JmRhdGEtPmZiKTsKKwlpZiAoZGF0YS0+ZmIxLmZiX2lkKQorCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEt PmRybV9mZCwgJmRhdGEtPmZiMSk7CisKK30KK3N0YXRpYyB2b2lkIGNsZWFudXBfY3J0YyhzdHJ1 Y3QgZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJaWd0X3BsYW5lX3QgKnBs YW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKworCWlm ICghcGxhbmUtPmlzX3ByaW1hcnkpIHsKKwkJaWd0X3BsYW5lX3QgKnByaW1hcnk7CisKKwkJcHJp bWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FX1BSSU1BUlkpOwor CQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOworCX0KKworCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsIE5VTEwpOworCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX0FOWSk7 CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfTEVHQUNZKTsKK30KKworaW50 IGNvbnZlcnRUb0JpbmFyeVNpZ25lZChmbG9hdCB2YWx1ZSkKK3sKKwlpbnQgbWFudGlzc2EgPSAw OworCWludCBmcmFjdGlvbiA9IDA7CisJaW50IHNpZ24gPSAwOworCWludCBsb29wOworCWZsb2F0 IGZ0bXA7CisJaW50IHJldCA9IDA7CisKKwlpZiAodmFsdWUgPCAwKSB7CisJCXNpZ24gPSAxOwor CQl2YWx1ZSAqPSAoLTEpOworCX0KKwltYW50aXNzYSA9IChpbnQpIHZhbHVlIC8gMTsKKwltYW50 aXNzYSAmPSBDU0NfTUFOVElTU0FfTUFYX1ZBTFVFOworCWZ0bXAgPSB2YWx1ZSAtIG1hbnRpc3Nh OworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBDU0NfRlJBQ1RJT05fTUFYX0JJVFM7IGxvb3ArKykg eworCQlmdG1wID0gZnRtcCAqIDI7CisJCWlmIChmdG1wID49IDEpIHsKKwkJCWZyYWN0aW9uIHw9 IDB4MTsKKwkJCWZ0bXAgLT0gMS4wOworCQl9CisJCWlmIChsb29wID09IChDU0NfRlJBQ1RJT05f TUFYX0JJVFMgLSAxKSkKKwkJCWJyZWFrOworCQlmcmFjdGlvbiA8PD0gMTsKKworCX0KKwlmcmFj dGlvbiAmPSAweDNGRjsKKwlyZXQgPSAoZnJhY3Rpb24gfCAobWFudGlzc2EgPDwgQ1NDX0ZSQUNU SU9OX01BWF9CSVRTKSk7CisJaWYgKHNpZ24pCisJCXJldCA9ICh+cmV0KSArIDE7CisJcmV0IHw9 IChzaWduIDw8IDExKTsKKwlyZXQgJj0gMHhGRkY7CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgY3Nj V3JpdGUoZmxvYXQgKmNzY192YWwsIGludCAqY3NjX21hdHJpeCkKK3sKKwlmb3IgKGludCBpID0g MDsgaSA8IENIVl9DU0NfVkFMUzsgaSsrKQorCQljc2NfbWF0cml4W2ldID0gKHVpbnQ2NF90KWNv bnZlcnRUb0JpbmFyeVNpZ25lZChjc2NfdmFsW2ldKTsKK30KKwordm9pZCBnZW5lcmF0ZUN1cnZl RnJvbVNsaWRlcihzdHJ1Y3QgQ1VSVkVfU0xJREVSX1ZBTFVFUyAqcFNsaWRlciwKKwkJdWludDMy X3QgKnBDdXJ2ZSwgdWludDMyX3QgbnVtX3NhbXBsZXMpCit7CisJZG91YmxlIGRHYW1tYSA9IChk b3VibGUpcFNsaWRlci0+Z2FtbWE7CisJZG91YmxlIGRCcmlnaHRuZXNzID0gKGRvdWJsZSlwU2xp ZGVyLT5icmlnaHRuZXNzICogMjU2OworCWRvdWJsZSBkQ29udHJhc3QgPSAoZG91YmxlKXBTbGlk ZXItPmNvbnRyYXN0OworCWRvdWJsZSBkU2xvcGUsIGRPdXRwdXQsIG91dFZhbDsKKwl1aW50MzJf dCBpbnB1dCwgaW5kZXgsIGk7CisJaW50IG1heFZhbCA9IDY1NTM1OworCisJZm9yIChpID0gMDsg aSA8IG51bV9zYW1wbGVzKjI7IGkrKykgeworCQlvdXRWYWwgPSAoZG91YmxlKSgyNTUgKiBwb3co KChkb3VibGUpaSAvIDI1NS4wKSwKKwkJCQkJKFNUQU5EQVJEX0dBTU1BIC8gZEdhbW1hKSkpOwor CQlvdXRWYWwgKz0gMC41OworCQlpZiAobWF4VmFsIDwgb3V0VmFsKQorCQkJb3V0VmFsID0gbWF4 VmFsOworCQlwQ3VydmVbaV0gPSBvdXRWYWw7CisJfQorCWRTbG9wZSA9IDEuMCArIGRDb250cmFz dCAvIDEwMC4wOworCWZvciAoaW5wdXQgPSAwOyBpbnB1dCA8IG51bV9zYW1wbGVzKjI7IGlucHV0 KyspIHsKKwkJZE91dHB1dCA9IGRTbG9wZSAqIHBDdXJ2ZVtpbnB1dF07CisJCWRPdXRwdXQgKz0g ZEJyaWdodG5lc3MgKyAwLjU7CisJCWlmIChkT3V0cHV0ID4gbWF4VmFsKQorCQkJZE91dHB1dCA9 IG1heFZhbDsKKwkJaWYgKGRPdXRwdXQgPCAwKQorCQkJZE91dHB1dCA9IDA7CisJCXBDdXJ2ZVtp bnB1dF0gPSBkT3V0cHV0OworCX0KK30KK3ZvaWQgd3JpdGVDdXJ2ZUNzdih1aW50MzJfdCAqcEN1 cnZlRGF0YSwgdWludDMyX3QgbnVtX3NhbXBsZXMsCisJCXN0cnVjdCByZ2JfcGl4ZWwgKmdhbW1h X3B0cikKK3sKKwl1aW50MzJfdCAqcFJlZCwgKnBHcmVlbiwgKnBCbHVlOworCXVpbnQ2NF90IGks IGluZGV4OworCisJcFJlZCA9IHBDdXJ2ZURhdGE7CisJcEdyZWVuID0gcEN1cnZlRGF0YTsKKwlw Qmx1ZSA9IHBDdXJ2ZURhdGE7CisJZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsK KwkJaW5kZXggPSBpICogMjsKKwkJZ2FtbWFfcHRyW2ldLnJlZCA9IHBSZWRbaW5kZXhdOworCQln YW1tYV9wdHJbaV0uZ3JlZW4gPSBwR3JlZW5baW5kZXhdOworCQlnYW1tYV9wdHJbaV0uYmx1ZSA9 IHBCbHVlW2luZGV4XTsKKwl9Cit9CisKK3ZvaWQgZ2FtbWFQaXBlKGludCBicmlnaHRuZXNzLCBp bnQgY29udHJhc3QsIGZsb2F0IGdhbW1hLAorCQl1aW50MzJfdCBudW1fc2FtcGxlcywgc3RydWN0 IHJnYl9waXhlbCAqZ2FtbWFfcHRyKQoreworCXN0cnVjdCBDVVJWRV9TTElERVJfVkFMVUVTIHNT bGlkZURhdGE7CisJdWludDMyX3QgcEN1cnZlWzIqbnVtX3NhbXBsZXNdOworCisJc1NsaWRlRGF0 YS5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKwlzU2xpZGVEYXRhLmNvbnRyYXN0ID0gY29udHJh c3Q7CisJc1NsaWRlRGF0YS5nYW1tYSA9IGdhbW1hOworCWdlbmVyYXRlQ3VydmVGcm9tU2xpZGVy KCZzU2xpZGVEYXRhLCBwQ3VydmUsIG51bV9zYW1wbGVzKTsKKwl3cml0ZUN1cnZlQ3N2KHBDdXJ2 ZSwgbnVtX3NhbXBsZXMsIGdhbW1hX3B0cik7Cit9CitzdGF0aWMgaW50IGdldF9jb2xvcl9wcm9w ZXJ0eShpbnQgZHJtX2ZkLCBpbnQgaWQsIGludCBvYmplY3QsCisJCWNoYXIgKnByb3BfbmFtZSwg aW50IGJsb2JfaWQpCit7CisJaW50IGkgPSAwLCByZXQgPSAwOworCXVpbnQ2NF90IHZhbHVlID0g MDsKKwlzdHJ1Y3QgZHJtX2ludGVsX2dhbW1hICpnYW1tYV9kYXRhID0gTlVMTDsKKwlkcm1Nb2Rl T2JqZWN0UHJvcGVydGllc1B0ciBwcm9wcyA9IE5VTEw7CisKKwlpZiAoaWQgPCAwIHx8ICgob2Jq ZWN0ICE9IERSTV9NT0RFX09CSkVDVF9DUlRDKSAmJgorCQkJCShvYmplY3QgIT0gRFJNX01PREVf T0JKRUNUX1BMQU5FKSkpCisJCXJldHVybiAtMTsKKwl2YWx1ZSA9IGJsb2JfaWQ7CisKKwkvKiBH ZXQgYWxsIHRoZSBwcm9wZXJ0aWVzIGZyb20gb2JqZWN0ICovCisJcHJvcHMgPSBkcm1Nb2RlT2Jq ZWN0R2V0UHJvcGVydGllcyhkcm1fZmQsIGlkLCBvYmplY3QpOworCWlmICghcHJvcHMpCisJCXJl dHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKKwkJ ZHJtTW9kZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtX2ZkLAorCQkJ CXByb3BzLT5wcm9wc1tpXSk7CisJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1lKSA9 PSAwKSB7CisJCQkvKiBGb3VuZCBwcm9wZXJ0eSwgbm93IHNldCB0aGUgdmFsdWVzICovCisJCQli bG9iX2lkID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOworCQkJYnJlYWs7CisJCX0KKwkJZHJtTW9k ZUZyZWVQcm9wZXJ0eShwcm9wKTsKKwl9CisKKwlyZXQgPSBibG9iX2lkOworCS8qIEZyZWUgdGhl IGFsbG9jYXRlZCBwcm9wZXJ0eSAqLworCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9w cyk7CisJaWYgKGkgPT0gcHJvcHMtPmNvdW50X3Byb3BzKSB7CisJCS8qIFByb3BlcnR5IG5vdCBm b3VuZCAqLworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiByZXQ7Cit9CisKKworaW50IHNldF9j b2xvcl9wcm9wZXJ0eShpbnQgZHJtX2ZkLCBpbnQgaWQsIGludCBvYmplY3QsIGNoYXIgKnByb3Bf bmFtZSwKKwkJCSBpbnQgYmxvYl9pZCkKK3sKKwlpbnQgaSA9IDAsIHJlczsKKworCWRybU1vZGVP YmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzID0gTlVMTDsKKworCWlmIChpZCA8IDAgfHwgKChvYmpl Y3QgIT0gRFJNX01PREVfT0JKRUNUX0NSVEMpICYmCisJCQkob2JqZWN0ICE9IERSTV9NT0RFX09C SkVDVF9QTEFORSkpKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlwcm9wcyA9IGRybU1vZGVPYmpl Y3RHZXRQcm9wZXJ0aWVzKGRybV9mZCwgaWQsIG9iamVjdCk7CisJaWYgKCFwcm9wcykKKwkJcmV0 dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykgeworCQlk cm1Nb2RlUHJvcGVydHlQdHIgcHJvcCA9IGRybU1vZGVHZXRQcm9wZXJ0eShkcm1fZmQsCisJCQkJ CQkJIHByb3BzLT5wcm9wc1tpXSk7CisJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1l KSA9PSAwKSB7CisJCQkvKiBGb3VuZCBwcm9wZXJ0eSwgbm93IHNldCB0aGUgdmFsdWVzICovCisJ CQlyZXMgPSBkcm1Nb2RlT2JqZWN0U2V0UHJvcGVydHkoZHJtX2ZkLCBpZCwgb2JqZWN0LAorCQkJ CQkgKHVpbnQzMl90KXByb3AtPnByb3BfaWQsIGJsb2JfaWQpOworCisJCQlpZiAocmVzKSB7CisJ CQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKKwkJCQlkcm1Nb2RlRnJlZU9iamVjdFByb3Bl cnRpZXMocHJvcHMpOworCQkJfSBlbHNlIHsKKwkJCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3Ap OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsK Kwl9CisJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKKwlpZiAoaSA9PSBwcm9w cy0+Y291bnRfcHJvcHMpIHsKKwkJLyogUHJvcGVydHkgbm90IGZvdW5kICovCisJCXJldHVybiAt MTsKKwl9CisJcmV0dXJuIDA7Cit9Cit2b2lkIHRlc3RfcGlwZV9jc2MoaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkJIGlndF9wbGFuZV90ICpwbGFuZSwg aW50IHZhbHVlKQoreworCXN0cnVjdCBkcm1faW50ZWxfY3NjICpjc2NfZGF0YSA9IE5VTEw7CisK Kwljc2NfZGF0YSA9IChzdHJ1Y3QgZHJtX2ludGVsX2NzYyAqKQorCQkgbWFsbG9jKHNpemVvZihz dHJ1Y3QgZHJtX2ludGVsX2NzYykpOworCWludCBjc2NfbWF0cml4W0NIVl9DU0NfVkFMU107CisJ ZmxvYXQgIGNzY192YWxbQ0hWX0NTQ19WQUxTXTsKKwlpbnQgY3NjX3JhbmRvbVtDSFZfQ1NDX1ZB TFNdID0gezEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDB9OworCWludCBjc2NfZGVmYXVsdFtDSFZf Q1NDX1ZBTFNdID0gezEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDF9OworCWludCBpLCByZXM7CisK Kwljc2NfZGF0YS0+dmVyc2lvbiA9IDE7CisJaWYgKHZhbHVlID09IERFRkFVTFQpCisJCW1lbWNw eShjc2NfdmFsLCBjc2NfZGVmYXVsdCwgc2l6ZW9mKGNzY192YWwpKTsKKwllbHNlCisJCW1lbWNw eShjc2NfdmFsLCBjc2NfcmFuZG9tLCBzaXplb2YoY3NjX3ZhbCkpOworCisJY3NjV3JpdGUoY3Nj X3ZhbCwgY3NjX21hdHJpeCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0hWX0NTQ19WQUxTOyBpKysp CisJCWNzY19kYXRhLT5jc2NfbWF0cml4W2ldID0gY3NjX21hdHJpeFtpXTsKKworCWludCBibG9i X2lkID0gY3JlYXRlX2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLAorCQkJIChpbnQgKikoY3NjX2RhdGEp LCBzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9jc2MpKTsKKworCWlndF9hc3NlcnQoYmxvYl9pZCA+ IDApOworCisJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0 LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJIERSTV9NT0RFX09CSkVDVF9DUlRDLCAiQ1RNIiwg YmxvYl9pZCk7CisJaWYgKHJlcyA8IDApCisJCXByaW50ZigiU2V0dGluZyBDU0MgZmFpbGVkISIp OworCWZyZWUoY3NjX2RhdGEpOworCisKK30KK3ZvaWQgdGVzdF9waXBlX2RlZ2FtbWEoaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJIGlndF9wbGFuZV90ICpw bGFuZSwgZmxvYXQgZGVnYW1tYSwgaW50IGJyaWdodG5lc3MsIGludCBjb250cmFzdCwKKwkJCSB1 aW50MzJfdCBnYW1tYV9wcmVjaXNpb24sIHVpbnQzMl90IG51bV9zYW1wbGVzKQoreworCXN0cnVj dCBkcm1faW50ZWxfZGVnYW1tYSAqZGVnYW1tYV9kYXRhID0gIE5VTEw7CisJaW50IHJlcywgcmV0 OworCisJZGVnYW1tYV9kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2ludGVsX2RlZ2Ft bWEpICsKKwkJCSAobnVtX3NhbXBsZXMgKiBzaXplb2Yoc3RydWN0IHJnYl9waXhlbCkpKTsKKwlk ZWdhbW1hX2RhdGEtPnZlcnNpb24gPSAxOworCWRlZ2FtbWFfZGF0YS0+bnVtX3NhbXBsZXMgPSBu dW1fc2FtcGxlczsKKwlzdHJ1Y3QgcmdiX3BpeGVsIGRlZ2FtbWFfcHRyW251bV9zYW1wbGVzXTsK KworCWdhbW1hUGlwZShicmlnaHRuZXNzLCBjb250cmFzdCwgZGVnYW1tYSwgbnVtX3NhbXBsZXMs IGRlZ2FtbWFfcHRyKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspCisJ CWRlZ2FtbWFfZGF0YS0+ZGVnYW1tYV92YWx1ZXNbaV0gPSBkZWdhbW1hX3B0cltpXTsKKworCWlu dCBibG9iX2lkID0gY3JlYXRlX2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLCAodWludDY0X3QgKikoZGVn YW1tYV9kYXRhKSwKKwkJIHNpemVvZihzdHJ1Y3QgZHJtX2ludGVsX2RlZ2FtbWEpICsgKG51bV9z YW1wbGVzICoKKwkJCSBzaXplb2Yoc3RydWN0IHJnYl9waXhlbCkpKTsKKworCWlndF9hc3NlcnQo YmxvYl9pZCA+IDApOworCXJlcyA9IHNldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQs IG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkgRFJNX01PREVfT0JKRUNUX0NSVEMs ICJQQUxFVFRFX0JFRk9SRV9DVE0iLCBibG9iX2lkKTsKKwlyZXQgPSBnZXRfY29sb3JfcHJvcGVy dHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJIERS TV9NT0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9CRUZPUkVfQ1RNIiwgYmxvYl9pZCk7CisJaWYg KHJldCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAocmVzIDwgMCkKKwkJcHJpbnRmKCJTZXR0aW5n IEdhbW1hIGZhaWxlZCEiKTsKKwlmcmVlKGRlZ2FtbWFfZGF0YSk7Cit9Cit2b2lkIHRlc3RfcGlw ZV9nYW1tYShpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJ CSBpZ3RfcGxhbmVfdCAqcGxhbmUsIGZsb2F0IGdhbW1hLCBpbnQgYnJpZ2h0bmVzcywKKwkJCSBp bnQgY29udHJhc3QsIHVpbnQzMl90IGdhbW1hX3ByZWNpc2lvbiwKKwkJCQkgdWludDMyX3QgbnVt X3NhbXBsZXMpCit7CisJc3RydWN0IGRybV9pbnRlbF9nYW1tYSAqZ2FtbWFfZGF0YSA9ICBOVUxM OworCWludCByZXMsIHJldDsKKworCWdhbW1hX2RhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBk cm1faW50ZWxfZ2FtbWEpICsKKwkJCSAobnVtX3NhbXBsZXMgKiBzaXplb2Yoc3RydWN0IHJnYl9w aXhlbCkpKTsKKwlnYW1tYV9kYXRhLT52ZXJzaW9uID0gMTsKKwlnYW1tYV9kYXRhLT5udW1fc2Ft cGxlcyA9IG51bV9zYW1wbGVzOworCXN0cnVjdCByZ2JfcGl4ZWwgZ2FtbWFfcHRyW251bV9zYW1w bGVzXTsKKworCWdhbW1hUGlwZShicmlnaHRuZXNzLCBjb250cmFzdCwgZ2FtbWEsIG51bV9zYW1w bGVzLCBnYW1tYV9wdHIpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykK KwkJZ2FtbWFfZGF0YS0+Z2FtbWFfdmFsdWVzW2ldID0gZ2FtbWFfcHRyW2ldOworCisKKwlpbnQg YmxvYl9pZCA9IGNyZWF0ZV9ibG9iKGRpc3BsYXktPmRybV9mZCwgKHVpbnQ2NF90ICopKGdhbW1h X2RhdGEpLAorCQkJIHNpemVvZihzdHJ1Y3QgZHJtX2ludGVsX2dhbW1hKSArIChudW1fc2FtcGxl cyAqCisJCQkJCXNpemVvZihzdHJ1Y3QgcmdiX3BpeGVsKSkpOworCisJaWd0X2Fzc2VydChibG9i X2lkID4gMCk7CisJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0 cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIlBB TEVUVEVfQUZURVJfQ1RNIiwgYmxvYl9pZCk7CisJcmV0ID0gZ2V0X2NvbG9yX3Byb3BlcnR5KGRp c3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCURSTV9NT0RF X09CSkVDVF9DUlRDLCAiUEFMRVRURV9BRlRFUl9DVE0iLCBibG9iX2lkKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIC0xOworCWlmIChyZXMgPCAwKQorCQlwcmludGYoIlNldHRpbmcgR2FtbWEg ZmFpbGVkISIpOworCisJZnJlZShnYW1tYV9kYXRhKTsKK30KK3ZvaWQgdGVzdF9waXBlX2NvbG9y KHN0cnVjdCBkYXRhX3QgKmRhdGEsIGNoYXIgKnByb3BfbmFtZSwgaW50IHZhbHVlKQoreworCWln dF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3Rfb3V0cHV0X3QgKm91 dHB1dDsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisJZW51bSBwaXBlIHBpcGU7CisJZW51bSBpZ3Rf Y29tbWl0X3N0eWxlIGNvbW1pdCA9IENPTU1JVF9MRUdBQ1k7CisJaW50IHJlcywgaTsKKwlpbnQg ZmJfaWQsIGZiX2lkMTsKKwlpbnQgd2lkdGgsIGhlaWdodDsKKwl1aW50MzJfdCBwaXhlbGZvcm1h dCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7CisKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRp c3BsYXksIG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisKKwkJcGlwZSA9IG91 dHB1dC0+Y29uZmlnLnBpcGU7CisKKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUp OworCQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCQkvKkRyYXcgdGhlIGlu aXRpYWwgcHJpbWFyeSBwbGFuZSovCisJCXBsYW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0 cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7CisKKwkJcHJlcGFyZV9jcnRjKGRhdGEsIG91dHB1dCwg cGlwZSwgcGxhbmUsIG1vZGUsIGNvbW1pdCk7CisJCXdpZHRoID0gNjAwOworCQloZWlnaHQgPSA2 MDA7CisKKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV8y KTsKKwkJZmJfaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQl3aWR0 aCwgaGVpZ2h0LAorCQkJCXBpeGVsZm9ybWF0LAorCQkJCUxPQ0FMX0RSTV9GT1JNQVRfTU9EX05P TkUsCisJCQkJMS4wLAorCQkJCTAuMCwKKwkJCQkwLjAsCisJCQkJJmRhdGEtPmZiKTsKKwkJcGxh bmUtPmNydGNfeCA9IDEwMDsKKwkJcGxhbmUtPmNydGNfeSA9IDEwMDsKKwkJcGxhbmUtPmZiX2No YW5nZWQgPSB0cnVlOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIpOworCQkv KiBzZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZm9yIHNwcml0ZSBwbGFuZSAyLiAqLworCQl3aWR0 aCA9IDIwMDsKKwkJaGVpZ2h0ID0gMjAwOworCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5l KG91dHB1dCwgSUdUX1BMQU5FXzMpOworCQlmYl9pZDEgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRh dGEtPmRybV9mZCwKKwkJCQl3aWR0aCwgaGVpZ2h0LAorCQkJCXBpeGVsZm9ybWF0LAorCQkJCUxP Q0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJMS4wLAorCQkJCTEuMCwKKwkJCQkwLjAsCisJ CQkJJmRhdGEtPmZiMSk7CisJCWlndF9hc3NlcnQoZmJfaWQxKTsKKworCQlwbGFuZS0+Y3J0Y194 ID0gMzA7CisJCXBsYW5lLT5jcnRjX3kgPSAzMDsKKwkJcGxhbmUtPmZiX2NoYW5nZWQgPSB0cnVl OworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIxKTsKKworCQlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIGNvbW1pdCk7CisJCXVzbGVlcCgyMDAwMDAwKTsKKwkJaWYgKChz dHJjbXAocHJvcF9uYW1lLCAiZ2FtbWFfcHJvcGVydHlfOGJpdCIpID09IDApICYmCisJCQkJCXZh bHVlID09IFJBTkRPTSl7CisJCQl0ZXN0X3BpcGVfZ2FtbWEoZGlzcGxheSwgb3V0cHV0LCBwbGFu ZSwgMSwgNTAsIDUwLAorCQkJCQkgSTkxNV9HQU1NQV9QUkVDSVNJT05fTEVHQUNZLAorCQkJCQkJ IENIVl84QklUX0dBTU1BX01BWF9WQUxTKTsKKwkJfSBlbHNlICBpZiAoKHN0cmNtcChwcm9wX25h bWUsICJnYW1tYV9wcm9wZXJ0eV84Yml0IikgPT0gMCkgJiYKKwkJCQkJCXZhbHVlID09IERFRkFV TFQpIHsKKwkJCXRlc3RfcGlwZV9nYW1tYShkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCAxLCA1MCwg NTAsCisJCQkJCSBJOTE1X0dBTU1BX1BSRUNJU0lPTl8xMEJJVCwgMCk7CisJCX0gZWxzZSAgaWYg KChzdHJjbXAocHJvcF9uYW1lLCAiZ2FtbWFfcHJvcGVydHlfMTBiaXQiKSA9PSAwKSAmJgorCQkJ CQl2YWx1ZSA9PSBERUZBVUxUKSB7CisJCQl0ZXN0X3BpcGVfZ2FtbWEoZGlzcGxheSwgb3V0cHV0 LCBwbGFuZSwgMSwgNTAsIDUwLAorCQkJCQkgSTkxNV9HQU1NQV9QUkVDSVNJT05fMTBCSVQsIDAp OworCQl9IGVsc2UgIGlmICgoc3RyY21wKHByb3BfbmFtZSwgImdhbW1hX3Byb3BlcnR5XzEwYml0 IikgPT0gMCkgJiYKKwkJCQkJIHZhbHVlID09IFJBTkRPTSkgeworCQkJdGVzdF9waXBlX2dhbW1h KGRpc3BsYXksIG91dHB1dCwgcGxhbmUsIDEsIDUwLCA1MCwKKwkJCQkJIEk5MTVfR0FNTUFfUFJF Q0lTSU9OXzEwQklULAorCQkJCQkJQ0hWXzEwQklUX0dBTU1BX01BWF9WQUxTKTsKKworCQl9IGVs c2UgIGlmICgoc3RyY21wKHByb3BfbmFtZSwgImNzY19wcm9wZXJ0eSIpID09IDApKSB7CisJCQl0 ZXN0X3BpcGVfY3NjKGRpc3BsYXksIG91dHB1dCwgcGxhbmUsIHZhbHVlKTsKKwkJfSBlbHNlICBp ZiAoKHN0cmNtcChwcm9wX25hbWUsICJkZWdhbW1hX3Byb3BlcnR5IikgPT0gMCkgJiYKKwkJCQkJ dmFsdWUgPT0gUkFORE9NKSB7CisJCQl0ZXN0X3BpcGVfZGVnYW1tYShkaXNwbGF5LCBvdXRwdXQs IHBsYW5lLCAxLCA1MCwgNTAsCisJCQkJCSBJOTE1X0dBTU1BX1BSRUNJU0lPTl8xMEJJVCwgNjUp OworCQl9IGVsc2UgIGlmICgoc3RyY21wKHByb3BfbmFtZSwgImRlZ2FtbWFfcHJvcGVydHkiKSA9 PSAwKSAmJgorCQkJCQl2YWx1ZSA9PSBERUZBVUxUKSB7CisJCQl0ZXN0X3BpcGVfZGVnYW1tYShk aXNwbGF5LCBvdXRwdXQsIHBsYW5lLCAxLCA1MCwgNTAsCisJCQkJCSBJOTE1X0dBTU1BX1BSRUNJ U0lPTl8xMEJJVCwgMCk7CisKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiSW52YWxpZCBUZXN0XG4i KTsKKwkJfQorCisJCXVzbGVlcCgyMDAwMDAwKTsKKwkJY2xlYW51cF9mYihkYXRhKTsKKwkJcGxh bmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV8zKTsKKwkJY2xlYW51 cF9jcnRjKGRhdGEsIG91dHB1dCwgcGxhbmUpOworCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3Bs YW5lKG91dHB1dCwgSUdUX1BMQU5FXzIpOworCQljbGVhbnVwX2NydGMoZGF0YSwgb3V0cHV0LCBw bGFuZSk7CisJCWJyZWFrOworCisJfQorfQorCitpZ3RfbWFpbgoreworCXN0cnVjdCBkYXRhX3Qg ZGF0YSA9IHt9OworCWludCBnZW4gPSAwOworCWludCBwbGFuZV9pdCA9IDAsIGl0X3JvdGF0aW9u ID0gMCwgaXRfdGlsaW5nID0gMDsKKworCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworCWln dF9maXh0dXJleworCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2FueV9tYXN0ZXIoKTsKKworCQlr bXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwkJaWd0X2Rpc3BsYXlfaW5pdCgmZGF0 YS5kaXNwbGF5LCBkYXRhLmRybV9mZCk7CisJfQorCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9HYW1t YV84Yml0IikgeworCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1tYV9wcm9wZXJ0eV84Yml0 IiwgUkFORE9NKTsKKwl9CisJaWd0X3N1YnRlc3RfZigiRGlzYWJsZV9HYW1tYV84Yml0Iikgewor CQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJnYW1tYV9wcm9wZXJ0eV84Yml0IiwgREVGQVVMVCk7 CisJfQorCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9HYW1tYV8xMGJpdCIpIHsKKwkJdGVzdF9waXBl X2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHlfMTBiaXQiLCBSQU5ET00pOworCX0KKwlpZ3Rf c3VidGVzdF9mKCJEaXNhYmxlX0dhbW1hXzEwYml0IikgeworCQl0ZXN0X3BpcGVfY29sb3IoJmRh dGEsICJnYW1tYV9wcm9wZXJ0eV8xMGJpdCIsIERFRkFVTFQpOworCX0KKworCWlndF9zdWJ0ZXN0 X2YoIkVuYWJsZV9EZS1nYW1tYSIpIHsKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZGVnYW1t YV9wcm9wZXJ0eSIsIFJBTkRPTSk7CisJfQorCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9EZS1nYW1t YSIpIHsKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZGVnYW1tYV9wcm9wZXJ0eSIsIERFRkFV TFQpOworCX0KKwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfQ1NDIikgeworCQl0ZXN0X3BpcGVfY29s b3IoJmRhdGEsICJjc2NfcHJvcGVydHkiLCBSQU5ET00pOworCX0KKworCWlndF9maXh0dXJlewor CQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOworCX0KK30KKwotLSAKMS45LjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==