From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 21/27] drm/i915: Move context management under GEM Date: Wed, 2 Oct 2019 17:09:26 +0100 Message-ID: <8874dc2b-cc0d-7d19-a4ab-7b7058196e22@linux.intel.com> References: <20190925100137.17956-1-chris@chris-wilson.co.uk> <20190925100137.17956-22-chris@chris-wilson.co.uk> <87d2e408-0331-b1f9-e580-9df49fc0bab7@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4F7526E82F for ; Wed, 2 Oct 2019 16:09:31 +0000 (UTC) In-Reply-To: <87d2e408-0331-b1f9-e580-9df49fc0bab7@linux.intel.com> 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 UGluZyBvbiBzb21lIGNvbW1lbnRzIGZyb20gdGhlIHByZXZpb3VzIHJvdW5kOgoKT24gMjYvMDkv MjAxOSAxNDo1NywgVHZydGtvIFVyc3VsaW4gd3JvdGU6Cj4gCj4gT24gMjUvMDkvMjAxOSAxMTow MSwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+PiBLZWVwIHRyYWNrIG9mIHRoZSBHRU0gY29udGV4dHMg dW5kZXJuZWF0aCBpOTE1LT5nZW0uY29udGV4dHMgYW5kIGFzc2lnbgo+PiB0aGVtIHRoZWlyIG93 biBsb2NrIGZvciB0aGUgcHVycG9zZXMgb2YgbGlzdCBtYW5hZ2VtZW50Lgo+Pgo+PiBTaWduZWQt b2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPj4gQ2M6IFR2 cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+IC0tLQo+PiDCoCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jwqDCoCB8IDE1NSArKysrKysr LS0tLS0tLS0tLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRl eHQuaMKgwqAgfMKgwqAgNCArLQo+PiDCoCAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9j b250ZXh0X3R5cGVzLmggfMKgwqAgMiArLQo+PiDCoCAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9leGVjYnVmZmVyLmPCoMKgwqAgfMKgwqAgMiArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jwqDCoCB8wqDCoCAyICstCj4+IMKgIC4uLi9ncHUv ZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmPCoMKgIHzCoCAxMiArLQo+PiDCoCAu Li4vZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgfCAxMjIgKysrKysr LS0tLS0tLS0KPj4gwqAgLi4uL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL21vY2tfY29udGV4 dC5jIHzCoMKgIDQgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4 dC5jwqDCoMKgwqDCoMKgIHzCoMKgIDggKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3RfY29udGV4dC5jwqDCoMKgIHzCoCAyNCArLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmPCoCB8wqAgMTkgKy0tCj4+IMKgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArLQo+ PiDCoCAuLi4vZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmPCoMKgwqAgfMKg IDEwICstCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuY8KgwqDCoMKg wqDCoMKgwqDCoCB8wqAgMjAgKy0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDUwICsrKy0tLQo+PiDCoCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAy IC0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgIDI3ICstLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTAgKy0KPj4gwqAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmPCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICst Cj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgIDI0ICsrLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2Zz LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDc3ICsrKystLS0tLQo+PiDCoCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAg MiArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW0uY8KgwqDC oMKgIHzCoMKgIDggLQo+PiDCoCAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9l dmljdC5jwqDCoCB8wqDCoCAzIC0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfZ2VtX2d0dC5jIHzCoMKgIDQgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfcmVxdWVzdC5jIHzCoCAxMSArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV92bWEuY8KgwqDCoMKgIHzCoMKgIDUgKy0KPj4gwqAgLi4uL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmPCoCB8wqDCoCA2ICstCj4+IMKgIDI4 IGZpbGVzIGNoYW5nZWQsIDI3MiBpbnNlcnRpb25zKCspLCAzNDkgZGVsZXRpb25zKC0pCj4+Cj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5j IAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKPj4gaW5k ZXggNGU1OWI4MDlkOTAxLi5hNzdmNDM5MzU4ZDcgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwo+PiBAQCAtMjE5LDkgKzIxOSwxMiBAQCBzdGF0 aWMgc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgCj4+ICpkZWZhdWx0X2VuZ2luZXMoc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCkKPj4gwqAgc3RhdGljIHZvaWQgaTkxNV9nZW1fY29udGV4dF9m cmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+IMKgIHsKPj4gLcKgwqDCoCBsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDC oMKgIEdFTV9CVUdfT04oIWk5MTVfZ2VtX2NvbnRleHRfaXNfY2xvc2VkKGN0eCkpOwo+PiArwqDC oMKgIHNwaW5fbG9jaygmY3R4LT5pOTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4+ICvCoMKgwqAg bGlzdF9kZWwoJmN0eC0+bGluayk7Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmN0eC0+aTkxNS0+ Z2VtLmNvbnRleHRzLmxvY2spOwo+PiArCj4+IMKgwqDCoMKgwqAgZnJlZV9lbmdpbmVzKHJjdV9h Y2Nlc3NfcG9pbnRlcihjdHgtPmVuZ2luZXMpKTsKPj4gwqDCoMKgwqDCoCBtdXRleF9kZXN0cm95 KCZjdHgtPmVuZ2luZXNfbXV0ZXgpOwo+PiBAQCAtMjMxLDU2ICsyMzQsNDAgQEAgc3RhdGljIHZv aWQgaTkxNV9nZW1fY29udGV4dF9mcmVlKHN0cnVjdCAKPj4gaTkxNV9nZW1fY29udGV4dCAqY3R4 KQo+PiDCoMKgwqDCoMKgIGtmcmVlKGN0eC0+bmFtZSk7Cj4+IMKgwqDCoMKgwqAgcHV0X3BpZChj dHgtPnBpZCk7Cj4+IC3CoMKgwqAgbGlzdF9kZWwoJmN0eC0+bGluayk7Cj4+IMKgwqDCoMKgwqAg bXV0ZXhfZGVzdHJveSgmY3R4LT5tdXRleCk7Cj4+IMKgwqDCoMKgwqAga2ZyZWVfcmN1KGN0eCwg cmN1KTsKPj4gwqAgfQo+PiAtc3RhdGljIHZvaWQgY29udGV4dHNfZnJlZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKPj4gK3N0YXRpYyB2b2lkIGNvbnRleHRzX2ZyZWVfYWxsKHN0cnVj dCBsbGlzdF9ub2RlICpsaXN0KQo+PiDCoCB7Cj4+IC3CoMKgwqAgc3RydWN0IGxsaXN0X25vZGUg KmZyZWVkID0gbGxpc3RfZGVsX2FsbCgmaTkxNS0+Y29udGV4dHMuZnJlZV9saXN0KTsKPj4gwqDC oMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCAqY247Cj4+IC3CoMKgwqAgbG9j a2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IC0KPj4gLcKgwqDC oCBsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0eCwgY24sIGZyZWVkLCBmcmVlX2xpbmspCj4+ ICvCoMKgwqAgbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdHgsIGNuLCBsaXN0LCBmcmVlX2xp bmspCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoY3R4KTsKPj4g wqAgfQo+PiAtc3RhdGljIHZvaWQgY29udGV4dHNfZnJlZV9maXJzdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKPj4gK3N0YXRpYyB2b2lkIGNvbnRleHRzX2ZsdXNoX2ZyZWUoc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHRzICpnYykKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHg7Cj4+IC3CoMKgwqAgc3RydWN0IGxsaXN0X25vZGUgKmZyZWVkOwo+PiAt Cj4+IC3CoMKgwqAgbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4+IC0KPj4gLcKgwqDCoCBmcmVlZCA9IGxsaXN0X2RlbF9maXJzdCgmaTkxNS0+Y29udGV4dHMu ZnJlZV9saXN0KTsKPj4gLcKgwqDCoCBpZiAoIWZyZWVkKQo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0 dXJuOwo+PiAtCj4+IC3CoMKgwqAgY3R4ID0gY29udGFpbmVyX29mKGZyZWVkLCB0eXBlb2YoKmN0 eCksIGZyZWVfbGluayk7Cj4+IC3CoMKgwqAgaTkxNV9nZW1fY29udGV4dF9mcmVlKGN0eCk7Cj4+ ICvCoMKgwqAgY29udGV4dHNfZnJlZV9hbGwobGxpc3RfZGVsX2FsbCgmZ2MtPmZyZWVfbGlzdCkp Owo+PiDCoCB9Cj4+IMKgIHN0YXRpYyB2b2lkIGNvbnRleHRzX2ZyZWVfd29ya2VyKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0KPj4gLcKgwqDCoMKgwqDCoMKgIGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2Yo Kmk5MTUpLCBjb250ZXh0cy5mcmVlX3dvcmspOwo+PiArwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0cyAqZ2MgPQo+PiArwqDCoMKgwqDCoMKgwqAgY29udGFpbmVyX29mKHdvcmssIHR5cGVv ZigqZ2MpLCBmcmVlX3dvcmspOwo+PiAtwqDCoMKgIG11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+PiAtwqDCoMKgIGNvbnRleHRzX2ZyZWUoaTkxNSk7Cj4+IC3CoMKgwqAgbXV0 ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gK8KgwqDCoCBjb250ZXh0c19m bHVzaF9mcmVlKGdjKTsKPj4gwqAgfQo+PiDCoCB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfcmVsZWFz ZShzdHJ1Y3Qga3JlZiAqcmVmKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqY3R4KSwgCj4+IHJlZik7 Cj4+IC3CoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBjdHgtPmk5MTU7Cj4+ ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHRzICpnYyA9ICZjdHgtPmk5MTUtPmdlbS5j b250ZXh0czsKPj4gwqDCoMKgwqDCoCB0cmFjZV9pOTE1X2NvbnRleHRfZnJlZShjdHgpOwo+PiAt wqDCoMKgIGlmIChsbGlzdF9hZGQoJmN0eC0+ZnJlZV9saW5rLCAmaTkxNS0+Y29udGV4dHMuZnJl ZV9saXN0KSkKPj4gLcKgwqDCoMKgwqDCoMKgIHF1ZXVlX3dvcmsoaTkxNS0+d3EsICZpOTE1LT5j b250ZXh0cy5mcmVlX3dvcmspOwo+PiArwqDCoMKgIGlmIChsbGlzdF9hZGQoJmN0eC0+ZnJlZV9s aW5rLCAmZ2MtPmZyZWVfbGlzdCkpCj4+ICvCoMKgwqDCoMKgwqDCoCBxdWV1ZV93b3JrKGN0eC0+ aTkxNS0+d3EsICZnYy0+ZnJlZV93b3JrKTsKPiAKPiBBdCBmaXJzdCBJIHRob3VnaHQgZ2Mgd2Fz IHNvbWUgc29ydCBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gbGlzdC4gQnV0IGl0IAo+IGlzIGEgR0VN IGNvbnRleHRzIGxpc3QuIDopIFRoaXMgaHVuayBsb29rcyBjb21wbGV0ZWx5IGF2b2lkYWJsZSwg SSBkb24ndCAKPiBzZWUgaXQgYnJpbmdzIG11Y2ggYmVuZWZpdCBvbiBiYWxhbmNlIHNpbmNlIGlu IHR1cm4gaXQgYWRkcyBjdHgtPmk5MTUgCj4gdHdpY2UgLiBCdXQgYXMgeW91IHdpc2guLgo+IAo+ PiDCoCB9Cj4+IMKgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgKgo+PiBA QCAtMzU5LDggKzM0Niw4IEBAIHN0YXRpYyB2b2lkIGNvbnRleHRfY2xvc2Uoc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgCj4+ICpjdHgpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250 ZXh0X3NldF9jbG9zZWQoY3R4KTsKPj4gLcKgwqDCoCBpZiAoY3R4LT52bSkKPj4gLcKgwqDCoMKg wqDCoMKgIGk5MTVfdm1fY2xvc2UoY3R4LT52bSk7Cj4+ICvCoMKgwqAgaWYgKHJjdV9hY2Nlc3Nf cG9pbnRlcihjdHgtPnZtKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGk5MTVfdm1fY2xvc2UocmN1X2Rl cmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtPnZtLCB0cnVlKSk7Cj4+IMKgwqDCoMKgwqAgbXV0ZXhf bG9jaygmY3R4LT5tdXRleCk7Cj4+IEBAIC0zOTQsNyArMzgxLDYgQEAgX19jcmVhdGVfY29udGV4 dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+PiDCoMKgwqDCoMKgIGtyZWZfaW5pdCgmY3R4LT5yZWYp Owo+PiAtwqDCoMKgIGxpc3RfYWRkX3RhaWwoJmN0eC0+bGluaywgJmk5MTUtPmNvbnRleHRzLmxp c3QpOwo+PiDCoMKgwqDCoMKgIGN0eC0+aTkxNSA9IGk5MTU7Cj4+IMKgwqDCoMKgwqAgY3R4LT5z Y2hlZC5wcmlvcml0eSA9IEk5MTVfVVNFUl9QUklPUklUWShJOTE1X1BSSU9SSVRZX05PUk1BTCk7 Cj4+IMKgwqDCoMKgwqAgbXV0ZXhfaW5pdCgmY3R4LT5tdXRleCk7Cj4+IEBAIC00MzUsNiArNDIx LDEwIEBAIF9fY3JlYXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+ IMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5oYW5nX3RpbWVzdGFt cCk7IGkrKykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+aGFuZ190aW1lc3RhbXBbaV0gPSBq aWZmaWVzIC0gQ09OVEVYVF9GQVNUX0hBTkdfSklGRklFUzsKPj4gK8KgwqDCoCBzcGluX2xvY2so Jmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gK8KgwqDCoCBsaXN0X2FkZF90YWlsKCZjdHgt PmxpbmssICZpOTE1LT5nZW0uY29udGV4dHMubGlzdCk7Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2so Jmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gKwo+PiDCoMKgwqDCoMKgIHJldHVybiBjdHg7 Cj4+IMKgIGVycl9mcmVlOgo+PiBAQCAtNDY0LDExICs0NTQsMTEgQEAgc3RhdGljIHZvaWQgX19h cHBseV9wcGd0dChzdHJ1Y3QgaW50ZWxfY29udGV4dCAKPj4gKmNlLCB2b2lkICp2bSkKPj4gwqAg c3RhdGljIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKgo+PiDCoCBfX3NldF9wcGd0dChzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIAo+PiAq dm0pCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICpvbGQgPSBj dHgtPnZtOwo+PiArwqDCoMKgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKm9sZCA9IAo+PiBy Y3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0+dm0sIDEpOwo+PiDCoMKgwqDCoMKgIEdFTV9C VUdfT04ob2xkICYmIGk5MTVfdm1faXNfNGx2bCh2bSkgIT0gaTkxNV92bV9pc180bHZsKG9sZCkp Owo+PiAtwqDCoMKgIGN0eC0+dm0gPSBpOTE1X3ZtX29wZW4odm0pOwo+PiArwqDCoMKgIHJjdV9h c3NpZ25fcG9pbnRlcihjdHgtPnZtLCBpOTE1X3ZtX29wZW4odm0pKTsKPiAKPiBBcmUgdXBkYXRl cnMgaGVyZSBzZXJpYWxpemVkPyBMb3N0IHRyYWNrIGlmIHN0cnVjdCBtdXRleCBpcyBzdGlsbCBo ZWxkIAo+IGluIHNldF9wcGd0dCBhdCB0aGlzIHBvaW50IGluIHRoZSBzZXJpZXMgb3Igbm90Li4g VGhpbmtpbmcgb2YgIm9sZCA9IAo+IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQuLiIgYW5kIGhl cmUuCj4gCj4+IMKgwqDCoMKgwqAgY29udGV4dF9hcHBseV9hbGwoY3R4LCBfX2FwcGx5X3BwZ3R0 LCB2bSk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIG9sZDsKPj4gQEAgLTQ3Nyw3ICs0NjcsNyBAQCBf X3NldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1Y3QgCj4+IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0pCj4+IMKgIHN0YXRpYyB2b2lkIF9fYXNzaWduX3BwZ3R0KHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+PiDCoCB7Cj4+IC3CoMKgwqAgaWYg KHZtID09IGN0eC0+dm0pCj4+ICvCoMKgwqAgaWYgKHZtID09IHJjdV9hY2Nlc3NfcG9pbnRlcihj dHgtPnZtKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gwqDCoMKgwqDCoCB2bSA9 IF9fc2V0X3BwZ3R0KGN0eCwgdm0pOwo+PiBAQCAtNTA5LDI3ICs0OTksMjUgQEAgc3RhdGljIHZv aWQgX19hc3NpZ25fdGltZWxpbmUoc3RydWN0IAo+PiBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+ IMKgIH0KPj4gwqAgc3RhdGljIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICoKPj4gLWk5MTVfZ2Vt X2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdW5zaWdu ZWQgCj4+IGludCBmbGFncykKPj4gK2k5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LCB1bnNpZ25lZCBpbnQgCj4+IGZsYWdzKQo+PiDCoCB7Cj4+IMKg wqDCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPj4gLcKgwqDCoCBsb2NrZGVw X2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IC0KPj4gwqDCoMKg wqDCoCBpZiAoZmxhZ3MgJiBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElO RSAmJgo+PiAtwqDCoMKgwqDCoMKgwqAgIUhBU19FWEVDTElTVFMoZGV2X3ByaXYpKQo+PiArwqDC oMKgwqDCoMKgwqAgIUhBU19FWEVDTElTVFMoaTkxNSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPj4gLcKgwqDCoCAvKiBSZWFwIHRoZSBtb3N0IHN0YWxl IGNvbnRleHQgKi8KPj4gLcKgwqDCoCBjb250ZXh0c19mcmVlX2ZpcnN0KGRldl9wcml2KTsKPj4g K8KgwqDCoCAvKiBSZWFwIHRoZSBzdGFsZSBjb250ZXh0cyAqLwo+PiArwqDCoMKgIGNvbnRleHRz X2ZsdXNoX2ZyZWUoJmk5MTUtPmdlbS5jb250ZXh0cyk7Cj4+IC3CoMKgwqAgY3R4ID0gX19jcmVh dGVfY29udGV4dChkZXZfcHJpdik7Cj4+ICvCoMKgwqAgY3R4ID0gX19jcmVhdGVfY29udGV4dChp OTE1KTsKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGN0eCkpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gY3R4Owo+PiAtwqDCoMKgIGlmIChIQVNfRlVMTF9QUEdUVChkZXZfcHJpdikpIHsK Pj4gK8KgwqDCoCBpZiAoSEFTX0ZVTExfUFBHVFQoaTkxNSkpIHsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dDsKPj4gLcKgwqDCoMKgwqDCoMKgIHBwZ3R0ID0g aTkxNV9wcGd0dF9jcmVhdGUoZGV2X3ByaXYpOwo+PiArwqDCoMKgwqDCoMKgwqAgcHBndHQgPSBp OTE1X3BwZ3R0X2NyZWF0ZShpOTE1KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIo cHBndHQpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9ERUJVR19EUklWRVIo IlBQR1RUIHNldHVwIGZhaWxlZCAoJWxkKVxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgUFRSX0VSUihwcGd0dCkpOwo+PiBAQCAtNTQ0LDcgKzUzMiw3 IEBAIGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAq ZGV2X3ByaXYsIHVuc2lnbmVkIGludCBmbGFncykKPj4gwqDCoMKgwqDCoCBpZiAoZmxhZ3MgJiBJ OTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElORSkgewo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGludGVsX3RpbWVsaW5lICp0aW1lbGluZTsKPj4gLcKgwqDCoMKgwqDC oMKgIHRpbWVsaW5lID0gaW50ZWxfdGltZWxpbmVfY3JlYXRlKCZkZXZfcHJpdi0+Z3QsIE5VTEwp Owo+PiArwqDCoMKgwqDCoMKgwqAgdGltZWxpbmUgPSBpbnRlbF90aW1lbGluZV9jcmVhdGUoJmk5 MTUtPmd0LCBOVUxMKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIodGltZWxpbmUp KSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRleHRfY2xvc2UoY3R4KTsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9DQVNUKHRpbWVsaW5lKTsKPj4g QEAgLTU5MCw0OCArNTc4LDQwIEBAIGk5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2tlcm5lbChzdHJ1 Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGludCBwcmlvKQo+PiDCoMKgwqDCoMKgIHJl dHVybiBjdHg7Cj4+IMKgIH0KPj4gLXN0YXRpYyB2b2lkIGluaXRfY29udGV4dHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+ICtzdGF0aWMgdm9pZCBpbml0X2NvbnRleHRzKHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0cyAqZ2MpCj4+IMKgIHsKPj4gLcKgwqDCoCBtdXRleF9pbml0KCZp OTE1LT5jb250ZXh0cy5tdXRleCk7Cj4+IC3CoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmk5MTUtPmNv bnRleHRzLmxpc3QpOwo+PiAtCj4+IC3CoMKgwqAgLyogVXNpbmcgdGhlIHNpbXBsZSBpZGEgaW50 ZXJmYWNlLCB0aGUgbWF4IGlzIGxpbWl0ZWQgYnkgCj4+IHNpemVvZihpbnQpICovCj4+IC3CoMKg wqAgQlVJTERfQlVHX09OKE1BWF9DT05URVhUX0hXX0lEID4gSU5UX01BWCk7Cj4+IC3CoMKgwqAg QlVJTERfQlVHX09OKEdFTjExX01BWF9DT05URVhUX0hXX0lEID4gSU5UX01BWCk7Cj4+IC3CoMKg wqAgaWRhX2luaXQoJmk5MTUtPmNvbnRleHRzLmh3X2lkYSk7Cj4+IC3CoMKgwqAgSU5JVF9MSVNU X0hFQUQoJmk5MTUtPmNvbnRleHRzLmh3X2lkX2xpc3QpOwo+IAo+IFRoaXMgKGFuZCBzb21lIG1v cmUgYml0cykgYmVsb25nIHRvIHRoZSBod19pZCByZW1vdmFsIHBhdGNoLgo+IAo+PiArwqDCoMKg IHNwaW5fbG9ja19pbml0KCZnYy0+bG9jayk7Cj4+ICvCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmdj LT5saXN0KTsKPj4gLcKgwqDCoCBJTklUX1dPUksoJmk5MTUtPmNvbnRleHRzLmZyZWVfd29yaywg Y29udGV4dHNfZnJlZV93b3JrZXIpOwo+PiAtwqDCoMKgIGluaXRfbGxpc3RfaGVhZCgmaTkxNS0+ Y29udGV4dHMuZnJlZV9saXN0KTsKPj4gK8KgwqDCoCBJTklUX1dPUksoJmdjLT5mcmVlX3dvcmss IGNvbnRleHRzX2ZyZWVfd29ya2VyKTsKPj4gK8KgwqDCoCBpbml0X2xsaXN0X2hlYWQoJmdjLT5m cmVlX2xpc3QpOwo+PiDCoCB9Cj4+IC1pbnQgaTkxNV9nZW1fY29udGV4dHNfaW5pdChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICtpbnQgaTkxNV9nZW1faW5pdF9jb250ZXh0 cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4+IMKgwqDCoMKgwqAgLyogUmVhc3N1cmUgb3Vy c2VsdmVzIHdlIGFyZSBvbmx5IGNhbGxlZCBvbmNlICovCj4+IC3CoMKgwqAgR0VNX0JVR19PTihk ZXZfcHJpdi0+a2VybmVsX2NvbnRleHQpOwo+PiArwqDCoMKgIEdFTV9CVUdfT04oaTkxNS0+a2Vy bmVsX2NvbnRleHQpOwo+PiAtwqDCoMKgIGluaXRfY29udGV4dHMoZGV2X3ByaXYpOwo+PiArwqDC oMKgIGluaXRfY29udGV4dHMoJmk5MTUtPmdlbS5jb250ZXh0cyk7Cj4+IMKgwqDCoMKgwqAgLyog bG93ZXN0IHByaW9yaXR5OyBpZGxlIHRhc2sgKi8KPj4gLcKgwqDCoCBjdHggPSBpOTE1X2dlbV9j b250ZXh0X2NyZWF0ZV9rZXJuZWwoZGV2X3ByaXYsIEk5MTVfUFJJT1JJVFlfTUlOKTsKPj4gK8Kg wqDCoCBjdHggPSBpOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9rZXJuZWwoaTkxNSwgSTkxNV9QUklP UklUWV9NSU4pOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3R4KSkgewo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRlZmF1bHQgZ2xvYmFsIGNvbnRl eHRcbiIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoY3R4KTsKPj4gwqDC oMKgwqDCoCB9Cj4+IC3CoMKgwqAgZGV2X3ByaXYtPmtlcm5lbF9jb250ZXh0ID0gY3R4Owo+PiAr wqDCoMKgIGk5MTUtPmtlcm5lbF9jb250ZXh0ID0gY3R4Owo+PiDCoMKgwqDCoMKgIERSTV9ERUJV R19EUklWRVIoIiVzIGNvbnRleHQgc3VwcG9ydCBpbml0aWFsaXplZFxuIiwKPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBEUklWRVJfQ0FQUyhkZXZfcHJpdiktPmhhc19sb2dpY2FsX2NvbnRl eHRzID8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUklWRVJfQ0FQUyhpOTE1KS0+aGFz X2xvZ2ljYWxfY29udGV4dHMgPwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJsb2dp Y2FsIiA6ICJmYWtlIik7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIH0KPj4gLXZvaWQg aTkxNV9nZW1fY29udGV4dHNfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4g K3ZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlbGVhc2VfX2NvbnRleHRzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQo+PiDCoCB7Cj4+IC3CoMKgwqAgbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IC0KPj4gwqDCoMKgwqDCoCBkZXN0cm95X2tlcm5lbF9j b250ZXh0KCZpOTE1LT5rZXJuZWxfY29udGV4dCk7Cj4+IMKgIH0KPj4gQEAgLTY1Myw4ICs2MzMs OCBAQCBzdGF0aWMgaW50IGdlbV9jb250ZXh0X3JlZ2lzdGVyKHN0cnVjdCAKPj4gaTkxNV9nZW1f Y29udGV4dCAqY3R4LAo+PiDCoMKgwqDCoMKgIGludCByZXQ7Cj4+IMKgwqDCoMKgwqAgY3R4LT5m aWxlX3ByaXYgPSBmcHJpdjsKPj4gLcKgwqDCoCBpZiAoY3R4LT52bSkKPj4gLcKgwqDCoMKgwqDC oMKgIGN0eC0+dm0tPmZpbGUgPSBmcHJpdjsKPj4gK8KgwqDCoCBpZiAocmN1X2FjY2Vzc19wb2lu dGVyKGN0eC0+dm0pKQo+PiArwqDCoMKgwqDCoMKgwqAgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3Rl ZChjdHgtPnZtLCB0cnVlKS0+ZmlsZSA9IGZwcml2Owo+IAo+IEhlcmUgcmN1IGFjY2Vzc2VzIGFy ZSBqdXN0IHRvIHNhdGlzZnkgc3BhcnNlPwo+IAo+PiDCoMKgwqDCoMKgIGN0eC0+cGlkID0gZ2V0 X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTsKPj4gwqDCoMKgwqDCoCBjdHgtPm5hbWUg PSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzWyVkXSIsCj4+IEBAIC02OTEsOSArNjcxLDcgQEAg aW50IGk5MTVfZ2VtX2NvbnRleHRfb3BlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4gKmk5 MTUsCj4+IMKgwqDCoMKgwqAgaWRyX2luaXQoJmZpbGVfcHJpdi0+Y29udGV4dF9pZHIpOwo+PiDC oMKgwqDCoMKgIGlkcl9pbml0X2Jhc2UoJmZpbGVfcHJpdi0+dm1faWRyLCAxKTsKPj4gLcKgwqDC oCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoCBjdHgg PSBpOTE1X2dlbV9jcmVhdGVfY29udGV4dChpOTE1LCAwKTsKPj4gLcKgwqDCoCBtdXRleF91bmxv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3R4 KSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUihjdHgpOwo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBlcnI7Cj4+IEBAIC03MjEsNiArNjk5LDcgQEAgaW50IGk5MTVfZ2Vt X2NvbnRleHRfb3BlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4gKmk5MTUsCj4+IMKgIHZv aWQgaTkxNV9nZW1fY29udGV4dF9jbG9zZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4+IMKgIHsK Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBm aWxlLT5kcml2ZXJfcHJpdjsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IGZpbGVfcHJpdi0+ZGV2X3ByaXY7Cj4+IMKgwqDCoMKgwqAgaWRyX2Zvcl9lYWNoKCZmaWxl X3ByaXYtPmNvbnRleHRfaWRyLCBjb250ZXh0X2lkcl9jbGVhbnVwLCBOVUxMKTsKPj4gwqDCoMKg wqDCoCBpZHJfZGVzdHJveSgmZmlsZV9wcml2LT5jb250ZXh0X2lkcik7Cj4+IEBAIC03MjksNiAr NzA4LDggQEAgdm9pZCBpOTE1X2dlbV9jb250ZXh0X2Nsb3NlKHN0cnVjdCBkcm1fZmlsZSAqZmls ZSkKPj4gwqDCoMKgwqDCoCBpZHJfZm9yX2VhY2goJmZpbGVfcHJpdi0+dm1faWRyLCB2bV9pZHJf Y2xlYW51cCwgTlVMTCk7Cj4+IMKgwqDCoMKgwqAgaWRyX2Rlc3Ryb3koJmZpbGVfcHJpdi0+dm1f aWRyKTsKPj4gwqDCoMKgwqDCoCBtdXRleF9kZXN0cm95KCZmaWxlX3ByaXYtPnZtX2lkcl9sb2Nr KTsKPj4gKwo+PiArwqDCoMKgIGNvbnRleHRzX2ZsdXNoX2ZyZWUoJmk5MTUtPmdlbS5jb250ZXh0 cyk7Cj4+IMKgIH0KPj4gwqAgaW50IGk5MTVfZ2VtX3ZtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+PiBAQCAtOTA3LDE2ICs4ODgsMTIgQEAgc3RhdGlj IGludCBnZXRfcHBndHQoc3RydWN0IAo+PiBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJp diwKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKPj4gwqDCoMKg wqDCoCBpbnQgcmV0Owo+PiAtwqDCoMKgIGlmICghY3R4LT52bSkKPj4gK8KgwqDCoCBpZiAoIXJj dV9hY2Nlc3NfcG9pbnRlcihjdHgtPnZtKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PREVWOwo+PiAtwqDCoMKgIC8qIFhYWCByY3UgYWNxdWlyZT8gKi8KPj4gLcKgwqDCoCByZXQg PSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN0eC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4+IC3CoMKgwqAgaWYgKHJldCkKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IC0K Pj4gK8KgwqDCoCByY3VfcmVhZF9sb2NrKCk7Cj4+IMKgwqDCoMKgwqAgdm0gPSBpOTE1X3ZtX2dl dChjdHgtPnZtKTsKPj4gLcKgwqDCoCBtdXRleF91bmxvY2soJmN0eC0+aTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4+ICvCoMKgwqAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4+IMKgwqDCoMKgwqAgcmV0 ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaWxlX3ByaXYtPnZtX2lkcl9sb2NrKTsKPj4g wqDCoMKgwqDCoCBpZiAocmV0KQo+PiBAQCAtMTAyNSw3ICsxMDAyLDcgQEAgc3RhdGljIGludCBz ZXRfcHBndHQoc3RydWN0IAo+PiBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiwKPj4g wqDCoMKgwqDCoCBpZiAoYXJncy0+c2l6ZSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RUlOVkFMOwo+PiAtwqDCoMKgIGlmICghY3R4LT52bSkKPj4gK8KgwqDCoCBpZiAoIXJjdV9hY2Nl c3NfcG9pbnRlcihjdHgtPnZtKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREVW Owo+PiDCoMKgwqDCoMKgIGlmICh1cHBlcl8zMl9iaXRzKGFyZ3MtPnZhbHVlKSkKPj4gQEAgLTEw MzksMTcgKzEwMTYsMTUgQEAgc3RhdGljIGludCBzZXRfcHBndHQoc3RydWN0IAo+PiBkcm1faTkx NV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiwKPj4gwqDCoMKgwqDCoCBpZiAoIXZtKQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9FTlQ7Cj4+IC3CoMKgwqAgZXJyID0gbXV0ZXhfbG9j a19pbnRlcnJ1cHRpYmxlKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiArwqDCoMKg IGVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3R4LT5tdXRleCk7Cj4+IMKgwqDCoMKg wqAgaWYgKGVycikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Owo+PiAtwqDCoMKgIGlm ICh2bSA9PSBjdHgtPnZtKQo+PiArwqDCoMKgIGlmICh2bSA9PSByY3VfYWNjZXNzX3BvaW50ZXIo Y3R4LT52bSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIHVubG9jazsKPj4gwqDCoMKgwqDC oCAvKiBUZWFyZG93biB0aGUgZXhpc3Rpbmcgb2JqOnZtYSBjYWNoZSwgaXQgd2lsbCBoYXZlIHRv IGJlIAo+PiByZWJ1aWx0LiAqLwo+PiAtwqDCoMKgIG11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOwo+ PiDCoMKgwqDCoMKgIGx1dF9jbG9zZShjdHgpOwo+PiAtwqDCoMKgIG11dGV4X3VubG9jaygmY3R4 LT5tdXRleCk7Cj4+IMKgwqDCoMKgwqAgb2xkID0gX19zZXRfcHBndHQoY3R4LCB2bSk7Cj4+IEBA IC0xMDY5LDggKzEwNDQsNyBAQCBzdGF0aWMgaW50IHNldF9wcGd0dChzdHJ1Y3QgCj4+IGRybV9p OTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2LAo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgdW5sb2Nr Ogo+PiAtwqDCoMKgIG11dGV4X3VubG9jaygmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsK Pj4gLQo+PiArwqDCoMKgIG11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7Cj4+IMKgIG91dDoKPj4g wqDCoMKgwqDCoCBpOTE1X3ZtX3B1dCh2bSk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPj4g QEAgLTE5NTMsNyArMTkyNyw3IEBAIHN0YXRpYyBpbnQgY2xvbmVfdm0oc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmRzdCwKPj4gwqDCoMKgwqDCoCByY3VfcmVhZF9sb2NrKCk7Cj4+IMKgwqDCoMKg wqAgZG8gewo+PiAtwqDCoMKgwqDCoMKgwqAgdm0gPSBSRUFEX09OQ0Uoc3JjLT52bSk7Cj4+ICvC oMKgwqDCoMKgwqDCoCB2bSA9IHJjdV9kZXJlZmVyZW5jZShzcmMtPnZtKTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGlmICghdm0pCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ PiBAQCAtMTk3NSw3ICsxOTQ5LDcgQEAgc3RhdGljIGludCBjbG9uZV92bShzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqZHN0LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGl0IGNhbm5vdCBiZSBy ZWFsbG9jYXRlZCBlbHNld2hlcmUuCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+IC3CoMKg wqDCoMKgwqDCoCBpZiAodm0gPT0gUkVBRF9PTkNFKHNyYy0+dm0pKQo+PiArwqDCoMKgwqDCoMKg wqAgaWYgKHZtID09IHJjdV9hY2Nlc3NfcG9pbnRlcihzcmMtPnZtKSkKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X3ZtX3B1dCh2 bSk7Cj4+IEBAIC0yMDc3LDEyICsyMDUxLDcgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfY3JlYXRl X2lvY3RsKHN0cnVjdCAKPj4gZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU87Cj4+IMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIHJldCA9 IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7Cj4+IC3CoMKgwqAgaWYgKHJldCkK Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IC0KPj4gwqDCoMKgwqDCoCBleHRfZGF0 YS5jdHggPSBpOTE1X2dlbV9jcmVhdGVfY29udGV4dChpOTE1LCBhcmdzLT5mbGFncyk7Cj4+IC3C oMKgwqAgbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgaWYg KElTX0VSUihleHRfZGF0YS5jdHgpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9F UlIoZXh0X2RhdGEuY3R4KTsKPj4gQEAgLTIyMDksMTAgKzIxNzgsMTIgQEAgaW50IGk5MTVfZ2Vt X2NvbnRleHRfZ2V0cGFyYW1faW9jdGwoc3RydWN0IAo+PiBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCj4+IMKgwqDCoMKgwqAgY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fR1RUX1NJWkU6Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBhcmdzLT5zaXplID0gMDsKPj4gLcKgwqDCoMKgwqDCoMKgIGlm IChjdHgtPnZtKQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcmdzLT52YWx1ZSA9IGN0eC0+ dm0tPnRvdGFsOwo+PiArwqDCoMKgwqDCoMKgwqAgcmN1X3JlYWRfbG9jaygpOwo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjdHgtPnZtKSkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYXJncy0+dmFsdWUgPSByY3VfZGVyZWZlcmVuY2UoY3R4LT52bSktPnRvdGFs Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhcmdzLT52YWx1ZSA9IHRvX2k5MTUoZGV2KS0+Z2d0dC52bS50b3RhbDsKPj4gK8KgwqDCoMKg wqDCoMKgIHJjdV9yZWFkX3VubG9jaygpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ IMKgwqDCoMKgwqAgY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fTk9fRVJST1JfQ0FQVFVSRToKPj4g QEAgLTIyODMsNyArMjI1NCw3IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X3NldHBhcmFtX2lvY3Rs KHN0cnVjdCAKPj4gZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+PiDCoCBpbnQgaTkxNV9n ZW1fY29udGV4dF9yZXNldF9zdGF0c19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm9pZCAqZGF0 YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+PiDCoCB7Cj4+IC3CoMKgwqAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+PiArwqDCoMKgIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOwo+PiDCoMKgwqDCoMKgIHN0cnVj dCBkcm1faTkxNV9yZXNldF9zdGF0cyAqYXJncyA9IGRhdGE7Cj4+IMKgwqDCoMKgwqAgc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+PiBAQCAtMjMw NSw3ICsyMjc2LDcgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfcmVzZXRfc3RhdHNfaW9jdGwoc3Ry dWN0IAo+PiBkcm1fZGV2aWNlICpkZXYsCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKg IGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKQo+PiAtwqDCoMKgwqDCoMKgwqAgYXJncy0+cmVz ZXRfY291bnQgPSBpOTE1X3Jlc2V0X2NvdW50KCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGFyZ3MtPnJlc2V0X2NvdW50ID0gaTkxNV9yZXNldF9jb3VudCgmaTkxNS0+ Z3B1X2Vycm9yKTsKPj4gwqDCoMKgwqDCoCBlbHNlCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBhcmdz LT5yZXNldF9jb3VudCA9IDA7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fY29udGV4dC5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9jb250ZXh0LmgKPj4gaW5kZXggMWIwZGY1MzQzNmNmLi40ZWU1ZGZjNTc5NGUgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmgKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaAo+PiBAQCAt MTMzLDggKzEzMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCAKPj4gaTkxNV9nZW1fY29udGV4dF9p c19rZXJuZWwoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPj4gwqAgfQo+PiDCoCAvKiBp OTE1X2dlbV9jb250ZXh0LmMgKi8KPj4gLWludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fY29udGV4 dHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4gKmRldl9wcml2KTsKPj4gLXZvaWQg aTkxNV9nZW1fY29udGV4dHNfZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Owo+PiAraW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9pbml0X2NvbnRleHRzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KTsKPj4gK3ZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlbGVhc2VfX2Nv bnRleHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPj4gwqAgaW50IGk5MTVfZ2Vt X2NvbnRleHRfb3BlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dF90eXBlcy5oIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0X3R5cGVzLmgKPj4g aW5kZXggNjQxOWRhN2M5ZjkwLi5hM2VjZDE5ZjIzMDMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0X3R5cGVzLmgKPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMuaAo+PiBAQCAtODgsNyAr ODgsNyBAQCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCB7Cj4+IMKgwqDCoMKgwqDCoCAqIEluIG90 aGVyIG1vZGVzLCB0aGlzIGlzIGEgTlVMTCBwb2ludGVyIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRo YXQKPj4gwqDCoMKgwqDCoMKgICogdGhlIGNhbGxlciB1c2VzIHRoZSBzaGFyZWQgZ2xvYmFsIEdU VC4KPj4gwqDCoMKgwqDCoMKgICovCj4+IC3CoMKgwqAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm07Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSBfX3JjdSAqdm07Cj4+ IMKgwqDCoMKgwqAgLyoqCj4+IMKgwqDCoMKgwqDCoCAqIEBwaWQ6IHByb2Nlc3MgaWQgb2YgY3Jl YXRvcgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4 ZWNidWZmZXIuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1 ZmZlci5jCj4+IGluZGV4IDg4YTg4MWJlMTJlYy4uOTg4MTZjMzVmZmMzIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPj4gQEAgLTcy OCw3ICs3MjgsNyBAQCBzdGF0aWMgaW50IGViX3NlbGVjdF9jb250ZXh0KHN0cnVjdCAKPj4gaTkx NV9leGVjYnVmZmVyICplYikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PRU5UOwo+ PiDCoMKgwqDCoMKgIGViLT5nZW1fY29udGV4dCA9IGN0eDsKPj4gLcKgwqDCoCBpZiAoY3R4LT52 bSkKPj4gK8KgwqDCoCBpZiAocmN1X2FjY2Vzc19wb2ludGVyKGN0eC0+dm0pKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgZWItPmludmFsaWRfZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfTkVFRFNfR1RUOwo+ PiDCoMKgwqDCoMKgIGViLT5jb250ZXh0X2ZsYWdzID0gMDsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMgCj4+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+PiBpbmRleCAyNzU3M2VmOTAzYjQuLjdj MjI1ZTFkMmExMSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3VzZXJwdHIuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f dXNlcnB0ci5jCj4+IEBAIC03NTcsNyArNzU3LDcgQEAgaTkxNV9nZW1fdXNlcnB0cl9pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIE9uIGFsbW9z dCBhbGwgb2YgdGhlIG9sZGVyIGh3LCB3ZSBjYW5ub3QgdGVsbCB0aGUgR1BVIHRoYXQKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBhIHBhZ2UgaXMgcmVhZG9ubHkuCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgICovCj4+IC3CoMKgwqDCoMKgwqDCoCB2bSA9IGRldl9wcml2LT5rZXJuZWxfY29udGV4 dC0+dm07Cj4+ICvCoMKgwqDCoMKgwqDCoCB2bSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQo ZGV2X3ByaXYtPmtlcm5lbF9jb250ZXh0LT52bSwgCj4+IHRydWUpOwo+IAo+IEhtLCBzaG91bGQg aXQgbm90IGJlIHJjdV9kZXJlZmVyZW5jZSBoZXJlPwo+IAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKCF2bSB8fCAhdm0tPmhhc19yZWFkX29ubHkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAtRU5PREVWOwo+PiDCoMKgwqDCoMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIAo+PiBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCj4+IGluZGV4IDk4YjJhNmNj ZmNjMS4uZTIwNGU2NTNiNDU5IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwo+PiBAQCAtMTMyMiw3ICsxMzIyLDcgQEAgc3RhdGlj IGludCBpZ3RfcHBndHRfcGluX3VwZGF0ZSh2b2lkICphcmcpCj4+IMKgwqDCoMKgwqAgc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGFyZzsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmk5MTU7Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQg bG9uZyBzdXBwb3J0ZWQgPSBJTlRFTF9JTkZPKGRldl9wcml2KS0+cGFnZV9zaXplczsKPj4gLcKg wqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9IGN0eC0+dm07Cj4+ICvCoMKgwqAg c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSAKPj4gcmN1X2RlcmVmZXJlbmNlX3Byb3Rl Y3RlZChjdHgtPnZtLCAxKTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9lbmdpbmVzX2l0ZXIgaXQ7Cj4+ IMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+PiBAQCAtMTQ2MCw3ICsxNDYw LDggQEAgc3RhdGljIGludCBpZ3RfdG1wZnNfZmFsbGJhY2sodm9pZCAqYXJnKQo+PiDCoMKgwqDC oMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBhcmc7Cj4+IMKgwqDCoMKgwqAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBjdHgtPmk5MTU7Cj4+IMKgwqDCoMKgwqAgc3Ry dWN0IHZmc21vdW50ICpnZW1mcyA9IGk5MTUtPm1tLmdlbWZzOwo+PiAtwqDCoMKgIHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0gY3R4LT52bSA/OiAmaTkxNS0+Z2d0dC52bTsKPj4gK8Kg wqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9Cj4+ICvCoMKgwqDCoMKgwqDCoCBy Y3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0+dm0sIHRydWUpID86ICZpOTE1LT5nZ3R0LnZt Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4+IMKgwqDC oMKgwqAgc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4+IMKgwqDCoMKgwqAgdTMyICp2YWRkcjsKPj4g QEAgLTE1MTcsNyArMTUxOCw4IEBAIHN0YXRpYyBpbnQgaWd0X3Nocmlua190aHAodm9pZCAqYXJn KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGFy ZzsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGN0eC0+aTkx NTsKPj4gLcKgwqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9IGN0eC0+dm0gPzog Jmk5MTUtPmdndHQudm07Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0g PQo+PiArwqDCoMKgwqDCoMKgwqAgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtPnZtLCB0 cnVlKSA/OiAmaTkxNS0+Z2d0dC52bTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9lbmdpbmVzX2l0ZXIg aXQ7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+PiBAQCAtMTY5OSw4 ICsxNzAxLDggQEAgaW50IGk5MTVfZ2VtX2h1Z2VfcGFnZV9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3Qg Cj4+IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91 dF91bmxvY2s7Cj4+IMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIGlmIChjdHgtPnZtKQo+PiAtwqDC oMKgwqDCoMKgwqAgY3R4LT52bS0+c2NydWJfNjRLID0gdHJ1ZTsKPj4gK8KgwqDCoCBpZiAocmN1 X2FjY2Vzc19wb2ludGVyKGN0eC0+dm0pKQo+PiArwqDCoMKgwqDCoMKgwqAgcmN1X2RlcmVmZXJl bmNlX3Byb3RlY3RlZChjdHgtPnZtLCB0cnVlKS0+c2NydWJfNjRLID0gdHJ1ZTsKPj4gwqDCoMKg wqDCoCBlcnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBjdHgpOwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgCj4+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPj4g aW5kZXggYThhOTI5M2Y0YWM2Li43ZGUxYzAwNzhkNmYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jCj4+IEBA IC01MywxOSArNTMsMTcgQEAgc3RhdGljIGludCBsaXZlX25vcF9zd2l0Y2godm9pZCAqYXJnKQo+ PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoZmlsZSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gUFRSX0VSUihmaWxlKTsKPj4gLcKgwqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPj4gLQo+PiDCoMKgwqDCoMKgIGN0eCA9IGtjYWxsb2MobmN0eCwgc2l6ZW9mKCpj dHgpLCBHRlBfS0VSTkVMKTsKPj4gwqDCoMKgwqDCoCBpZiAoIWN0eCkgewo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgZXJyID0gLUVOT01FTTsKPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X3VubG9j azsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZpbGU7Cj4+IMKgwqDCoMKgwqAgfQo+PiDC oMKgwqDCoMKgIGZvciAobiA9IDA7IG4gPCBuY3R4OyBuKyspIHsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIGN0eFtuXSA9IGxpdmVfY29udGV4dChpOTE1LCBmaWxlKTsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChJU19FUlIoY3R4W25dKSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl cnIgPSBQVFJfRVJSKGN0eFtuXSk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0 X3VubG9jazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCB9Cj4+IEBAIC03OSw3ICs3Nyw3IEBAIHN0 YXRpYyBpbnQgbGl2ZV9ub3Bfc3dpdGNoKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcnEgPSBpZ3RfcmVxdWVzdF9hbGxvYyhjdHhbbl0sIGVuZ2luZSk7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIocnEpKSB7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUihycSk7Cj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfdW5sb2NrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZpbGU7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IEBAIC04Nyw3ICs4NSw3IEBAIHN0YXRpYyBpbnQgbGl2 ZV9ub3Bfc3dpdGNoKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJf ZXJyKCJGYWlsZWQgdG8gcG9wdWxhdGVkICVkIGNvbnRleHRzXG4iLCBuY3R4KTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfZ3Rfc2V0X3dlZGdlZCgmaTkxNS0+Z3QpOwo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSAtRUlPOwo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8g b3V0X2ZpbGU7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB0 aW1lc1sxXSA9IGt0aW1lX2dldF9yYXcoKTsKPj4gQEAgLTk3LDcgKzk1LDcgQEAgc3RhdGljIGlu dCBsaXZlX25vcF9zd2l0Y2godm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0g aWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgaTkxNSwgX19mdW5jX18sIGVuZ2luZS0+bmFtZSk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZXJyKQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZpbGU7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlbmRfdGltZSA9IGppZmZpZXMgKyBpOTE1X3NlbGZ0ZXN0 LnRpbWVvdXRfamlmZmllczsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZvcl9lYWNoX3ByaW1lX251 bWJlcl9mcm9tKHByaW1lLCAyLCA4MTkyKSB7Cj4+IEBAIC0xMDcsNyArMTA1LDcgQEAgc3RhdGlj IGludCBsaXZlX25vcF9zd2l0Y2godm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJxID0gaWd0X3JlcXVlc3RfYWxsb2MoY3R4W24gJSBuY3R4XSwgZW5naW5l KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHJxKSkg ewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRS X0VSUihycSk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3Rv IG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIG91dF9maWxlOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+PiBAQCAtMTQzLDcgKzE0MSw3 IEBAIHN0YXRpYyBpbnQgbGl2ZV9ub3Bfc3dpdGNoKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIGVyciA9IGlndF9saXZlX3Rlc3RfZW5kKCZ0KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChlcnIpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X3VubG9jazsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIHByX2luZm8oIlN3aXRjaCBsYXRlbmNpZXMgb24gJXM6IDEgPSAlbGx1bnMsICVsdSA9ICVs bHVuc1xuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5lLT5uYW1lLAo+PiBA QCAtMTUxLDggKzE0OSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ub3Bfc3dpdGNoKHZvaWQgKmFyZykK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbWUgLSAxLCBkaXY2NF91NjQoa3RpbWVf dG9fbnModGltZXNbMV0pLCBwcmltZSAtIDEpKTsKPj4gwqDCoMKgwqDCoCB9Cj4+IC1vdXRfdW5s b2NrOgo+PiAtwqDCoMKgIG11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+ ICtvdXRfZmlsZToKPj4gwqDCoMKgwqDCoCBtb2NrX2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKPj4g wqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+PiDCoCB9Cj4+IEBAIC00MTIsMTEgKzQwOSw5IEBAIHN0 YXRpYyBpbnQgaWd0X2N0eF9leGVjKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChJU19FUlIoZmlsZSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJf RVJSKGZpbGUpOwo+PiAtwqDCoMKgwqDCoMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4+IC0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IGlndF9saXZlX3Rlc3Rf YmVnaW4oJnQsIGk5MTUsIF9fZnVuY19fLCBlbmdpbmUtPm5hbWUpOwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGVycikKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfdW5sb2Nr Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9maWxlOwo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgbmNvbnRleHRzID0gMDsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIG5kd29yZHMgPSAw Owo+PiBAQCAtNDI4LDcgKzQyMyw3IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9leGVjKHZvaWQgKmFy ZykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4ID0ga2VybmVsX2NvbnRleHQoaTkx NSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3R4KSkgewo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IFBUUl9FUlIoY3R4KTsKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjZSA9IGk5MTVf Z2VtX2NvbnRleHRfZ2V0X2VuZ2luZShjdHgsIGVuZ2luZS0+bGVnYWN5X2lkeCk7Cj4+IEBAIC00 NDAsNyArNDM1LDcgQEAgc3RhdGljIGludCBpZ3RfY3R4X2V4ZWModm9pZCAqYXJnKQo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUihvYmop Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfY29u dGV4dF9wdXQoY2UpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAga2VybmVsX2NvbnRleHRfY2xvc2UoY3R4KTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X3VubG9jazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZpbGU7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IEBAIC00 NDksMTcgKzQ0NCwxOCBAQCBzdGF0aWMgaW50IGlndF9jdHhfZXhlYyh2b2lkICphcmcpCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJGYWlsZWQgdG8gZmlsbCBk d29yZCAlbHUgWyVsdS8lbHVdIHdpdGggZ3B1IAo+PiAoJXMpIFtmdWxsLXBwZ3R0PyAlc10sIGVy cj0lZFxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG5kd29yZHMsIGR3LCBtYXhfZHdvcmRzKG9iaiksCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmdpbmUtPm5hbWUsCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5ZXNubyghIWN0eC0+dm0pLCBlcnIp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeWVzbm8o ISFyY3VfYWNjZXNzX3BvaW50ZXIoY3R4LT52bSkpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAga2VybmVsX2NvbnRleHRfY2xvc2UoY3R4KTsKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSB0aHJvdHRsZShjZSwgdHEs IEFSUkFZX1NJWkUodHEpKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGVycikg ewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2NvbnRleHRfcHV0 KGNlKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrZXJuZWxfY29udGV4 dF9jbG9zZShjdHgpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0 X3VubG9jazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9maWxl Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmICgrK2R3ID09IG1heF9kd29yZHMob2JqKSkgewo+PiBAQCAtNDg5LDExICs0ODUs MTAgQEAgc3RhdGljIGludCBpZ3RfY3R4X2V4ZWModm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkdyArPSByZW07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IC1vdXRf dW5sb2NrOgo+PiArb3V0X2ZpbGU6Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB0aHJvdHRsZV9yZWxl YXNlKHRxLCBBUlJBWV9TSVpFKHRxKSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaWd0X2xp dmVfdGVzdF9lbmQoJnQpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSAtRUlP Owo+PiAtwqDCoMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIG1vY2tfZmlsZV9mcmVlKGk5MTUsIGZpbGUpOwo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKGVycikKPj4gQEAgLTUyOCwyMiArNTIzLDIwIEBAIHN0YXRp YyBpbnQgaWd0X3NoYXJlZF9jdHhfZXhlYyh2b2lkICphcmcpCj4+IMKgwqDCoMKgwqAgaWYgKElT X0VSUihmaWxlKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGZpbGUpOwo+ PiAtwqDCoMKgIG11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiAtCj4+IMKg wqDCoMKgwqAgcGFyZW50ID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+PiDCoMKgwqDCoMKg IGlmIChJU19FUlIocGFyZW50KSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VS UihwYXJlbnQpOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfdW5sb2NrOwo+PiArwqDCoMKg wqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgaWYg KCFwYXJlbnQtPnZtKSB7IC8qIG5vdCBmdWxsLXBwZ3R0OyBub3RoaW5nIHRvIHNoYXJlICovCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSAwOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBvdXRf dW5sb2NrOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoCB9 Cj4+IMKgwqDCoMKgwqAgZXJyID0gaWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgaTkxNSwgX19mdW5j X18sICIiKTsKPj4gwqDCoMKgwqDCoCBpZiAoZXJyKQo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBv dXRfdW5sb2NrOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDC oCBmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBuY29udGV4dHMsIG5kd29yZHMsIGR3Owo+PiBAQCAtNTg3LDcgKzU4 MCw4IEBAIHN0YXRpYyBpbnQgaWd0X3NoYXJlZF9jdHhfZXhlYyh2b2lkICphcmcpCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCJGYWlsZWQgdG8gZmlsbCBkd29y ZCAlbHUgWyVsdS8lbHVdIHdpdGggZ3B1IAo+PiAoJXMpIFtmdWxsLXBwZ3R0PyAlc10sIGVycj0l ZFxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG5kd29yZHMsIGR3LCBtYXhfZHdvcmRzKG9iaiksCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmdpbmUtPm5hbWUsCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5ZXNubyghIWN0eC0+dm0pLCBlcnIpOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeWVzbm8oISFy Y3VfYWNjZXNzX3BvaW50ZXIoY3R4LT52bSkpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAga2VybmVsX2NvbnRleHRfY2xvc2UoY3R4KTsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF90ZXN0Owo+PiBAQCAtNjI2LDE3ICs2MjAsMTMg QEAgc3RhdGljIGludCBpZ3Rfc2hhcmVkX2N0eF9leGVjKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZHcgKz0gcmVtOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiAt wqDCoMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIGk5MTVfZ2VtX2RyYWluX2ZyZWVkX29iamVjdHMoaTkxNSk7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4g wqDCoMKgwqDCoCB9Cj4+IMKgIG91dF90ZXN0Ogo+PiDCoMKgwqDCoMKgIHRocm90dGxlX3JlbGVh c2UodHEsIEFSUkFZX1NJWkUodHEpKTsKPj4gwqDCoMKgwqDCoCBpZiAoaWd0X2xpdmVfdGVzdF9l bmQoJnQpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gLUVJTzsKPj4gLW91dF91bmxvY2s6 Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gLQo+ PiArb3V0X2ZpbGU6Cj4+IMKgwqDCoMKgwqAgbW9ja19maWxlX2ZyZWUoaTkxNSwgZmlsZSk7Cj4+ IMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPj4gwqAgfQo+PiBAQCAtMTAwOCw4ICs5OTgsNiBAQCBf X2lndF9jdHhfc3NldShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4gwqDCoMKgwqDC oCBpZiAoZmxhZ3MgJiBURVNUX1JFU0VUKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2dsb2Jh bF9yZXNldF9sb2NrKCZpOTE1LT5ndCk7Cj4+IC3CoMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7Cj4+IC0KPj4gwqDCoMKgwqDCoCBjdHggPSBsaXZlX2NvbnRleHQoaTkx NSwgZmlsZSk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihjdHgpKSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCByZXQgPSBQVFJfRVJSKGN0eCk7Cj4+IEBAIC0xMDY0LDggKzEwNTIsNiBAQCBfX2ln dF9jdHhfc3NldShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4gwqDCoMKgwqDCoCBp OTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4+IMKgIG91dF91bmxvY2s6Cj4+IC3CoMKgwqAgbXV0 ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gLQo+PiDCoMKgwqDCoMKgIGlm IChmbGFncyAmIFRFU1RfUkVTRVQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfZ2xvYmFsX3Jl c2V0X3VubG9jaygmaTkxNS0+Z3QpOwo+PiBAQCAtMTEyNSwyMyArMTExMSwyNCBAQCBzdGF0aWMg aW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIo ZmlsZSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihmaWxlKTsKPj4gLcKg wqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gLQo+PiDCoMKgwqDC oMKgIGVyciA9IGlndF9saXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUsIF9fZnVuY19fLCAiIik7Cj4+ IMKgwqDCoMKgwqAgaWYgKGVycikKPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X3VubG9jazsK Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZpbGU7Cj4+IMKgwqDCoMKgwqAgY3R4ID0gbGl2 ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3R4KSkgewo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUihjdHgpOwo+PiAtwqDCoMKgwqDCoMKg wqAgZ290byBvdXRfdW5sb2NrOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4g wqDCoMKgwqDCoCB9Cj4+IC3CoMKgwqAgdm0gPSBjdHgtPnZtID86ICZpOTE1LT5nZ3R0LmFsaWFz LT52bTsKPj4gK8KgwqDCoCByY3VfcmVhZF9sb2NrKCk7Cj4+ICvCoMKgwqAgdm0gPSByY3VfZGVy ZWZlcmVuY2UoY3R4LT52bSkgPzogJmk5MTUtPmdndHQuYWxpYXMtPnZtOwo+PiDCoMKgwqDCoMKg IGlmICghdm0gfHwgIXZtLT5oYXNfcmVhZF9vbmx5KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCByY3Vf cmVhZF91bmxvY2soKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IDA7Cj4+IC3CoMKgwqDC oMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9maWxl Owo+PiDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCByY3VfcmVhZF91bmxvY2soKTsKPj4gwqDCoMKg wqDCoCBuZHdvcmRzID0gMDsKPj4gwqDCoMKgwqDCoCBkdyA9IDA7Cj4+IEBAIC0xMTU5LDcgKzEx NDYsNyBAQCBzdGF0aWMgaW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIob2JqKSkgewo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUihvYmopOwo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9nZW1fY29u dGV4dF91bmxvY2tfZW5naW5lcyhjdHgpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBvdXRfdW5sb2NrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBy YW5kb21fdTMyX3N0YXRlKCZwcm5nKSAmIDEpCj4+IEBAIC0xMTcwLDE1ICsxMTU3LDE3IEBAIHN0 YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICphcmcpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChlcnIpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwcl9lcnIoIkZhaWxlZCB0byBmaWxsIGR3b3JkICVsdSBbJWx1LyVsdV0gd2l0aCBncHUgCj4+ ICglcykgW2Z1bGwtcHBndHQ/ICVzXSwgZXJyPSVkXG4iLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmR3b3JkcywgZHcsIG1heF9kd29yZHMob2Jq KSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNlLT5l bmdpbmUtPm5hbWUsIHllc25vKCEhY3R4LT52bSksIGVycik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjZS0+ZW5naW5lLT5uYW1lLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeWVzbm8oISFyY3VfYWNjZXNz X3BvaW50ZXIoY3R4LT52bSkpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZXJyKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp OTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byBvdXRfdW5sb2NrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gb3V0X2ZpbGU7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gdGhyb3R0bGUoY2UsIHRxLCBBUlJB WV9TSVpFKHRxKSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChlcnIpIHsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3VubG9j a19lbmdpbmVzKGN0eCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBv dXRfdW5sb2NrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2Zp bGU7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKCsrZHcgPT0gbWF4X2R3b3JkcyhvYmopKSB7Cj4+IEBAIC0xMjEwLDExICsx MTk5LDEwIEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICphcmcpCj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBkdyArPSByZW07Cj4+IMKgwqDCoMKgwqAgfQo+PiAtb3V0X3VubG9jazoK Pj4gK291dF9maWxlOgo+PiDCoMKgwqDCoMKgIHRocm90dGxlX3JlbGVhc2UodHEsIEFSUkFZX1NJ WkUodHEpKTsKPj4gwqDCoMKgwqDCoCBpZiAoaWd0X2xpdmVfdGVzdF9lbmQoJnQpKQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgZXJyID0gLUVJTzsKPj4gLcKgwqDCoCBtdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIG1vY2tfZmlsZV9mcmVlKGk5MTUsIGZp bGUpOwo+PiDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4+IEBAIC0xMjIzLDcgKzEyMTEsNyBAQCBz dGF0aWMgaW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+PiDCoCBzdGF0aWMgaW50IGNo ZWNrX3NjcmF0Y2goc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgdTY0IG9mZnNldCkKPj4g wqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSA9Cj4+IC3CoMKgwqDC oMKgwqDCoCBfX2RybV9tbV9pbnRlcnZhbF9maXJzdCgmY3R4LT52bS0+bW0sCj4+ICvCoMKgwqDC oMKgwqDCoCBfX2RybV9tbV9pbnRlcnZhbF9maXJzdCgmcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3Rl ZChjdHgtPnZtLCAKPj4gdHJ1ZSktPm1tLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgb2Zmc2V0LCBvZmZzZXQgKyBzaXplb2YodTMyKSAtIDEpOwo+PiDCoMKg wqDCoMKgIGlmICghbm9kZSB8fCBub2RlLT5zdGFydCA+IG9mZnNldCkKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiAwOwo+PiBAQCAtMTI3Myw3ICsxMjYxLDkgQEAgc3RhdGljIGludCB3cml0 ZV90b19zY3JhdGNoKHN0cnVjdCAKPj4gaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+PiDCoMKgwqDC oMKgIGludGVsX2d0X2NoaXBzZXRfZmx1c2goZW5naW5lLT5ndCk7Cj4+IC3CoMKgwqAgdm1hID0g aTkxNV92bWFfaW5zdGFuY2Uob2JqLCBjdHgtPnZtLCBOVUxMKTsKPj4gK8KgwqDCoCB2bWEgPSBp OTE1X3ZtYV9pbnN0YW5jZShvYmosCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtPnZtLCB0cnVlKSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMKTsKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHZtYSkp IHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IFBUUl9FUlIodm1hKTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gZXJyOwo+PiBAQCAtMTM3Miw3ICsxMzYyLDkgQEAgc3RhdGljIGludCBy ZWFkX2Zyb21fc2NyYXRjaChzdHJ1Y3QgCj4+IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4gwqDC oMKgwqDCoCBpbnRlbF9ndF9jaGlwc2V0X2ZsdXNoKGVuZ2luZS0+Z3QpOwo+PiAtwqDCoMKgIHZt YSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgY3R4LT52bSwgTlVMTCk7Cj4+ICvCoMKgwqAgdm1h ID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1ZSksCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVMTCk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUih2 bWEpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKHZtYSk7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIGVycjsKPj4gQEAgLTE0NjMsMjcgKzE0NTUsMjUgQEAgc3RhdGlj IGludCBpZ3Rfdm1faXNvbGF0aW9uKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJS KGZpbGUpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4+IC3C oMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IC0KPj4gwqDCoMKg wqDCoCBlcnIgPSBpZ3RfbGl2ZV90ZXN0X2JlZ2luKCZ0LCBpOTE1LCBfX2Z1bmNfXywgIiIpOwo+ PiDCoMKgwqDCoMKgIGlmIChlcnIpCj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9maWxlOwo+PiDCoMKgwqDCoMKgIGN0eF9hID0g bGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3R4X2Ep KSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKGN0eF9hKTsKPj4gLcKgwqDC oMKgwqDCoMKgIGdvdG8gb3V0X3VubG9jazsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2Zp bGU7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIGN0eF9iID0gbGl2ZV9jb250ZXh0KGk5 MTUsIGZpbGUpOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3R4X2IpKSB7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKGN0eF9iKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8g b3V0X3VubG9jazsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZpbGU7Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoMKgwqDCoMKgIC8qIFdlIGNhbiBvbmx5IHRlc3Qgdm0gaXNvbGF0aW9uLCBpZiB0 aGUgdm0gYXJlIGRpc3RpbmN0ICovCj4+IMKgwqDCoMKgwqAgaWYgKGN0eF9hLT52bSA9PSBjdHhf Yi0+dm0pCj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKg wqDCoCBnb3RvIG91dF9maWxlOwo+PiDCoMKgwqDCoMKgIHZtX3RvdGFsID0gY3R4X2EtPnZtLT50 b3RhbDsKPj4gwqDCoMKgwqDCoCBHRU1fQlVHX09OKGN0eF9iLT52bS0+dG90YWwgIT0gdm1fdG90 YWwpOwo+PiBAQCAtMTUxMiw3ICsxNTAyLDcgQEAgc3RhdGljIGludCBpZ3Rfdm1faXNvbGF0aW9u KHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBy ZWFkX2Zyb21fc2NyYXRjaChjdHhfYiwgZW5naW5lLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mZnNldCwgJnZhbHVlKTsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGVycikKPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHZhbHVlKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIl czogUmVhZCAlMDh4IGZyb20gc2NyYXRjaCAob2Zmc2V0IAo+PiAweCUwOHhfJTA4eCksIGFmdGVy ICVsdSByZWFkcyFcbiIsCj4+IEBAIC0xNTIxLDcgKzE1MTEsNyBAQCBzdGF0aWMgaW50IGlndF92 bV9pc29sYXRpb24odm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbG93ZXJfMzJfYml0cyhvZmZzZXQpLAo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGhpcyk7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gLUVJTlZBTDsKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bmxvY2s7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBvdXRfZmlsZTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aGlzKys7Cj4+IEBAIC0xNTMxLDExICsx NTIxLDkgQEAgc3RhdGljIGludCBpZ3Rfdm1faXNvbGF0aW9uKHZvaWQgKmFyZykKPj4gwqDCoMKg wqDCoCBwcl9pbmZvKCJDaGVja2VkICVsdSBzY3JhdGNoIG9mZnNldHMgYWNyb3NzICVkIGVuZ2lu ZXNcbiIsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBjb3VudCwgUlVOVElNRV9JTkZPKGk5MTUpLT5u dW1fZW5naW5lcyk7Cj4+IC1vdXRfdW5sb2NrOgo+PiArb3V0X2ZpbGU6Cj4+IMKgwqDCoMKgwqAg aWYgKGlndF9saXZlX3Rlc3RfZW5kKCZ0KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IC1F SU87Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4g LQo+PiDCoMKgwqDCoMKgIG1vY2tfZmlsZV9mcmVlKGk5MTUsIGZpbGUpOwo+PiDCoMKgwqDCoMKg IHJldHVybiBlcnI7Cj4+IMKgIH0KPj4gQEAgLTE1NjcsMTMgKzE1NTUsOSBAQCBzdGF0aWMgaW50 IG1vY2tfY29udGV4dF9iYXJyaWVyKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKgICogYSByZXF1 ZXN0OyB1c2VmdWwgZm9yIHJldGlyaW5nIG9sZCBzdGF0ZSBhZnRlciBsb2FkaW5nIG5ldy4KPj4g wqDCoMKgwqDCoMKgICovCj4+IC3CoMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4+IC0KPj4gwqDCoMKgwqDCoCBjdHggPSBtb2NrX2NvbnRleHQoaTkxNSwgIm1vY2si KTsKPj4gLcKgwqDCoCBpZiAoIWN0eCkgewo+PiAtwqDCoMKgwqDCoMKgwqAgZXJyID0gLUVOT01F TTsKPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gdW5sb2NrOwo+PiAtwqDCoMKgIH0KPj4gK8KgwqDC oCBpZiAoIWN0eCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiDCoMKgwqDC oMKgIGNvdW50ZXIgPSAwOwo+PiDCoMKgwqDCoMKgIGVyciA9IGNvbnRleHRfYmFycmllcl90YXNr KGN0eCwgMCwKPj4gQEAgLTE2NDYsOCArMTYzMCw2IEBAIHN0YXRpYyBpbnQgbW9ja19jb250ZXh0 X2JhcnJpZXIodm9pZCAqYXJnKQo+PiDCoCBvdXQ6Cj4+IMKgwqDCoMKgwqAgbW9ja19jb250ZXh0 X2Nsb3NlKGN0eCk7Cj4+IC11bmxvY2s6Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+PiDCoCAjdW5kZWYg cHJfZm10Cj4+IMKgICNkZWZpbmUgcHJfZm10KHgpIHgKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMgCj4+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+PiBpbmRleCBlYmM0NmYw OTg1NjEuLjZlZjg2ZTc5MjNhNyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vc2VsZnRlc3RzL21vY2tfY29udGV4dC5jCj4+IEBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQg bW9ja19jb250ZXh0X2Nsb3NlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+IMKgIHZv aWQgbW9ja19pbml0X2NvbnRleHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+PiDC oCB7Cj4+IC3CoMKgwqAgaW5pdF9jb250ZXh0cyhpOTE1KTsKPj4gK8KgwqDCoCBpbml0X2NvbnRl eHRzKCZpOTE1LT5nZW0uY29udGV4dHMpOwo+PiDCoCB9Cj4+IMKgIHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICoKPj4gQEAgLTc2LDggKzc2LDYgQEAgbGl2ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgCj4+IGRybV9maWxlICpmaWxlKQo+PiDCoMKgwqDCoMKg IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4+IMKgwqDCoMKgwqAgaW50IGVycjsKPj4g LcKgwqDCoCBsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4g LQo+PiDCoMKgwqDCoMKgIGN0eCA9IGk5MTVfZ2VtX2NyZWF0ZV9jb250ZXh0KGk5MTUsIDApOwo+ PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoY3R4KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biBjdHg7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250 ZXh0LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5jCj4+IGlu ZGV4IDM1YTQwYzI4MjBhMi4uMTA3ZWIwM2Q2ZGQ0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfY29udGV4dC5jCj4+IEBAIC0yMjYsNyArMjI2LDEzIEBAIGludGVsX2NvbnRl eHRfaW5pdChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4+IMKgwqDCoMKgwqAga3JlZl9pbml0 KCZjZS0+cmVmKTsKPj4gwqDCoMKgwqDCoCBjZS0+Z2VtX2NvbnRleHQgPSBjdHg7Cj4+IC3CoMKg wqAgY2UtPnZtID0gaTkxNV92bV9nZXQoY3R4LT52bSA/OiAmZW5naW5lLT5ndC0+Z2d0dC0+dm0p Owo+PiArwqDCoMKgIHJjdV9yZWFkX2xvY2soKTsKPj4gK8KgwqDCoCBjZS0+dm0gPSByY3VfZGVy ZWZlcmVuY2UoY3R4LT52bSk7Cj4+ICvCoMKgwqAgaWYgKGNlLT52bSAmJiAha3JlZl9nZXRfdW5s ZXNzX3plcm8oJmNlLT52bS0+cmVmKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGNlLT52bSA9IE5VTEw7 Cj4+ICvCoMKgwqAgaWYgKCFjZS0+dm0pCj4+ICvCoMKgwqDCoMKgwqDCoCBjZS0+dm0gPSBpOTE1 X3ZtX2dldCgmZW5naW5lLT5ndC0+Z2d0dC0+dm0pOwo+PiArwqDCoMKgIHJjdV9yZWFkX3VubG9j aygpOwo+PiDCoMKgwqDCoMKgIGlmIChjdHgtPnRpbWVsaW5lKQo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgY2UtPnRpbWVsaW5lID0gaW50ZWxfdGltZWxpbmVfZ2V0KGN0eC0+dGltZWxpbmUpOwo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfY29udGV4dC5jIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2NvbnRleHQuYwo+PiBpbmRleCA4 NmNmZmJiMGE5Y2IuLjdjODM4YTU3ZTE3NCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfY29udGV4dC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X2NvbnRleHQuYwo+PiBAQCAtMTU1LDEzICsxNTUsOSBAQCBzdGF0aWMgaW50 IGxpdmVfY29udGV4dF9zaXplKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKgICogSFcgdHJpZXMg dG8gd3JpdGUgcGFzdCB0aGUgZW5kIG9mIG9uZS4KPj4gwqDCoMKgwqDCoMKgICovCj4+IC3CoMKg wqAgbXV0ZXhfbG9jaygmZ3QtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiAtCj4+IMKgwqDC oMKgwqAgZml4bWUgPSBrZXJuZWxfY29udGV4dChndC0+aTkxNSk7Cj4+IC3CoMKgwqAgaWYgKElT X0VSUihmaXhtZSkpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGVyciA9IFBUUl9FUlIoZml4bWUpOwo+ PiAtwqDCoMKgwqDCoMKgwqAgZ290byB1bmxvY2s7Cj4+IC3CoMKgwqAgfQo+PiArwqDCoMKgIGlm IChJU19FUlIoZml4bWUpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZml4bWUp Owo+PiDCoMKgwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LT5pOTE1LCBpZCkgewo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHsKPj4gQEAgLTIwMSw4ICsxOTcsNiBAQCBzdGF0 aWMgaW50IGxpdmVfY29udGV4dF9zaXplKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCB9Cj4+IMKg wqDCoMKgwqAga2VybmVsX2NvbnRleHRfY2xvc2UoZml4bWUpOwo+PiAtdW5sb2NrOgo+PiAtwqDC oMKgIG11dGV4X3VubG9jaygmZ3QtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDC oMKgIHJldHVybiBlcnI7Cj4+IMKgIH0KPj4gQEAgLTMwNSwxMiArMjk5LDEwIEBAIHN0YXRpYyBp bnQgbGl2ZV9hY3RpdmVfY29udGV4dCh2b2lkICphcmcpCj4+IMKgwqDCoMKgwqAgaWYgKElTX0VS UihmaWxlKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGZpbGUpOwo+PiAt wqDCoMKgIG11dGV4X2xvY2soJmd0LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gLQo+PiDC oMKgwqDCoMKgIGZpeG1lID0gbGl2ZV9jb250ZXh0KGd0LT5pOTE1LCBmaWxlKTsKPj4gwqDCoMKg wqDCoCBpZiAoSVNfRVJSKGZpeG1lKSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRS X0VSUihmaXhtZSk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIHVubG9jazsKPj4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gb3V0X2ZpbGU7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIGZvcl9l YWNoX2VuZ2luZShlbmdpbmUsIGd0LT5pOTE1LCBpZCkgewo+PiBAQCAtMzIzLDggKzMxNSw3IEBA IHN0YXRpYyBpbnQgbGl2ZV9hY3RpdmVfY29udGV4dCh2b2lkICphcmcpCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiDCoMKgwqDCoMKgIH0KPj4gLXVubG9jazoKPj4gLcKg wqDCoCBtdXRleF91bmxvY2soJmd0LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gK291dF9m aWxlOgo+PiDCoMKgwqDCoMKgIG1vY2tfZmlsZV9mcmVlKGd0LT5pOTE1LCBmaWxlKTsKPj4gwqDC oMKgwqDCoCByZXR1cm4gZXJyOwo+PiDCoCB9Cj4+IEBAIC00MTgsMTIgKzQwOSwxMCBAQCBzdGF0 aWMgaW50IGxpdmVfcmVtb3RlX2NvbnRleHQodm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgIGlmIChJ U19FUlIoZmlsZSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihmaWxlKTsK Pj4gLcKgwqDCoCBtdXRleF9sb2NrKCZndC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IC0K Pj4gwqDCoMKgwqDCoCBmaXhtZSA9IGxpdmVfY29udGV4dChndC0+aTkxNSwgZmlsZSk7Cj4+IMKg wqDCoMKgwqAgaWYgKElTX0VSUihmaXhtZSkpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9 IFBUUl9FUlIoZml4bWUpOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byB1bmxvY2s7Cj4+ICvCoMKg wqDCoMKgwqDCoCBnb3RvIG91dF9maWxlOwo+PiDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCBm b3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndC0+aTkxNSwgaWQpIHsKPj4gQEAgLTQzNiw4ICs0MjUs NyBAQCBzdGF0aWMgaW50IGxpdmVfcmVtb3RlX2NvbnRleHQodm9pZCAqYXJnKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKgwqDCoCB9Cj4+IC11bmxvY2s6Cj4+ IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZndC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+ICtv dXRfZmlsZToKPj4gwqDCoMKgwqDCoCBtb2NrX2ZpbGVfZnJlZShndC0+aTkxNSwgZmlsZSk7Cj4+ IMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPj4gwqAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMKPj4gaW5kZXggZjJiNWFiMWU1YTJlLi4xYjgz NmZmMGE3NTYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0 X2hhbmdjaGVjay5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hh bmdjaGVjay5jCj4+IEBAIC01OCw5ICs1OCw3IEBAIHN0YXRpYyBpbnQgaGFuZ19pbml0KHN0cnVj dCBoYW5nICpoLCBzdHJ1Y3QgaW50ZWxfZ3QgCj4+ICpndCkKPj4gwqDCoMKgwqDCoCBtZW1zZXQo aCwgMCwgc2l6ZW9mKCpoKSk7Cj4+IMKgwqDCoMKgwqAgaC0+Z3QgPSBndDsKPj4gLcKgwqDCoCBt dXRleF9sb2NrKCZndC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgaC0+ Y3R4ID0ga2VybmVsX2NvbnRleHQoZ3QtPmk5MTUpOwo+PiAtwqDCoMKgIG11dGV4X3VubG9jaygm Z3QtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoaC0+ Y3R4KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGgtPmN0eCk7Cj4+IEBA IC0xMzMsNyArMTMxLDggQEAgc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+PiDCoCBoYW5n X2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoYW5nICpoLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gaC0+Z3Q7 Cj4+IC3CoMKgwqAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSBoLT5jdHgtPnZtID86 ICZlbmdpbmUtPmd0LT5nZ3R0LT52bTsKPj4gK8KgwqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSA9Cj4+ICvCoMKgwqDCoMKgwqDCoCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGgt PmN0eC0+dm0sIHRydWUpID86IAo+PiAmZW5naW5lLT5ndC0+Z2d0dC0+dm07Cj4+IMKgwqDCoMKg wqAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSA9IE5VTEw7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfdm1hICpo d3MsICp2bWE7Cj4+IEBAIC0zODIsOSArMzgxLDcgQEAgc3RhdGljIGludCBpZ3RfcmVzZXRfbm9w KHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGZpbGUpKQo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4+IC3CoMKgwqAgbXV0ZXhfbG9jaygmZ3Qt Pmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIGN0eCA9IGxpdmVfY29udGV4 dChndC0+aTkxNSwgZmlsZSk7Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZndC0+aTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihjdHgpKSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKGN0eCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIG91dDsKPj4gQEAgLTQ1OCw5ICs0NTUsNyBAQCBzdGF0aWMgaW50IGlndF9yZXNldF9ub3Bf ZW5naW5lKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGZpbGUpKQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4+IC3CoMKgwqAgbXV0ZXhfbG9j aygmZ3QtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIGN0eCA9IGxpdmVf Y29udGV4dChndC0+aTkxNSwgZmlsZSk7Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZndC0+aTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihjdHgpKSB7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKGN0eCk7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBnb3RvIG91dDsKPj4gQEAgLTcwNSw5ICs3MDAsNyBAQCBzdGF0aWMgaW50IGFjdGl2ZV9l bmdpbmUodm9pZCAqZGF0YSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGZp bGUpOwo+PiDCoMKgwqDCoMKgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IEFSUkFZX1NJWkUoY3R4 KTsgY291bnQrKykgewo+PiAtwqDCoMKgwqDCoMKgwqAgbXV0ZXhfbG9jaygmZW5naW5lLT5pOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGN0eFtjb3VudF0gPSBs aXZlX2NvbnRleHQoZW5naW5lLT5pOTE1LCBmaWxlKTsKPj4gLcKgwqDCoMKgwqDCoMKgIG11dGV4 X3VubG9jaygmZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChJU19FUlIoY3R4W2NvdW50XSkpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZXJyID0gUFRSX0VSUihjdHhbY291bnRdKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgd2hpbGUgKC0tY291bnQpCj4+IEBAIC0xMjk4LDE4ICsxMjkxLDE4IEBAIHN0YXRpYyBp bnQgaWd0X3Jlc2V0X2V2aWN0X3BwZ3R0KHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCBpZiAoSVNf RVJSKGZpbGUpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4+ IC3CoMKgwqAgbXV0ZXhfbG9jaygmZ3QtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKg wqDCoMKgIGN0eCA9IGxpdmVfY29udGV4dChndC0+aTkxNSwgZmlsZSk7Cj4+IC3CoMKgwqAgbXV0 ZXhfdW5sb2NrKCZndC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgaWYg KElTX0VSUihjdHgpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKGN0eCk7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDC oMKgwqAgZXJyID0gMDsKPj4gLcKgwqDCoCBpZiAoY3R4LT52bSkgLyogYWxpYXNpbmcgPT0gZ2xv YmFsIGd0dCBsb2NraW5nLCBjb3ZlcmVkIGFib3ZlICovCj4+IC3CoMKgwqDCoMKgwqDCoCBlcnIg PSBfX2lndF9yZXNldF9ldmljdF92bWEoZ3QsIGN0eC0+dm0sCj4+ICvCoMKgwqAgaWYgKHJjdV9h Y2Nlc3NfcG9pbnRlcihjdHgtPnZtKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgLyogYWxpYXNpbmcg PT0gZ2xvYmFsIGd0dCBsb2NraW5nLCBjb3ZlcmVkIGFib3ZlICovCj4+ICvCoMKgwqDCoMKgwqDC oCBlcnIgPSBfX2lndF9yZXNldF9ldmljdF92bWEoZ3QsIAo+PiByY3VfZGVyZWZlcmVuY2VfcHJv dGVjdGVkKGN0eC0+dm0sIHRydWUpLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBldmljdF92bWEsIEVYRUNfT0JKRUNUX1dSSVRFKTsKPj4gK8Kg wqDCoCB9Cj4+IMKgIG91dDoKPj4gwqDCoMKgwqDCoCBtb2NrX2ZpbGVfZnJlZShndC0+aTkxNSwg ZmlsZSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9s cmMuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYwo+PiBpbmRl eCAzMzAwYWNkOTE5OWQuLmUzM2MyZjY2YzY4MyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3RfbHJjLmMKPj4gQEAgLTE0NTMsNyArMTQ1Myw5IEBAIHN0YXRpYyBpbnQgc21v a2Vfc3VibWl0KHN0cnVjdCBwcmVlbXB0X3Ntb2tlIAo+PiAqc21va2UsCj4+IMKgwqDCoMKgwqAg aW50IGVyciA9IDA7Cj4+IMKgwqDCoMKgwqAgaWYgKGJhdGNoKSB7Cj4+IC3CoMKgwqDCoMKgwqDC oCB2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShiYXRjaCwgY3R4LT52bSwgTlVMTCk7Cj4+ICvCoMKg wqDCoMKgwqDCoCB2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShiYXRjaCwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4 LT52bSwgdHJ1ZSksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBO VUxMKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIodm1hKSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIodm1hKTsKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMgCj4+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+PiBpbmRleCAwNjM1MWZl ZmJiZjMuLmVkNDQzMzNkOWUyMCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9zZWxmdGVzdF93b3JrYXJvdW5kcy5jCj4+IEBAIC0zMyw2ICszMyw4IEBAIHN0cnVjdCB3YV9s aXN0cyB7Cj4+IMKgwqDCoMKgwqAgfSBlbmdpbmVbSTkxNV9OVU1fRU5HSU5FU107Cj4+IMKgIH07 Cj4+ICsjZGVmaW5lIGN0eF92bShjdHgpIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKGN0eCkt PnZtLCB0cnVlKQo+PiArCj4+IMKgIHN0YXRpYyB2b2lkCj4+IMKgIHJlZmVyZW5jZV9saXN0c19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3Qgd2FfbGlzdHMgCj4+ICps aXN0cykKPj4gwqAgewo+PiBAQCAtMzYyLDcgKzM2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV92 bWEgKmNyZWF0ZV9iYXRjaChzdHJ1Y3QgCj4+IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPj4gwqDC oMKgwqDCoCBpZiAoSVNfRVJSKG9iaikpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJS X0NBU1Qob2JqKTsKPj4gLcKgwqDCoCB2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIGN0eC0+ dm0sIE5VTEwpOwo+PiArwqDCoMKgIHZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgY3R4X3Zt KGN0eCksIE5VTEwpOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIodm1hKSkgewo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUih2bWEpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290 byBlcnJfb2JqOwo+PiBAQCAtNDY4LDcgKzQ3MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZGlydHlf d2hpdGVsaXN0KHN0cnVjdCAKPj4gaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+PiDCoMKgwqDCoMKg IGludCBlcnIgPSAwLCBpLCB2Owo+PiDCoMKgwqDCoMKgIHUzMiAqY3MsICpyZXN1bHRzOwo+PiAt wqDCoMKgIHNjcmF0Y2ggPSBjcmVhdGVfc2NyYXRjaChjdHgtPnZtLCAyICogQVJSQVlfU0laRSh2 YWx1ZXMpICsgMSk7Cj4+ICvCoMKgwqAgc2NyYXRjaCA9IGNyZWF0ZV9zY3JhdGNoKGN0eF92bShj dHgpLCAyICogQVJSQVlfU0laRSh2YWx1ZXMpICsgMSk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VS UihzY3JhdGNoKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKHNjcmF0Y2gp Owo+PiBAQCAtMTAxOCwxNCArMTAyMCwxNCBAQCBzdGF0aWMgaW50IGxpdmVfaXNvbGF0ZWRfd2hp dGVsaXN0KHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnI7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IC3CoMKgwqDCoMKgwqDCoCBjbGllbnRbaV0uc2Ny YXRjaFswXSA9IGNyZWF0ZV9zY3JhdGNoKGMtPnZtLCAxMDI0KTsKPj4gK8KgwqDCoMKgwqDCoMKg IGNsaWVudFtpXS5zY3JhdGNoWzBdID0gY3JlYXRlX3NjcmF0Y2goY3R4X3ZtKGMpLCAxMDI0KTsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIoY2xpZW50W2ldLnNjcmF0Y2hbMF0pKSB7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IFBUUl9FUlIoY2xpZW50W2ldLnNj cmF0Y2hbMF0pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrZXJuZWxfY29udGV4dF9j bG9zZShjKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnI7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCB9Cj4+IC3CoMKgwqDCoMKgwqDCoCBjbGllbnRbaV0uc2NyYXRjaFsxXSA9 IGNyZWF0ZV9zY3JhdGNoKGMtPnZtLCAxMDI0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGNsaWVudFtp XS5zY3JhdGNoWzFdID0gY3JlYXRlX3NjcmF0Y2goY3R4X3ZtKGMpLCAxMDI0KTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChJU19FUlIoY2xpZW50W2ldLnNjcmF0Y2hbMV0pKSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IFBUUl9FUlIoY2xpZW50W2ldLnNjcmF0Y2hbMV0p Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFz ZSgmY2xpZW50W2ldLnNjcmF0Y2hbMF0sIDApOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9z Y2hlZHVsZXIuYwo+PiBpbmRleCAwM2Y1NjcwODQ1NDguLmNlNWNmZjAxZjQ0YyAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYwo+PiBAQCAtMzY1LDcgKzM2NSw4IEBAIHN0 YXRpYyB2b2lkIHNldF9jb250ZXh0X3BwZ3R0X2Zyb21fc2hhZG93KHN0cnVjdCAKPj4gaW50ZWxf dmdwdV93b3JrbG9hZCAqd29ya2xvYWQsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPj4gwqAgewo+ PiDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF92Z3B1X21tICptbSA9IHdvcmtsb2FkLT5zaGFkb3df bW07Cj4+IC3CoMKgwqAgc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0ID0gaTkxNV92bV90b19wcGd0 dChjdHgtPnZtKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPQo+PiArwqDC oMKgwqDCoMKgwqAgaTkxNV92bV90b19wcGd0dChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0 eC0+dm0sIHRydWUpKTsKPj4gwqDCoMKgwqDCoCBpbnQgaSA9IDA7Cj4+IMKgwqDCoMKgwqAgaWYg KG1tLT5wcGd0dF9tbS5yb290X2VudHJ5X3R5cGUgPT0gR1RUX1RZUEVfUFBHVFRfUk9PVF9MNF9F TlRSWSkgewo+PiBAQCAtMTIzMCwyMCArMTIzMSwxOCBAQCBpbnQgaW50ZWxfdmdwdV9zZXR1cF9z dWJtaXNzaW9uKHN0cnVjdCAKPj4gaW50ZWxfdmdwdSAqdmdwdSkKPj4gwqDCoMKgwqDCoCBzdHJ1 Y3QgaW50ZWxfdmdwdV9zdWJtaXNzaW9uICpzID0gJnZncHUtPnN1Ym1pc3Npb247Cj4+IMKgwqDC oMKgwqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+PiDCoMKgwqDCoMKgIHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfcHBndHQgKnBw Z3R0Owo+PiDCoMKgwqDCoMKgIGVudW0gaW50ZWxfZW5naW5lX2lkIGk7Cj4+IMKgwqDCoMKgwqAg aW50IHJldDsKPj4gLcKgwqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsK Pj4gLQo+PiDCoMKgwqDCoMKgIGN0eCA9IGk5MTVfZ2VtX2NvbnRleHRfY3JlYXRlX2tlcm5lbChp OTE1LCBJOTE1X1BSSU9SSVRZX01BWCk7Cj4+IC3CoMKgwqAgaWYgKElTX0VSUihjdHgpKSB7Cj4+ IC3CoMKgwqDCoMKgwqDCoCByZXQgPSBQVFJfRVJSKGN0eCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBn b3RvIG91dF91bmxvY2s7Cj4+IC3CoMKgwqAgfQo+PiArwqDCoMKgIGlmIChJU19FUlIoY3R4KSkK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGN0eCk7Cj4+IMKgwqDCoMKgwqAgaTkx NV9nZW1fY29udGV4dF9zZXRfZm9yY2Vfc2luZ2xlX3N1Ym1pc3Npb24oY3R4KTsKPj4gLcKgwqDC oCBpOTE1X2NvbnRleHRfcHBndHRfcm9vdF9zYXZlKHMsIGk5MTVfdm1fdG9fcHBndHQoY3R4LT52 bSkpOwo+PiArwqDCoMKgIHBwZ3R0ID0gaTkxNV92bV90b19wcGd0dChyY3VfZGVyZWZlcmVuY2Vf cHJvdGVjdGVkKGN0eC0+dm0sIHRydWUpKTsKPj4gK8KgwqDCoCBpOTE1X2NvbnRleHRfcHBndHRf cm9vdF9zYXZlKHMsIHBwZ3R0KTsKPj4gwqDCoMKgwqDCoCBmb3JfZWFjaF9lbmdpbmUoZW5naW5l LCBpOTE1LCBpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2U7Cj4+IEBAIC0xMjg5LDExICsxMjg4LDEwIEBAIGludCBpbnRlbF92Z3B1X3NldHVwX3N1Ym1p c3Npb24oc3RydWN0IAo+PiBpbnRlbF92Z3B1ICp2Z3B1KQo+PiDCoMKgwqDCoMKgIGJpdG1hcF96 ZXJvKHMtPnRsYl9oYW5kbGVfcGVuZGluZywgSTkxNV9OVU1fRU5HSU5FUyk7Cj4+IMKgwqDCoMKg wqAgaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPj4gLcKgwqDCoCBtdXRleF91bmxvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCBvdXRf c2hhZG93X2N0eDoKPj4gLcKgwqDCoCBpOTE1X2NvbnRleHRfcHBndHRfcm9vdF9yZXN0b3JlKHMs IGk5MTVfdm1fdG9fcHBndHQoY3R4LT52bSkpOwo+PiArwqDCoMKgIGk5MTVfY29udGV4dF9wcGd0 dF9yb290X3Jlc3RvcmUocywgcHBndHQpOwo+PiDCoMKgwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShl bmdpbmUsIGk5MTUsIGkpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIocy0+c2hh ZG93W2ldKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IEBAIC0xMzAy LDggKzEzMDAsNiBAQCBpbnQgaW50ZWxfdmdwdV9zZXR1cF9zdWJtaXNzaW9uKHN0cnVjdCAKPj4g aW50ZWxfdmdwdSAqdmdwdSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2NvbnRleHRfcHV0 KHMtPnNoYWRvd1tpXSk7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIGk5MTVfZ2VtX2Nv bnRleHRfcHV0KGN0eCk7Cj4+IC1vdXRfdW5sb2NrOgo+PiAtwqDCoMKgIG11dGV4X3VubG9jaygm aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gwqAg fQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gaW5kZXggOGNhYWE0NDY0 OTBmLi5kNGE3Y2RhNjA2NzkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZGVidWdmcy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j Cj4+IEBAIC0zMTUsMTIgKzMxNSwxOCBAQCBzdGF0aWMgdm9pZCBwcmludF9jb250ZXh0X3N0YXRz KHN0cnVjdCBzZXFfZmlsZSAqbSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0 cnVjdCBmaWxlX3N0YXRzIGtzdGF0cyA9IHt9Owo+PiAtwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHg7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgKmNu Owo+PiAtwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCAmaTkxNS0+Y29udGV4dHMubGlz dCwgbGluaykgewo+PiArwqDCoMKgIHNwaW5fbG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2sp Owo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdHgsIGNuLCAmaTkxNS0+Z2Vt LmNvbnRleHRzLmxpc3QsIGxpbmspIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1 X2dlbV9lbmdpbmVzX2l0ZXIgaXQ7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2U7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJv KCZjdHgtPnJlZikpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ PiArCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JfZWFjaF9nZW1fZW5naW5lKGNlLAo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9nZW1fY29udGV4dF9s b2NrX2VuZ2luZXMoY3R4KSwgaXQpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50 ZWxfY29udGV4dF9sb2NrX3Bpbm5lZChjZSk7Cj4+IEBAIC0zMzcsNyArMzQzLDkgQEAgc3RhdGlj IHZvaWQgcHJpbnRfY29udGV4dF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eC0+ZmlsZV9wcml2KSkgewo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZmlsZV9zdGF0cyBzdGF0cyA9IHsgLnZtID0g Y3R4LT52bSwgfTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGZpbGVfc3RhdHMg c3RhdHMgPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnZtID0gcmN1X2Fj Y2Vzc19wb2ludGVyKGN0eC0+dm0pLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Owo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUgPSBjdHgtPmZp bGVfcHJpdi0+ZmlsZTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHRhc2tf c3RydWN0ICp0YXNrOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyIG5hbWVbODBd Owo+PiBAQCAtMzU0LDcgKzM2MiwxMiBAQCBzdGF0aWMgdm9pZCBwcmludF9jb250ZXh0X3N0YXRz KHN0cnVjdCBzZXFfZmlsZSAqbSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbnRf ZmlsZV9zdGF0cyhtLCBuYW1lLCBzdGF0cyk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICsK Pj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ PiArwqDCoMKgwqDCoMKgwqAgbGlzdF9zYWZlX3Jlc2V0X25leHQoY3R4LCBjbiwgbGluayk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3B1dChjdHgpOwo+PiDCoMKgwqDCoMKg IH0KPj4gK8KgwqDCoCBzcGluX3VubG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+PiDC oMKgwqDCoMKgIHByaW50X2ZpbGVfc3RhdHMobSwgIltrXWNvbnRleHRzIiwga3N0YXRzKTsKPj4g wqAgfQo+PiBAQCAtMzYyLDcgKzM3NSw2IEBAIHN0YXRpYyB2b2lkIHByaW50X2NvbnRleHRfc3Rh dHMoc3RydWN0IHNlcV9maWxlICptLAo+PiDCoCBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9p bmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKPj4gwqAgewo+PiDCoMKgwqDCoMKg IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUp Owo+PiAtwqDCoMKgIGludCByZXQ7Cj4+IMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiJXUgc2hy aW5rYWJsZSBbJXUgZnJlZV0gb2JqZWN0cywgJWxsdSBieXRlc1xuIiwKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGk5MTUtPm1tLnNocmlua19jb3VudCwKPj4gQEAgLTM3MSwxMiArMzgzLDcg QEAgc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgCj4+ICpt LCB2b2lkICpkYXRhKQo+PiDCoMKgwqDCoMKgIHNlcV9wdXRjKG0sICdcbicpOwo+PiAtwqDCoMKg IHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4+IC3CoMKgwqAgaWYgKHJldCkKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IC0K Pj4gwqDCoMKgwqDCoCBwcmludF9jb250ZXh0X3N0YXRzKG0sIGk5MTUpOwo+PiAtwqDCoMKgIG11 dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJu IDA7Cj4+IMKgIH0KPj4gQEAgLTE0OTAsMTkgKzE0OTcsMTkgQEAgc3RhdGljIHZvaWQgZGVzY3Jp YmVfY3R4X3Jpbmcoc3RydWN0IHNlcV9maWxlIAo+PiAqbSwgc3RydWN0IGludGVsX3JpbmcgKnJp bmcpCj4+IMKgIHN0YXRpYyBpbnQgaTkxNV9jb250ZXh0X3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKnVudXNlZCkKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPj4gLcKgwqDCoCBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Cj4+IC3CoMKgwqAgc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eDsKPj4gLcKgwqDCoCBpbnQgcmV0Owo+PiAtCj4+IC3CoMKgwqAg cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4+IC3C oMKgwqAgaWYgKHJldCkKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7 Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgKmNuOwo+PiAtwqDCoMKg IGxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCAmZGV2X3ByaXYtPmNvbnRleHRzLmxpc3QsIGxpbmsp IHsKPj4gK8KgwqDCoCBzcGluX2xvY2soJmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gK8Kg wqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3R4LCBjbiwgJmk5MTUtPmdlbS5jb250ZXh0 cy5saXN0LCBsaW5rKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fZW5n aW5lc19pdGVyIGl0Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQg KmNlOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmY3R4LT5y ZWYpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqAgc3Bpbl91bmxvY2soJmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gKwo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgc2VxX3B1dHMobSwgIkhXIGNvbnRleHQgIik7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoY3R4LT5waWQpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwo+PiBAQCAtMTUzNyw5ICsxNTQ0LDEyIEBAIHN0YXRp YyBpbnQgaTkxNV9jb250ZXh0X3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgCj4+ICptLCB2b2lkICp1 bnVzZWQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdp bmVzKGN0eCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHV0YyhtLCAnXG4nKTsKPj4gLcKg wqDCoCB9Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBzcGluX2xvY2soJmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGxpc3Rfc2FmZV9yZXNldF9uZXh0KGN0eCwgY24sIGxpbmspOwo+PiArwqDC oMKgwqDCoMKgwqAgaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPj4gK8KgwqDCoCB9Cj4+ICvC oMKgwqAgc3Bpbl91bmxvY2soJmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gwqDCoMKgwqDC oCByZXR1cm4gMDsKPj4gwqAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+IGluZGV4 IDhjYWM2MTI0ZDE2YS4uYThkZGFjMjJkNjMzIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmMKPj4gQEAgLTE2ODUsMTAgKzE2ODUsOCBAQCBzdGF0aWMgdm9pZCBpOTE1X2RyaXZlcl9wb3N0 Y2xvc2Uoc3RydWN0IAo+PiBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkK Pj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVf cHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+PiAtwqDCoMKgIG11dGV4X2xvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X2Nsb3NlKGZpbGUpOwo+ PiDCoMKgwqDCoMKgIGk5MTVfZ2VtX3JlbGVhc2UoZGV2LCBmaWxlKTsKPj4gLcKgwqDCoCBtdXRl eF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoCBrZnJlZV9yY3UoZmls ZV9wcml2LCByY3UpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+IGluZGV4IGFkN2Vk N2Y3MmRhOC4uMjNmMzExMTcyZTc1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4g QEAgLTE1NDMsMjUgKzE1NDMsNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4+IMKgwqDC oMKgwqAgaW50IGF1ZGlvX3Bvd2VyX3JlZmNvdW50Owo+PiDCoMKgwqDCoMKgIHUzMiBhdWRpb19m cmVxX2NudHJsOwo+PiAtwqDCoMKgIHN0cnVjdCB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg bXV0ZXggbXV0ZXg7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbGxpc3RfaGVhZCBmcmVlX2xpc3Q7Cj4+IC3CoMKgwqDC oMKgwqDCoCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlZV93b3JrOwo+PiAtCj4+IC3CoMKgwqDCoMKg wqDCoCAvKiBUaGUgaHcgd2FudHMgdG8gaGF2ZSBhIHN0YWJsZSBjb250ZXh0IGlkZW50aWZpZXIg Zm9yIHRoZQo+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0IChm b3IgT0EsIFBBU0lELCBmYXVsdHMsIGV0YykuCj4+IC3CoMKgwqDCoMKgwqDCoMKgICogVGhpcyBp cyBsaW1pdGVkIGluIGV4ZWNsaXN0cyB0byAyMSBiaXRzLgo+PiAtwqDCoMKgwqDCoMKgwqDCoCAq Lwo+PiAtwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlkYSBod19pZGE7Cj4+IC0jZGVmaW5lIE1BWF9D T05URVhUX0hXX0lEICgxPDwyMSkgLyogZXhjbHVzaXZlICovCj4+IC0jZGVmaW5lIE1BWF9HVUNf Q09OVEVYVF9IV19JRCAoMSA8PCAyMCkgLyogZXhjbHVzaXZlICovCj4+IC0jZGVmaW5lIEdFTjEx X01BWF9DT05URVhUX0hXX0lEICgxPDwxMSkgLyogZXhjbHVzaXZlICovCj4+IC0vKiBpbiBHZW4x MiBJRCAweDdGRiBpcyByZXNlcnZlZCB0byBpbmRpY2F0ZSBpZGxlICovCj4+IC0jZGVmaW5lIEdF TjEyX01BWF9DT05URVhUX0hXX0lEwqDCoMKgIChHRU4xMV9NQVhfQ09OVEVYVF9IV19JRCAtIDEp Cj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIGh3X2lkX2xpc3Q7Cj4gCj4gVGhl c2UgYml0cy4KPiAKPj4gLcKgwqDCoCB9IGNvbnRleHRzOwo+PiAtCj4+IMKgwqDCoMKgwqAgdTMy IGZkaV9yeF9jb25maWc7Cj4+IMKgwqDCoMKgwqAgLyogU2hhZG93IGZvciBESVNQTEFZX1BIWV9D T05UUk9MIHdoaWNoIGNhbid0IGJlIHNhZmVseSByZWFkICovCj4+IEBAIC0xNzE3LDYgKzE2OTgs MTQgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCB7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbm90aWZpZXI7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0cyB7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5sb2NrX3QgbG9jazsgLyogbG9ja3MgbGlzdCAqLwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxsaXN0X2hlYWQgZnJlZV9saXN0Owo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlZV93b3JrOwo+PiArwqDC oMKgwqDCoMKgwqAgfSBjb250ZXh0czsKPj4gwqDCoMKgwqDCoCB9IGdlbTsKPj4gwqDCoMKgwqDC oCAvKiBGb3IgaTk0NWdtIHZibGFuayBpcnEgdnMuIEMzIHdvcmthcm91bmQgKi8KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgCj4+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwo+PiBpbmRleCA5YzI4Nzc0NDE1NDAuLjg4MTRkYjcwMjNkYiAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+IEBAIC0xMjYzLDcgKzEyNjMsNyBAQCBp bnQgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4gKmRldl9wcml2KQo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfdW5sb2NrOwo+PiDCoMKgwqDCoMKgIH0KPj4g LcKgwqDCoCByZXQgPSBpOTE1X2dlbV9jb250ZXh0c19pbml0KGRldl9wcml2KTsKPj4gK8KgwqDC oCByZXQgPSBpOTE1X2dlbV9pbml0X2NvbnRleHRzKGRldl9wcml2KTsKPj4gwqDCoMKgwqDCoCBp ZiAocmV0KSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09OKHJldCA9PSAtRUlPKTsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX3NjcmF0Y2g7Cj4+IEBAIC0xMzQ1LDcgKzEz NDUsNyBAQCBpbnQgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAKPj4gKmRl dl9wcml2KQo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgZXJyX2NvbnRleHQ6Cj4+IMKgwqDCoMKgwqAg aWYgKHJldCAhPSAtRUlPKQo+PiAtwqDCoMKgwqDCoMKgwqAgaTkxNV9nZW1fY29udGV4dHNfZmlu aShkZXZfcHJpdik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9kcml2ZXJfcmVsZWFzZV9f Y29udGV4dHMoZGV2X3ByaXYpOwo+PiDCoCBlcnJfc2NyYXRjaDoKPj4gwqDCoMKgwqDCoCBpbnRl bF9ndF9kcml2ZXJfcmVsZWFzZSgmZGV2X3ByaXYtPmd0KTsKPj4gwqAgZXJyX3VubG9jazoKPj4g QEAgLTE0MTMsMTEgKzE0MTMsOSBAQCB2b2lkIGk5MTVfZ2VtX2RyaXZlcl9yZW1vdmUoc3RydWN0 IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAgdm9pZCBpOTE1X2dlbV9kcml2 ZXJfcmVsZWFzZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgIHsKPj4g LcKgwqDCoCBtdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDC oMKgwqAgaW50ZWxfZW5naW5lc19jbGVhbnVwKGRldl9wcml2KTsKPj4gLcKgwqDCoCBpOTE1X2dl bV9jb250ZXh0c19maW5pKGRldl9wcml2KTsKPj4gK8KgwqDCoCBpOTE1X2dlbV9kcml2ZXJfcmVs ZWFzZV9fY29udGV4dHMoZGV2X3ByaXYpOwo+PiDCoMKgwqDCoMKgIGludGVsX2d0X2RyaXZlcl9y ZWxlYXNlKCZkZXZfcHJpdi0+Z3QpOwo+PiAtwqDCoMKgIG11dGV4X3VubG9jaygmZGV2X3ByaXYt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIGludGVsX3dhX2xpc3RfZnJlZSgmZGV2 X3ByaXYtPmd0X3dhX2xpc3QpOwo+PiBAQCAtMTQyNyw3ICsxNDI1LDcgQEAgdm9pZCBpOTE1X2dl bV9kcml2ZXJfcmVsZWFzZShzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ PiDCoMKgwqDCoMKgIGk5MTVfZ2VtX2RyYWluX2ZyZWVkX29iamVjdHMoZGV2X3ByaXYpOwo+PiAt wqDCoMKgIFdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5jb250ZXh0cy5saXN0KSk7Cj4+ ICvCoMKgwqAgV0FSTl9PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPmdlbS5jb250ZXh0cy5saXN0 KSk7Cj4+IMKgIH0KPj4gwqAgdm9pZCBpOTE1X2dlbV9pbml0X21taW8oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+PiBp bmRleCAwZDA0MDUxNzc4N2IuLmRiMzJlMGZlNzhiMSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmMKPj4gQEAgLTEzNjYsNyArMTM2Niw5IEBAIHN0YXRpYyBpbnQgZ2VuOF9p bml0X3NjcmF0Y2goc3RydWN0IAo+PiBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+PiDCoMKgwqDC oMKgIGlmICh2bS0+aGFzX3JlYWRfb25seSAmJgo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdm0tPmk5 MTUtPmtlcm5lbF9jb250ZXh0ICYmCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB2bS0+aTkxNS0+a2Vy bmVsX2NvbnRleHQtPnZtKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICpjbG9uZSA9IHZtLT5pOTE1LT5rZXJuZWxfY29udGV4dC0+dm07Cj4+ICvCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICpjbG9uZSA9Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodm0tPmk5MTUtPmtlcm5lbF9j b250ZXh0LT52bSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRydWUpOwo+IAo+IFdoYXQgaXMgdGhlIHByb3RlY3Rpb24gaGVyZT8KPiAKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIEdFTV9CVUdfT04oIWNsb25lLT5oYXNfcmVhZF9vbmx5KTsKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jIAo+PiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4+IGluZGV4IGQzNmJhMjQ4ZDQzOC4uYmZlNmU5 YjZkNzFkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+PiBAQCAtMTg1Myw4ICsx ODUzLDggQEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IAo+ PiBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4+IMKgwqDCoMKgwqAgfTsKPj4gwqAgI3VuZGVm IGN0eF9mbGV4ZXVOCj4+IMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l Owo+PiAtwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4+IC3CoMKgwqAgaW50 IGk7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgKmNuOwo+PiArwqDC oMKgIGludCBpLCBlcnI7Cj4+IMKgwqDCoMKgwqAgZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUo cmVncyk7IGkrKykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJlZ3NbaV0udmFsdWUgPSBvYV9jb25m aWdfZmxleF9yZWcob2FfY29uZmlnLCByZWdzW2ldLnJlZyk7Cj4+IEBAIC0xODc3LDE2ICsxODc3 LDI3IEBAIHN0YXRpYyBpbnQgZ2VuOF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cnVjdCAKPj4g aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+PiDCoMKgwqDCoMKgwqAgKiBjb250ZXh0LiBDb250 ZXh0cyBpZGxlIGF0IHRoZSB0aW1lIG9mIHJlY29uZmlndXJhdGlvbiBhcmUgbm90Cj4+IMKgwqDC oMKgwqDCoCAqIHRyYXBwZWQgYmVoaW5kIHRoZSBiYXJyaWVyLgo+PiDCoMKgwqDCoMKgwqAgKi8K Pj4gLcKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0eCwgJmk5MTUtPmNvbnRleHRzLmxpc3Qs IGxpbmspIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGludCBlcnI7Cj4+IC0KPj4gK8KgwqDCoCBzcGlu X2xvY2soJmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUoY3R4LCBjbiwgJmk5MTUtPmdlbS5jb250ZXh0cy5saXN0LCBsaW5rKSB7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3R4ID09IGk5MTUtPmtlcm5lbF9jb250ZXh0KQo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlm ICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmN0eC0+cmVmKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29udGludWU7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZpOTE1 LT5nZW0uY29udGV4dHMubG9jayk7Cj4+ICsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IGdl bjhfY29uZmlndXJlX2NvbnRleHQoY3R4LCByZWdzLCBBUlJBWV9TSVpFKHJlZ3MpKTsKPj4gLcKg wqDCoMKgwqDCoMKgIGlmIChlcnIpCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZXJyKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGk5MTVfZ2VtX2NvbnRleHRfcHV0KGN0eCk7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2sp Owo+PiArwqDCoMKgwqDCoMKgwqAgbGlzdF9zYWZlX3Jlc2V0X25leHQoY3R4LCBjbiwgbGluayk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3B1dChjdHgpOwo+PiDCoMKgwqDC oMKgIH0KPj4gK8KgwqDCoCBzcGluX3VubG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ PiDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoCAqIEFmdGVyIHVwZGF0aW5nIGFsbCBvdGhl ciBjb250ZXh0cywgd2UgbmVlZCB0byBtb2RpZnkgb3Vyc2VsdmVzLgo+PiBAQCAtMTg5NSw3ICsx OTA2LDYgQEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IAo+ PiBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDC oMKgIGZvcl9lYWNoX3VhYmlfZW5naW5lKGVuZ2luZSwgaTkxNSkgewo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gZW5naW5lLT5rZXJuZWxfY29udGV4dDsK Pj4gLcKgwqDCoMKgwqDCoMKgIGludCBlcnI7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZW5n aW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnRpbnVlOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNm cy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+PiBpbmRleCA2Yjg4 ZDkzNDkyN2EuLjU4NTgwOGMyZWU4NCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zeXNmcy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMu Ywo+PiBAQCAtMTQ0LDkgKzE0NCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dy b3VwIAo+PiBtZWRpYV9yYzZfYXR0cl9ncm91cCA9IHsKPj4gwqAgfTsKPj4gwqAgI2VuZGlmCj4+ IC1zdGF0aWMgaW50IGwzX2FjY2Vzc192YWxpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIGxvZmZfdCAKPj4gb2Zmc2V0KQo+PiArc3RhdGljIGludCBsM19hY2Nlc3NfdmFsaWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGxvZmZfdCBvZmZzZXQpCj4+IMKgIHsKPj4g LcKgwqDCoCBpZiAoIUhBU19MM19EUEYoZGV2X3ByaXYpKQo+PiArwqDCoMKgIGlmICghSEFTX0wz X0RQRihpOTE1KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRVBFUk07Cj4+IMKgwqDC oMKgwqAgaWYgKG9mZnNldCAlIDQgIT0gMCkKPj4gQEAgLTE2NCwzMSArMTY0LDI0IEBAIGk5MTVf bDNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgCj4+ICprb2JqLAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCj4+IMKgIHsK Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICprZGV2ID0ga29ial90b19kZXYoa29iaik7Cj4+ IC3CoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90 b19pOTE1KGtkZXYpOwo+PiAtwqDCoMKgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3By aXYtPmRybTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGtkZXZf bWlub3JfdG9faTkxNShrZGV2KTsKPj4gwqDCoMKgwqDCoCBpbnQgc2xpY2UgPSAoaW50KSh1aW50 cHRyX3QpYXR0ci0+cHJpdmF0ZTsKPj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+PiAtwqDCoMKgIGNv dW50ID0gcm91bmRfZG93bihjb3VudCwgNCk7Cj4+IC0KPj4gLcKgwqDCoCByZXQgPSBsM19hY2Nl c3NfdmFsaWQoZGV2X3ByaXYsIG9mZnNldCk7Cj4+ICvCoMKgwqAgcmV0ID0gbDNfYWNjZXNzX3Zh bGlkKGk5MTUsIG9mZnNldCk7Cj4+IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgY291bnQgPSByb3VuZF9kb3duKGNvdW50LCA0 KTsKPj4gwqDCoMKgwqDCoCBjb3VudCA9IG1pbl90KHNpemVfdCwgR0VON19MM0xPR19TSVpFIC0g b2Zmc2V0LCBjb3VudCk7Cj4+ICvCoMKgwqAgbWVtc2V0KGJ1ZiwgMCwgY291bnQpOwo+PiAtwqDC oMKgIHJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7Cj4+IC3CoMKgwqAg aWYgKHJldCkKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IC0KPj4gLcKgwqDCoCBp ZiAoZGV2X3ByaXYtPmwzX3Bhcml0eS5yZW1hcF9pbmZvW3NsaWNlXSkKPj4gK8KgwqDCoCBzcGlu X2xvY2soJmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPj4gK8KgwqDCoCBpZiAoaTkxNS0+bDNf cGFyaXR5LnJlbWFwX2luZm9bc2xpY2VdKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5KGJ1 ZiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3ByaXYtPmwzX3Bhcml0eS5y ZW1hcF9pbmZvW3NsaWNlXSArIChvZmZzZXQvNCksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGk5MTUtPmwzX3Bhcml0eS5yZW1hcF9pbmZvW3NsaWNlXSArIG9mZnNldCAvIDQsCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvdW50KTsKPj4gLcKgwqDCoCBlbHNl Cj4+IC3CoMKgwqDCoMKgwqDCoCBtZW1zZXQoYnVmLCAwLCBjb3VudCk7Cj4+IC0KPj4gLcKgwqDC oCBtdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPj4gK8KgwqDCoCBzcGluX3VubG9j aygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+PiDCoMKgwqDCoMKgIHJldHVybiBjb3VudDsK Pj4gwqAgfQo+PiBAQCAtMTk5LDQ2ICsxOTIsNDYgQEAgaTkxNV9sM193cml0ZShzdHJ1Y3QgZmls ZSAqZmlscCwgc3RydWN0IGtvYmplY3QgCj4+ICprb2JqLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBjb3VudCkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0 cnVjdCBkZXZpY2UgKmtkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTsKPj4gLcKgwqDCoCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4+ IC3CoMKgwqAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwo+PiArwqDC oMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0ga2Rldl9taW5vcl90b19pOTE1KGtk ZXYpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4+IMKgwqDC oMKgwqAgaW50IHNsaWNlID0gKGludCkodWludHB0cl90KWF0dHItPnByaXZhdGU7Cj4+IC3CoMKg wqAgdTMyICoqcmVtYXBfaW5mbzsKPj4gK8KgwqDCoCB1MzIgKnJlbWFwX2luZm8sICpmcmVlbWUg PSBOVUxMOwo+PiDCoMKgwqDCoMKgIGludCByZXQ7Cj4+IC3CoMKgwqAgcmV0ID0gbDNfYWNjZXNz X3ZhbGlkKGRldl9wcml2LCBvZmZzZXQpOwo+PiArwqDCoMKgIHJldCA9IGwzX2FjY2Vzc192YWxp ZChpOTE1LCBvZmZzZXQpOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gcmV0Owo+PiAtwqDCoMKgIHJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1 cHRpYmxlKGRldik7Cj4+IC3CoMKgwqAgaWYgKHJldCkKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4+ICvCoMKgwqAgcmVtYXBfaW5mbyA9IGt6YWxsb2MoR0VON19MM0xPR19TSVpFLCBH RlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIXJlbWFwX2luZm8pCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVOT01FTTsKPj4gLcKgwqDCoCByZW1hcF9pbmZvID0gJmRldl9wcml2LT5sM19w YXJpdHkucmVtYXBfaW5mb1tzbGljZV07Cj4+IC3CoMKgwqAgaWYgKCEqcmVtYXBfaW5mbykgewo+ PiAtwqDCoMKgwqDCoMKgwqAgKnJlbWFwX2luZm8gPSBremFsbG9jKEdFTjdfTDNMT0dfU0laRSwg R0ZQX0tFUk5FTCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoISpyZW1hcF9pbmZvKSB7Cj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FTk9NRU07Cj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gb3V0Owo+PiAtwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIHNwaW5fbG9j aygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+PiArCj4+ICvCoMKgwqAgaWYgKGk5MTUtPmwz X3Bhcml0eS5yZW1hcF9pbmZvW3NsaWNlXSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZnJlZW1lID0g cmVtYXBfaW5mbzsKPj4gK8KgwqDCoMKgwqDCoMKgIHJlbWFwX2luZm8gPSBpOTE1LT5sM19wYXJp dHkucmVtYXBfaW5mb1tzbGljZV07Cj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGk5MTUtPmwzX3Bhcml0eS5yZW1hcF9pbmZvW3NsaWNlXSA9IHJlbWFwX2luZm87Cj4+IMKg wqDCoMKgwqAgfQo+PiAtwqDCoMKgIC8qIFRPRE86IElkZWFsbHkgd2UgcmVhbGx5IHdhbnQgYSBH UFUgcmVzZXQgaGVyZSB0byBtYWtlIHN1cmUgZXJyb3JzCj4+IC3CoMKgwqDCoCAqIGFyZW4ndCBw cm9wYWdhdGVkLiBTaW5jZSBJIGNhbm5vdCBmaW5kIGEgc3RhYmxlIHdheSB0byByZXNldCAKPj4g dGhlIEdQVQo+PiAtwqDCoMKgwqAgKiBhdCB0aGlzIHBvaW50IGl0IGlzIGxlZnQgYXMgYSBUT0RP Lgo+PiAtwqDCoMKgICovCj4+IC3CoMKgwqAgbWVtY3B5KCpyZW1hcF9pbmZvICsgKG9mZnNldC80 KSwgYnVmLCBjb3VudCk7Cj4+ICvCoMKgwqAgY291bnQgPSByb3VuZF9kb3duKGNvdW50LCA0KTsK PiAKPiBXaGVyZSB3YXMgdGhpcyByb3VuZF9kb3duIGJlZm9yZSwgY2FuJ3Qgc2VlIGl0IQo+IAo+ PiArwqDCoMKgIG1lbWNweShyZW1hcF9pbmZvICsgb2Zmc2V0IC8gNCwgYnVmLCBjb3VudCk7Cj4+ IMKgwqDCoMKgwqAgLyogTkI6IFdlIGRlZmVyIHRoZSByZW1hcHBpbmcgdW50aWwgd2Ugc3dpdGNo IHRvIHRoZSBjb250ZXh0ICovCj4+IC3CoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsICZk ZXZfcHJpdi0+Y29udGV4dHMubGlzdCwgbGluaykKPj4gLcKgwqDCoMKgwqDCoMKgIGN0eC0+cmVt YXBfc2xpY2UgfD0gKDE8PHNsaWNlKTsKPj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0 eCwgJmk5MTUtPmdlbS5jb250ZXh0cy5saXN0LCBsaW5rKQo+PiArwqDCoMKgwqDCoMKgwqAgY3R4 LT5yZW1hcF9zbGljZSB8PSBCSVQoc2xpY2UpOwo+PiAtwqDCoMKgIHJldCA9IGNvdW50Owo+PiAr wqDCoMKgIHNwaW5fdW5sb2NrKCZpOTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4+ICvCoMKgwqAg a2ZyZWUoZnJlZW1lKTsKPj4gLW91dDoKPj4gLcKgwqDCoCBtdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBUT0RPOiBJZGVhbGx5IHdl IHJlYWxseSB3YW50IGEgR1BVIHJlc2V0IGhlcmUgdG8gbWFrZSBzdXJlIGVycm9ycwo+PiArwqDC oMKgwqAgKiBhcmVuJ3QgcHJvcGFnYXRlZC4gU2luY2UgSSBjYW5ub3QgZmluZCBhIHN0YWJsZSB3 YXkgdG8gcmVzZXQgCj4+IHRoZSBHUFUKPj4gK8KgwqDCoMKgICogYXQgdGhpcyBwb2ludCBpdCBp cyBsZWZ0IGFzIGEgVE9ETy4KPj4gK8KgwqDCoMKgICovCj4+IC3CoMKgwqAgcmV0dXJuIHJldDsK Pj4gK8KgwqDCoCByZXR1cm4gY291bnQ7Cj4+IMKgIH0KPj4gwqAgc3RhdGljIGNvbnN0IHN0cnVj dCBiaW5fYXR0cmlidXRlIGRwZl9hdHRycyA9IHsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfdHJhY2UuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Ry YWNlLmgKPj4gaW5kZXggMWYyY2Y2Y2ZhZmI1Li43ZWY3YTFlMTY2NGMgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3RyYWNlLmgKPj4gQEAgLTk1Miw3ICs5NTIsNyBAQCBERUNMQVJFX0VWRU5U X0NMQVNTKGk5MTVfY29udGV4dCwKPj4gwqDCoMKgwqDCoCBUUF9mYXN0X2Fzc2lnbigKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19lbnRyeS0+ZGV2ID0gY3R4LT5pOTE1LT5kcm0ucHJp bWFyeS0+aW5kZXg7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZW50cnktPmN0eCA9 IGN0eDsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19lbnRyeS0+dm0gPSBjdHgtPnZtOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2VudHJ5LT52bSA9IHJjdV9hY2Nlc3NfcG9pbnRl cihjdHgtPnZtKTsKPj4gwqDCoMKgwqDCoCApLAo+PiDCoMKgwqDCoMKgIFRQX3ByaW50aygiZGV2 PSV1LCBjdHg9JXAsIGN0eF92bT0lcCIsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9nZW0uYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaTkxNV9nZW0uYwo+PiBpbmRleCAwMzQ2YzNlNWI2YjYuLmJmYTQwYTViNmQ5OCAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtLmMKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtLmMKPj4gQEAgLTEz OCwxMSArMTM4LDkgQEAgc3RhdGljIGludCBpZ3RfZ2VtX3N1c3BlbmQodm9pZCAqYXJnKQo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4+IMKgwqDCoMKgwqAgZXJy ID0gLUVOT01FTTsKPj4gLcKgwqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPj4gwqDCoMKgwqDCoCBjdHggPSBsaXZlX2NvbnRleHQoaTkxNSwgZmlsZSk7Cj4+IMKgwqDC oMKgwqAgaWYgKCFJU19FUlIoY3R4KSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IHN3aXRj aF90b19jb250ZXh0KGk5MTUsIGN0eCk7Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoCBpZiAoZXJyKQo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBvdXQ7Cj4+IEBAIC0xNTcsOSArMTU1LDcgQEAgc3RhdGljIGludCBpZ3RfZ2Vt X3N1c3BlbmQodm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgIHBtX3Jlc3VtZShpOTE1KTsKPj4gLcKg wqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoCBl cnIgPSBzd2l0Y2hfdG9fY29udGV4dChpOTE1LCBjdHgpOwo+PiAtwqDCoMKgIG11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgIG91dDoKPj4gwqDCoMKgwqDCoCBtb2Nr X2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+PiBAQCAt MTc3LDExICsxNzMsOSBAQCBzdGF0aWMgaW50IGlndF9nZW1faGliZXJuYXRlKHZvaWQgKmFyZykK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGZpbGUpOwo+PiDCoMKgwqDCoMKg IGVyciA9IC1FTk9NRU07Cj4+IC3CoMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4+IMKgwqDCoMKgwqAgY3R4ID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+PiDC oMKgwqDCoMKgIGlmICghSVNfRVJSKGN0eCkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBz d2l0Y2hfdG9fY29udGV4dChpOTE1LCBjdHgpOwo+PiAtwqDCoMKgIG11dGV4X3VubG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgaWYgKGVycikKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gb3V0Owo+PiBAQCAtMTk2LDkgKzE5MCw3IEBAIHN0YXRpYyBpbnQgaWd0 X2dlbV9oaWJlcm5hdGUodm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgIHBtX3Jlc3VtZShpOTE1KTsK Pj4gLcKgwqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKg wqDCoCBlcnIgPSBzd2l0Y2hfdG9fY29udGV4dChpOTE1LCBjdHgpOwo+PiAtwqDCoMKgIG11dGV4 X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgIG91dDoKPj4gwqDCoMKgwqDC oCBtb2NrX2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2V2 aWN0LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2V2aWN0 LmMKPj4gaW5kZXggZjM5ZjAyODJlNzhjLi4wYWY5YTU4ZDAxMWQgMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jCj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jCj4+IEBAIC00NzMs NyArNDczLDYgQEAgc3RhdGljIGludCBpZ3RfZXZpY3RfY29udGV4dHModm9pZCAqYXJnKQo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY291bnQgPSAwOwo+PiAt wqDCoMKgwqDCoMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBvbnN0YWNrX2ZlbmNlX2luaXQoJmZlbmNlKTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGRvIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVf cmVxdWVzdCAqcnE7Cj4+IEBAIC01MTAsOCArNTA5LDYgQEAgc3RhdGljIGludCBpZ3RfZXZpY3Rf Y29udGV4dHModm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3VudCsr Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSAwOwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgfSB3aGlsZSgxKTsKPj4gLcKgwqDCoMKgwqDCoMKgIG11dGV4X3VubG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IC0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIG9uc3RhY2tfZmVu Y2VfZmluaSgmZmVuY2UpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfaW5mbygiU3VibWl0dGVk ICVsdSBjb250ZXh0cy9yZXF1ZXN0cyBvbiAlc1xuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY291bnQsIGVuZ2luZS0+bmFtZSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZ3R0LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCj4+IGluZGV4IDk5MzlkZDQwYzZhOC4uNjc3N2Ez MzViZDQ0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9nZW1fZ3R0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVf Z2VtX2d0dC5jCj4+IEBAIC0xMjQ2LDYgKzEyNDYsNyBAQCBzdGF0aWMgaW50IGV4ZXJjaXNlX21v Y2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICppOTE1LAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGVuZF90aW1lKSkKPj4g wqAgewo+PiDCoMKgwqDCoMKgIGNvbnN0IHU2NCBsaW1pdCA9IHRvdGFscmFtX3BhZ2VzKCkgPDwg UEFHRV9TSElGVDsKPj4gK8KgwqDCoCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKPj4g wqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+PiDCoMKgwqDCoMKgIElH VF9USU1FT1VUKGVuZF90aW1lKTsKPj4gwqDCoMKgwqDCoCBpbnQgZXJyOwo+PiBAQCAtMTI1NCw3 ICsxMjU1LDggQEAgc3RhdGljIGludCBleGVyY2lzZV9tb2NrKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIAo+PiAqaTkxNSwKPj4gwqDCoMKgwqDCoCBpZiAoIWN0eCkKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAtRU5PTUVNOwo+PiAtwqDCoMKgIGVyciA9IGZ1bmMoaTkxNSwgY3R4LT52bSwg MCwgbWluKGN0eC0+dm0tPnRvdGFsLCBsaW1pdCksIGVuZF90aW1lKTsKPj4gK8KgwqDCoCB2bSA9 IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1ZSk7Cj4+ICvCoMKgwqAgZXJy ID0gZnVuYyhpOTE1LCB2bSwgMCwgbWluKHZtLT50b3RhbCwgbGltaXQpLCBlbmRfdGltZSk7Cj4+ IMKgwqDCoMKgwqAgbW9ja19jb250ZXh0X2Nsb3NlKGN0eCk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJu IGVycjsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X3JlcXVlc3QuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1 ZXN0LmMKPj4gaW5kZXggZDFlZTM4NGEzMjYwLi40YWJmNTI3MzM1MjAgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYwo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMKPj4gQEAgLTE4MSw5 ICsxODEsNyBAQCBzdGF0aWMgaW50IGlndF9yZXF1ZXN0X3Jld2luZCh2b2lkICphcmcpCj4+IMKg wqDCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+PiDCoMKgwqDCoMKgIGludCBlcnIg PSAtRUlOVkFMOwo+PiAtwqDCoMKgIG11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+PiDCoMKgwqDCoMKgIGN0eFswXSA9IG1vY2tfY29udGV4dChpOTE1LCAiQSIpOwo+PiAtwqDC oMKgIG11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAg Y2UgPSBpOTE1X2dlbV9jb250ZXh0X2dldF9lbmdpbmUoY3R4WzBdLCBSQ1MwKTsKPj4gwqDCoMKg wqDCoCBHRU1fQlVHX09OKElTX0VSUihjZSkpOwo+PiBAQCAtMTk3LDkgKzE5NSw3IEBAIHN0YXRp YyBpbnQgaWd0X3JlcXVlc3RfcmV3aW5kKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCBpOTE1X3Jl cXVlc3RfZ2V0KHJlcXVlc3QpOwo+PiDCoMKgwqDCoMKgIGk5MTVfcmVxdWVzdF9hZGQocmVxdWVz dCk7Cj4+IC3CoMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKg wqDCoMKgwqAgY3R4WzFdID0gbW9ja19jb250ZXh0KGk5MTUsICJCIik7Cj4+IC3CoMKgwqAgbXV0 ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKgwqDCoCBjZSA9IGk5 MTVfZ2VtX2NvbnRleHRfZ2V0X2VuZ2luZShjdHhbMV0sIFJDUzApOwo+PiDCoMKgwqDCoMKgIEdF TV9CVUdfT04oSVNfRVJSKGNlKSk7Cj4+IEBAIC00MzgsOSArNDM0LDcgQEAgc3RhdGljIGludCBt b2NrX2JyZWFkY3J1bWJzX3Ntb2tldGVzdCh2b2lkICphcmcpCj4+IMKgwqDCoMKgwqAgfQo+PiDC oMKgwqDCoMKgIGZvciAobiA9IDA7IG4gPCB0Lm5jb250ZXh0czsgbisrKSB7Cj4+IC3CoMKgwqDC oMKgwqDCoCBtdXRleF9sb2NrKCZ0LmVuZ2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB0LmNvbnRleHRzW25dID0gbW9ja19jb250ZXh0KHQuZW5naW5l LT5pOTE1LCAibW9jayIpOwo+PiAtwqDCoMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZ0LmVuZ2lu ZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXQu Y29udGV4dHNbbl0pIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVOT01F TTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfY29udGV4dHM7Cj4+IEBA IC03MzQsNyArNzI4LDggQEAgc3RhdGljIGludCBsaXZlX2VtcHR5X3JlcXVlc3Qodm9pZCAqYXJn KQo+PiDCoCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpyZWN1cnNpdmVfYmF0Y2goc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4ID0gaTkxNS0+a2VybmVsX2NvbnRleHQ7Cj4+IC3CoMKgwqAgc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSBjdHgtPnZtID86ICZpOTE1LT5nZ3R0LnZtOwo+PiAr wqDCoMKgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0KPj4gK8KgwqDCoMKgwqDCoMKg IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1ZSkgPzogJmk5MTUtPmdndHQu dm07Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPj4gwqDC oMKgwqDCoCBjb25zdCBpbnQgZ2VuID0gSU5URUxfR0VOKGk5MTUpOwo+PiDCoMKgwqDCoMKgIHN0 cnVjdCBpOTE1X3ZtYSAqdm1hOwo+PiBAQCAtMTEwOSw5ICsxMTA0LDcgQEAgc3RhdGljIGludCBs aXZlX2JyZWFkY3J1bWJzX3Ntb2tldGVzdCh2b2lkICphcmcpCj4+IMKgwqDCoMKgwqAgfQo+PiDC oMKgwqDCoMKgIGZvciAobiA9IDA7IG4gPCB0WzBdLm5jb250ZXh0czsgbisrKSB7Cj4+IC3CoMKg wqDCoMKgwqDCoCBtdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHRbMF0uY29udGV4dHNbbl0gPSBsaXZlX2NvbnRleHQoaTkxNSwgZmlsZSk7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBtdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCF0WzBdLmNvbnRleHRzW25dKSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FTk9NRU07Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gb3V0X2NvbnRleHRzOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfdm1hLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfdm1hLmMKPj4gaW5kZXggYWMxZmY1NThlYjkwLi5mNmU2YjBhYWUzOGMg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5jCj4+IEBA IC0zOCw3ICszOCw3IEBAIHN0YXRpYyBib29sIGFzc2VydF92bWEoc3RydWN0IGk5MTVfdm1hICp2 bWEsCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBib29sIG9rID0gdHJ1ZTsKPj4gLcKgwqDCoCBpZiAo dm1hLT52bSAhPSBjdHgtPnZtKSB7Cj4+ICvCoMKgwqAgaWYgKHZtYS0+dm0gIT0gcmN1X2FjY2Vz c19wb2ludGVyKGN0eC0+dm0pKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIlZNQSBj cmVhdGVkIHdpdGggd3JvbmcgVk1cbiIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgb2sgPSBmYWxz ZTsKPj4gwqDCoMKgwqDCoCB9Cj4+IEBAIC0xMTMsNyArMTEzLDggQEAgc3RhdGljIGludCBjcmVh dGVfdm1hcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPj4gwqDCoMKgwqDCoCBsaXN0 X2Zvcl9lYWNoX2VudHJ5KG9iaiwgb2JqZWN0cywgc3RfbGluaykgewo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgZm9yIChwaW5uZWQgPSAwOyBwaW5uZWQgPD0gMTsgcGlubmVkKyspIHsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsIGNvbnRleHRzLCBs aW5rKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0gPSBjdHgtPnZtOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwg dHJ1ZSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVf dm1hICp2bWE7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGVycjsK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9k ZXZpY2UuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2 aWNlLmMKPj4gaW5kZXggZWZlNDBjMjlmY2YyLi4wZWQyMWE3Yjg2ODIgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKPj4gQEAg LTU5LDExICs1OSw5IEBAIHN0YXRpYyB2b2lkIG1vY2tfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRy bV9kZXZpY2UgCj4+ICpkZXYpCj4+IMKgwqDCoMKgwqAgaTkxNV9nZW1fZHJhaW5fd29ya3F1ZXVl KGk5MTUpOwo+PiAtwqDCoMKgIG11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ PiDCoMKgwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgbW9ja19lbmdpbmVfZnJlZShlbmdpbmUpOwo+PiAtwqDCoMKgIGk5MTVfZ2Vt X2NvbnRleHRzX2ZpbmkoaTkxNSk7Cj4+IC3CoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPj4gK8KgwqDCoCBpOTE1X2dlbV9kcml2ZXJfcmVsZWFzZV9fY29udGV4 dHMoaTkxNSk7Cj4+IMKgwqDCoMKgwqAgaW50ZWxfdGltZWxpbmVzX2ZpbmkoaTkxNSk7Cj4+IEBA IC0yMDcsNyArMjA1LDcgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKm1vY2tfZ2VtX2Rldmlj ZSh2b2lkKQo+PiDCoMKgwqDCoMKgIHJldHVybiBpOTE1Owo+PiDCoCBlcnJfY29udGV4dDoKPj4g LcKgwqDCoCBpOTE1X2dlbV9jb250ZXh0c19maW5pKGk5MTUpOwo+PiArwqDCoMKgIGk5MTVfZ2Vt X2RyaXZlcl9yZWxlYXNlX19jb250ZXh0cyhpOTE1KTsKPj4gwqAgZXJyX2VuZ2luZToKPj4gwqDC oMKgwqDCoCBtb2NrX2VuZ2luZV9mcmVlKGk5MTUtPmVuZ2luZVtSQ1MwXSk7Cj4+IMKgIGVycl91 bmxvY2s6Cj4+Cj4gCj4gUmVnYXJkcywKPiAKPiBUdnJ0a28KX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4