From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 20/27] drm/i915: Remove logical HW ID Date: Wed, 25 Sep 2019 13:41:10 +0100 Message-ID: <063d6c67-0efb-89c6-4726-6006e64eb088@linux.intel.com> References: <20190925100137.17956-1-chris@chris-wilson.co.uk> <20190925100137.17956-21-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2CB8A6E037 for ; Wed, 25 Sep 2019 12:41:14 +0000 (UTC) In-Reply-To: <20190925100137.17956-21-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org WysgRGFuaWVsZSwgSSB0aGluayBoZSBtaWdodCB3YW50IHRvIGhhdmUgYSBsb29rIGF0IHRoaXMu XQoKT24gMjUvMDkvMjAxOSAxMTowMSwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IFdpdGggdGhlIGlu dHJvZHVjdGlvbiBvZiBjdHgtPmVuZ2luZXNbXSB3ZSBhbGxvdyBtdWx0aXBsZSBsb2dpY2FsCj4g Y29udGV4dHMgdG8gYmUgdXNlZCBvbiB0aGUgc2FtZSBlbmdpbmUgKGUuZy4gd2l0aCB2aXJ0dWFs IGVuZ2luZXMpLiBFYWNoCj4gbG9naWNhbCBjb250ZXh0IHJlcXVpcmVzIGEgdW5pcXVlIHRhZyBp biBvcmRlciBmb3IgY29udGV4dC1zd2l0Y2hpbmcgdG8KPiBvY2N1ciBjb3JyZWN0bHkgYmV0d2Vl biB0aGVtLgo+IAo+IFdlIG9ubHkgbmVlZCB0byBrZWVwIGEgdW5pcXVlIHRhZyBmb3IgdGhlIGFj dGl2ZSBsaWZldGltZSBvZiB0aGUKPiBjb250ZXh0LCBhbmQgZm9yIGFzIGxvbmcgYXMgd2UgbmVl ZCB0byBpZGVudGlmeSB0aGF0IGNvbnRleHQuIFRoZSBIVwo+IHVzZXMgdGhlIHRhZyB0byBkZXRl cm1pbmUgaWYgaXQgc2hvdWxkIHVzZSBhIGxpdGUtcmVzdG9yZSAod2h5IG5vdCB0aGUKPiBMUkNB PykgYW5kIHBhc3NlcyB0aGUgdGFnIGJhY2sgZm9yIHZhcmlvdXMgc3RhdHVzIGlkZW50aWZpZXMu IFRoZSBvbmx5Cj4gc3RhdHVzIHdlIG5lZWQgdG8gdHJhY2sgaXMgZm9yIE9BLCBzbyB3aGVuIHVz aW5nIHBlcmYsIHdlIGFzc2lnbiB0aGUKPiBzcGVjaWZpYyBjb250ZXh0IGEgdW5pcXVlIHRhZy4K PiAKPiBGaXhlczogOTc2YjU1ZjBlMWRiICgiZHJtL2k5MTU6IEFsbG93IGEgY29udGV4dCB0byBk ZWZpbmUgaXRzIHNldCBvZiBlbmdpbmVzIikKCkZpeGVzPyBXaHk/Cgo+IFNpZ25lZC1vZmYtYnk6 IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYyAgIHwgMTQ3IC0tLS0tLS0tLS0t LS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaCAg IHwgIDE1IC0tCj4gICAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0X3R5cGVz LmggfCAgMTggLS0tCj4gICAuLi4vZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250 ZXh0LmMgfCAgMTMgKy0KPiAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9tb2NrX2Nv bnRleHQuYyB8ICAgOCAtCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0 X3R5cGVzLmggfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5l X3R5cGVzLmggIHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMu YyAgICAgICAgICAgfCAgMjkgKystLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0 LmMgICAgICAgICAgICAgIHwgIDE3IC0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYyAgICAgICAgICAgfCAgIDMgLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n cHVfZXJyb3IuYyAgICAgICAgIHwgICA3ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dwdV9lcnJvci5oICAgICAgICAgfCAgIDEgLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wZXJmLmMgICAgICAgICAgICAgIHwgIDI1ICsrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV90cmFjZS5oICAgICAgICAgICAgIHwgIDM4ICsrLS0tCj4gICAuLi4vZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jICAgfCAgIDQgKy0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5jICAgICB8ICAgMiArLQo+ICAgMTYgZmlsZXMgY2hh bmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgMjg0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IGU4MzIyMzhhNzJlNS4u NGU1OWI4MDlkOTAxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f Y29udGV4dC5jCj4gQEAgLTE2OCw5NyArMTY4LDYgQEAgbG9va3VwX3VzZXJfZW5naW5lKHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJcmV0dXJuIGk5MTVfZ2VtX2NvbnRleHRfZ2V0 X2VuZ2luZShjdHgsIGlkeCk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlubGluZSBpbnQgbmV3X2h3 X2lkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBnZnBfdCBnZnApCj4gLXsKPiAtCXVu c2lnbmVkIGludCBtYXg7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+Y29udGV4 dHMubXV0ZXgpOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIpCj4gLQkJbWF4ID0g R0VOMTJfTUFYX0NPTlRFWFRfSFdfSUQ7Cj4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0g MTEpCj4gLQkJbWF4ID0gR0VOMTFfTUFYX0NPTlRFWFRfSFdfSUQ7Cj4gLQllbHNlIGlmIChVU0VT X0dVQ19TVUJNSVNTSU9OKGk5MTUpKQo+IC0JCS8qCj4gLQkJICogV2hlbiB1c2luZyBHdUMgaW4g cHJveHkgc3VibWlzc2lvbiwgR3VDIGNvbnN1bWVzIHRoZQo+IC0JCSAqIGhpZ2hlc3QgYml0IGlu IHRoZSBjb250ZXh0IGlkIHRvIGluZGljYXRlIHByb3h5IHN1Ym1pc3Npb24uCj4gLQkJICovCj4g LQkJbWF4ID0gTUFYX0dVQ19DT05URVhUX0hXX0lEOwo+IC0JZWxzZQo+IC0JCW1heCA9IE1BWF9D T05URVhUX0hXX0lEOwo+IC0KPiAtCXJldHVybiBpZGFfc2ltcGxlX2dldCgmaTkxNS0+Y29udGV4 dHMuaHdfaWRhLCAwLCBtYXgsIGdmcCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgc3RlYWxfaHdf aWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHgsICpjbjsKPiAtCUxJU1RfSEVBRChwaW5uZWQpOwo+IC0JaW50IGlkID0g LUVOT1NQQzsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5jb250ZXh0cy5tdXRl eCk7Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0eCwgY24sCj4gLQkJCQkgJmk5 MTUtPmNvbnRleHRzLmh3X2lkX2xpc3QsIGh3X2lkX2xpbmspIHsKPiAtCQlpZiAoYXRvbWljX3Jl YWQoJmN0eC0+aHdfaWRfcGluX2NvdW50KSkgewo+IC0JCQlsaXN0X21vdmVfdGFpbCgmY3R4LT5o d19pZF9saW5rLCAmcGlubmVkKTsKPiAtCQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQlHRU1f QlVHX09OKCFjdHgtPmh3X2lkKTsgLyogcGVybWEtcGlubmVkIGtlcm5lbCBjb250ZXh0ICovCj4g LQkJbGlzdF9kZWxfaW5pdCgmY3R4LT5od19pZF9saW5rKTsKPiAtCQlpZCA9IGN0eC0+aHdfaWQ7 Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIFJlbWVtYmVyIGhvdyBmYXIgd2Ug Z290IHVwIG9uIHRoZSBsYXN0IHJlcG9zc2VzaW9uIHNjYW4sIHNvIHRoZQo+IC0JICogbGlzdCBp cyBrZXB0IGluIGEgImxlYXN0IHJlY2VudGx5IHNjYW5uZWQiIG9yZGVyLgo+IC0JICovCj4gLQls aXN0X3NwbGljZV90YWlsKCZwaW5uZWQsICZpOTE1LT5jb250ZXh0cy5od19pZF9saXN0KTsKPiAt CXJldHVybiBpZDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBhc3NpZ25faHdfaWQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsIHVuc2lnbmVkIGludCAqb3V0KQo+IC17Cj4gLQlpbnQgcmV0 Owo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmNvbnRleHRzLm11dGV4KTsKPiAt Cj4gLQkvKgo+IC0JICogV2UgcHJlZmVyIHRvIHN0ZWFsL3N0YWxsIG91cnNlbHZlcyBhbmQgb3Vy IHVzZXJzIG92ZXIgdGhhdCBvZiB0aGUKPiAtCSAqIGVudGlyZSBzeXN0ZW0uIFRoYXQgbWF5IGJl IGEgbGl0dGxlIHVuZmFpciB0byBvdXIgdXNlcnMsIGFuZAo+IC0JICogZXZlbiBodXJ0IGhpZ2gg cHJpb3JpdHkgY2xpZW50cy4gVGhlIGNob2ljZSBpcyB3aGV0aGVyIHRvIG9vbWtpbGwKPiAtCSAq IHNvbWV0aGluZyBlbHNlLCBvciBzdGVhbCBhIGNvbnRleHQgaWQuCj4gLQkgKi8KPiAtCXJldCA9 IG5ld19od19pZChpOTE1LCBHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCB8IF9fR0ZQ X05PV0FSTik7Cj4gLQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKPiAtCQlyZXQgPSBzdGVhbF9o d19pZChpOTE1KTsKPiAtCQlpZiAocmV0IDwgMCkgLyogb25jZSBhZ2FpbiBmb3IgdGhlIGNvcnJl Y3QgZXJybm8gY29kZSAqLwo+IC0JCQlyZXQgPSBuZXdfaHdfaWQoaTkxNSwgR0ZQX0tFUk5FTCk7 Cj4gLQkJaWYgKHJldCA8IDApCj4gLQkJCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JKm91dCA9 IHJldDsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCByZWxlYXNlX2h3X2lk KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gY3R4LT5pOTE1Owo+IC0KPiAtCWlmIChsaXN0X2VtcHR5KCZjdHgtPmh3 X2lkX2xpbmspKQo+IC0JCXJldHVybjsKPiAtCj4gLQltdXRleF9sb2NrKCZpOTE1LT5jb250ZXh0 cy5tdXRleCk7Cj4gLQlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+aHdfaWRfbGluaykpIHsKPiAtCQlp ZGFfc2ltcGxlX3JlbW92ZSgmaTkxNS0+Y29udGV4dHMuaHdfaWRhLCBjdHgtPmh3X2lkKTsKPiAt CQlsaXN0X2RlbF9pbml0KCZjdHgtPmh3X2lkX2xpbmspOwo+IC0JfQo+IC0JbXV0ZXhfdW5sb2Nr KCZpOTE1LT5jb250ZXh0cy5tdXRleCk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdm9pZCBfX2ZyZWVf ZW5naW5lcyhzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lcyAqZSwgdW5zaWduZWQgaW50IGNvdW50KQo+ ICAgewo+ICAgCXdoaWxlIChjb3VudC0tKSB7Cj4gQEAgLTMxMyw4ICsyMjIsNiBAQCBzdGF0aWMg dm9pZCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkK PiAgIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ ICAgCUdFTV9CVUdfT04oIWk5MTVfZ2VtX2NvbnRleHRfaXNfY2xvc2VkKGN0eCkpOwo+ICAgCj4g LQlyZWxlYXNlX2h3X2lkKGN0eCk7Cj4gLQo+ICAgCWZyZWVfZW5naW5lcyhyY3VfYWNjZXNzX3Bv aW50ZXIoY3R4LT5lbmdpbmVzKSk7Cj4gICAJbXV0ZXhfZGVzdHJveSgmY3R4LT5lbmdpbmVzX211 dGV4KTsKPiAgIAo+IEBAIC00NTksMTIgKzM2Niw2IEBAIHN0YXRpYyB2b2lkIGNvbnRleHRfY2xv c2Uoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAgIAo+ICAgCWN0eC0+ZmlsZV9wcml2 ID0gRVJSX1BUUigtRUJBREYpOwo+ICAgCj4gLQkvKgo+IC0JICogVGhpcyBjb250ZXh0IHdpbGwg bmV2ZXIgYWdhaW4gYmUgYXNzaW5nZWQgdG8gSFcsIHNvIHdlIGNhbgo+IC0JICogcmV1c2UgaXRz IElEIGZvciB0aGUgbmV4dCBjb250ZXh0Lgo+IC0JICovCj4gLQlyZWxlYXNlX2h3X2lkKGN0eCk7 Cj4gLQo+ICAgCS8qCj4gICAJICogVGhlIExVVCB1c2VzIHRoZSBWTUEgYXMgYSBiYWNrcG9pbnRl ciB0byB1bnJlZiB0aGUgb2JqZWN0LAo+ICAgCSAqIHNvIHdlIG5lZWQgdG8gY2xlYXIgdGhlIExV VCBiZWZvcmUgd2UgY2xvc2UgYWxsIHRoZSBWTUEgKGluc2lkZQo+IEBAIC01MDcsNyArNDA4LDYg QEAgX19jcmVhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAlS Q1VfSU5JVF9QT0lOVEVSKGN0eC0+ZW5naW5lcywgZSk7Cj4gICAKPiAgIAlJTklUX1JBRElYX1RS RUUoJmN0eC0+aGFuZGxlc192bWEsIEdGUF9LRVJORUwpOwo+IC0JSU5JVF9MSVNUX0hFQUQoJmN0 eC0+aHdfaWRfbGluayk7Cj4gICAKPiAgIAkvKiBOQjogTWFyayBhbGwgc2xpY2VzIGFzIG5lZWRp bmcgYSByZW1hcCBzbyB0aGF0IHdoZW4gdGhlIGNvbnRleHQgZmlyc3QKPiAgIAkgKiBsb2FkcyBp dCB3aWxsIHJlc3RvcmUgd2hhdGV2ZXIgcmVtYXAgc3RhdGUgYWxyZWFkeSBleGlzdHMuIElmIHRo ZXJlCj4gQEAgLTY3NiwxOCArNTc2LDExIEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICoKPiAg IGk5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2tlcm5lbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwgaW50IHByaW8pCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsK PiAtCWludCBlcnI7Cj4gICAKPiAgIAljdHggPSBpOTE1X2dlbV9jcmVhdGVfY29udGV4dChpOTE1 LCAwKTsKPiAgIAlpZiAoSVNfRVJSKGN0eCkpCj4gICAJCXJldHVybiBjdHg7Cj4gICAKPiAtCWVy ciA9IGk5MTVfZ2VtX2NvbnRleHRfcGluX2h3X2lkKGN0eCk7Cj4gLQlpZiAoZXJyKSB7Cj4gLQkJ ZGVzdHJveV9rZXJuZWxfY29udGV4dCgmY3R4KTsKPiAtCQlyZXR1cm4gRVJSX1BUUihlcnIpOwo+ IC0JfQo+IC0KPiAgIAlpOTE1X2dlbV9jb250ZXh0X2NsZWFyX2Jhbm5hYmxlKGN0eCk7Cj4gICAJ aTkxNV9nZW1fY29udGV4dF9zZXRfcGVyc2lzdGVuY2UoY3R4KTsKPiAgIAljdHgtPnNjaGVkLnBy aW9yaXR5ID0gSTkxNV9VU0VSX1BSSU9SSVRZKHByaW8pOwo+IEBAIC03MjcsMTUgKzYyMCw2IEBA IGludCBpOTE1X2dlbV9jb250ZXh0c19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiAgIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRlZmF1bHQgZ2xvYmFsIGNv bnRleHRcbiIpOwo+ICAgCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ICAgCX0KPiAtCS8qCj4gLQkg KiBGb3IgZWFzeSByZWNvZ25pc2FibGl0eSwgd2Ugd2FudCB0aGUga2VybmVsIGNvbnRleHQgdG8g YmUgMCBhbmQgdGhlbgo+IC0JICogYWxsIHVzZXIgY29udGV4dHMgd2lsbCBoYXZlIG5vbi16ZXJv IGh3X2lkLiBLZXJuZWwgY29udGV4dHMgYXJlCj4gLQkgKiBwZXJtYW5lbnRseSBwaW5uZWQsIHNv IHRoYXQgd2UgbmV2ZXIgc3VmZmVyIGEgc3RhbGwgYW5kIGNhbgo+IC0JICogdXNlIHRoZW0gZnJv bSBhbnkgYWxsb2NhdGlvbiBjb250ZXh0IChlLmcuIGZvciBldmljdGluZyBvdGhlcgo+IC0JICog Y29udGV4dHMgYW5kIGZyb20gaW5zaWRlIHRoZSBzaHJpbmtlcikuCj4gLQkgKi8KPiAtCUdFTV9C VUdfT04oY3R4LT5od19pZCk7Cj4gLQlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmY3R4LT5od19p ZF9waW5fY291bnQpKTsKPiAgIAlkZXZfcHJpdi0+a2VybmVsX2NvbnRleHQgPSBjdHg7Cj4gICAK PiAgIAlEUk1fREVCVUdfRFJJVkVSKCIlcyBjb250ZXh0IHN1cHBvcnQgaW5pdGlhbGl6ZWRcbiIs Cj4gQEAgLTc0OSwxMCArNjMzLDYgQEAgdm9pZCBpOTE1X2dlbV9jb250ZXh0c19maW5pKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJZGVzdHJveV9rZXJuZWxfY29udGV4dCgmaTkx NS0+a2VybmVsX2NvbnRleHQpOwo+IC0KPiAtCS8qIE11c3QgZnJlZSBhbGwgZGVmZXJyZWQgY29u dGV4dHMgKHZpYSBmbHVzaF93b3JrcXVldWUpIGZpcnN0ICovCj4gLQlHRU1fQlVHX09OKCFsaXN0 X2VtcHR5KCZpOTE1LT5jb250ZXh0cy5od19pZF9saXN0KSk7Cj4gLQlpZGFfZGVzdHJveSgmaTkx NS0+Y29udGV4dHMuaHdfaWRhKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBjb250ZXh0X2lk cl9jbGVhbnVwKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKPiBAQCAtMjQzOCwzMyArMjMx OCw2IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X3Jlc2V0X3N0YXRzX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+IC1pbnQgX19pOTE1X2dl bV9jb250ZXh0X3Bpbl9od19pZChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+IC17Cj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGN0eC0+aTkxNTsKPiAtCWludCBlcnIg PSAwOwo+IC0KPiAtCW11dGV4X2xvY2soJmk5MTUtPmNvbnRleHRzLm11dGV4KTsKPiAtCj4gLQlH RU1fQlVHX09OKGk5MTVfZ2VtX2NvbnRleHRfaXNfY2xvc2VkKGN0eCkpOwo+IC0KPiAtCWlmIChs aXN0X2VtcHR5KCZjdHgtPmh3X2lkX2xpbmspKSB7Cj4gLQkJR0VNX0JVR19PTihhdG9taWNfcmVh ZCgmY3R4LT5od19pZF9waW5fY291bnQpKTsKPiAtCj4gLQkJZXJyID0gYXNzaWduX2h3X2lkKGk5 MTUsICZjdHgtPmh3X2lkKTsKPiAtCQlpZiAoZXJyKQo+IC0JCQlnb3RvIG91dF91bmxvY2s7Cj4g LQo+IC0JCWxpc3RfYWRkX3RhaWwoJmN0eC0+aHdfaWRfbGluaywgJmk5MTUtPmNvbnRleHRzLmh3 X2lkX2xpc3QpOwo+IC0JfQo+IC0KPiAtCUdFTV9CVUdfT04oYXRvbWljX3JlYWQoJmN0eC0+aHdf aWRfcGluX2NvdW50KSA9PSB+MHUpOwo+IC0JYXRvbWljX2luYygmY3R4LT5od19pZF9waW5fY291 bnQpOwo+IC0KPiAtb3V0X3VubG9jazoKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+Y29udGV4dHMu bXV0ZXgpOwo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0KPiAgIC8qIEdFTSBjb250ZXh0LWVuZ2lu ZXMgaXRlcmF0b3I6IGZvcl9lYWNoX2dlbV9lbmdpbmUoKSAqLwo+ICAgc3RydWN0IGludGVsX2Nv bnRleHQgKgo+ICAgaTkxNV9nZW1fZW5naW5lc19pdGVyX25leHQoc3RydWN0IGk5MTVfZ2VtX2Vu Z2luZXNfaXRlciAqaXQpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9jb250ZXh0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29u dGV4dC5oCj4gaW5kZXggZTBmNWI2YzZhMzMxLi4xYjBkZjUzNDM2Y2YgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmgKPiBAQCAtMTI3LDIxICsxMjcs NiBAQCBpOTE1X2dlbV9jb250ZXh0X2NsZWFyX3VzZXJfZW5naW5lcyhzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4KQo+ICAgCWNsZWFyX2JpdChDT05URVhUX1VTRVJfRU5HSU5FUywgJmN0eC0+ ZmxhZ3MpOwo+ICAgfQo+ICAgCj4gLWludCBfX2k5MTVfZ2VtX2NvbnRleHRfcGluX2h3X2lkKHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpOwo+IC1zdGF0aWMgaW5saW5lIGludCBpOTE1X2dl bV9jb250ZXh0X3Bpbl9od19pZChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+IC17Cj4g LQlpZiAoYXRvbWljX2luY19ub3RfemVybygmY3R4LT5od19pZF9waW5fY291bnQpKQo+IC0JCXJl dHVybiAwOwo+IC0KPiAtCXJldHVybiBfX2k5MTVfZ2VtX2NvbnRleHRfcGluX2h3X2lkKGN0eCk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9jb250ZXh0X3VucGluX2h3 X2lkKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gLXsKPiAtCUdFTV9CVUdfT04oYXRv bWljX3JlYWQoJmN0eC0+aHdfaWRfcGluX2NvdW50KSA9PSAwdSk7Cj4gLQlhdG9taWNfZGVjKCZj dHgtPmh3X2lkX3Bpbl9jb3VudCk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgaTkx NV9nZW1fY29udGV4dF9pc19rZXJuZWwoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAg IHsKPiAgIAlyZXR1cm4gIWN0eC0+ZmlsZV9wcml2Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMuaAo+IGluZGV4IGRhZjFlYTUwNzVhNi4u NjQxOWRhN2M5ZjkwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9jb250ZXh0X3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fY29udGV4dF90eXBlcy5oCj4gQEAgLTE0OCwyNCArMTQ4LDYgQEAgc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgewo+ICAgI2RlZmluZSBDT05URVhUX0ZPUkNFX1NJTkdMRV9TVUJNSVNTSU9O CTIKPiAgICNkZWZpbmUgQ09OVEVYVF9VU0VSX0VOR0lORVMJCTMKPiAgIAo+IC0JLyoqCj4gLQkg KiBAaHdfaWQ6IC0gdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb250ZXh0Cj4gLQkgKgo+IC0J ICogVGhlIGhhcmR3YXJlIG5lZWRzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb250ZXh0IGZv ciBhIGZldwo+IC0JICogZnVuY3Rpb25zIGxpa2UgZmF1bHQgcmVwb3J0aW5nLCBQQVNJRCwgc2No ZWR1bGluZy4gVGhlCj4gLQkgKiAmZHJtX2k5MTVfcHJpdmF0ZS5jb250ZXh0X2h3X2lkYSBpcyB1 c2VkIHRvIGFzc2lnbiBhIHVucWl1ZQo+IC0JICogaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUg Y29udGV4dC4KPiAtCSAqCj4gLQkgKiBAaHdfaWRfcGluX2NvdW50OiAtIG51bWJlciBvZiB0aW1l cyB0aGlzIGNvbnRleHQgaGFkIGJlZW4gcGlubmVkCj4gLQkgKiBmb3IgdXNlIChzaG91bGQgYmUs IGF0IG1vc3QsIG9uY2UgcGVyIGVuZ2luZSkuCj4gLQkgKgo+IC0JICogQGh3X2lkX2xpbms6IC0g YWxsIGNvbnRleHRzIHdpdGggYW4gYXNzaWduZWQgaWQgYXJlIHRyYWNrZWQKPiAtCSAqIGZvciBw b3NzaWJsZSByZXBvc3Nlc3Npb24uCj4gLQkgKi8KPiAtCXVuc2lnbmVkIGludCBod19pZDsKPiAt CWF0b21pY190IGh3X2lkX3Bpbl9jb3VudDsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgaHdfaWRfbGlu azsKPiAtCj4gICAJc3RydWN0IG11dGV4IG11dGV4Owo+ICAgCj4gICAJc3RydWN0IGk5MTVfc2No ZWRfYXR0ciBzY2hlZDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3Nl bGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2Vs ZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IGIzOTIyNGVkMzgxNy4uYThhOTI5M2Y0 YWM2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkx NV9nZW1fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0 cy9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtNDQ2LDkgKzQ0Niw5IEBAIHN0YXRpYyBpbnQgaWd0 X2N0eF9leGVjKHZvaWQgKmFyZykKPiAgIAo+ICAgCQkJZXJyID0gZ3B1X2ZpbGwoY2UsIG9iaiwg ZHcpOwo+ICAgCQkJaWYgKGVycikgewo+IC0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gZmlsbCBkd29y ZCAlbHUgWyVsdS8lbHVdIHdpdGggZ3B1ICglcykgaW4gY3R4ICV1IFtmdWxsLXBwZ3R0PyAlc10s IGVycj0lZFxuIiwKPiArCQkJCXByX2VycigiRmFpbGVkIHRvIGZpbGwgZHdvcmQgJWx1IFslbHUv JWx1XSB3aXRoIGdwdSAoJXMpIFtmdWxsLXBwZ3R0PyAlc10sIGVycj0lZFxuIiwKPiAgIAkJCQkg ICAgICAgbmR3b3JkcywgZHcsIG1heF9kd29yZHMob2JqKSwKPiAtCQkJCSAgICAgICBlbmdpbmUt Pm5hbWUsIGN0eC0+aHdfaWQsCj4gKwkJCQkgICAgICAgZW5naW5lLT5uYW1lLAo+ICAgCQkJCSAg ICAgICB5ZXNubyghIWN0eC0+dm0pLCBlcnIpOwo+ICAgCQkJCWludGVsX2NvbnRleHRfcHV0KGNl KTsKPiAgIAkJCQlrZXJuZWxfY29udGV4dF9jbG9zZShjdHgpOwo+IEBAIC01ODQsOSArNTg0LDkg QEAgc3RhdGljIGludCBpZ3Rfc2hhcmVkX2N0eF9leGVjKHZvaWQgKmFyZykKPiAgIAo+ICAgCQkJ ZXJyID0gZ3B1X2ZpbGwoY2UsIG9iaiwgZHcpOwo+ICAgCQkJaWYgKGVycikgewo+IC0JCQkJcHJf ZXJyKCJGYWlsZWQgdG8gZmlsbCBkd29yZCAlbHUgWyVsdS8lbHVdIHdpdGggZ3B1ICglcykgaW4g Y3R4ICV1IFtmdWxsLXBwZ3R0PyAlc10sIGVycj0lZFxuIiwKPiArCQkJCXByX2VycigiRmFpbGVk IHRvIGZpbGwgZHdvcmQgJWx1IFslbHUvJWx1XSB3aXRoIGdwdSAoJXMpIFtmdWxsLXBwZ3R0PyAl c10sIGVycj0lZFxuIiwKPiAgIAkJCQkgICAgICAgbmR3b3JkcywgZHcsIG1heF9kd29yZHMob2Jq KSwKPiAtCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGN0eC0+aHdfaWQsCj4gKwkJCQkgICAgICAg ZW5naW5lLT5uYW1lLAo+ICAgCQkJCSAgICAgICB5ZXNubyghIWN0eC0+dm0pLCBlcnIpOwo+ICAg CQkJCWludGVsX2NvbnRleHRfcHV0KGNlKTsKPiAgIAkJCQlrZXJuZWxfY29udGV4dF9jbG9zZShj dHgpOwo+IEBAIC0xMTY4LDEwICsxMTY4LDkgQEAgc3RhdGljIGludCBpZ3RfY3R4X3JlYWRvbmx5 KHZvaWQgKmFyZykKPiAgIAo+ICAgCQkJZXJyID0gZ3B1X2ZpbGwoY2UsIG9iaiwgZHcpOwo+ICAg CQkJaWYgKGVycikgewo+IC0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gZmlsbCBkd29yZCAlbHUgWyVs dS8lbHVdIHdpdGggZ3B1ICglcykgaW4gY3R4ICV1IFtmdWxsLXBwZ3R0PyAlc10sIGVycj0lZFxu IiwKPiArCQkJCXByX2VycigiRmFpbGVkIHRvIGZpbGwgZHdvcmQgJWx1IFslbHUvJWx1XSB3aXRo IGdwdSAoJXMpIFtmdWxsLXBwZ3R0PyAlc10sIGVycj0lZFxuIiwKPiAgIAkJCQkgICAgICAgbmR3 b3JkcywgZHcsIG1heF9kd29yZHMob2JqKSwKPiAtCQkJCSAgICAgICBjZS0+ZW5naW5lLT5uYW1l LCBjdHgtPmh3X2lkLAo+IC0JCQkJICAgICAgIHllc25vKCEhY3R4LT52bSksIGVycik7Cj4gKwkJ CQkgICAgICAgY2UtPmVuZ2luZS0+bmFtZSwgeWVzbm8oISFjdHgtPnZtKSwgZXJyKTsKPiAgIAkJ CQlpOTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4gICAJCQkJZ290byBvdXRf dW5sb2NrOwo+ICAgCQkJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL21vY2tfY29udGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0 ZXN0cy9tb2NrX2NvbnRleHQuYwo+IGluZGV4IDBkMWEyNzVlYzMxNi4uZWJjNDZmMDk4NTYxIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvbW9ja19jb250 ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL21vY2tfY29u dGV4dC5jCj4gQEAgLTEzLDcgKzEzLDYgQEAgbW9ja19jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LAo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4g ICAJc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgKmU7Cj4gLQlpbnQgcmV0Owo+ICAgCj4gICAJY3R4 ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwo+ICAgCWlmICghY3R4KQo+IEBA IC0zMiwxMyArMzEsOCBAQCBtb2NrX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsCj4gICAJUkNVX0lOSVRfUE9JTlRFUihjdHgtPmVuZ2luZXMsIGUpOwo+ICAgCj4gICAJSU5J VF9SQURJWF9UUkVFKCZjdHgtPmhhbmRsZXNfdm1hLCBHRlBfS0VSTkVMKTsKPiAtCUlOSVRfTElT VF9IRUFEKCZjdHgtPmh3X2lkX2xpbmspOwo+ICAgCW11dGV4X2luaXQoJmN0eC0+bXV0ZXgpOwo+ ICAgCj4gLQlyZXQgPSBpOTE1X2dlbV9jb250ZXh0X3Bpbl9od19pZChjdHgpOwo+IC0JaWYgKHJl dCA8IDApCj4gLQkJZ290byBlcnJfZW5naW5lczsKPiAtCj4gICAJaWYgKG5hbWUpIHsKPiAgIAkJ c3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0Owo+ICAgCj4gQEAgLTU2LDggKzUwLDYgQEAgbW9ja19j b250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCj4gICAJcmV0dXJuIGN0 eDsKPiAgIAo+IC1lcnJfZW5naW5lczoKPiAtCWZyZWVfZW5naW5lcyhyY3VfYWNjZXNzX3BvaW50 ZXIoY3R4LT5lbmdpbmVzKSk7Cj4gICBlcnJfZnJlZToKPiAgIAlrZnJlZShjdHgpOwo+ICAgCXJl dHVybiBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9j b250ZXh0X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3R5 cGVzLmgKPiBpbmRleCBiZjljZWRmY2NiZjAuLjY5NTliMDVhZTVmOCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3R5cGVzLmgKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3R5cGVzLmgKPiBAQCAtNTgsNiArNTgs NyBAQCBzdHJ1Y3QgaW50ZWxfY29udGV4dCB7Cj4gICAKPiAgIAl1MzIgKmxyY19yZWdfc3RhdGU7 Cj4gICAJdTY0IGxyY19kZXNjOwo+ICsJdTMyIHRhZzsgLyogY29va2llIHBhc3NlZCB0byBIVyB0 byB0cmFjayB0aGlzIGNvbnRleHQgb24gc3VibWlzc2lvbiAqLwo+ICAgCj4gICAJdW5zaWduZWQg aW50IGFjdGl2ZV9jb3VudDsgLyogcHJvdGVjdGVkIGJ5IHRpbWVsaW5lLT5tdXRleCAqLwo+ICAg Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBl cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmgKPiBpbmRl eCBkYTRiNDVhYTg0YjEuLjdiY2UxNzZlNjk2YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCj4gQEAgLTI5NiwxMCArMjk2LDEyIEBAIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3Mgewo+ICAgCXU4IHVhYmlfY2xhc3M7Cj4gICAJdTggdWFiaV9pbnN0 YW5jZTsKPiAgIAo+ICsJdTMyIHVhYmlfY2FwYWJpbGl0aWVzOwo+ICAgCXUzMiBjb250ZXh0X3Np emU7Cj4gICAJdTMyIG1taW9fYmFzZTsKPiAgIAo+IC0JdTMyIHVhYmlfY2FwYWJpbGl0aWVzOwo+ ICsJdW5zaWduZWQgaW50IGNvbnRleHRfdGFnOwo+ICsjZGVmaW5lIE5VTV9DT05URVhUX1RBRyAo MjU2KQoKQUZBSUNUIHRoaXMgZGVmaW5lIG5vdyBkZWZpbmVzIGhvdyBkZWVwIEVMU1Agd2UgY2Fu IGhhdmUgYmVmb3JlIHdlIHN0YXJ0IApnZXR0aW5nIGhhcmQgdG8gZGVidWcgcHJvYmxlbXMuIEd1 QyBhbmdsZSBuZWVkcyBjb25zaWRlcmluZyBoZXJlLgoKQ2FuIHdlIGFkZCBzb21lIGFzc2VydHMg c29tZXdoZXJlIHRvIGV4cHJlc3MgdGhlIHJlbGF0aW9uc2hpcD8KCkFuZCBhIGNvbW1lbnQgaGVy ZSBleHBsYWluaW5nIHRoaXMsIG9yIHdpdGggdGhlIGFzc2VydC4KCj4gICAKPiAgIAlzdHJ1Y3Qg cmJfbm9kZSB1YWJpX25vZGU7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+ IGluZGV4IDBlYTJmNGQ3ZGM0My4uYWY3OWI4ZDcwODAwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfbHJjLmMKPiBAQCAtNDMzLDEyICs0MzMsOCBAQCBhc3NlcnRfcHJpb3JpdHlfcXVl dWUoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcHJldiwKPiAgIHN0YXRpYyB1NjQKPiAgIGxy Y19kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+ICAgewo+IC0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGNl LT5nZW1fY29udGV4dDsKPiAgIAl1NjQgZGVzYzsKPiAgIAo+IC0JQlVJTERfQlVHX09OKE1BWF9D T05URVhUX0hXX0lEID4gKEJJVChHRU44X0NUWF9JRF9XSURUSCkpKTsKPiAtCUJVSUxEX0JVR19P TihHRU4xMV9NQVhfQ09OVEVYVF9IV19JRCA+IChCSVQoR0VOMTFfU1dfQ1RYX0lEX1dJRFRIKSkp Owo+IC0KPiAgIAlkZXNjID0gSU5URUxfTEVHQUNZXzMyQl9DT05URVhUOwo+ICAgCWlmIChpOTE1 X3ZtX2lzXzRsdmwoY2UtPnZtKSkKPiAgIAkJZGVzYyA9IElOVEVMX0xFR0FDWV82NEJfQ09OVEVY VDsKPiBAQCAtNDU2LDIwICs0NTIsMTEgQEAgbHJjX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2Nv bnRleHQgKmNlLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJICogYW55dGhp bmcgYmVsb3cuCj4gICAJICovCj4gICAJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEx KSB7Cj4gLQkJR0VNX0JVR19PTihjdHgtPmh3X2lkID49IEJJVChHRU4xMV9TV19DVFhfSURfV0lE VEgpKTsKPiAtCQlkZXNjIHw9ICh1NjQpY3R4LT5od19pZCA8PCBHRU4xMV9TV19DVFhfSURfU0hJ RlQ7Cj4gLQkJCQkJCQkJLyogYml0cyAzNy00NyAqLwo+IC0KPiAgIAkJZGVzYyB8PSAodTY0KWVu Z2luZS0+aW5zdGFuY2UgPDwgR0VOMTFfRU5HSU5FX0lOU1RBTkNFX1NISUZUOwo+ICAgCQkJCQkJ CQkvKiBiaXRzIDQ4LTUzICovCj4gICAKPiAtCQkvKiBUT0RPOiBkZWNpZGUgd2hhdCB0byBkbyB3 aXRoIFNXIGNvdW50ZXIgKGJpdHMgNTUtNjApICovCj4gLQo+ICAgCQlkZXNjIHw9ICh1NjQpZW5n aW5lLT5jbGFzcyA8PCBHRU4xMV9FTkdJTkVfQ0xBU1NfU0hJRlQ7Cj4gICAJCQkJCQkJCS8qIGJp dHMgNjEtNjMgKi8KPiAtCX0gZWxzZSB7Cj4gLQkJR0VNX0JVR19PTihjdHgtPmh3X2lkID49IEJJ VChHRU44X0NUWF9JRF9XSURUSCkpOwo+IC0JCWRlc2MgfD0gKHU2NCljdHgtPmh3X2lkIDw8IEdF TjhfQ1RYX0lEX1NISUZUOwkvKiBiaXRzIDMyLTUyICovCj4gICAJfQo+ICAgCj4gICAJcmV0dXJu IGRlc2M7Cj4gQEAgLTk3OCw2ICs5NjUsMTUgQEAgX19leGVjbGlzdHNfc2NoZWR1bGVfaW4oc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICAKPiAgIAlpbnRlbF9jb250ZXh0X2dldChjZSk7Cj4g ICAKPiArCWlmIChjZS0+dGFnKSB7Cj4gKwkJY2UtPmxyY19kZXNjIHw9ICh1NjQpY2UtPnRhZyA8 PCAzMjsKPiArCX0gZWxzZSB7Cj4gKwkJY2UtPmxyY19kZXNjICY9IH5HRU5NQVNLX1VMTCg0Nywg MzcpOwo+ICsJCWNlLT5scmNfZGVzYyB8PQo+ICsJCQkodTY0KShlbmdpbmUtPmNvbnRleHRfdGFn KysgJSBOVU1fQ09OVEVYVF9UQUcpIDw8Cj4gKwkJCUdFTjExX1NXX0NUWF9JRF9TSElGVDsKPiAr CX0KClNvIGh3IGlkIGlzIHZhbGlkIG9ubHkgd2hpbGUgY29udGV4dCBpcyBpbiBFTFNQIGFuZCBp dCBjaGFuZ2VzIHdpdGggCmV2ZXJ5IHN1Ym1pc3Npb24gZXhjZXB0IGluIHRoZSBPQSBjYXNlPwoK U2hpZnRzIGFuZCBtYXNrcyBsb29rIGRvZGd5LiBGb3IgPj0gZ2VuMTEgdGhlIGN1cnJlbnQgY29k ZSBoYXMgdGhlIGh3X2lkIAppbiBbMzcsIDQyXSwgb3RoZXJ3aXNlIFszMiwgNTJdLiBUaGlzIHBh dGNoIGRvZXMgbm90IHNlZW0gdG8gaGFuZGxlIHRoZSAKZGlmZmVyZW5jZXMgYmV0d2VlbiBnZW5z LgoKPiArCj4gICAJaW50ZWxfZ3RfcG1fZ2V0KGVuZ2luZS0+Z3QpOwo+ICAgCWV4ZWNsaXN0c19j b250ZXh0X3N0YXR1c19jaGFuZ2UocnEsIElOVEVMX0NPTlRFWFRfU0NIRURVTEVfSU4pOwo+ICAg CWludGVsX2VuZ2luZV9jb250ZXh0X2luKGVuZ2luZSk7Cj4gQEAgLTIyMjQsNyArMjIyMCw2IEBA IHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jb250ZXh0X3VucGluKHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSkKPiAgIAljaGVja19yZWR6b25lKCh2b2lkICopY2UtPmxyY19yZWdfc3RhdGUgLSBMUkNf U1RBVEVfUE4gKiBQQUdFX1NJWkUsCj4gICAJCSAgICAgIGNlLT5lbmdpbmUpOwo+ICAgCj4gLQlp OTE1X2dlbV9jb250ZXh0X3VucGluX2h3X2lkKGNlLT5nZW1fY29udGV4dCk7Cj4gICAJaTkxNV9n ZW1fb2JqZWN0X3VucGluX21hcChjZS0+c3RhdGUtPm9iaik7Cj4gICAJaW50ZWxfcmluZ19yZXNl dChjZS0+cmluZywgY2UtPnJpbmctPnRhaWwpOwo+ICAgfQo+IEBAIC0yMjc0LDE4ICsyMjY5LDEy IEBAIF9fZXhlY2xpc3RzX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAg IAkJZ290byB1bnBpbl9hY3RpdmU7Cj4gICAJfQo+ICAgCj4gLQlyZXQgPSBpOTE1X2dlbV9jb250 ZXh0X3Bpbl9od19pZChjZS0+Z2VtX2NvbnRleHQpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIHVu cGluX21hcDsKPiAtCj4gICAJY2UtPmxyY19kZXNjID0gbHJjX2Rlc2NyaXB0b3IoY2UsIGVuZ2lu ZSk7Cj4gICAJY2UtPmxyY19yZWdfc3RhdGUgPSB2YWRkciArIExSQ19TVEFURV9QTiAqIFBBR0Vf U0laRTsKPiAgIAlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwo+ICAg Cj4gICAJcmV0dXJuIDA7Cj4gICAKPiAtdW5waW5fbWFwOgo+IC0JaTkxNV9nZW1fb2JqZWN0X3Vu cGluX21hcChjZS0+c3RhdGUtPm9iaik7Cj4gICB1bnBpbl9hY3RpdmU6Cj4gICAJaW50ZWxfY29u dGV4dF9hY3RpdmVfcmVsZWFzZShjZSk7Cj4gICBlcnI6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2t2bWd0 LmMKPiBpbmRleCAzNDNkNzljMWNiN2UuLjA0YTVhMGQ5MDgyMyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9rdm1ndC5jCj4gQEAgLTE1NjQsMjcgKzE1NjQsMTAgQEAgdmdwdV9pZF9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gICAJcmV0dXJu IHNwcmludGYoYnVmLCAiXG4iKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgc3NpemVfdAo+IC1od19p ZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs Cj4gLQkgICBjaGFyICpidWYpCj4gLXsKPiAtCXN0cnVjdCBtZGV2X2RldmljZSAqbWRldiA9IG1k ZXZfZnJvbV9kZXYoZGV2KTsKPiAtCj4gLQlpZiAobWRldikgewo+IC0JCXN0cnVjdCBpbnRlbF92 Z3B1ICp2Z3B1ID0gKHN0cnVjdCBpbnRlbF92Z3B1ICopCj4gLQkJCW1kZXZfZ2V0X2RydmRhdGEo bWRldik7Cj4gLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCj4gLQkJCSAgICAgICB2Z3B1 LT5zdWJtaXNzaW9uLnNoYWRvd1swXS0+Z2VtX2NvbnRleHQtPmh3X2lkKTsKPiAtCX0KPiAtCXJl dHVybiBzcHJpbnRmKGJ1ZiwgIlxuIik7Cj4gLX0KPiAtCj4gICBzdGF0aWMgREVWSUNFX0FUVFJf Uk8odmdwdV9pZCk7Cj4gLXN0YXRpYyBERVZJQ0VfQVRUUl9STyhod19pZCk7Cj4gICAKPiAgIHN0 YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppbnRlbF92Z3B1X2F0dHJzW10gPSB7Cj4gICAJJmRldl9h dHRyX3ZncHVfaWQuYXR0ciwKPiAtCSZkZXZfYXR0cl9od19pZC5hdHRyLAo+ICAgCU5VTEwKPiAg IH07Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGluZGV4IGZkNDE1MDVk NTJlYy4uOGNhYWE0NDY0OTBmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMK PiBAQCAtMTUwNCw5ICsxNTA0LDYgQEAgc3RhdGljIGludCBpOTE1X2NvbnRleHRfc3RhdHVzKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAgCQlzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2U7Cj4gICAKPiAgIAkJc2VxX3B1dHMobSwgIkhXIGNvbnRleHQgIik7Cj4gLQkJaWYgKCFs aXN0X2VtcHR5KCZjdHgtPmh3X2lkX2xpbmspKQo+IC0JCQlzZXFfcHJpbnRmKG0sICIleCBbcGlu ICV1XSIsIGN0eC0+aHdfaWQsCj4gLQkJCQkgICBhdG9taWNfcmVhZCgmY3R4LT5od19pZF9waW5f Y291bnQpKTsKPiAgIAkJaWYgKGN0eC0+cGlkKSB7Cj4gICAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnRhc2s7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVf ZXJyb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBpbmRleCBh ODZkMjhiZGE2ZGQuLjQ3MjM5ZGY2NTNmMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n cHVfZXJyb3IuYwo+IEBAIC00NzEsOSArNDcxLDkgQEAgc3RhdGljIHZvaWQgZXJyb3JfcHJpbnRf Y29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptLAo+ICAgCQkJCWNvbnN0 IGNoYXIgKmhlYWRlciwKPiAgIAkJCQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfY29udGV4 dCAqY3R4KQo+ICAgewo+IC0JZXJyX3ByaW50ZihtLCAiJXMlc1slZF0gaHdfaWQgJWQsIHByaW8g JWQsIGd1aWx0eSAlZCBhY3RpdmUgJWRcbiIsCj4gLQkJICAgaGVhZGVyLCBjdHgtPmNvbW0sIGN0 eC0+cGlkLCBjdHgtPmh3X2lkLAo+IC0JCSAgIGN0eC0+c2NoZWRfYXR0ci5wcmlvcml0eSwgY3R4 LT5ndWlsdHksIGN0eC0+YWN0aXZlKTsKPiArCWVycl9wcmludGYobSwgIiVzJXNbJWRdIHByaW8g JWQsIGd1aWx0eSAlZCBhY3RpdmUgJWRcbiIsCj4gKwkJICAgaGVhZGVyLCBjdHgtPmNvbW0sIGN0 eC0+cGlkLCBjdHgtPnNjaGVkX2F0dHIucHJpb3JpdHksCj4gKwkJICAgY3R4LT5ndWlsdHksIGN0 eC0+YWN0aXZlKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgZXJyb3JfcHJpbnRfZW5naW5l KHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4gQEAgLTEyNjIsNyArMTI2Miw2 IEBAIHN0YXRpYyBib29sIHJlY29yZF9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9lcnJvcl9jb250 ZXh0ICplLAo+ICAgCQlyY3VfcmVhZF91bmxvY2soKTsKPiAgIAl9Cj4gICAKPiAtCWUtPmh3X2lk ID0gY3R4LT5od19pZDsKPiAgIAllLT5zY2hlZF9hdHRyID0gY3R4LT5zY2hlZDsKPiAgIAllLT5n dWlsdHkgPSBhdG9taWNfcmVhZCgmY3R4LT5ndWlsdHlfY291bnQpOwo+ICAgCWUtPmFjdGl2ZSA9 IGF0b21pY19yZWFkKCZjdHgtPmFjdGl2ZV9jb3VudCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dwdV9lcnJvci5oCj4gaW5kZXggY2FhZWQ1MDkzZDk1Li40ZGMzNmQ2ZWUzYTIgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmgKPiBAQCAtMTE3LDcgKzExNyw2IEBAIHN0 cnVjdCBpOTE1X2dwdV9zdGF0ZSB7Cj4gICAJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9jb250ZXh0 IHsKPiAgIAkJCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKPiAgIAkJCXBpZF90IHBpZDsKPiAt CQkJdTMyIGh3X2lkOwo+ICAgCQkJaW50IGFjdGl2ZTsKPiAgIAkJCWludCBndWlsdHk7Cj4gICAJ CQlzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyIHNjaGVkX2F0dHI7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w ZXJmLmMKPiBpbmRleCA4MDA1NTUwMWVjY2IuLmQzNmJhMjQ4ZDQzOCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcGVyZi5jCj4gQEAgLTEyODMsMjIgKzEyODMsMTUgQEAgc3RhdGljIGludCBvYV9n ZXRfcmVuZGVyX2N0eF9pZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgCQl9 IGVsc2Ugewo+ICAgCQkJc3RyZWFtLT5zcGVjaWZpY19jdHhfaWRfbWFzayA9Cj4gICAJCQkJKDFV IDw8IEdFTjhfQ1RYX0lEX1dJRFRIKSAtIDE7Cj4gLQkJCXN0cmVhbS0+c3BlY2lmaWNfY3R4X2lk ID0KPiAtCQkJCXVwcGVyXzMyX2JpdHMoY2UtPmxyY19kZXNjKTsKPiAtCQkJc3RyZWFtLT5zcGVj aWZpY19jdHhfaWQgJj0KPiAtCQkJCXN0cmVhbS0+c3BlY2lmaWNfY3R4X2lkX21hc2s7Cj4gKwkJ CXN0cmVhbS0+c3BlY2lmaWNfY3R4X2lkID0gc3RyZWFtLT5zcGVjaWZpY19jdHhfaWRfbWFzazsK PiAgIAkJfQo+ICAgCQlicmVhazsKPiAgIAo+ICAgCWNhc2UgMTE6Cj4gICAJY2FzZSAxMjogewo+ ICAgCQlzdHJlYW0tPnNwZWNpZmljX2N0eF9pZF9tYXNrID0KPiAtCQkJKCgxVSA8PCBHRU4xMV9T V19DVFhfSURfV0lEVEgpIC0gMSkgPDwgKEdFTjExX1NXX0NUWF9JRF9TSElGVCAtIDMyKSB8Cj4g LQkJCSgoMVUgPDwgR0VOMTFfRU5HSU5FX0lOU1RBTkNFX1dJRFRIKSAtIDEpIDw8IChHRU4xMV9F TkdJTkVfSU5TVEFOQ0VfU0hJRlQgLSAzMikgfAo+IC0JCQkoKDEgPDwgR0VOMTFfRU5HSU5FX0NM QVNTX1dJRFRIKSAtIDEpIDw8IChHRU4xMV9FTkdJTkVfQ0xBU1NfU0hJRlQgLSAzMik7Cj4gLQkJ c3RyZWFtLT5zcGVjaWZpY19jdHhfaWQgPSB1cHBlcl8zMl9iaXRzKGNlLT5scmNfZGVzYyk7Cj4g LQkJc3RyZWFtLT5zcGVjaWZpY19jdHhfaWQgJj0KPiAtCQkJc3RyZWFtLT5zcGVjaWZpY19jdHhf aWRfbWFzazsKPiArCQkJKCgxVSA8PCBHRU4xMV9TV19DVFhfSURfV0lEVEgpIC0gMSkgPDwgKEdF TjExX1NXX0NUWF9JRF9TSElGVCAtIDMyKTsKPiArCQlzdHJlYW0tPnNwZWNpZmljX2N0eF9pZCA9 IHN0cmVhbS0+c3BlY2lmaWNfY3R4X2lkX21hc2s7Cj4gICAJCWJyZWFrOwo+ICAgCX0KPiAgIAo+ IEBAIC0xMzA2LDYgKzEyOTksOCBAQCBzdGF0aWMgaW50IG9hX2dldF9yZW5kZXJfY3R4X2lkKHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJCU1JU1NJTkdfQ0FTRShJTlRFTF9H RU4oaTkxNSkpOwo+ICAgCX0KPiAgIAo+ICsJY2UtPnRhZyA9IHN0cmVhbS0+c3BlY2lmaWNfY3R4 X2lkX21hc2s7Cj4gKwo+ICAgCURSTV9ERUJVR19EUklWRVIoImZpbHRlcmluZyBvbiBjdHhfaWQ9 MHgleCBjdHhfaWRfbWFzaz0weCV4XG4iLAo+ICAgCQkJIHN0cmVhbS0+c3BlY2lmaWNfY3R4X2lk LAo+ICAgCQkJIHN0cmVhbS0+c3BlY2lmaWNfY3R4X2lkX21hc2spOwo+IEBAIC0xMzI0LDEyICsx MzE5LDE0IEBAIHN0YXRpYyB2b2lkIG9hX3B1dF9yZW5kZXJfY3R4X2lkKHN0cnVjdCBpOTE1X3Bl cmZfc3RyZWFtICpzdHJlYW0pCj4gICB7Cj4gICAJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+ ICAgCj4gLQlzdHJlYW0tPnNwZWNpZmljX2N0eF9pZCA9IElOVkFMSURfQ1RYX0lEOwo+IC0Jc3Ry ZWFtLT5zcGVjaWZpY19jdHhfaWRfbWFzayA9IDA7Cj4gLQo+ICAgCWNlID0gZmV0Y2hfYW5kX3pl cm8oJnN0cmVhbS0+cGlubmVkX2N0eCk7Cj4gLQlpZiAoY2UpCj4gKwlpZiAoY2UpIHsKPiArCQlj ZS0+dGFnID0gMDsKPiAgIAkJaW50ZWxfY29udGV4dF91bnBpbihjZSk7Cj4gKwl9Cj4gKwo+ICsJ c3RyZWFtLT5zcGVjaWZpY19jdHhfaWQgPSBJTlZBTElEX0NUWF9JRDsKPiArCXN0cmVhbS0+c3Bl Y2lmaWNfY3R4X2lkX21hc2sgPSAwOwoKT0EgaHVua3MgbG9va3MgZG9kZ3kgYXMgd2VsbC4gY2Ut PnRhZyBpcyBzZXQgdG8gCnN0cmVhbS0+c3BlY2lmaWNfY3R4X2lkX21hc2sgd2hpbGUgSSB0aGlu ayBpdCBzaG91bGQgYmUgaWQuIEZ1cnRoZXJtb3JlIAppZCBpcyBhc3NpZ25lZCBmcm9tIG1hc2sg d2hpY2ggaXMgZml4ZWQgYW5kIG5vdCB1bmlxdWUgZm9yIGRpZmZlcmVudCAKY29udGV4dHMuCgo+ ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3RyYWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKPiBp bmRleCAyNGYyOTQ0ZGEwOWQuLjFmMmNmNmNmYWZiNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3RyYWNlLmgKPiBAQCAtNjY1LDcgKzY2NSw2IEBAIFRSQUNFX0VWRU5UKGk5MTVfcmVxdWVzdF9x dWV1ZSwKPiAgIAo+ICAgCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAo+ICAgCQkJICAgICBfX2ZpZWxk KHUzMiwgZGV2KQo+IC0JCQkgICAgIF9fZmllbGQodTMyLCBod19pZCkKPiAgIAkJCSAgICAgX19m aWVsZCh1NjQsIGN0eCkKPiAgIAkJCSAgICAgX19maWVsZCh1MTYsIGNsYXNzKQo+ICAgCQkJICAg ICBfX2ZpZWxkKHUxNiwgaW5zdGFuY2UpCj4gQEAgLTY3NSw3ICs2NzQsNiBAQCBUUkFDRV9FVkVO VChpOTE1X3JlcXVlc3RfcXVldWUsCj4gICAKPiAgIAkgICAgVFBfZmFzdF9hc3NpZ24oCj4gICAJ CQkgICBfX2VudHJ5LT5kZXYgPSBycS0+aTkxNS0+ZHJtLnByaW1hcnktPmluZGV4Owo+IC0JCQkg ICBfX2VudHJ5LT5od19pZCA9IHJxLT5nZW1fY29udGV4dC0+aHdfaWQ7Cj4gICAJCQkgICBfX2Vu dHJ5LT5jbGFzcyA9IHJxLT5lbmdpbmUtPnVhYmlfY2xhc3M7Cj4gICAJCQkgICBfX2VudHJ5LT5p bnN0YW5jZSA9IHJxLT5lbmdpbmUtPnVhYmlfaW5zdGFuY2U7Cj4gICAJCQkgICBfX2VudHJ5LT5j dHggPSBycS0+ZmVuY2UuY29udGV4dDsKPiBAQCAtNjgzLDEwICs2ODEsOSBAQCBUUkFDRV9FVkVO VChpOTE1X3JlcXVlc3RfcXVldWUsCj4gICAJCQkgICBfX2VudHJ5LT5mbGFncyA9IGZsYWdzOwo+ ICAgCQkJICAgKSwKPiAgIAo+IC0JICAgIFRQX3ByaW50aygiZGV2PSV1LCBlbmdpbmU9JXU6JXUs IGh3X2lkPSV1LCBjdHg9JWxsdSwgc2Vxbm89JXUsIGZsYWdzPTB4JXgiLAo+ICsJICAgIFRQX3By aW50aygiZGV2PSV1LCBlbmdpbmU9JXU6JXUsIGN0eD0lbGx1LCBzZXFubz0ldSwgZmxhZ3M9MHgl eCIsCj4gICAJCSAgICAgIF9fZW50cnktPmRldiwgX19lbnRyeS0+Y2xhc3MsIF9fZW50cnktPmlu c3RhbmNlLAo+IC0JCSAgICAgIF9fZW50cnktPmh3X2lkLCBfX2VudHJ5LT5jdHgsIF9fZW50cnkt PnNlcW5vLAo+IC0JCSAgICAgIF9fZW50cnktPmZsYWdzKQo+ICsJCSAgICAgIF9fZW50cnktPmN0 eCwgX19lbnRyeS0+c2Vxbm8sIF9fZW50cnktPmZsYWdzKQo+ICAgKTsKPiAgIAo+ICAgREVDTEFS RV9FVkVOVF9DTEFTUyhpOTE1X3JlcXVlc3QsCj4gQEAgLTY5NSw3ICs2OTIsNiBAQCBERUNMQVJF X0VWRU5UX0NMQVNTKGk5MTVfcmVxdWVzdCwKPiAgIAo+ICAgCSAgICBUUF9TVFJVQ1RfX2VudHJ5 KAo+ICAgCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQo+IC0JCQkgICAgIF9fZmllbGQodTMyLCBo d19pZCkKPiAgIAkJCSAgICAgX19maWVsZCh1NjQsIGN0eCkKPiAgIAkJCSAgICAgX19maWVsZCh1 MTYsIGNsYXNzKQo+ICAgCQkJICAgICBfX2ZpZWxkKHUxNiwgaW5zdGFuY2UpCj4gQEAgLTcwNCwx NiArNzAwLDE1IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MoaTkxNV9yZXF1ZXN0LAo+ICAgCj4gICAJ ICAgIFRQX2Zhc3RfYXNzaWduKAo+ICAgCQkJICAgX19lbnRyeS0+ZGV2ID0gcnEtPmk5MTUtPmRy bS5wcmltYXJ5LT5pbmRleDsKPiAtCQkJICAgX19lbnRyeS0+aHdfaWQgPSBycS0+Z2VtX2NvbnRl eHQtPmh3X2lkOwo+ICAgCQkJICAgX19lbnRyeS0+Y2xhc3MgPSBycS0+ZW5naW5lLT51YWJpX2Ns YXNzOwo+ICAgCQkJICAgX19lbnRyeS0+aW5zdGFuY2UgPSBycS0+ZW5naW5lLT51YWJpX2luc3Rh bmNlOwo+ICAgCQkJICAgX19lbnRyeS0+Y3R4ID0gcnEtPmZlbmNlLmNvbnRleHQ7Cj4gICAJCQkg ICBfX2VudHJ5LT5zZXFubyA9IHJxLT5mZW5jZS5zZXFubzsKPiAgIAkJCSAgICksCj4gICAKPiAt CSAgICBUUF9wcmludGsoImRldj0ldSwgZW5naW5lPSV1OiV1LCBod19pZD0ldSwgY3R4PSVsbHUs IHNlcW5vPSV1IiwKPiArCSAgICBUUF9wcmludGsoImRldj0ldSwgZW5naW5lPSV1OiV1LCBjdHg9 JWxsdSwgc2Vxbm89JXUiLAo+ICAgCQkgICAgICBfX2VudHJ5LT5kZXYsIF9fZW50cnktPmNsYXNz LCBfX2VudHJ5LT5pbnN0YW5jZSwKPiAtCQkgICAgICBfX2VudHJ5LT5od19pZCwgX19lbnRyeS0+ Y3R4LCBfX2VudHJ5LT5zZXFubykKPiArCQkgICAgICBfX2VudHJ5LT5jdHgsIF9fZW50cnktPnNl cW5vKQo+ICAgKTsKPiAgIAo+ICAgREVGSU5FX0VWRU5UKGk5MTVfcmVxdWVzdCwgaTkxNV9yZXF1 ZXN0X2FkZCwKPiBAQCAtNzM4LDcgKzczMyw2IEBAIFRSQUNFX0VWRU5UKGk5MTVfcmVxdWVzdF9p biwKPiAgIAo+ICAgCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAo+ICAgCQkJICAgICBfX2ZpZWxkKHUz MiwgZGV2KQo+IC0JCQkgICAgIF9fZmllbGQodTMyLCBod19pZCkKPiAgIAkJCSAgICAgX19maWVs ZCh1NjQsIGN0eCkKPiAgIAkJCSAgICAgX19maWVsZCh1MTYsIGNsYXNzKQo+ICAgCQkJICAgICBf X2ZpZWxkKHUxNiwgaW5zdGFuY2UpCj4gQEAgLTc0OSw3ICs3NDMsNiBAQCBUUkFDRV9FVkVOVChp OTE1X3JlcXVlc3RfaW4sCj4gICAKPiAgIAkgICAgVFBfZmFzdF9hc3NpZ24oCj4gICAJCQkgICBf X2VudHJ5LT5kZXYgPSBycS0+aTkxNS0+ZHJtLnByaW1hcnktPmluZGV4Owo+IC0JCQkgICBfX2Vu dHJ5LT5od19pZCA9IHJxLT5nZW1fY29udGV4dC0+aHdfaWQ7Cj4gICAJCQkgICBfX2VudHJ5LT5j bGFzcyA9IHJxLT5lbmdpbmUtPnVhYmlfY2xhc3M7Cj4gICAJCQkgICBfX2VudHJ5LT5pbnN0YW5j ZSA9IHJxLT5lbmdpbmUtPnVhYmlfaW5zdGFuY2U7Cj4gICAJCQkgICBfX2VudHJ5LT5jdHggPSBy cS0+ZmVuY2UuY29udGV4dDsKPiBAQCAtNzU4LDkgKzc1MSw5IEBAIFRSQUNFX0VWRU5UKGk5MTVf cmVxdWVzdF9pbiwKPiAgIAkJCSAgIF9fZW50cnktPnBvcnQgPSBwb3J0Owo+ICAgCQkJICAgKSwK PiAgIAo+IC0JICAgIFRQX3ByaW50aygiZGV2PSV1LCBlbmdpbmU9JXU6JXUsIGh3X2lkPSV1LCBj dHg9JWxsdSwgc2Vxbm89JXUsIHByaW89JXUsIHBvcnQ9JXUiLAo+ICsJICAgIFRQX3ByaW50aygi ZGV2PSV1LCBlbmdpbmU9JXU6JXUsIGN0eD0lbGx1LCBzZXFubz0ldSwgcHJpbz0ldSwgcG9ydD0l dSIsCj4gICAJCSAgICAgIF9fZW50cnktPmRldiwgX19lbnRyeS0+Y2xhc3MsIF9fZW50cnktPmlu c3RhbmNlLAo+IC0JCSAgICAgIF9fZW50cnktPmh3X2lkLCBfX2VudHJ5LT5jdHgsIF9fZW50cnkt PnNlcW5vLAo+ICsJCSAgICAgIF9fZW50cnktPmN0eCwgX19lbnRyeS0+c2Vxbm8sCj4gICAJCSAg ICAgIF9fZW50cnktPnByaW8sIF9fZW50cnktPnBvcnQpCj4gICApOwo+ICAgCj4gQEAgLTc3MCw3 ICs3NjMsNiBAQCBUUkFDRV9FVkVOVChpOTE1X3JlcXVlc3Rfb3V0LAo+ICAgCj4gICAJICAgIFRQ X1NUUlVDVF9fZW50cnkoCj4gICAJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCj4gLQkJCSAgICAg X19maWVsZCh1MzIsIGh3X2lkKQo+ICAgCQkJICAgICBfX2ZpZWxkKHU2NCwgY3R4KQo+ICAgCQkJ ICAgICBfX2ZpZWxkKHUxNiwgY2xhc3MpCj4gICAJCQkgICAgIF9fZmllbGQodTE2LCBpbnN0YW5j ZSkKPiBAQCAtNzgwLDcgKzc3Miw2IEBAIFRSQUNFX0VWRU5UKGk5MTVfcmVxdWVzdF9vdXQsCj4g ICAKPiAgIAkgICAgVFBfZmFzdF9hc3NpZ24oCj4gICAJCQkgICBfX2VudHJ5LT5kZXYgPSBycS0+ aTkxNS0+ZHJtLnByaW1hcnktPmluZGV4Owo+IC0JCQkgICBfX2VudHJ5LT5od19pZCA9IHJxLT5n ZW1fY29udGV4dC0+aHdfaWQ7Cj4gICAJCQkgICBfX2VudHJ5LT5jbGFzcyA9IHJxLT5lbmdpbmUt PnVhYmlfY2xhc3M7Cj4gICAJCQkgICBfX2VudHJ5LT5pbnN0YW5jZSA9IHJxLT5lbmdpbmUtPnVh YmlfaW5zdGFuY2U7Cj4gICAJCQkgICBfX2VudHJ5LT5jdHggPSBycS0+ZmVuY2UuY29udGV4dDsK PiBAQCAtNzg4LDEwICs3NzksOSBAQCBUUkFDRV9FVkVOVChpOTE1X3JlcXVlc3Rfb3V0LAo+ICAg CQkJICAgX19lbnRyeS0+Y29tcGxldGVkID0gaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSk7Cj4g ICAJCQkgICApLAo+ICAgCj4gLQkJICAgIFRQX3ByaW50aygiZGV2PSV1LCBlbmdpbmU9JXU6JXUs IGh3X2lkPSV1LCBjdHg9JWxsdSwgc2Vxbm89JXUsIGNvbXBsZXRlZD89JXUiLAo+ICsJCSAgICBU UF9wcmludGsoImRldj0ldSwgZW5naW5lPSV1OiV1LCBjdHg9JWxsdSwgc2Vxbm89JXUsIGNvbXBs ZXRlZD89JXUiLAo+ICAgCQkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5jbGFzcywgX19l bnRyeS0+aW5zdGFuY2UsCj4gLQkJCSAgICAgIF9fZW50cnktPmh3X2lkLCBfX2VudHJ5LT5jdHgs IF9fZW50cnktPnNlcW5vLAo+IC0JCQkgICAgICBfX2VudHJ5LT5jb21wbGV0ZWQpCj4gKwkJCSAg ICAgIF9fZW50cnktPmN0eCwgX19lbnRyeS0+c2Vxbm8sIF9fZW50cnktPmNvbXBsZXRlZCkKPiAg ICk7Cj4gICAKPiAgICNlbHNlCj4gQEAgLTgyOSw3ICs4MTksNiBAQCBUUkFDRV9FVkVOVChpOTE1 X3JlcXVlc3Rfd2FpdF9iZWdpbiwKPiAgIAo+ICAgCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAo+ICAg CQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQo+IC0JCQkgICAgIF9fZmllbGQodTMyLCBod19pZCkK PiAgIAkJCSAgICAgX19maWVsZCh1NjQsIGN0eCkKPiAgIAkJCSAgICAgX19maWVsZCh1MTYsIGNs YXNzKQo+ICAgCQkJICAgICBfX2ZpZWxkKHUxNiwgaW5zdGFuY2UpCj4gQEAgLTg0NSw3ICs4MzQs NiBAQCBUUkFDRV9FVkVOVChpOTE1X3JlcXVlc3Rfd2FpdF9iZWdpbiwKPiAgIAkgICAgICovCj4g ICAJICAgIFRQX2Zhc3RfYXNzaWduKAo+ICAgCQkJICAgX19lbnRyeS0+ZGV2ID0gcnEtPmk5MTUt PmRybS5wcmltYXJ5LT5pbmRleDsKPiAtCQkJICAgX19lbnRyeS0+aHdfaWQgPSBycS0+Z2VtX2Nv bnRleHQtPmh3X2lkOwo+ICAgCQkJICAgX19lbnRyeS0+Y2xhc3MgPSBycS0+ZW5naW5lLT51YWJp X2NsYXNzOwo+ICAgCQkJICAgX19lbnRyeS0+aW5zdGFuY2UgPSBycS0+ZW5naW5lLT51YWJpX2lu c3RhbmNlOwo+ICAgCQkJICAgX19lbnRyeS0+Y3R4ID0gcnEtPmZlbmNlLmNvbnRleHQ7Cj4gQEAg LTg1Myw5ICs4NDEsOSBAQCBUUkFDRV9FVkVOVChpOTE1X3JlcXVlc3Rfd2FpdF9iZWdpbiwKPiAg IAkJCSAgIF9fZW50cnktPmZsYWdzID0gZmxhZ3M7Cj4gICAJCQkgICApLAo+ICAgCj4gLQkgICAg VFBfcHJpbnRrKCJkZXY9JXUsIGVuZ2luZT0ldToldSwgaHdfaWQ9JXUsIGN0eD0lbGx1LCBzZXFu bz0ldSwgZmxhZ3M9MHgleCIsCj4gKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIGVuZ2luZT0ldTol dSwgY3R4PSVsbHUsIHNlcW5vPSV1LCBmbGFncz0weCV4IiwKPiAgIAkJICAgICAgX19lbnRyeS0+ ZGV2LCBfX2VudHJ5LT5jbGFzcywgX19lbnRyeS0+aW5zdGFuY2UsCj4gLQkJICAgICAgX19lbnRy eS0+aHdfaWQsIF9fZW50cnktPmN0eCwgX19lbnRyeS0+c2Vxbm8sCj4gKwkJICAgICAgX19lbnRy eS0+Y3R4LCBfX2VudHJ5LT5zZXFubywKPiAgIAkJICAgICAgX19lbnRyeS0+ZmxhZ3MpCj4gICAp Owo+ICAgCj4gQEAgLTk1OCwxOSArOTQ2LDE3IEBAIERFQ0xBUkVfRVZFTlRfQ0xBU1MoaTkxNV9j b250ZXh0LAo+ICAgCVRQX1NUUlVDVF9fZW50cnkoCj4gICAJCQlfX2ZpZWxkKHUzMiwgZGV2KQo+ ICAgCQkJX19maWVsZChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqLCBjdHgpCj4gLQkJCV9fZmll bGQodTMyLCBod19pZCkKPiAgIAkJCV9fZmllbGQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq LCB2bSkKPiAgIAkpLAo+ICAgCj4gICAJVFBfZmFzdF9hc3NpZ24oCj4gICAJCQlfX2VudHJ5LT5k ZXYgPSBjdHgtPmk5MTUtPmRybS5wcmltYXJ5LT5pbmRleDsKPiAgIAkJCV9fZW50cnktPmN0eCA9 IGN0eDsKPiAtCQkJX19lbnRyeS0+aHdfaWQgPSBjdHgtPmh3X2lkOwo+ICAgCQkJX19lbnRyeS0+ dm0gPSBjdHgtPnZtOwo+ICAgCSksCj4gICAKPiAtCVRQX3ByaW50aygiZGV2PSV1LCBjdHg9JXAs IGN0eF92bT0lcCwgaHdfaWQ9JXUiLAo+IC0JCSAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5jdHgs IF9fZW50cnktPnZtLCBfX2VudHJ5LT5od19pZCkKPiArCVRQX3ByaW50aygiZGV2PSV1LCBjdHg9 JXAsIGN0eF92bT0lcCIsCj4gKwkJICBfX2VudHJ5LT5kZXYsIF9fZW50cnktPmN0eCwgX19lbnRy eS0+dm0pCj4gICApCj4gICAKPiAgIERFRklORV9FVkVOVChpOTE1X2NvbnRleHQsIGk5MTVfY29u dGV4dF9jcmVhdGUsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X2dlbV9ldmljdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVf Z2VtX2V2aWN0LmMKPiBpbmRleCA1MmQyZGY4NDMxNDguLmYzOWYwMjgyZTc4YyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZXZpY3QuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jCj4gQEAg LTQ5MSw4ICs0OTEsOCBAQCBzdGF0aWMgaW50IGlndF9ldmljdF9jb250ZXh0cyh2b2lkICphcmcp Cj4gICAJCQlpZiAoSVNfRVJSKHJxKSkgewo+ICAgCQkJCS8qIFdoZW4gZnVsbCwgZmFpbF9pZl9i dXN5IHdpbGwgdHJpZ2dlciBFQlVTWSAqLwo+ICAgCQkJCWlmIChQVFJfRVJSKHJxKSAhPSAtRUJV U1kpIHsKPiAtCQkJCQlwcl9lcnIoIlVuZXhwZWN0ZWQgZXJyb3IgZnJvbSByZXF1ZXN0IGFsbG9j IChjdHggaHcgaWQgJXUsIG9uICVzKTogJWRcbiIsCj4gLQkJCQkJICAgICAgIGN0eC0+aHdfaWQs IGVuZ2luZS0+bmFtZSwKPiArCQkJCQlwcl9lcnIoIlVuZXhwZWN0ZWQgZXJyb3IgZnJvbSByZXF1 ZXN0IGFsbG9jIChvbiAlcyk6ICVkXG4iLAo+ICsJCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsCj4g ICAJCQkJCSAgICAgICAoaW50KVBUUl9FUlIocnEpKTsKPiAgIAkJCQkJZXJyID0gUFRSX0VSUihy cSk7Cj4gICAJCQkJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV92bWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5j Cj4gaW5kZXggMWM5ZGIwOGY3YzI4Li5hYzFmZjU1OGViOTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfdm1hLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV92bWEuYwo+IEBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGlj IGludCBpZ3Rfdm1hX2NyZWF0ZSh2b2lkICphcmcpCj4gICAJCX0KPiAgIAo+ICAgCQluYyA9IDA7 Cj4gLQkJZm9yX2VhY2hfcHJpbWVfbnVtYmVyKG51bV9jdHgsIE1BWF9DT05URVhUX0hXX0lEKSB7 Cj4gKwkJZm9yX2VhY2hfcHJpbWVfbnVtYmVyKG51bV9jdHgsIDIgKiBOVU1fQ09OVEVYVF9UQUcp IHsKPiAgIAkJCWZvciAoOyBuYyA8IG51bV9jdHg7IG5jKyspIHsKPiAgIAkJCQljdHggPSBtb2Nr X2NvbnRleHQoaTkxNSwgIm1vY2siKTsKPiAgIAkJCQlpZiAoIWN0eCkKPiAKClVubGVzcyBJIGFt IG1pc3Npbmcgc29tZXRoaW5nIEkgc2VlIHRoaXMgcGF0Y2ggYXMgc2ltcGxpZmljYXRpb24gYW5k IG5vdCAKYSBmaXguIElmIHdlIGNhbiBnZXQgYXdheSB3aXRoIGl0IGluIHRoZSBHdUMgd29ybGQg dGhlbiBpdCdzIHF1aXRlIGEgYmlnIApzaW1wbGlmaWNhdGlvbiBzbyBpdCdzIGZpbmUgYnkgbWUu CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeA==