From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t 2/2] Adding kms_nv12 to test display NV12 feature Date: Wed, 26 Aug 2015 10:45:30 +0200 Message-ID: <20150826084530.GH20434@phenom.ffwll.local> References: <1440032725-10035-1-git-send-email-chandra.konduru@intel.com> <1440032725-10035-3-git-send-email-chandra.konduru@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f173.google.com (mail-wi0-f173.google.com [209.85.212.173]) by gabe.freedesktop.org (Postfix) with ESMTPS id 77D476EC27 for ; Wed, 26 Aug 2015 01:45:34 -0700 (PDT) Received: by widdq5 with SMTP id dq5so39165554wid.1 for ; Wed, 26 Aug 2015 01:45:33 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1440032725-10035-3-git-send-email-chandra.konduru@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chandra Konduru Cc: daniel.vetter@intel.com, intel-gfx@lists.freedesktop.org, thomas.wood@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBBdWcgMTksIDIwMTUgYXQgMDY6MDU6MjVQTSAtMDcwMCwgQ2hhbmRyYSBLb25kdXJ1 IHdyb3RlOgo+IEZyb206IGNoYW5kcmEga29uZHVydSA8Y2hhbmRyYS5rb25kdXJ1QGludGVsLmNv bT4KPiAKPiBUaGlzIHBhdGNoIGFkZHMga21zX252MTIgdGVzdCBjYXNlLiBJdCBjb3ZlcnMgdGVz dGluZyBOVjEyCj4gaW4gbGluZWFyL3RpbGUtWC90aWxlLVkgdGlsaW5nIGZvcm1hdHMgaW4gMC85 MC8xODAvMjcwCj4gb3JpZW50YXRpb25zLiBGb3IgZWFjaCB0aWxpbmcgZm9ybWF0LCBpdCB0ZXN0 cyBzZXZlcmFsCj4gY29tYmluYXRpb25zIG9mIHBsYW5lcyBhbmQgaXRzIHNjYWxpbmcuCj4gCj4g djI6Cj4gLUFkZGVkIDkwLzI3MCB0ZXN0cyAobWUpCj4gLXRvb2sgb3V0IGNyYyB0ZXN0IGFzIGl0 IGlzbid0IGFkZGluZyBtdWNoIHZhbHVlIGR1ZSB0byBjaHJvbWEgdXBzYW1wbGluZyAobWUpCj4g Cj4gdjM6Cj4gLU1ha2UgLS1saXN0LXN1YnRlc3RzIG9wdGlvbiB3b3JrIChUdnJ0a28pCj4gLU1h a2UgbnYxMiB1bnN1cHBvcnRlZCB0ZXN0IHJ1biBwcm9wZXJseSBlaXRoZXIgYXMgYSBzdWIgdGVz dAo+ICBvciBhbG9uZyB3aXRoIGFsbCBvdGhlciB0ZXN0cyAobWUpCj4gLUFkZGVkIG52MTIgZmIg d2l0aCBpbnZhbGlkIHBhcmFtcyAoRGFuaWVsKQo+IAo+IFNpZ25lZC1vZmYtYnk6IGNoYW5kcmEg a29uZHVydSA8Y2hhbmRyYS5rb25kdXJ1QGludGVsLmNvbT4KPiAtLS0KPiAgdGVzdHMvLmdpdGln bm9yZSAgICAgICB8ICAgMSArCj4gIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+ICB0 ZXN0cy9rbXNfbnYxMi5jICAgICAgIHwgNzU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCA3NjEgaW5zZXJ0aW9ucygr KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX252MTIuYwo+IAo+IGRpZmYgLS1naXQg YS90ZXN0cy8uZ2l0aWdub3JlIGIvdGVzdHMvLmdpdGlnbm9yZQo+IGluZGV4IGQ2ZDA1ZmYuLjJk ZTQ3MTIgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvLmdpdGlnbm9yZQo+ICsrKyBiL3Rlc3RzLy5naXRp Z25vcmUKPiBAQCAtMTU1LDYgKzE1NSw3IEBAIGttc19zZXRtb2RlCj4gIGttc19zaW5rX2NyY19i YXNpYwo+ICBrbXNfdW5pdmVyc2FsX3BsYW5lCj4gIGttc192YmxhbmsKPiAra21zX252MTIKPiAg cG1fYmFja2xpZ2h0Cj4gIHBtX2xwc3AKPiAgcG1fcmM2X3Jlc2lkZW5jeQo+IGRpZmYgLS1naXQg YS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4 IGVmNjkyOTkuLmE3ODA0ZmEgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtODUsNiArODUsNyBAQCBURVNUU19w cm9nc19NID0gXAo+ICAJa21zX2NydGNfYmFja2dyb3VuZF9jb2xvciBcCj4gIAlrbXNfcGxhbmVf c2NhbGluZyBcCj4gIAlrbXNfcGFuZWxfZml0dGluZyBcCj4gKwlrbXNfbnYxMiBcCj4gIAlwbV9i YWNrbGlnaHQgXAo+ICAJcG1fbHBzcCBcCj4gIAlwbV9ycG0gXAo+IGRpZmYgLS1naXQgYS90ZXN0 cy9rbXNfbnYxMi5jIGIvdGVzdHMva21zX252MTIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uOWY5MGE4NQo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9rbXNf bnYxMi5jCj4gQEAgLTAsMCArMSw3NTkgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTMs MjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsg Kgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H Cj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsj aW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArCj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gKyNpbmNs dWRlICJpZ3RfZGVidWdmcy5oIgo+ICsjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ICsjaW5jbHVkZSAi aWd0X2NvcmUuaCIKPiArI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiArI2luY2x1ZGUgImlv Y3RsX3dyYXBwZXJzLmgiCj4gKwo+ICtJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCBkaXNwbGF5 IE5WMTIgc3VwcG9ydCIpOwo+ICsKPiArdWludDMyX3QgZGV2aWQ7Cj4gK3R5cGVkZWYgc3RydWN0 IHsKPiArCWludCBkcm1fZmQ7Cj4gKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gKwlpbnQgbnVt X3NjYWxlcnM7Cj4gKwlpbnQgbnVtX3BsYW5lczsKPiArCj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiMTsK PiArCXN0cnVjdCBpZ3RfZmIgZmIxX252MTI7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiMjsKPiArCXN0 cnVjdCBpZ3RfZmIgZmIyX252MTI7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiMzsKPiArCXN0cnVjdCBp Z3RfZmIgZmIzX252MTI7Cj4gKwlpbnQgZmJfaWQxOwo+ICsJaW50IGZiX2lkMV9udjEyOwo+ICsJ aW50IGZiX2lkMjsKPiArCWludCBmYl9pZDJfbnYxMjsKPiArCWludCBmYl9pZDM7Cj4gKwlpbnQg ZmJfaWQzX252MTI7Cj4gKwo+ICsJaWd0X3BsYW5lX3QgKnBsYW5lMTsKPiArCWlndF9wbGFuZV90 ICpwbGFuZTI7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmUzOwo+ICsKPiArCXVpbnQ2NF90IHRpbGVk Owo+ICsJaW50IHJvdGF0aW9uOwo+ICt9IGRhdGFfdDsKPiArCj4gK3R5cGVkZWYgc3RydWN0IHsK PiArCWludCB3aWR0aDsKPiArCWludCBoZWlnaHQ7Cj4gK30gcmVzX3Q7Cj4gKwo+ICsjZGVmaW5l IElNR19GSUxFICAiMTA4MHAtbGVmdC5wbmciCj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtwYWludF9w YXR0ZXJuKGRhdGFfdCAqZCwgc3RydWN0IGlndF9mYiAqZmIsIHVpbnQxNl90IHcsIHVpbnQxNl90 IGgpCj4gK3sKPiArCWNhaXJvX3QgKmNyOwo+ICsKPiArCWNyID0gaWd0X2dldF9jYWlyb19jdHgo ZC0+ZHJtX2ZkLCBmYik7Cj4gKwlpZ3RfcGFpbnRfdGVzdF9wYXR0ZXJuKGNyLCB3LCBoKTsKPiAr CWNhaXJvX2Rlc3Ryb3koY3IpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtwYWludF9pbWFn ZShkYXRhX3QgKmQsIHN0cnVjdCBpZ3RfZmIgKmZiLCB1aW50MTZfdCB3LCB1aW50MTZfdCBoKQo+ ICt7Cj4gKwljYWlyb190ICpjcjsKPiArCj4gKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGQtPmRy bV9mZCwgZmIpOwo+ICsJaWd0X3BhaW50X2ltYWdlKGNyLCBJTUdfRklMRSwgMCwgMCwgdywgaCk7 Cj4gKwljYWlyb19kZXN0cm95KGNyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHJlcGFyZV9j cnRjKGRhdGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZSBwaXBlLAo+ ICsJCQlpZ3RfcGxhbmVfdCAqcGxhbmUsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwgZW51bSBpZ3Rf Y29tbWl0X3N0eWxlIHMpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ ZGlzcGxheTsKPiArCj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gKwo+ ICsJLyogYmVmb3JlIGFsbG9jYXRpbmcsIGZyZWUgaWYgYW55IG9sZGVyIGZiICovCj4gKwlpZiAo ZGF0YS0+ZmJfaWQxKSB7Cj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5m YjEpOwo+ICsJCWRhdGEtPmZiX2lkMSA9IDA7Cj4gKwl9Cj4gKwo+ICsJLyogYWxsb2NhdGUgZmIg Zm9yIHBsYW5lIDEgKi8KPiArCWRhdGEtPmZiX2lkMSA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJt X2ZkLAo+ICsJCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCURSTV9GT1JN QVRfWFJHQjg4ODgsCj4gKwkJCWRhdGEtPnRpbGVkLCAvKiB0aWxlZCAqLwo+ICsJCQkmZGF0YS0+ ZmIxKTsKPiArCWlndF9hc3NlcnQoZGF0YS0+ZmJfaWQxKTsKPiArCj4gKwlwYWludF9wYXR0ZXJu KGRhdGEsICZkYXRhLT5mYjEsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7Cj4gKwo+ ICsJLyoKPiArCSAqIFdlIGFsd2F5cyBzZXQgdGhlIHByaW1hcnkgcGxhbmUgdG8gYWN0dWFsbHkg ZW5hYmxlIHRoZSBwaXBlIGFzCj4gKwkgKiB0aGVyZSdzIG5vIHdheSAodGhhdCB3b3JrcykgdG8g bGlnaHQgdXAgYSBwaXBlIHdpdGggb25seSBhIHNwcml0ZQo+ICsJICogcGxhbmUgZW5hYmxlZCBh dCB0aGUgbW9tZW50Lgo+ICsJICovCj4gKwlpZiAoIXBsYW5lLT5pc19wcmltYXJ5KSB7Cj4gKwkJ aWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gKwo+ICsJCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9w bGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBy aW1hcnksICZkYXRhLT5mYjEpOwo+ICsJfQo+ICsKPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUs ICZkYXRhLT5mYjEpOwo+ICsJaWYgKHMgPT0gQ09NTUlUX0xFR0FDWSkgewo+ICsJCWludCByZXQ7 Cj4gKwkJcmV0ID0gZHJtTW9kZVNldENydGMoZGF0YS0+ZHJtX2ZkLAo+ICsJCQkJb3V0cHV0LT5j b25maWcuY3J0Yy0+Y3J0Y19pZCwKPiArCQkJCWRhdGEtPmZiX2lkMSwKPiArCQkJCXBsYW5lLT5w YW5feCwgcGxhbmUtPnBhbl95LAo+ICsJCQkJJm91dHB1dC0+aWQsCj4gKwkJCQkxLAo+ICsJCQkJ bW9kZSk7Cj4gKwkJaWd0X2Fzc2VydChyZXQgPT0gMCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWlndF9k aXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgcyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGNsZWFudXBfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpZ3RfcGxh bmVfdCAqcGxhbmUpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlz cGxheTsKPiArCj4gKwlpZiAoZGF0YS0+ZmJfaWQxKSB7Cj4gKwkJaWd0X3JlbW92ZV9mYihkYXRh LT5kcm1fZmQsICZkYXRhLT5mYjEpOwo+ICsJCWRhdGEtPmZiX2lkMSA9IDA7Cj4gKwl9Cj4gKwlp ZiAoZGF0YS0+ZmJfaWQyKSB7Cj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRh LT5mYjIpOwo+ICsJCWRhdGEtPmZiX2lkMiA9IDA7Cj4gKwl9Cj4gKwlpZiAoZGF0YS0+ZmJfaWQz KSB7Cj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYjMpOwo+ICsJCWRh dGEtPmZiX2lkMyA9IDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRhdGEtPmZiX2lkMV9udjEyKSB7Cj4g KwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYjFfbnYxMik7Cj4gKwkJZGF0 YS0+ZmJfaWQxX252MTIgPSAwOwo+ICsJfQo+ICsKPiArCWlmIChkYXRhLT5mYl9pZDJfbnYxMikg ewo+ICsJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIyX252MTIpOwo+ICsJ CWRhdGEtPmZiX2lkMl9udjEyID0gMDsKPiArCX0KPiArCj4gKwlpZiAoZGF0YS0+ZmJfaWQzX252 MTIpIHsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPmZiM19udjEyKTsK PiArCQlkYXRhLT5mYl9pZDNfbnYxMiA9IDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFwbGFuZS0+aXNf cHJpbWFyeSkgewo+ICsJCWlndF9wbGFuZV90ICpwcmltYXJ5Owo+ICsKPiArCQlwcmltYXJ5ID0g aWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7Cj4gKwkJaWd0 X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiArCX0KPiArCj4gKwlpZ3RfcGxhbmVfc2V0 X2ZiKHBsYW5lLCBOVUxMKTsKPiArCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBQSVBFX0FO WSk7Cj4gKwo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FM KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9udjEyX3BsYW5lKGRhdGFfdCAqZCkKPiAr ewo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkLT5kaXNwbGF5Owo+ICsJaWd0X291dHB1 dF90ICpvdXRwdXQ7Cj4gKwllbnVtIHBpcGUgcGlwZTsKPiArCWludCB2YWxpZF90ZXN0cyA9IDA7 Cj4gKwlpbnQgaW1nX3dpZHRoOwo+ICsJaW50IGltZ19oZWlnaHQ7Cj4gKwo+ICsJaWd0X3JlcXVp cmUoZC0+ZGlzcGxheS5oYXNfdW5pdmVyc2FsX3BsYW5lcyk7Cj4gKwlpZ3RfcmVxdWlyZShkLT5u dW1fc2NhbGVycyk7Cj4gKwo+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5LCBv dXRwdXQpIHsKPiArCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwkJbW9kZSA9IGlndF9vdXRw dXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCQlwaXBlID0gb3V0cHV0LT5jb25maWcucGlwZTsKPiAr Cj4gKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ICsKPiArCQkvKiBnZXQg cGxhbmVzICovCj4gKwkJZC0+cGxhbmUxID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJ R1RfUExBTkVfUFJJTUFSWSk7Cj4gKwkJZC0+cGxhbmUyID0gaWd0X291dHB1dF9nZXRfcGxhbmUo b3V0cHV0LCBJR1RfUExBTkVfMik7Cj4gKwkJaWYgKGQtPm51bV9wbGFuZXMgPj0gMykKPiArCQkJ ZC0+cGxhbmUzID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMyk7Cj4g Kwo+ICsJCS8qIHNldCByZXF1aXJlZCByb3RhdGlvbiAqLwo+ICsJCWlndF9wbGFuZV9zZXRfcm90 YXRpb24oZC0+cGxhbmUxLCBkLT5yb3RhdGlvbik7Cj4gKwkJaWd0X3BsYW5lX3NldF9yb3RhdGlv bihkLT5wbGFuZTIsIGQtPnJvdGF0aW9uKTsKPiArCQlpZiAoZC0+bnVtX3BsYW5lcyA+PSAzKQo+ ICsJCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKGQtPnBsYW5lMywgZC0+cm90YXRpb24pOwo+ICsK PiArCQkvKiBTZXQgdXAgZGlzcGxheSB3aXRoIHBsYW5lIDEgKi8KPiArCQlwcmVwYXJlX2NydGMo ZCwgb3V0cHV0LCBwaXBlLCBkLT5wbGFuZTEsIG1vZGUsIENPTU1JVF9MRUdBQ1kpOwo+ICsKPiAr CQkvKiBhbGxvY2F0ZSBmYjIsIGZiMl9udjEyLCBmYjFfbnYxMiB3aXRoIGltYWdlIHNpemUgKi8K PiArCQlpZ3RfZ2V0X2ltYWdlX3NpemUoSU1HX0ZJTEUsICZpbWdfd2lkdGgsICZpbWdfaGVpZ2h0 KTsKPiArCj4gKwkJLyogZmIyIGlzIGluIFJHQiBmb3JtYXQgKi8KPiArCQlkLT5mYl9pZDIgPSBp Z3RfY3JlYXRlX2ZiKGQtPmRybV9mZCwKPiArCQkJCWltZ193aWR0aCwgaW1nX2hlaWdodCwKPiAr CQkJCURSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwkJCQlkLT50aWxlZCwgLyogdGlsZWQgKi8KPiAr CQkJCSZkLT5mYjIpOwo+ICsJCWlndF9hc3NlcnQoZC0+ZmJfaWQyKTsKPiArCj4gKwkJLyogZmIx X252MTIgaXMgaW4gTlYxMiBmb3JtYXQgKi8KPiArCQlkLT5mYl9pZDFfbnYxMiA9IGlndF9jcmVh dGVfZmIoZC0+ZHJtX2ZkLAo+ICsJCQkJaW1nX3dpZHRoLCBpbWdfaGVpZ2h0LAo+ICsJCQkJRFJN X0ZPUk1BVF9OVjEyLAo+ICsJCQkJZC0+dGlsZWQsIC8qIHRpbGVkICovCj4gKwkJCQkmZC0+ZmIx X252MTIpOwo+ICsJCWlndF9hc3NlcnQoZC0+ZmJfaWQxX252MTIpOwo+ICsKPiArCQkvKiBmYjJf bnYxMiBpcyBpbiBOVjEyIGZvcm1hdCAqLwo+ICsJCWQtPmZiX2lkMl9udjEyID0gaWd0X2NyZWF0 ZV9mYihkLT5kcm1fZmQsCj4gKwkJCQlpbWdfd2lkdGgsIGltZ19oZWlnaHQsCj4gKwkJCQlEUk1f Rk9STUFUX05WMTIsCj4gKwkJCQlkLT50aWxlZCwKPiArCQkJCSZkLT5mYjJfbnYxMik7Cj4gKwkJ aWd0X2Fzc2VydChkLT5mYl9pZDJfbnYxMik7Cj4gKwo+ICsJCS8qIGZiMyBpcyBpbiBSR0IgKi8K PiArCQlkLT5mYl9pZDMgPSBpZ3RfY3JlYXRlX2ZiKGQtPmRybV9mZCwKPiArCQkJCW1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJCURSTV9GT1JNQVRfQVJHQjg4ODgsCj4gKwkJ CQlkLT50aWxlZCwgLyogdGlsZWQgKi8KPiArCQkJCSZkLT5mYjMpOwo+ICsJCWlndF9hc3NlcnQo ZC0+ZmJfaWQzKTsKPiArCj4gKwkJLyoKPiArCQkgKiBNaW1pY2luZyBzb21lIG5vdCBleGFjdGx5 IGJ1dCBjbG9zZXIgdG8gc29tZSByZWFsIHVzYWdlCj4gKwkJICovCj4gKwo+ICsJCS8qIHNldCB1 cCBkYXRhIGZvciBmYjI6IGJvdGggZmIxX252MTIsIGZiMl9udjEyIHVzZXMgdGhpcyAqLwo+ICsJ CXBhaW50X2ltYWdlKGQsICZkLT5mYjIsIGltZ193aWR0aCwgaW1nX2hlaWdodCk7Cj4gKwo+ICsJ CS8qIHNldCB1cCBkYXRhIGluIGZiMV9udjEyOiBmYjIgUkdCLT4gZmIxX252MTIgKi8KPiArCQlp Z3RfZmJfY3NjX3hyZ2JfdG9fbnYxMihkLT5kcm1fZmQsICZkLT5mYjFfbnYxMiwgJmQtPmZiMik7 Cj4gKwo+ICsJCS8qIHNldCB1cCBkYXRhIGluIGZiMl9udjEyOiBmYjIgUkdCLT4gZmIyX252MTIg Ki8KPiArCQlpZ3RfZmJfY3NjX3hyZ2JfdG9fbnYxMihkLT5kcm1fZmQsICZkLT5mYjJfbnYxMiwg JmQtPmZiMik7Cj4gKwo+ICsJCS8qIHNldCB1cCBkYXRhIGluIGZiMyAqLwo+ICsJCXBhaW50X3Bh dHRlcm4oZCwgJmQtPmZiMywgZC0+ZmIzLndpZHRoLCBkLT5mYjMuaGVpZ2h0KTsKPiArCj4gKwkJ LyogU2V0IHVwIGZiMl9udjEyLT5wbGFuZTIgbWFwcGluZy4gKi8KPiArCQlpZ3RfcGxhbmVfc2V0 X2ZiKGQtPnBsYW5lMiwgJmQtPmZiMl9udjEyKTsKPiArCQkvKiAybmQgcGxhbmUgbnYxMiB3aW5k b3dlZCAtIG5vIHNjYWxpbmcgKi8KPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZkLT5mYjJfbnYx MiwgZC0+cGxhbmUyLCAwLCAwKTsKPiArCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMl9udjEyLCBk LT5wbGFuZTIsIGQtPmZiMl9udjEyLndpZHRoLAo+ICsJCQlkLT5mYjJfbnYxMi5oZWlnaHQpOwo+ ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZC0+cGxhbmUyLCAwLCAwKTsKPiArCQlpZ3RfcGxh bmVfc2V0X3NpemUoZC0+cGxhbmUyLCBkLT5mYjJfbnYxMi53aWR0aCwgZC0+ZmIyX252MTIuaGVp Z2h0KTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwp Owo+ICsKPiArCQkvKiBDaGFuZ2UgcHJpbWFyeSBwbGFuZSB0byBudjEyIGZ1bGwgc2NyZWVuOiBz Y2FsaW5nICsgTlYxMiAqLwo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxhbmUxLCAmZC0+ZmIx X252MTIpOwo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oJmQtPmZiMV9udjEyLCBkLT5wbGFuZTEs IDAsIDApOwo+ICsJCWlndF9mYl9zZXRfc2l6ZSgmZC0+ZmIxX252MTIsIGQtPnBsYW5lMSwgZC0+ ZmIxX252MTIud2lkdGgsCj4gKwkJCWQtPmZiMV9udjEyLmhlaWdodCk7Cj4gKwkJaWd0X3BsYW5l X3NldF9wb3NpdGlvbihkLT5wbGFuZTEsIDAsIDApOwo+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShk LT5wbGFuZTEsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7Cj4gKwkJaWd0X2Rpc3Bs YXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKPiArCj4gKwkJaWYgKGQtPm51 bV9wbGFuZXMgPj0gMykgewo+ICsJCQkvKiBTZXQgdXAgZmIzLT5wbGFuZTMgbWFwcGluZy4gKi8K PiArCQkJaWd0X3BsYW5lX3NldF9mYihkLT5wbGFuZTMsICZkLT5mYjMpOwo+ICsKPiArCQkJLyog M3JkIHBsYW5lIGZ1bGwgc2NyZWVuIC0gbm8gc2NhbGluZy4gKi8KPiArCQkJaWd0X2ZiX3NldF9w b3NpdGlvbigmZC0+ZmIzLCBkLT5wbGFuZTMsIDAsIDApOwo+ICsJCQlpZ3RfZmJfc2V0X3NpemUo JmQtPmZiMywgZC0+cGxhbmUzLCBkLT5mYjMud2lkdGgsIGQtPmZiMy5oZWlnaHQpOwo+ICsJCQlp Z3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMywgMCwgMCk7Cj4gKwkJCWlndF9wbGFuZV9z ZXRfc2l6ZShkLT5wbGFuZTMsIGQtPmZiMy53aWR0aCwgZC0+ZmIzLmhlaWdodCk7Cj4gKwkJCWln dF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4gKwkJfQo+ICsK PiArCQkvKiAybmQgcGxhbmUgbnYxMiB1cCBzY2FsaW5nICovCj4gKwkJaWd0X2ZiX3NldF9wb3Np dGlvbigmZC0+ZmIyX252MTIsIGQtPnBsYW5lMiwgMCwgMCk7Cj4gKwkJaWd0X2ZiX3NldF9zaXpl KCZkLT5mYjJfbnYxMiwgZC0+cGxhbmUyLCBkLT5mYjJfbnYxMi53aWR0aCwKPiArCQkJZC0+ZmIy X252MTIuaGVpZ2h0KTsKPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMiwgMTAw LCAxMDApOwo+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShkLT5wbGFuZTIsIG1vZGUtPmhkaXNwbGF5 LTIwMCwgbW9kZS0+dmRpc3BsYXktMjAwKTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3Bs YXksIENPTU1JVF9VTklWRVJTQUwpOwo+ICsKPiArCQkvKiAybmQgcGxhbmUgbnYxMiBkb3duIHNj YWxpbmcgKi8KPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZkLT5mYjJfbnYxMiwgZC0+cGxhbmUy LCAwLCAwKTsKPiArCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIGQt PmZiMl9udjEyLndpZHRoLAo+ICsJCQlkLT5mYjJfbnYxMi5oZWlnaHQpOwo+ICsJCWlndF9wbGFu ZV9zZXRfcG9zaXRpb24oZC0+cGxhbmUyLCAxMDI0LCAwKTsKPiArCQlpZ3RfcGxhbmVfc2V0X3Np emUoZC0+cGxhbmUyLCBkLT5mYjJfbnYxMi53aWR0aCAqIDIvMywKPiArCQkJZC0+ZmIyX252MTIu aGVpZ2h0ICogMi8zKTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9V TklWRVJTQUwpOwo+ICsKPiArCQkvKiBCYWNrIHRvIHNpbmdsZSBwbGFuZSBtb2RlICAtIHJnYiAm IG5vIHNjYWxpbmcgKi8KPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMSwgJmQtPmZiMSk7 Cj4gKwkJaWd0X3BsYW5lX3NldF9mYihkLT5wbGFuZTIsIE5VTEwpOwo+ICsJCWlmIChkLT5udW1f cGxhbmVzID49IDMpCj4gKwkJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxhbmUzLCBOVUxMKTsKPiAr CQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZkLT5mYjEsIGQtPnBsYW5lMSwgMCwgMCk7Cj4gKwkJaWd0 X2ZiX3NldF9zaXplKCZkLT5mYjEsIGQtPnBsYW5lMSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZk aXNwbGF5KTsKPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMSwgMCwgMCk7Cj4g KwkJaWd0X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZk aXNwbGF5KTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJT QUwpOwo+ICsKPiArCQkvKiBzaW5nbGUgcGxhbmUgbW9kZSAgLSByZ2IgJiBzY2FsaW5nICovCj4g KwkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihkLT5wbGFuZTEsIElHVF9ST1RBVElPTl8wKTsKPiAr CQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMSwgJmQtPmZiMSk7Cj4gKwkJaWd0X2ZiX3NldF9w b3NpdGlvbigmZC0+ZmIxLCBkLT5wbGFuZTEsIDAsIDApOwo+ICsJCWlndF9mYl9zZXRfc2l6ZSgm ZC0+ZmIxLCBkLT5wbGFuZTEsIGQtPmZiMS53aWR0aC8yLCBkLT5mYjEuaGVpZ2h0LzIpOwo+ICsJ CWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZC0+cGxhbmUxLCAwLCAwKTsKPiArCQlpZ3RfcGxhbmVf c2V0X3NpemUoZC0+cGxhbmUxLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOwo+ICsJ CWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4gKwo+ICsJ CS8qIHNpbmdsZSBwbGFuZSBtb2RlICAtIG52MTIgJiBzY2FsaW5nICovCj4gKwkJaWd0X3BsYW5l X3NldF9mYihkLT5wbGFuZTEsICZkLT5mYjFfbnYxMik7Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlv bigmZC0+ZmIxX252MTIsIGQtPnBsYW5lMSwgMCwgMCk7Cj4gKwkJaWd0X2ZiX3NldF9zaXplKCZk LT5mYjFfbnYxMiwgZC0+cGxhbmUxLCBkLT5mYjFfbnYxMi53aWR0aCwKPiArCQkJZC0+ZmIxX252 MTIuaGVpZ2h0KTsKPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMSwgMCwgMCk7 Cj4gKwkJaWd0X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMSwgbW9kZS0+aGRpc3BsYXksIG1vZGUt PnZkaXNwbGF5KTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklW RVJTQUwpOwo+ICsKPiArCQl2YWxpZF90ZXN0cysrOwo+ICsKPiArCQljbGVhbnVwX2NydGMoZCwg b3V0cHV0LCBkLT5wbGFuZTEpOwo+ICsJfQo+ICsJaWd0X3JlcXVpcmVfZih2YWxpZF90ZXN0cywg Im5vIHZhbGlkIGNydGMvY29ubmVjdG9yIGNvbWJpbmF0aW9ucyBmb3VuZFxuIik7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHRlc3RfbnYxMl9wbGFuZV9yb3RhdGlvbl85MF9vcl8yNzAoZGF0YV90 ICpkKQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmQtPmRpc3BsYXk7Cj4gKwlp Z3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsJaW50IHZhbGlkX3Rl c3RzID0gMDsKPiArCWludCBpOwo+ICsKPiArCS8qCj4gKwkgKiBUaGVyZSBhcmUgdHdvIGtleSBz Y2VuYXJpb3M6Cj4gKwkgKiAxKSBGbGlwIGxhbmRzY2FwZSBidWZmZXIgb250byBwb3J0cmFpdCBk aXNwbGF5Cj4gKwkgKiAyKSBGbGlwIHBvcnRyYWl0IGJ1ZmZlciBvbnRvIGxhbmRzY2FwZSBkaXNw bGF5Cj4gKwkgKgo+ICsJICogRHVlIHRvIGF2YWlsYWJpbGl0eSBvZiBsYW5kc2NhcGUgZGlzcGxh eSwgZ29pbmcgd2l0aCAjMi4KPiArCSAqLwo+ICsJcmVzX3QgbnYxMl9yZXNfbGlzdFtdID0gewo+ ICsJCXs0ODAsIDcyMH0sCj4gKwkJezcyMCwgMTI4MH0sCj4gKwkJezEwODAsIDE5MjB9LAo+ICsJ fTsKPiArCj4gKwlpZ3RfcmVxdWlyZShkLT5kaXNwbGF5Lmhhc191bml2ZXJzYWxfcGxhbmVzKTsK PiArCWlndF9yZXF1aXJlKGQtPm51bV9zY2FsZXJzKTsKPiArCj4gKwlmb3JfZWFjaF9jb25uZWN0 ZWRfb3V0cHV0KGRpc3BsYXksIG91dHB1dCkgewo+ICsJCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsK PiArCQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ICsJCXBpcGUgPSBvdXRw dXQtPmNvbmZpZy5waXBlOwo+ICsKPiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlw ZSk7Cj4gKwo+ICsJCS8qIGdldCBwbGFuZXMgKi8KPiArCQlkLT5wbGFuZTEgPSBpZ3Rfb3V0cHV0 X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsKPiArCQlkLT5wbGFuZTIgPSBp Z3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV8yKTsKPiArCj4gKwkJZm9yIChp ID0gMDsgaSA8IHNpemVvZihudjEyX3Jlc19saXN0KS9zaXplb2YocmVzX3QpOyBpKyspIHsKPiAr CQkJLyogU2V0IHVwIGRpc3BsYXkgd2l0aCBwbGFuZSAxICovCj4gKwkJCWlndF9wbGFuZV9zZXRf cm90YXRpb24oZC0+cGxhbmUxLCBJR1RfUk9UQVRJT05fMCk7Cj4gKwkJCXByZXBhcmVfY3J0Yyhk LCBvdXRwdXQsIHBpcGUsIGQtPnBsYW5lMSwgbW9kZSwgQ09NTUlUX0xFR0FDWSk7Cj4gKwo+ICsJ CQkvKiBmYjIgaXMgaW4gUkdCIGZvcm1hdCAqLwo+ICsJCQlkLT5mYl9pZDIgPSBpZ3RfY3JlYXRl X2ZiKGQtPmRybV9mZCwKPiArCQkJCQludjEyX3Jlc19saXN0W2ldLndpZHRoLCBudjEyX3Jlc19s aXN0W2ldLmhlaWdodCwKPiArCQkJCQlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJCQkJCWQtPnRp bGVkLAo+ICsJCQkJCSZkLT5mYjIpOwo+ICsJCQlpZ3RfYXNzZXJ0KGQtPmZiX2lkMik7Cj4gKwo+ ICsJCQkvKiBDaGFuZ2UgcHJpbWFyeSBwbGFuZSB0byBmYjIgUkdCIHdpdGggcm90YXRpb24gKi8K PiArCQkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihkLT5wbGFuZTEsIGQtPnJvdGF0aW9uKTsKPiAr Cj4gKwkJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxhbmUxLCAmZC0+ZmIyKTsKPiArCQkJaWd0X2Zi X3NldF9wb3NpdGlvbigmZC0+ZmIyLCBkLT5wbGFuZTEsIDAsIDApOwo+ICsJCQlpZ3RfZmJfc2V0 X3NpemUoJmQtPmZiMiwgZC0+cGxhbmUxLCBkLT5mYjIud2lkdGgsIGQtPmZiMi5oZWlnaHQpOwo+ ICsJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMSwgMCwgMCk7Cj4gKwkJCWlndF9w bGFuZV9zZXRfc2l6ZShkLT5wbGFuZTEsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7 Cj4gKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4g Kwo+ICsJCQkvKiBmYjFfbnYxMiBpcyBpbiBOVjEyIGZvcm1hdCAqLwo+ICsJCQlkLT5mYl9pZDFf bnYxMiA9IGlndF9jcmVhdGVfZmIoZC0+ZHJtX2ZkLAo+ICsJCQkJCW52MTJfcmVzX2xpc3RbaV0u d2lkdGgsIG52MTJfcmVzX2xpc3RbaV0uaGVpZ2h0LAo+ICsJCQkJCURSTV9GT1JNQVRfTlYxMiwK PiArCQkJCQlkLT50aWxlZCwKPiArCQkJCQkmZC0+ZmIxX252MTIpOwo+ICsJCQlpZ3RfYXNzZXJ0 KGQtPmZiX2lkMV9udjEyKTsKPiArCj4gKwkJCS8qIGZiMl9udjEyIGlzIGluIE5WMTIgZm9ybWF0 ICovCj4gKwkJCWQtPmZiX2lkMl9udjEyID0gaWd0X2NyZWF0ZV9mYihkLT5kcm1fZmQsCj4gKwkJ CQkJbnYxMl9yZXNfbGlzdFtpXS53aWR0aCwgbnYxMl9yZXNfbGlzdFtpXS5oZWlnaHQsCj4gKwkJ CQkJRFJNX0ZPUk1BVF9OVjEyLAo+ICsJCQkJCWQtPnRpbGVkLAo+ICsJCQkJCSZkLT5mYjJfbnYx Mik7Cj4gKwkJCWlndF9hc3NlcnQoZC0+ZmJfaWQyX252MTIpOwo+ICsKPiArCQkJLyogc2V0IHVw IGRhdGEgaW4gZmIxX252MTI6IGZiMiBQQVRURVJOIFJHQi0+IGZiMV9udjEyICovCj4gKwkJCXBh aW50X3BhdHRlcm4oZCwgJmQtPmZiMiwgZC0+ZmIyLndpZHRoLCBkLT5mYjIuaGVpZ2h0KTsKPiAr CQkJaWd0X2ZiX2NzY194cmdiX3RvX252MTIoZC0+ZHJtX2ZkLCAmZC0+ZmIxX252MTIsICZkLT5m YjIpOwo+ICsKPiArCQkJLyogc2V0IHVwIGRhdGEgaW4gZmIyX252MTI6IGZiMiBQQVRURVJOIFJH Qi0+IGZiMl9udjEyICovCj4gKwkJCXBhaW50X3BhdHRlcm4oZCwgJmQtPmZiMiwgZC0+ZmIyLndp ZHRoLCBkLT5mYjIuaGVpZ2h0KTsKPiArCQkJaWd0X2ZiX2NzY194cmdiX3RvX252MTIoZC0+ZHJt X2ZkLCAmZC0+ZmIyX252MTIsICZkLT5mYjIpOwo+ICsKPiArCQkJLyogc2V0IHJlcXVpcmVkIHJv dGF0aW9uICovCj4gKwkJCWlndF9wbGFuZV9zZXRfcm90YXRpb24oZC0+cGxhbmUxLCBkLT5yb3Rh dGlvbik7Cj4gKwkJCWlndF9wbGFuZV9zZXRfcm90YXRpb24oZC0+cGxhbmUyLCBkLT5yb3RhdGlv bik7Cj4gKwo+ICsJCQkvKiBDaGFuZ2UgcHJpbWFyeSBwbGFuZSB0byBudjEyIGZ1bGwgc2NyZWVu OiBzY2FsaW5nICsgTlYxMiAqLwo+ICsJCQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMSwgJmQt PmZiMV9udjEyKTsKPiArCQkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIxX252MTIsIGQtPnBs YW5lMSwgMCwgMCk7Cj4gKwkJCWlndF9mYl9zZXRfc2l6ZSgmZC0+ZmIxX252MTIsIGQtPnBsYW5l MSwgZC0+ZmIxX252MTIud2lkdGgsCj4gKwkJCQlkLT5mYjFfbnYxMi5oZWlnaHQpOwo+ICsJCQlp Z3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMSwgMCwgMCk7Cj4gKwkJCWlndF9wbGFuZV9z ZXRfc2l6ZShkLT5wbGFuZTEsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7Cj4gKwkJ CWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4gKwo+ICsJ CQkvKiAybmQgcGxhbmUgbnYxMiB3aW5kb3dlZCAqLwo+ICsJCQlpZ3RfcGxhbmVfc2V0X2ZiKGQt PnBsYW5lMiwgJmQtPmZiMl9udjEyKTsKPiArCQkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIy X252MTIsIGQtPnBsYW5lMiwgMCwgMCk7Cj4gKwkJCWlndF9mYl9zZXRfc2l6ZSgmZC0+ZmIyX252 MTIsIGQtPnBsYW5lMiwgZC0+ZmIyX252MTIud2lkdGgsCj4gKwkJCQlkLT5mYjJfbnYxMi5oZWln aHQpOwo+ICsJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMiwgMCwgMCk7Cj4gKwkJ CWlndF9wbGFuZV9zZXRfc2l6ZShkLT5wbGFuZTIsIGQtPmZiMl9udjEyLmhlaWdodCxkLT5mYjJf bnYxMi53aWR0aCk7Cj4gKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VO SVZFUlNBTCk7Cj4gKwo+ICsJCQkvKiAybmQgcGxhbmUgbnYxMiB1cCBzY2FsaW5nICovCj4gKwkJ CWlndF9mYl9zZXRfcG9zaXRpb24oJmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIDAsIDApOwo+ICsJ CQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIGQtPmZiMl9udjEyLndp ZHRoLAo+ICsJCQkJZC0+ZmIyX252MTIuaGVpZ2h0KTsKPiArCQkJaWd0X3BsYW5lX3NldF9wb3Np dGlvbihkLT5wbGFuZTIsIDEwMCwgMTAwKTsKPiArCQkJaWd0X3BsYW5lX3NldF9zaXplKGQtPnBs YW5lMiwgbW9kZS0+aGRpc3BsYXktMjAwLCBtb2RlLT52ZGlzcGxheS0yMDApOwo+ICsJCQlpZ3Rf ZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOwo+ICsKPiArCQkJLyog Mm5kIHBsYW5lIG52MTIgZG93biBzY2FsaW5nICovCj4gKwkJCWlndF9mYl9zZXRfcG9zaXRpb24o JmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIDAsIDApOwo+ICsJCQlpZ3RfZmJfc2V0X3NpemUoJmQt PmZiMl9udjEyLCBkLT5wbGFuZTIsIGQtPmZiMl9udjEyLndpZHRoLAo+ICsJCQkJZC0+ZmIyX252 MTIuaGVpZ2h0KTsKPiArCQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkLT5wbGFuZTIsIDEwMCwg MTAwKTsKPiArCQkJaWd0X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMiwgZC0+ZmIyX252MTIuaGVp Z2h0ICogMi8zLAo+ICsJCQkJZC0+ZmIyX252MTIud2lkdGggKiAyLzMpOwo+ICsJCQlpZ3RfZGlz cGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOwo+ICsKPiArCQkJLyogMm5k IHBsYW5lIG52MTIgZG93biBzY2FsaW5nIC0gcGFuIGludG8gRkIgKi8KPiArCQkJaWd0X2ZiX3Nl dF9wb3NpdGlvbigmZC0+ZmIyX252MTIsIGQtPnBsYW5lMiwgMTAwLCAxMDApOwo+ICsJCQlpZ3Rf ZmJfc2V0X3NpemUoJmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIGQtPmZiMl9udjEyLndpZHRoLTEw MCwKPiArCQkJCWQtPmZiMl9udjEyLmhlaWdodC0xMDApOwo+ICsJCQlpZ3RfcGxhbmVfc2V0X3Bv c2l0aW9uKGQtPnBsYW5lMiwgMTAwLCAxMDApOwo+ICsJCQlpZ3RfcGxhbmVfc2V0X3NpemUoZC0+ cGxhbmUyLCAoZC0+ZmIyX252MTIuaGVpZ2h0LTEwMCkgKiAyLzMsCj4gKwkJCQkoZC0+ZmIyX252 MTIud2lkdGgtMTAwKSAqIDIvMyk7Cj4gKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwg Q09NTUlUX1VOSVZFUlNBTCk7Cj4gKwo+ICsJCQkvKiBCYWNrIHRvIHNpbmdsZSBwbGFuZSBtb2Rl ICAtIHJnYiAmIG5vIHNjYWxpbmcgKi8KPiArCQkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihkLT5w bGFuZTEsIElHVF9ST1RBVElPTl8wKTsKPiArCQkJaWd0X3BsYW5lX3NldF9mYihkLT5wbGFuZTEs ICZkLT5mYjEpOwo+ICsJCQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMiwgTlVMTCk7Cj4gKwkJ CWlndF9mYl9zZXRfcG9zaXRpb24oJmQtPmZiMSwgZC0+cGxhbmUxLCAwLCAwKTsKPiArCQkJaWd0 X2ZiX3NldF9zaXplKCZkLT5mYjEsIGQtPnBsYW5lMSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZk aXNwbGF5KTsKPiArCQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkLT5wbGFuZTEsIDAsIDApOwo+ ICsJCQlpZ3RfcGxhbmVfc2V0X3NpemUoZC0+cGxhbmUxLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+ dmRpc3BsYXkpOwo+ICsJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklW RVJTQUwpOwo+ICsKPiArCQkJaWd0X3JlbW92ZV9mYihkLT5kcm1fZmQsICZkLT5mYjIpOwo+ICsJ CQlpZ3RfcmVtb3ZlX2ZiKGQtPmRybV9mZCwgJmQtPmZiMl9udjEyKTsKPiArCQkJaWd0X3JlbW92 ZV9mYihkLT5kcm1fZmQsICZkLT5mYjFfbnYxMik7Cj4gKwkJCWQtPmZiX2lkMiA9IDA7Cj4gKwkJ CWQtPmZiX2lkMl9udjEyID0gMDsKPiArCQkJZC0+ZmJfaWQxX252MTIgPSAwOwo+ICsJCX0KPiAr Cj4gKwkJdmFsaWRfdGVzdHMrKzsKPiArCj4gKwkJY2xlYW51cF9jcnRjKGQsIG91dHB1dCwgZC0+ cGxhbmUxKTsKPiArCX0KPiArCWlndF9yZXF1aXJlX2YodmFsaWRfdGVzdHMsICJubyB2YWxpZCBj cnRjL2Nvbm5lY3RvciBjb21iaW5hdGlvbnMgZm91bmRcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB0ZXN0X252MTJfdW5zdXBwb3J0ZWRfcGxhbmUoZGF0YV90ICpkKQo+ICt7Cj4gKwlpZ3Rf ZGlzcGxheV90ICpkaXNwbGF5ID0gJmQtPmRpc3BsYXk7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1 dDsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsJaW50IHZhbGlkX3Rlc3RzID0gMDsKPiArCj4gKwlp Z3RfcmVxdWlyZShkLT5kaXNwbGF5Lmhhc191bml2ZXJzYWxfcGxhbmVzKTsKPiArCWlndF9yZXF1 aXJlKGQtPm51bV9zY2FsZXJzKTsKPiArCWlndF9yZXF1aXJlKGQtPm51bV9wbGFuZXMgPj0gMyk7 Cj4gKwo+ICsJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5LCBvdXRwdXQpIHsKPiAr CQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUo b3V0cHV0KTsKPiArCQlwaXBlID0gb3V0cHV0LT5jb25maWcucGlwZTsKPiArCj4gKwkJaWd0X291 dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ICsKPiArCQkvKiBTZXQgdXAgZGlzcGxheSB3 aXRoIHBsYW5lIDEgKi8KPiArCQlkLT5wbGFuZTEgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRw dXQsIElHVF9QTEFORV9QUklNQVJZKTsKPiArCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKGQtPnBs YW5lMSwgSUdUX1JPVEFUSU9OXzApOwo+ICsJCXByZXBhcmVfY3J0YyhkLCBvdXRwdXQsIHBpcGUs IGQtPnBsYW5lMSwgbW9kZSwgQ09NTUlUX0xFR0FDWSk7Cj4gKwo+ICsJCWQtPmZiX2lkM19udjEy ID0gaWd0X2NyZWF0ZV9mYihkLT5kcm1fZmQsCj4gKwkJCQkxOTIwLCAxMDgwLAo+ICsJCQkJRFJN X0ZPUk1BVF9OVjEyLAo+ICsJCQkJZC0+dGlsZWQsCj4gKwkJCQkmZC0+ZmIzX252MTIpOwo+ICsJ CWlndF9hc3NlcnQoZC0+ZmJfaWQzX252MTIpOwo+ICsKPiArCQkvKiBTZXQgdXAgZmIzX252MTIt PnBsYW5lMyBtYXBwaW5nLiAqLwo+ICsJCWQtPnBsYW5lMyA9IGlndF9vdXRwdXRfZ2V0X3BsYW5l KG91dHB1dCwgSUdUX1BMQU5FXzMpOwo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxhbmUzLCAm ZC0+ZmIzX252MTIpOwo+ICsKPiArCQkvKiAzcmQgcGxhbmUgbnYxMiB3aW5kb3dlZCAtIG5vIHNj YWxpbmcgKi8KPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZkLT5mYjNfbnYxMiwgZC0+cGxhbmUz LCAwLCAwKTsKPiArCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiM19udjEyLCBkLT5wbGFuZTMsIGQt PmZiM19udjEyLndpZHRoLAo+ICsJCQlkLT5mYjNfbnYxMi5oZWlnaHQpOwo+ICsJCWlndF9wbGFu ZV9zZXRfcG9zaXRpb24oZC0+cGxhbmUzLCAwLCAwKTsKPiArCQlpZ3RfcGxhbmVfc2V0X3NpemUo ZC0+cGxhbmUzLCBkLT5mYjNfbnYxMi53aWR0aCwgZC0+ZmIzX252MTIuaGVpZ2h0KTsKPiArCj4g KwkJLyogU2hvdWxkIGZhaWwgYmVjYXVzZSBOVjEyIGlzIG5vdCBzdXBwb3J0ZWQgb24gcGxhbmUg MyAqLwo+ICsJCWlndF9hc3NlcnQoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09N TUlUX1VOSVZFUlNBTCkKPiArCQkJPT0gLUVJTlZBTCk7Cj4gKwo+ICsJCXZhbGlkX3Rlc3RzKys7 Cj4gKwo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxhbmUzLCBOVUxMKTsKPiArCQljbGVhbnVw X2NydGMoZCwgb3V0cHV0LCBkLT5wbGFuZTEpOwo+ICsJfQo+ICsJaWd0X3JlcXVpcmVfZih2YWxp ZF90ZXN0cywgIm5vIHZhbGlkIGNydGMvY29ubmVjdG9yIGNvbWJpbmF0aW9ucyBmb3VuZFxuIik7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRlc3RfbnYxMl9pbnZhbGlkX2ZiX3BhcmFtcyhkYXRh X3QgKmQpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZC0+ZGlzcGxheTsKPiAr CWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ICsJZW51bSBwaXBlIHBpcGU7Cj4gKwlpbnQgdmFsaWRf dGVzdHMgPSAwOwo+ICsKPiArCWlndF9yZXF1aXJlKGQtPmRpc3BsYXkuaGFzX3VuaXZlcnNhbF9w bGFuZXMpOwo+ICsJaWd0X3JlcXVpcmUoZC0+bnVtX3NjYWxlcnMpOwo+ICsKPiArCWZvcl9lYWNo X2Nvbm5lY3RlZF9vdXRwdXQoZGlzcGxheSwgb3V0cHV0KSB7Cj4gKwkJc3RydWN0IGxvY2FsX2Ry bV9tb2RlX2ZiX2NtZDIgZjsKPiArCQlpbnQgZmQgPSBkLT5kcm1fZmQ7Cj4gKwkJZHJtTW9kZU1v ZGVJbmZvICptb2RlOwo+ICsKPiArCQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQp Owo+ICsJCXBpcGUgPSBvdXRwdXQtPmNvbmZpZy5waXBlOwo+ICsKPiArCQlpZ3Rfb3V0cHV0X3Nl dF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gKwo+ICsJCS8qIFNldCB1cCBkaXNwbGF5IHdpdGggcGxh bmUgMSAqLwo+ICsJCWQtPnBsYW5lMSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdU X1BMQU5FX1BSSU1BUlkpOwo+ICsJCWlndF9wbGFuZV9zZXRfcm90YXRpb24oZC0+cGxhbmUxLCBJ R1RfUk9UQVRJT05fMCk7Cj4gKwkJcHJlcGFyZV9jcnRjKGQsIG91dHB1dCwgcGlwZSwgZC0+cGxh bmUxLCBtb2RlLCBDT01NSVRfTEVHQUNZKTsKPiArCj4gKwkJLyogdXNlIGlndCBoZWxwZXIgdG8g Y3JlYXRlIGJvIGFuZCBhZGRmYiB0aWxlLVlmLCB0aGlzIHNob3VsZCBwYXNzICovCj4gKwkJZC0+ ZmJfaWQxX252MTIgPSBpZ3RfY3JlYXRlX2ZiKGQtPmRybV9mZCwKPiArCQkJCTE5MjAsIDEwODAs Cj4gKwkJCQlEUk1fRk9STUFUX05WMTIsCj4gKwkJCQlMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZf VElMRUQsCj4gKwkJCQkmZC0+ZmIxX252MTIpOwo+ICsJCWlndF9hc3NlcnQoZC0+ZmJfaWQxX252 MTIpOwo+ICsKPiArCQkvKiBub3cgcmVtb3ZlIGZiIGJ1dCBrZWVwIGJvIHRvIHJlZG8gYWRkZmIg Ki8KPiArCQlkcm1Nb2RlUm1GQihkLT5kcm1fZmQsIGQtPmZiX2lkMV9udjEyKTsKPiArCj4gKwkJ LyogcmVkbyBBZGRGQiAqLwo+ICsJCW1lbXNldCgmZiwgMCwgc2l6ZW9mKGYpKTsKPiArCj4gKwkJ Zi53aWR0aCA9IGQtPmZiMV9udjEyLndpZHRoOwo+ICsJCWYuaGVpZ2h0ID0gZC0+ZmIxX252MTIu aGVpZ2h0Owo+ICsJCWYucGl4ZWxfZm9ybWF0ID0gZC0+ZmIxX252MTIuZHJtX2Zvcm1hdDsKPiAr CQlmLmZsYWdzID0gTE9DQUxfRFJNX01PREVfRkJfTU9ESUZJRVJTOwo+ICsJCWYuaGFuZGxlc1sw XSA9IGQtPmZiMV9udjEyLmdlbV9oYW5kbGU7Cj4gKwkJZi5waXRjaGVzWzBdID0gZC0+ZmIxX252 MTIuc3RyaWRlOwo+ICsJCWYubW9kaWZpZXJbMF0gPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZf VElMRUQ7Cj4gKwkJZi5tb2RpZmllclsxXSA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxF RDsKPiArCj4gKwkJLyogdGVzdCBpbnZhbGlkIHV2IHN0YXJ0ICovCj4gKwkJZi5oYW5kbGVzWzFd ID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRsZTsKPiArCQlmLnBpdGNoZXNbMV0gPSBkLT5mYjFfbnYx Mi5zdHJpZGU7Cj4gKwkJZi5vZmZzZXRzWzFdID0gMDsgIC8qIGludmFsaWQgdXYgc3RhcnQgKi8K PiArCQlpZ3RfYXNzZXJ0KGRybUlvY3RsKGZkLCBMT0NBTF9EUk1fSU9DVExfTU9ERV9BRERGQjIs ICZmKSAhPSAwKTsKCkZvciBzdWNoIHNpbXBsZSBpbnZhbGlkIGlucHV0IHBhcmFtYXRlcnMgdGVz dHMgdGhlIHVzdWFsIGFwcHJvYWNoIGlzIHRvCnNwbGl0IHRoZW0gb3V0LiBBbHNvIHlvdSBkb24n dCBoYXZlIHRvIGRvIGEgbW9kZXNldCBmb3IgYWRkZmIgKHdoaWNoIHdpbGwKc3BlZWQgdGhpbmdz IHVwKS4gRXNzZW50aWFsbHkgZWFjaCBibG9jayB3aXRoIGFuIGlndF9hc3NlcnQgc2hvdWxkIGJl IGl0cwpvd24gc3VidGVzdC4KLURhbmllbAoKPiArCj4gKwkJLyogdGVzdCB1diBwaXRjaCAhPSB5 IHBpdGNoICovCj4gKwkJZi5oYW5kbGVzWzFdID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRsZTsKPiAr CQlmLnBpdGNoZXNbMV0gPSBkLT5mYjFfbnYxMi5zdHJpZGUgKyAxOyAvKiBpbnZhbGlkIHBpdGNo ICovCj4gKwkJZi5vZmZzZXRzWzFdID0gZC0+ZmIxX252MTIudXZfb2Zmc2V0Owo+ICsJCWlndF9h c3NlcnQoZHJtSW9jdGwoZmQsIExPQ0FMX0RSTV9JT0NUTF9NT0RFX0FEREZCMiwgJmYpICE9IDAp Owo+ICsKPiArCQkvKiB0ZXN0IHV2IGdlbSBoYW5kbGUgIT0geSBnZW0gaGFuZGxlICovCj4gKwkJ Zi5oYW5kbGVzWzFdID0gMHhGRkZGRkZGRjsgICAvKiBpbnZhbGlkIGdlbSBoYW5kbGUgKi8KPiAr CQlmLnBpdGNoZXNbMV0gPSBkLT5mYjFfbnYxMi5zdHJpZGU7Cj4gKwkJZi5vZmZzZXRzWzFdID0g ZC0+ZmIxX252MTIudXZfb2Zmc2V0Owo+ICsJCWlndF9hc3NlcnQoZHJtSW9jdGwoZmQsIExPQ0FM X0RSTV9JT0NUTF9NT0RFX0FEREZCMiwgJmYpICE9IDApOwo+ICsKPiArCQkvKiB0ZXN0IHV2IG9m ZnNldCBub3QgYWxpZ25lZCB0byBuZXcgdGlsZS1yb3cgKi8KPiArCQlmLmhhbmRsZXNbMV0gPSBk LT5mYjFfbnYxMi5nZW1faGFuZGxlOwo+ICsJCWYucGl0Y2hlc1sxXSA9IGQtPmZiMV9udjEyLnN0 cmlkZTsKPiArCQlmLm9mZnNldHNbMV0gPSBkLT5mYjFfbnYxMi51dl9vZmZzZXQgKyAweEZGOyAg Lyogbm90IHRpbGUtcm93IGFsaWduZWQgKi8KPiArCQlpZ3RfYXNzZXJ0KGRybUlvY3RsKGZkLCBM T0NBTF9EUk1fSU9DVExfTU9ERV9BRERGQjIsICZmKSAhPSAwKTsKPiArCj4gKwkJLyogdmFsaWQg cGFyYW1zICovCj4gKwkJZi5oYW5kbGVzWzFdID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRsZTsKPiAr CQlmLnBpdGNoZXNbMV0gPSBkLT5mYjFfbnYxMi5zdHJpZGU7Cj4gKwkJZi5vZmZzZXRzWzFdID0g ZC0+ZmIxX252MTIudXZfb2Zmc2V0Owo+ICsJCWlndF9hc3NlcnQoZHJtSW9jdGwoZmQsIExPQ0FM X0RSTV9JT0NUTF9NT0RFX0FEREZCMiwgJmYpID09IDApOwo+ICsKPiArCQkvKiBGcmVlIGZiICov Cj4gKwkJaWd0X3JlbW92ZV9mYihkLT5kcm1fZmQsICZkLT5mYjFfbnYxMik7Cj4gKwkJZC0+ZmJf aWQxX252MTIgPSAwOwo+ICsKPiArCQkvKiByZWNyZWF0ZSBibyBhbmQgYWRkZmIgaW4gdGlsZS1Z LCB0aGlzIHNob3VsZCBwYXNzICovCj4gKwkJZC0+ZmJfaWQxX252MTIgPSBpZ3RfY3JlYXRlX2Zi KGQtPmRybV9mZCwKPiArCQkJCTE5MjAsIDEwODAsCj4gKwkJCQlEUk1fRk9STUFUX05WMTIsCj4g KwkJCQlMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKPiArCQkJCSZkLT5mYjFfbnYxMik7 Cj4gKwkJaWd0X2Fzc2VydChkLT5mYl9pZDFfbnYxMik7Cj4gKwo+ICsJCS8qIG5vdyByZW1vdmUg ZmIgYnV0IGtlZXAgYm8gdG8gcmVkbyBhZGRmYiAqLwo+ICsJCWRybU1vZGVSbUZCKGQtPmRybV9m ZCwgZC0+ZmJfaWQxX252MTIpOwo+ICsKPiArCQkvKiByZWRvIEFkZEZCICovCj4gKwkJbWVtc2V0 KCZmLCAwLCBzaXplb2YoZikpOwo+ICsKPiArCQlmLndpZHRoID0gZC0+ZmIxX252MTIud2lkdGg7 Cj4gKwkJZi5oZWlnaHQgPSBkLT5mYjFfbnYxMi5oZWlnaHQ7Cj4gKwkJZi5waXhlbF9mb3JtYXQg PSBkLT5mYjFfbnYxMi5kcm1fZm9ybWF0Owo+ICsJCWYuZmxhZ3MgPSBMT0NBTF9EUk1fTU9ERV9G Ql9NT0RJRklFUlM7Cj4gKwkJZi5oYW5kbGVzWzBdID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRsZTsK PiArCQlmLnBpdGNoZXNbMF0gPSBkLT5mYjFfbnYxMi5zdHJpZGU7Cj4gKwkJZi5tb2RpZmllclsw XSA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEOwo+ICsJCWYuaGFuZGxlc1sxXSA9IGQt PmZiMV9udjEyLmdlbV9oYW5kbGU7Cj4gKwkJZi5waXRjaGVzWzFdID0gZC0+ZmIxX252MTIuc3Ry aWRlOwo+ICsJCWYubW9kaWZpZXJbMV0gPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsK PiArCj4gKwkJLyogdGVzdCB1diBvZmZzZXQgbm90IDQtbGluZSBhbGlnbmVkICovCj4gKwkJZi5v ZmZzZXRzWzFdID0gZC0+ZmIxX252MTIudXZfb2Zmc2V0ICsgZi5waXRjaGVzWzFdOyAvKiBub3Qg NC1sbiBhbGlnbiovCj4gKwkJaWd0X2Fzc2VydChkcm1Jb2N0bChmZCwgTE9DQUxfRFJNX0lPQ1RM X01PREVfQURERkIyLCAmZikgIT0gMCk7Cj4gKwo+ICsJCS8qIHZhbGlkIHBhcmFtcyAqLwo+ICsJ CWYub2Zmc2V0c1sxXSA9IGQtPmZiMV9udjEyLnV2X29mZnNldDsKPiArCQlpZ3RfYXNzZXJ0KGRy bUlvY3RsKGZkLCBMT0NBTF9EUk1fSU9DVExfTU9ERV9BRERGQjIsICZmKSA9PSAwKTsKPiArCj4g KwkJdmFsaWRfdGVzdHMrKzsKPiArCj4gKwkJY2xlYW51cF9jcnRjKGQsIG91dHB1dCwgZC0+cGxh bmUxKTsKPiArCX0KPiArCWlndF9yZXF1aXJlX2YodmFsaWRfdGVzdHMsICJubyB2YWxpZCBjcnRj L2Nvbm5lY3RvciBjb21iaW5hdGlvbnMgZm91bmRcbiIpOwo+ICt9Cj4gKwo+ICtpZ3RfbWFpbgo+ ICt7Cj4gKwlkYXRhX3QgZGF0YSA9IHt9Owo+ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2FueSgpOwo+ ICsKPiArCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4gKwo+ICsJCWlndF9kaXNw bGF5X2luaXQoJmRhdGEuZGlzcGxheSwgZGF0YS5kcm1fZmQpOwo+ICsKPiArCQlkZXZpZCA9IGlu dGVsX2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQpOwo+ICsJCWRhdGEubnVtX3NjYWxlcnMgPSBp bnRlbF9nZW4oZGV2aWQpID49IDkgPyAyIDogMDsKPiArCQlkYXRhLm51bV9wbGFuZXMgPSAyOwo+ ICsJCWlndF9hc3NlcnQoaW50ZWxfZ2VuKGRldmlkKSA+PSA5KTsKPiArCX0KPiArCj4gKwlkYXRh LnJvdGF0aW9uID0gSUdUX1JPVEFUSU9OXzA7Cj4gKwlpZ3Rfc3VidGVzdF9mKCJudjEyLXBsYW5l LWxpbmVhciIpIHsKPiArCQlkYXRhLnRpbGVkID0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsK PiArCQl0ZXN0X252MTJfcGxhbmUoJmRhdGEpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3RfZigibnYx Mi1wbGFuZS10aWxlLXgiKSB7Cj4gKwkJZGF0YS50aWxlZCA9IExPQ0FMX0k5MTVfRk9STUFUX01P RF9YX1RJTEVEOwo+ICsJCXRlc3RfbnYxMl9wbGFuZSgmZGF0YSk7Cj4gKwl9Cj4gKwlpZ3Rfc3Vi dGVzdF9mKCJudjEyLXBsYW5lLXRpbGUteSIpIHsKPiArCQlkYXRhLnRpbGVkID0gTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQ7Cj4gKwkJdGVzdF9udjEyX3BsYW5lKCZkYXRhKTsKPiArCX0K PiArCj4gKwlkYXRhLnJvdGF0aW9uID0gSUdUX1JPVEFUSU9OXzE4MDsKPiArCWlndF9zdWJ0ZXN0 X2YoIm52MTItcGxhbmUtbGluZWFyLXJvdC0xODAiKSB7Cj4gKwkJZGF0YS50aWxlZCA9IExPQ0FM X0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gKwkJdGVzdF9udjEyX3BsYW5lKCZkYXRhKTsKPiArCX0K PiArCWlndF9zdWJ0ZXN0X2YoIm52MTItcGxhbmUtdGlsZS14LXJvdC0xODAiKSB7Cj4gKwkJZGF0 YS50aWxlZCA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVEOwo+ICsJCXRlc3RfbnYxMl9w bGFuZSgmZGF0YSk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdF9mKCJudjEyLXBsYW5lLXRpbGUteS1y b3QtMTgwIikgewo+ICsJCWRhdGEudGlsZWQgPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxF RDsKPiArCQl0ZXN0X252MTJfcGxhbmUoJmRhdGEpOwo+ICsJfQo+ICsKPiArCWRhdGEucm90YXRp b24gPSBJR1RfUk9UQVRJT05fOTA7Cj4gKwlpZ3Rfc3VidGVzdF9mKCJudjEyLXBsYW5lLXRpbGUt eS1yb3QtOTAiKSB7Cj4gKwkJZGF0YS50aWxlZCA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJ TEVEOwo+ICsJCXRlc3RfbnYxMl9wbGFuZV9yb3RhdGlvbl85MF9vcl8yNzAoJmRhdGEpOwo+ICsJ fQo+ICsKPiArCWRhdGEucm90YXRpb24gPSBJR1RfUk9UQVRJT05fMjcwOwo+ICsJaWd0X3N1YnRl c3RfZigibnYxMi1wbGFuZS10aWxlLXktcm90LTI3MCIpIHsKPiArCQlkYXRhLnRpbGVkID0gTE9D QUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7Cj4gKwkJdGVzdF9udjEyX3BsYW5lX3JvdGF0aW9u XzkwX29yXzI3MCgmZGF0YSk7Cj4gKwl9Cj4gKwo+ICsJaWd0X3N1YnRlc3RfZigibnYxMi1vbi11 bnN1cHBvcnRlZC1wbGFuZSIpIHsKPiArCQlkYXRhLnRpbGVkID0gTE9DQUxfSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVEOwo+ICsJCXRlc3RfbnYxMl91bnN1cHBvcnRlZF9wbGFuZSgmZGF0YSk7Cj4g Kwl9Cj4gKwo+ICsJaWd0X3N1YnRlc3RfZigibnYxMi1pbnZhbGlkLWZiLXBhcmFtcyIpIHsKPiAr CQlkYXRhLnRpbGVkID0gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOwo+ICsJCXRlc3Rf bnYxMl9pbnZhbGlkX2ZiX3BhcmFtcygmZGF0YSk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2ZpeHR1cmUg ewo+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7Cj4gKwl9Cj4gK30KPiAtLSAK PiAxLjkuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9y YXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK