From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] tests/kms_color.c :Color IGT Patch This patch will verify color correction capability of a display driver. Currently Pipe level CSC and Pipe level Gamma are supported. Date: Wed, 10 Jun 2015 15:17:37 +0300 Message-ID: <87k2vb7o66.fsf@intel.com> References: <1433938032-20240-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 mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id D00C16E2A1 for ; Wed, 10 Jun 2015 05:15:20 -0700 (PDT) In-Reply-To: <1433938032-20240-1-git-send-email-dhanya.p.r@intel.com> 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: kasual.malladi@intel.com, root , dhanyapr List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAxMCBKdW4gMjAxNSwgRGhhbnlhIFBpbGxhaSA8ZGhhbnlhLnAuckBpbnRlbC5jb20+ IHdyb3RlOgo+IEZyb206IHJvb3QgPHJvb3RAcHZpc2h3YWstdWJ1bnR1LmlpbmQuaW50ZWwuY29t PgoKVHJ5ICdnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3InIG9uIHRoYXQgY29tbWl0 LgoKQlIsCkphbmkuCgo+Cj4gU2lnbmVkLW9mZi1ieTogZGhhbnlhcHIgPGRoYW55YS5wLnJAaW50 ZWwuY29tPgo+IC0tLQo+ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKPiAgdGVzdHMv a21zX2NvbG9yLmMgICAgICB8IDUwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgNTA5IGluc2VydGlvbnMoKykKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19jb2xvci5jCj4KPiBkaWZmIC0tZ2l0IGEvdGVz dHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCA5OTRj MzFiLi42MjExODk4IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTgwLDYgKzgwLDcgQEAgVEVTVFNfcHJvZ3Nf TSA9IFwKPiAgCWttc19jcnRjX2JhY2tncm91bmRfY29sb3IgXAo+ICAJa21zX3BsYW5lX3NjYWxp bmcgXAo+ICAJa21zX3BhbmVsX2ZpdHRpbmcgXAo+ICsJa21zX2NvbG9yIFwKPiAgCXBtX2xwc3Ag XAo+ICAJcG1fcnBtIFwKPiAgCXBtX3JwcyBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19jb2xv ci5jIGIvdGVzdHMva21zX2NvbG9yLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLmRmNGFjMDYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMva21zX2NvbG9yLmMK PiBAQCAtMCwwICsxLDUwOCBAQAo+ICsvKgo+ICsgKiBDb3B5ZWlnaHQgwqkgMjAxMywyMDE0IElu dGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4g KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqLwo+ ICsKPiArI2luY2x1ZGUgPG1hdGguaD4KPiArI2luY2x1ZGUgImRybXRlc3QuaCIKPiArI2luY2x1 ZGUgImlndF9kZWJ1Z2ZzLmgiCj4gKyNpbmNsdWRlICJpZ3Rfa21zLmgiCj4gKyNpbmNsdWRlICJp Z3RfY29yZS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsjaW5jbHVkZSAiaWd0 X2F1eC5oIgo+ICsjaW5jbHVkZTx1bmlzdGQuaD4KPiArI2luY2x1ZGU8c3RkbGliLmg+Cj4gK0lH VF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IEdhbW1hIGF0IFBsYW5lL1BpcGUgbGV2ZWwiKTsKPiAr Cj4gKwo+ICsjZGVmaW5lIENIVl9DU0NfVkFMUyAgICA5Cj4gKyNkZWZpbmUgRFJNX0lPQ1RMX01P REVfQ1JFQVRFUFJPUEJMT0IgICBEUk1fSU9XUigweEJELCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRl X2Jsb2IpCj4gKyNkZWZpbmUgSTkxNV9QSVBFX0NTQyAgICAgICAgICAgKDE8PDApCj4gKyNkZWZp bmUgSTkxNV9QTEFORV9DU0MgICgxPDwxKQo+ICsjZGVmaW5lIEk5MTVfQ1NDX0NPRUZGX0ZPUk1B VF9VTktOT1dOICAgMAo+ICsjZGVmaW5lIEk5MTVfQ1NDX0NPRUZGX0ZPUk1BVF9DVVJSRU5UICAg MHhGRkZGRkZGRgo+ICsjZGVmaW5lIEk5MTVfQ1NDX0NPRUZGX0ZPUk1BVF9TMV8zMCAgICAgKDE8 PDApCj4gKyNkZWZpbmUgSTkxNV9DU0NfQ09FRkZfRk9STUFUX1MyXzI5ICAgICAoMTw8MSkKPiAr Cj4gKyNkZWZpbmUgQ1NDX01BTlRJU1NBX01BWF9CSVRTICAgIDEKPiArI2RlZmluZSBDU0NfTUFO VElTU0FfTUFYX1ZBTFVFICAgKCgxIDw8IENTQ19NQU5USVNTQV9NQVhfQklUUykgLSAxKQo+ICsj ZGVmaW5lIENTQ19GUkFDVElPTl9NQVhfQklUUyAgICAxMAo+ICsjZGVmaW5lIEdBTU1BX1JFRF9T SElGVAkxNgo+ICsjZGVmaW5lIEdBTU1BX0dSRUVOX1NISUZUCTgKPiArI2RlZmluZSBTVEFOREFS RF9HQU1NQQkJCQkyLjIKPiArI2RlZmluZSBJOTE1X0dBTU1BX0ZMQUdfREVHQU1NQQkJKDE8PDAp Cj4gKyNkZWZpbmUgSTkxNV9QSVBFX0dBTU1BCQkoMTw8MCkKPiArI2RlZmluZSBJOTE1X1BMQU5F X0dBTU1BCSgxPDwxKQo+ICsjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OX1VOS05PV04JMAo+ ICsjZGVmaW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OX0NVUlJFTlQJMHhGRkZGRkZGRgo+ICsjZGVm aW5lIEk5MTVfR0FNTUFfUFJFQ0lTSU9OX0xFR0FDWQkoMTw8MCkKPiArI2RlZmluZSBJOTE1X0dB TU1BX1BSRUNJU0lPTl8xMEJJVAkoMTw8MSkKPiArI2RlZmluZSBJOTE1X0dBTU1BX1BSRUNJU0lP Tl8xMkJJVAkoMTw8MikKPiArI2RlZmluZSBJOTE1X0dBTU1BX1BSRUNJU0lPTl8xNEJJVAkoMTw8 MykKPiArI2RlZmluZSBJOTE1X0dBTU1BX1BSRUNJU0lPTl8xNkJJVAkoMTw8NCkKPiArI2RlZmlu ZSBDSFZfREVHQU1NQV9NQVhfSU5ERVgJNjQKPiArI2RlZmluZSBDSFZfREVHQU1NQV9WQUxTCTY1 Cj4gKyNkZWZpbmUgQ0hWXzhCSVRfR0FNTUFfTUFYX0lOREVYCTI1Ngo+ICsjZGVmaW5lIENIVl84 QklUX0dBTU1BX01BWF9WQUxTCUNIVl84QklUX0dBTU1BX01BWF9JTkRFWAo+ICsjZGVmaW5lIENI Vl8xMEJJVF9HQU1NQV9NQVhfSU5ERVgJMjU2Cj4gKyNkZWZpbmUgQ0hWXzEwQklUX0dBTU1BX01B WF9WQUxTCShDSFZfMTBCSVRfR0FNTUFfTUFYX0lOREVYICsgMSkKPiArCj4gKyNkZWZpbmUgQ0hW X1NQUklURV9HQU1NQV9NQVhfVkFMUwk2Cj4gKyNkZWZpbmUgREVGQVVMVCAwCj4gKyNkZWZpbmUg UkFORE9NIDEKPiArI2RlZmluZSBEUk1fSU9DVExfTU9ERV9DUkVBVEVQUk9QQkxPQglEUk1fSU9X UigweEJELCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IpCj4gKwo+ICtzdHJ1Y3QgZHJtX2lu dGVsX2NzY3sKPiArCXVpbnQzMl90IGNzY19sZXZlbDsKPiArCXVpbnQzMl90IGNzY19mb3JtYXQ7 Cj4gKwl1aW50MzJfdCByZXNlcnZlZDsKPiArCXVpbnQ2NF90IGNzY19tYXRyaXhbOV07Cj4gKwo+ ICt9Owo+ICsKPiArCj4gKwo+ICt0eXBlZGVmIHN0cnVjdHsKPiArCWludDMyX3QgYnJpZ2h0bmVz czsKPiArCWludDMyX3QgY29udHJhc3Q7Cj4gKwlmbG9hdCBnYW1tYTsKPiArfSBDVVJWRV9TTElE RVJfVkFMVUVTOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgcjE2ZzE2YjE2X3BpeGVsIHsKPiArCXVp bnQxNl90IHJlZDsKPiArCXVpbnQxNl90IGdyZWVuOwo+ICsJdWludDE2X3QgYmx1ZTsKPiArfSBy Z2JfcGl4ZWw7Cj4gKwo+ICtzdHJ1Y3QgZHJtX2ludGVsX2dhbW1hewo+ICsJdWludDMyX3QgZmxh Z3M7Cj4gKwl1aW50MzJfdCBnYW1tYV9sZXZlbDsKPiArCXVpbnQzMl90IGdhbW1hX3ByZWNpc2lv bjsKPiArCXVpbnQzMl90IG51bV9zYW1wbGVzOwo+ICsJdWludDMyX3QgcmVzZXJ2ZWQ7Cj4gKwly Z2JfcGl4ZWwgZ2FtbWFfdmFsdWVzWzI1N107Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRy bV9tb2RlX2NyZWF0ZV9ibG9iIHsKPiArCXVpbnQ2NF90IGRhdGE7Cj4gKwl1aW50MzJfdCBsZW5n dGg7Cj4gKwl1aW50MzJfdCBibG9iX2lkOwo+ICt9Owo+ICsKPiArCj4gK3R5cGVkZWYgc3RydWN0 IHsKPiArCWludCBmYl9pbml0aWFsOwo+ICsJaW50IGRybV9mZDsKPiArCWludCB3LCBoOwo+ICsJ aWd0X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ICsJc3RydWN0IGlndF9mYiBmYl9wcmVwOwo+ICsJc3Ry dWN0IGlndF9mYiBmYiwgZmIxOwo+ICt9IGRhdGFfdDsKPiArCj4gKwlzdGF0aWMgdm9pZAo+ICtw YWludF9jb2xvcihkYXRhX3QgKmQsIHN0cnVjdCBpZ3RfZmIgKmZiLCB1aW50MTZfdCB3LCB1aW50 MTZfdCBoKQo+ICt7Cj4gKwljYWlyb190ICpjcjsKPiArCWNyID0gaWd0X2dldF9jYWlyb19jdHgo ZC0+ZHJtX2ZkLCBmYik7Cj4gKwlpZ3RfcGFpbnRfdGVzdF9wYXR0ZXJuKGNyLCB3LCBoKTsKPiAr CWNhaXJvX2Rlc3Ryb3koY3IpOwo+ICt9Cj4gKwo+ICtpbnQgY3JlYXRlX2Jsb2IoaW50IGZkLCB1 aW50NjRfdCAqZGF0YSwgaW50IGxlbmd0aCkKPiArewo+ICsJc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9ibG9iIGJsb2I7Cj4gKwlpbnQgcmV0ID0gLTE7Cj4gKwlibG9iLmRhdGEgPSAodWludDY0X3Qp ZGF0YTsKPiArCWJsb2IubGVuZ3RoID0gbGVuZ3RoOwo+ICsJYmxvYi5ibG9iX2lkID0gLTE7Cj4g KwlyZXQgPSBpb2N0bChmZCwgRFJNX0lPQ1RMX01PREVfQ1JFQVRFUFJPUEJMT0IsICZibG9iKTsK PiArCWlmICghcmV0KQo+ICsJCXJldHVybiBibG9iLmJsb2JfaWQ7Cj4gKwlwcmludGYoIkJsb2Ig Y3JlYXRpb24gaW9jdGwgZmFpbGVkIik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBwcmVwYXJlX2NydGMoZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwg ZW51bSBwaXBlIHBpcGUsCj4gKwkJaWd0X3BsYW5lX3QgKnBsYW5lLCBkcm1Nb2RlTW9kZUluZm8g Km1vZGUsIGVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpk aXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwo+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRw dXQsIHBpcGUpOwo+ICsKPiArCj4gKwkvKiBiZWZvcmUgYWxsb2NhdGluZywgZnJlZSBpZiBhbnkg b2xkZXIgZmIgKi8KPiArCWlmIChkYXRhLT5mYl9pbml0aWFsKSB7Cj4gKwkJaWd0X3JlbW92ZV9m YihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYl9wcmVwKTsKPiArCQlkYXRhLT5mYl9pbml0aWFsID0g MDsKPiArCX0KPiArCj4gKwkvKiBhbGxvY2F0ZSBmYiBmb3IgcGxhbmUgMSAqLwo+ICsJZGF0YS0+ ZmJfaW5pdGlhbCA9IGlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAo+ICsJCQltb2Rl LT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCURSTV9GT1JNQVRfWFJHQjg4ODgsCj4g KwkJCUxPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELCAvKiB0aWxlZCAqLwo+ICsJCQkwLCAw LCAxLjAsCj4gKwkJCSZkYXRhLT5mYl9wcmVwKTsKPiArCWlndF9hc3NlcnQoZGF0YS0+ZmJfaW5p dGlhbCk7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiX3ByZXApOwo+ ICsJaWYgKHMgPT0gQ09NTUlUX0xFR0FDWSkgewo+ICsJCWludCByZXQ7Cj4gKwkJcmV0ID0gZHJt TW9kZVNldENydGMoZGF0YS0+ZHJtX2ZkLAo+ICsJCQkJb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0 Y19pZCwKPiArCQkJCWRhdGEtPmZiX2luaXRpYWwsCj4gKwkJCQlwbGFuZS0+cGFuX3gsIHBsYW5l LT5wYW5feSwKPiArCQkJCSZvdXRwdXQtPmlkLAo+ICsJCQkJMSwKPiArCQkJCW1vZGUpOwo+ICsJ CWlndF9hc3NlcnQocmV0ID09IDApOwo+ICsJfSBlbHNlIHsKPiArCQlpZ3RfZGlzcGxheV9jb21t aXQyKGRpc3BsYXksIHMpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjbGVhbnVwX2Ny dGMoZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaWd0X3BsYW5lX3QgKnBsYW5l KQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwo+ ICsJaWYgKGRhdGEtPmZiX2luaXRpYWwpIHsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9m ZCwgJmRhdGEtPmZiX3ByZXApOwo+ICsJCWRhdGEtPmZiX2luaXRpYWwgPSAwOwo+ICsJfQo+ICsJ aWYgKGRhdGEtPmZiLmZiX2lkKQo+ICsJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0 YS0+ZmIpOwo+ICsJaWYgKGRhdGEtPmZiMS5mYl9pZCkKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEt PmRybV9mZCwgJmRhdGEtPmZiMSk7Cj4gKwo+ICsJaWYgKCFwbGFuZS0+aXNfcHJpbWFyeSkgewo+ ICsJCWlndF9wbGFuZV90ICpwcmltYXJ5Owo+ICsKPiArCQlwcmltYXJ5ID0gaWd0X291dHB1dF9n ZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7Cj4gKwkJaWd0X3BsYW5lX3NldF9m YihwcmltYXJ5LCBOVUxMKTsKPiArCX0KPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBO VUxMKTsKPiArCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX0FOWSk7Cj4gKwlpZ3Rf ZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9MRUdBQ1kpOwo+ICt9Cj4gKwo+ICtpbnQg Y29udmVydFRvQmluYXJ5U2lnbmVkKGZsb2F0IHZhbHVlKQo+ICt7Cj4gKwlpbnQgbWFudGlzc2Eg PSAwOwo+ICsJaW50IGZyYWN0aW9uID0gMDsKPiArCWludCBzaWduID0gMDsKPiArCWludCBsb29w Owo+ICsJZmxvYXQgZnRtcDsKPiArCWludCByZXQgPSAwOwo+ICsJaWYgKHZhbHVlIDwgMCkgewo+ ICsJCXNpZ24gPSAxOwo+ICsJCXZhbHVlICo9ICgtMSk7Cj4gKwl9Cj4gKwltYW50aXNzYSA9IChp bnQpIHZhbHVlIC8gMTsKPiArCW1hbnRpc3NhICY9IENTQ19NQU5USVNTQV9NQVhfVkFMVUU7Cj4g KwlmdG1wID0gdmFsdWUgLSBtYW50aXNzYTsKPiArCWZvciAobG9vcCA9IDA7IGxvb3AgPCBDU0Nf RlJBQ1RJT05fTUFYX0JJVFM7IGxvb3ArKykgewo+ICsJCWZ0bXAgPSBmdG1wICogMjsKPiArCQlp ZiAoZnRtcCA+PSAxKSB7Cj4gKwkJCWZyYWN0aW9uIHw9IDB4MTsKPiArCQkJZnRtcCAtPSAxLjA7 Cj4gKwkJfQo+ICsJCWlmIChsb29wID09IChDU0NfRlJBQ1RJT05fTUFYX0JJVFMgLSAxKSkgewo+ ICsJCQlicmVhazsKPiArCQl9IGVsc2Ugewo+ICsJCQlmcmFjdGlvbiA8PD0gMTsKPiArCQl9Cj4g Kwl9Cj4gKwlmcmFjdGlvbiAmPSAweDNGRjsKPiArCXJldCA9IChmcmFjdGlvbiB8IChtYW50aXNz YSA8PCBDU0NfRlJBQ1RJT05fTUFYX0JJVFMpKTsKPiArCWlmIChzaWduKSB7Cj4gKwkJcmV0ID0g KH5yZXQpICsgMTsKPiArCX0KPiArCXJldCB8PSAoc2lnbiA8PCAxMSk7Cj4gKwlyZXQgJj0gMHhG RkY7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK3ZvaWQgY3NjV3JpdGUoZmxvYXQgKmNzY192YWws IHVpbnQ2NF90ICpjc2NfbWF0cml4KQo+ICt7Cj4gKwlmb3IgKGludCBpID0gMDsgaSA8IENIVl9D U0NfVkFMUzsgaSsrKSB7Cj4gKwkJY3NjX21hdHJpeFtpXSA9ICh1aW50NjRfdCljb252ZXJ0VG9C aW5hcnlTaWduZWQoY3NjX3ZhbFtpXSk7Cj4gKwl9Cj4gK30KPiArCj4gK3ZvaWQgZ2VuZXJhdGVD dXJ2ZUZyb21TbGlkZXIoQ1VSVkVfU0xJREVSX1ZBTFVFUyAqcFNsaWRlciwgdWludDE2X3QgKnBD dXJ2ZSwgdWludDMyX3QgbnVtX3NhbXBsZXMpCj4gK3sKPiArCWRvdWJsZSBkR2FtbWEgPSAoZG91 YmxlKXBTbGlkZXItPmdhbW1hOwo+ICsJZG91YmxlIGRCcmlnaHRuZXNzID0gKGRvdWJsZSlwU2xp ZGVyLT5icmlnaHRuZXNzICogMjU2OzsKPiArCWRvdWJsZSBkQ29udHJhc3QgPSAoZG91YmxlKXBT bGlkZXItPmNvbnRyYXN0Owo+ICsJZG91YmxlIGRTbG9wZSwgZE91dHB1dCwgb3V0VmFsOwo+ICsJ dWludDMyX3QgaW5wdXQsIGluZGV4LCBpOwo+ICsJaW50IG1heFZhbCA9IDY1NTM1Owo+ICsJZm9y IChpID0gMDsgaSA8IG51bV9zYW1wbGVzKjI7IGkrKykgewo+ICsJCW91dFZhbCA9IChkb3VibGUp KDI1NSAqIHBvdygoKGRvdWJsZSlpIC8gMjU1LjApLCAoU1RBTkRBUkRfR0FNTUEgLyBkR2FtbWEp KSk7Cj4gKwkJb3V0VmFsICs9IDAuNTsKPiArCQlpZiAobWF4VmFsIDwgb3V0VmFsKSB7Cj4gKwkJ CW91dFZhbCA9IG1heFZhbDsKPiArCQl9Cj4gKwkJcEN1cnZlW2ldID0gb3V0VmFsOwo+ICsJfQo+ ICsJZFNsb3BlID0gMS4wICsgZENvbnRyYXN0IC8gMTAwLjA7Cj4gKwlmb3IgKGlucHV0ID0gMDsg aW5wdXQgPCBudW1fc2FtcGxlcyoyOyBpbnB1dCsrKSB7Cj4gKwkJZE91dHB1dCA9IGRTbG9wZSAq IHBDdXJ2ZVtpbnB1dF07Cj4gKwkJZE91dHB1dCArPSBkQnJpZ2h0bmVzcyArIDAuNTsKPiArCQlp ZiAoZE91dHB1dCA+IG1heFZhbCkKPiArCQkJZE91dHB1dCA9IG1heFZhbDsKPiArCQlpZiAoZE91 dHB1dCA8IDApCj4gKwkJCWRPdXRwdXQgPSAwOwo+ICsJCXBDdXJ2ZVtpbnB1dF0gPSBkT3V0cHV0 Owo+ICsJfQo+ICt9Cj4gK3ZvaWQgd3JpdGVDdXJ2ZUNzdih1aW50MTZfdCAqcEN1cnZlRGF0YSwg dWludDMyX3QgbnVtX3NhbXBsZXMsIHJnYl9waXhlbCAqZ2FtbWFfcHRyKQo+ICt7Cj4gKwl1aW50 MTZfdCAqcFJlZCwgKnBHcmVlbiwgKnBCbHVlOwo+ICsJdWludDY0X3QgaSwgaW5kZXg7Cj4gKwo+ ICsJcFJlZCA9IHBDdXJ2ZURhdGE7Cj4gKwlwR3JlZW4gPSBwQ3VydmVEYXRhOwo+ICsJcEJsdWUg PSBwQ3VydmVEYXRhOwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKPiAr CQlpbmRleCA9IGkgKiAyOwo+ICsJCWdhbW1hX3B0cltpXS5yZWQgPSBwUmVkW2luZGV4XTsKPiAr CQlnYW1tYV9wdHJbaV0uZ3JlZW4gPSBwR3JlZW5baW5kZXhdOwo+ICsJCWdhbW1hX3B0cltpXS5i bHVlID0gcEJsdWVbaW5kZXhdOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIGdhbW1hUGlwZShpbnQg YnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LCBmbG9hdCBnYW1tYSwgdWludDMyX3QgbnVtX3NhbXBs ZXMsIHJnYl9waXhlbCAqZ2FtbWFfcHRyKQo+ICt7Cj4gKwlDVVJWRV9TTElERVJfVkFMVUVTIHNT bGlkZURhdGE7Cj4gKwl1aW50MTZfdCBwQ3VydmVbMipudW1fc2FtcGxlc107Cj4gKwo+ICsJc1Ns aWRlRGF0YS5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKPiArCXNTbGlkZURhdGEuY29udHJhc3Qg PSBjb250cmFzdDsKPiArCXNTbGlkZURhdGEuZ2FtbWEgPSBnYW1tYTsKPiArCWdlbmVyYXRlQ3Vy dmVGcm9tU2xpZGVyKCZzU2xpZGVEYXRhLCBwQ3VydmUsIG51bV9zYW1wbGVzKTsKPiArCXdyaXRl Q3VydmVDc3YocEN1cnZlLCBudW1fc2FtcGxlcywgZ2FtbWFfcHRyKTsKPiArfQo+ICsKPiAraW50 IHNldF9jb2xvcl9wcm9wZXJ0eShpbnQgZHJtX2ZkLCBpbnQgaWQsIGludCBvYmplY3QsIGNoYXIg KnByb3BfbmFtZSwgaW50IGJsb2JfaWQpCj4gK3sKPiArCWludCBpID0gMCwgcmVzOwo+ICsKPiAr CWRybU1vZGVPYmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzID0gTlVMTDsKPiArCj4gKwlpZiAoaWQg PCAwIHx8ICgob2JqZWN0ICE9IERSTV9NT0RFX09CSkVDVF9DUlRDKSAmJiAob2JqZWN0ICE9IERS TV9NT0RFX09CSkVDVF9QTEFORSkpKSB7Cj4gKwkJcHJpbnRmKCJJbnZhbGlkIGlucHV0IHRvIHNl dCBjb2xvciBwcm9wZXJ0eSAoJWQgYW5kICVkKSIsIGlkLCBvYmplY3QpOwo+ICsJCXJldHVybiAt MTsKPiArCX0KPiArCj4gKwlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRybV9m ZCwgaWQsIG9iamVjdCk7Cj4gKwlpZiAoIXByb3BzKSB7Cj4gKwkJcmV0dXJuIC0xOwo+ICsJfQo+ ICsJZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Cj4gKwkJZHJtTW9k ZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtX2ZkLCBwcm9wcy0+cHJv cHNbaV0pOwo+ICsJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1lKSA9PSAwKSB7Cj4g KwkJCS8qIEZvdW5kIHByb3BlcnR5LCBub3cgc2V0IHRoZSB2YWx1ZXMgKi8KPiArCQkJcmVzID0g ZHJtTW9kZU9iamVjdFNldFByb3BlcnR5KGRybV9mZCwgaWQsIG9iamVjdCwgKHVpbnQzMl90KXBy b3AtPnByb3BfaWQsIGJsb2JfaWQpOwo+ICsJCQlpZiAocmVzKSB7Cj4gKwkJCQlkcm1Nb2RlRnJl ZVByb3BlcnR5KHByb3ApOwo+ICsJCQkJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3Bz KTsKPiArCQkJCXJldHVybiByZXM7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlkcm1Nb2RlRnJlZVBy b3BlcnR5KHByb3ApOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICsJCWRybU1v ZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gKwl9Cj4gKwlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRp ZXMocHJvcHMpOwo+ICsJaWYgKGkgPT0gcHJvcHMtPmNvdW50X3Byb3BzKSB7Cj4gKwkJLyogUHJv cGVydHkgbm90IGZvdW5kICovCj4gKwkJcHJpbnRmKCJcbnNldF9wcm9wZXJ0eSBcIiVzXCIgTm8g c3VjaCBwcm9wZXJ0eVxuIiwgcHJvcF9uYW1lKTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICt2b2lkIHRlc3RfcGlwZV9jc2MoaWd0X2Rpc3BsYXlfdCAqZGlzcGxh eSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3QgY3Nj X2Zvcm1hdCwgaW50IHZhbHVlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ludGVsX2NzYyAqY3NjX2Rh dGEgPSBOVUxMOwo+ICsJY3NjX2RhdGEgPSAoc3RydWN0IGRybV9pbnRlbF9jc2MgKikgbWFsbG9j KHNpemVvZihzdHJ1Y3QgZHJtX2ludGVsX2NzYykpOwo+ICsJY3NjX2RhdGEtPmNzY19sZXZlbCA9 IEk5MTVfUElQRV9DU0M7Cj4gKwljc2NfZGF0YS0+Y3NjX2Zvcm1hdCA9IGNzY19mb3JtYXQ7Cj4g KwlpbnQ2NF90IGNzY19tYXRyaXhbQ0hWX0NTQ19WQUxTXTsKPiArCWZsb2F0ICBjc2NfdmFsW0NI Vl9DU0NfVkFMU107Cj4gKwlmbG9hdCBjc2NfcmFuZG9tW0NIVl9DU0NfVkFMU10gPSB7MSwgMCwg MCwgMCwgMSwgMCwgMCwgMCwgMX07Cj4gKwlmbG9hdCBjc2NfZGVmYXVsdFtDSFZfQ1NDX1ZBTFNd ID0gezEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9Owo+ICsJaW50IGksIHJlczsKPiArCWlmICh2 YWx1ZSA9PSBERUZBVUxUKQo+ICsJCW1lbWNweShjc2NfdmFsLCBjc2NfZGVmYXVsdCwgc2l6ZW9m KGNzY192YWwpKTsKPiArCWVsc2UKPiArCQltZW1jcHkoY3NjX3ZhbCwgY3NjX3JhbmRvbSwgc2l6 ZW9mKGNzY192YWwpKTsKPiArCj4gKwljc2NXcml0ZShjc2NfdmFsLCBjc2NfbWF0cml4KTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQ0hWX0NTQ19WQUxTOyBpKyspIHsKPiArCQljc2NfZGF0YS0+ Y3NjX21hdHJpeFtpXSA9IGNzY19tYXRyaXhbaV07Cj4gKwl9Cj4gKwo+ICsKPiArCWludCBibG9i X2lkID0gY3JlYXRlX2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLCAodWludDY0X3QgKikoY3NjX2RhdGEp LCBzaXplb2Yoc3RydWN0IGRybV9pbnRlbF9jc2MpKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGJsb2Jf aWQgPiAwKTsKPiArCj4gKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2Zk LCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgImNz Y19wcm9wZXJ0eSIsIGJsb2JfaWQpOwo+ICsJaWYgKHJlcyA8IDApIHsKPiArCQlwcmludGYoIlNl dHRpbmcgQ1NDIGZhaWxlZCEiKTsKPiArCX0KPiArCWZyZWUoY3NjX2RhdGEpOwo+ICsKPiArCj4g K30KPiArCj4gK3ZvaWQgdGVzdF9waXBlX2dhbW1hKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGln dF9vdXRwdXRfdCAqb3V0cHV0LCBpZ3RfcGxhbmVfdCAqcGxhbmUsIGZsb2F0IGdhbW1hLCBpbnQg YnJpZ2h0bmVzcywgaW50IGNvbnRyYXN0LCB1aW50MzJfdCBnYW1tYV9wcmVjaXNpb24sIHVpbnQz Ml90IG51bV9zYW1wbGVzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ludGVsX2dhbW1hICpnYW1tYV9k YXRhID0gIE5VTEw7Cj4gKwlpbnQgcmVzOwo+ICsJZ2FtbWFfZGF0YSA9IG1hbGxvYyhzaXplb2Yo c3RydWN0IGRybV9pbnRlbF9nYW1tYSkgKyAobnVtX3NhbXBsZXMgKiBzaXplb2YocmdiX3BpeGVs KSkpOwo+ICsJZ2FtbWFfZGF0YS0+ZmxhZ3MgPSAwOwo+ICsJZ2FtbWFfZGF0YS0+Z2FtbWFfbGV2 ZWwgPSBJOTE1X1BJUEVfR0FNTUE7Cj4gKwlnYW1tYV9kYXRhLT5nYW1tYV9wcmVjaXNpb24gPSBn YW1tYV9wcmVjaXNpb247Cj4gKwlnYW1tYV9kYXRhLT5udW1fc2FtcGxlcyA9IG51bV9zYW1wbGVz Owo+ICsJcmdiX3BpeGVsIGdhbW1hX3B0cltudW1fc2FtcGxlc107Cj4gKwlnYW1tYVBpcGUoYnJp Z2h0bmVzcywgY29udHJhc3QsIGdhbW1hLCBudW1fc2FtcGxlcywgZ2FtbWFfcHRyKTsKPiArCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgewo+ICsJCWdhbW1hX2RhdGEtPmdh bW1hX3ZhbHVlc1tpXSA9IGdhbW1hX3B0cltpXTsKPiArCX0KPiArCj4gKwo+ICsJaW50IGJsb2Jf aWQgPSBjcmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQsICh1aW50NjRfdCAqKShnYW1tYV9kYXRh KSwgc2l6ZW9mKHN0cnVjdCBkcm1faW50ZWxfZ2FtbWEpICsgKG51bV9zYW1wbGVzICogc2l6ZW9m KHJnYl9waXhlbCkpKTsKPiArCWlndF9hc3NlcnQoYmxvYl9pZCA+IDApOwo+ICsJcmVzID0gc2V0 X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0 Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMsICJnYW1tYV9wcm9wZXJ0eSIsIGJsb2JfaWQpOwo+ ICsJaWYgKHJlcyA8IDApIHsKPiArCQlwcmludGYoIlNldHRpbmcgR2FtbWEgZmFpbGVkISIpOwo+ ICsJfQo+ICsJZnJlZShnYW1tYV9kYXRhKTsKPiArfQo+ICt2b2lkIHRlc3RfcGlwZV9jb2xvcihk YXRhX3QgKmRhdGEsIGNoYXIgKnByb3BfbmFtZSwgaW50IHZhbHVlKQo+ICt7Cj4gKwlpZ3RfZGlz cGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1 dDsKPiArCWlndF9wbGFuZV90ICpwbGFuZTsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsJZW51bSBp Z3RfY29tbWl0X3N0eWxlIGNvbW1pdCA9IENPTU1JVF9MRUdBQ1k7Cj4gKwlpbnQgcmVzLCBpOwo+ ICsJaW50IGZiX2lkLCBmYl9pZDE7Cj4gKwlpbnQgd2lkdGgsIGhlaWdodDsKPiArCXVpbnQzMl90 IHBpeGVsZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4ODsKPiArCWZvcl9lYWNoX2Nvbm5lY3Rl ZF9vdXRwdXQoZGlzcGxheSwgb3V0cHV0KSB7Cj4gKwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ ICsJCXBpcGUgPSBvdXRwdXQtPmNvbmZpZy5waXBlOwo+ICsJCWlndF9vdXRwdXRfc2V0X3BpcGUo b3V0cHV0LCBwaXBlKTsKPiArCQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ ICsJCS8qRHJhdyB0aGUgaW5pdGlhbCBwcmltYXJ5IHBsYW5lKi8KPiArCQlwbGFuZSA9IGlndF9v dXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FX1BSSU1BUlkpOwo+ICsKPiArCQlwcmVw YXJlX2NydGMoZGF0YSwgb3V0cHV0LCBwaXBlLCBwbGFuZSwgbW9kZSwgY29tbWl0KTsKPiArCQlw bGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzIpOwo+ICsJCWZi X2lkID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCj4gKwkJCQl3aWR0aCwgaGVp Z2h0LAo+ICsJCQkJcGl4ZWxmb3JtYXQsCj4gKwkJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F LAo+ICsJCQkJMS4wLAo+ICsJCQkJMC4wLAo+ICsJCQkJMC4wLAo+ICsJCQkJJmRhdGEtPmZiKTsK PiArCQlpZ3RfYXNzZXJ0KGZiX2lkKTsKPiArCQlwbGFuZS0+Y3J0Y194ID0gMDsKPiArCQlwbGFu ZS0+Y3J0Y195ID0gMDsKPiArCQlwbGFuZS0+ZmJfY2hhbmdlZCA9IHRydWU7Cj4gKwkJaWd0X3Bs YW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiKTsKPiArCQkvKiBzZXQgdGhlIHdpZHRoIGFuZCBo ZWlnaHQgZm9yIHNwcml0ZSBwbGFuZSAyLiAqLwo+ICsJCXdpZHRoID0gMjAwOwo+ICsJCWhlaWdo dCA9IDIwMDsKPiArCQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BM QU5FXzMpOwo+ICsJCWZiX2lkID0gaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCj4g KwkJCQl3aWR0aCwgaGVpZ2h0LAo+ICsJCQkJcGl4ZWxmb3JtYXQsCj4gKwkJCQlMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FLAo+ICsJCQkJMC4wLAo+ICsJCQkJMC4wLAo+ICsJCQkJMS4wLAo+ICsJ CQkJJmRhdGEtPmZiMSk7Cj4gKwkJaWd0X2Fzc2VydChmYl9pZCk7Cj4gKwo+ICsJCXBsYW5lLT5j cnRjX3ggPSAzMDsKPiArCQlwbGFuZS0+Y3J0Y195ID0gMzA7Cj4gKwkJcGxhbmUtPmZiX2NoYW5n ZWQgPSB0cnVlOwo+ICsJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYjEpOwo+ICsK PiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGNvbW1pdCk7Cj4gKwkJdXNsZWVwKDIw MDAwMDApOwo+ICsJCWlmICgoc3RyY21wKHByb3BfbmFtZSwgImdhbW1hX3Byb3BlcnR5IikgPT0g MCkgJiYgdmFsdWUgPT0gREVGQVVMVCkgewo+ICsJCQl0ZXN0X3BpcGVfZ2FtbWEoZGlzcGxheSwg b3V0cHV0LCBwbGFuZSwgMSwgNTAsIDUwLCBJOTE1X0dBTU1BX1BSRUNJU0lPTl9MRUdBQ1ksIENI Vl84QklUX0dBTU1BX01BWF9WQUxTKTsKPiArCQl9IGVsc2UgIGlmICgoc3RyY21wKHByb3BfbmFt ZSwgImdhbW1hX3Byb3BlcnR5IikgPT0gMCkgJiYgdmFsdWUgPT0gUkFORE9NKSB7Cj4gKwkJCXRl c3RfcGlwZV9nYW1tYShkaXNwbGF5LCBvdXRwdXQsIHBsYW5lLCAxLjUsIDEwLCAyMCwgSTkxNV9H QU1NQV9QUkVDSVNJT05fTEVHQUNZLCBDSFZfOEJJVF9HQU1NQV9NQVhfVkFMUyk7Cj4gKwkJfSBl bHNlICBpZiAoKHN0cmNtcChwcm9wX25hbWUsICJjc2NfcHJvcGVydHkiKSA9PSAwKSkgewo+ICsJ CQl0ZXN0X3BpcGVfY3NjKGRpc3BsYXksIG91dHB1dCwgcGxhbmUsIEk5MTVfQ1NDX0NPRUZGX0ZP Uk1BVF9TMl8yOSwgdmFsdWUpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXByaW50ZigiSW52YWxpZCBU ZXN0XG4iKTsKPiArCQl9Cj4gKwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQs IElHVF9QTEFORV8zKTsKPiArCQljbGVhbnVwX2NydGMoZGF0YSwgb3V0cHV0LCBwbGFuZSk7Cj4g KwkJcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV8yKTsKPiAr CQljbGVhbnVwX2NydGMoZGF0YSwgb3V0cHV0LCBwbGFuZSk7Cj4gKwo+ICsJfQo+ICt9Cj4gKwo+ ICtpZ3RfbWFpbgo+ICt7Cj4gKwlkYXRhX3QgZGF0YSA9IHt9Owo+ICsJaW50IGdlbiA9IDA7Cj4g KwlpbnQgcGxhbmVfaXQgPSAwLCBpdF9yb3RhdGlvbiA9IDAsIGl0X3RpbGluZyA9IDA7Cj4gKwlp Z3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmV7Cj4gKwkJZGF0YS5k cm1fZmQgPSBkcm1fb3Blbl9hbnlfbWFzdGVyKCk7Cj4gKwo+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dy YXBoaWNzX21vZGUoKTsKPiArCj4gKwkJaWd0X2Rpc3BsYXlfaW5pdCgmZGF0YS5kaXNwbGF5LCBk YXRhLmRybV9mZCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdF9mKCJFbmFibGVfR2FtbWEiKSB7Cj4g KwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHkiLCBSQU5ET00pOwo+ICsJ fQo+ICsJaWd0X3N1YnRlc3RfZigiRW5hYmxlX0RlZmF1bHRfR2FtbWEiKSB7Cj4gKwkJdGVzdF9w aXBlX2NvbG9yKCZkYXRhLCAiZ2FtbWFfcHJvcGVydHkiLCBERUZBVUxUKTsKPiArCX0KPiArCWln dF9zdWJ0ZXN0X2YoIkVuYWJsZV9DU0MiKSB7Cj4gKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCAi Y3NjX3Byb3BlcnR5IiwgUkFORE9NKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0X2YoIkVuYWJsZV9E ZWZhdWx0X0NTQyIpIHsKPiArCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEsICJjc2NfcHJvcGVydHki LCBERUZBVUxUKTsKPiArCX0KPiArCWlndF9maXh0dXJlewo+ICsJCWlndF9kaXNwbGF5X2Zpbmko JmRhdGEuZGlzcGxheSk7Cj4gKwl9Cj4gK30KPiArCj4gLS0gCj4gMS45LjEKPgo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKSmFuaSBOaWt1 bGEsIEludGVsIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVyCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==