From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20190508100958.32637-1-chris@chris-wilson.co.uk> <20190508100958.32637-8-chris@chris-wilson.co.uk> From: Tvrtko Ursulin Message-ID: Date: Wed, 15 May 2019 07:37:18 +0100 MIME-Version: 1.0 In-Reply-To: <20190508100958.32637-8-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t 08/16] i915: Exercise creating context with shared GTT List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org, Tvrtko Ursulin List-ID: Ck9uIDA4LzA1LzIwMTkgMTE6MDksIENocmlzIFdpbHNvbiB3cm90ZToKPiB2MjogVGVzdCBlYWNo IHNoYXJlZCBjb250ZXh0IGlzIGl0cyBvd24gdGltZWxpbmUgYW5kIGFsbG93cyByZXF1ZXN0Cj4g cmVvcmRlcmluZyBiZXR3ZWVuIHNoYXJlZCBjb250ZXh0cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogSm9vbmFzIExhaHRp bmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IENjOiBNaWthIEt1b3BwYWxhIDxtaWthLmt1 b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPiBDYzogTWljaGFsIFdhamRlY3prbyA8bWljaGFsLndh amRlY3prb0BpbnRlbC5jb20+Cj4gLS0tCj4gICBsaWIvaTkxNS9nZW1fY29udGV4dC5jICAgICAg ICB8ICA2OCArKysKPiAgIGxpYi9pOTE1L2dlbV9jb250ZXh0LmggICAgICAgIHwgIDEzICsKPiAg IHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgIHwgICAxICsKPiAgIHRlc3RzL2k5MTUvZ2Vt X2N0eF9zaGFyZWQuYyAgIHwgODU2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiAgIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfd2hpc3Blci5jIHwgIDMyICstCj4gICB0ZXN0cy9tZXNv bi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCj4gICA2IGZpbGVzIGNoYW5nZWQsIDk2MiBpbnNl cnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2k5 MTUvZ2VtX2N0eF9zaGFyZWQuYwo+IAo+IGRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fY29udGV4 dC5jIGIvbGliL2k5MTUvZ2VtX2NvbnRleHQuYwo+IGluZGV4IGY5NGQ4OWNiNC4uOGZiODk4NGQx IDEwMDY0NAo+IC0tLSBhL2xpYi9pOTE1L2dlbV9jb250ZXh0LmMKPiArKysgYi9saWIvaTkxNS9n ZW1fY29udGV4dC5jCj4gQEAgLTI3Miw2ICsyNzIsNzQgQEAgdm9pZCBnZW1fY29udGV4dF9zZXRf cHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIGludCBwcmlvKQo+ICAgCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0eF9pZCwgcHJpbyksIDApOwo+ ICAgfQo+ICAgCj4gK2ludAo+ICtfX2dlbV9jb250ZXh0X2Nsb25lKGludCBpOTE1LAo+ICsJCSAg ICB1aW50MzJfdCBzcmMsIHVuc2lnbmVkIGludCBzaGFyZSwKPiArCQkgICAgdW5zaWduZWQgaW50 IGZsYWdzLAo+ICsJCSAgICB1aW50MzJfdCAqb3V0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfY3JlYXRlX2V4dF9jbG9uZSBjbG9uZSA9IHsKPiArCQl7IC5uYW1lID0gSTkx NV9DT05URVhUX0NSRUFURV9FWFRfQ0xPTkUgfSwKPiArCQkuY2xvbmVfaWQgPSBzcmMsCj4gKwkJ LmZsYWdzID0gc2hhcmUsCj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2Ny ZWF0ZV9leHQgYXJnID0gewo+ICsJCS5mbGFncyA9IGZsYWdzIHwgSTkxNV9DT05URVhUX0NSRUFU RV9GTEFHU19VU0VfRVhURU5TSU9OUywKPiArCQkuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRl cigmY2xvbmUpLAo+ICsJfTsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWlmIChpZ3RfaW9jdGwo aTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfQ1JFQVRFX0VYVCwgJmFyZykpCj4gKwkJ ZXJyID0gLWVycm5vOwo+ICsKPiArCSpvdXQgPSBhcmcuY3R4X2lkOwo+ICsKPiArCWVycm5vID0g MDsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIF9fZ2VtX2NvbnRleHRf aGFzKGludCBpOTE1LCB1aW50MzJfdCBzaGFyZSwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICt7Cj4g Kwl1aW50MzJfdCBjdHg7Cj4gKwo+ICsJX19nZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLCBzaGFy ZSwgZmxhZ3MsICZjdHgpOwo+ICsJaWYgKGN0eCkKPiArCQlnZW1fY29udGV4dF9kZXN0cm95KGk5 MTUsIGN0eCk7Cj4gKwo+ICsJZXJybm8gPSAwOwo+ICsJcmV0dXJuIGN0eDsKPiArfQo+ICsKPiAr Ym9vbCBnZW1fY29udGV4dHNfaGFzX3NoYXJlZF9ndHQoaW50IGk5MTUpCj4gK3sKPiArCXJldHVy biBfX2dlbV9jb250ZXh0X2hhcyhpOTE1LCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sIDApOwo+ICt9 Cj4gKwo+ICtib29sIGdlbV9oYXNfcXVldWVzKGludCBpOTE1KQo+ICt7Cj4gKwlyZXR1cm4gX19n ZW1fY29udGV4dF9oYXMoaTkxNSwKPiArCQkJCSBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sCj4gKwkJ CQkgSTkxNV9DT05URVhUX0NSRUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkUpOwo+ICt9Cj4gKwo+ ICt1aW50MzJfdCBnZW1fY29udGV4dF9jbG9uZShpbnQgaTkxNSwKPiArCQkJICAgdWludDMyX3Qg c3JjLCB1bnNpZ25lZCBpbnQgc2hhcmUsCj4gKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKPiAr ewo+ICsJdWludDMyX3QgY3R4Owo+ICsKPiArCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9j bG9uZShpOTE1LCBzcmMsIHNoYXJlLCBmbGFncywgJmN0eCksIDApOwo+ICsKPiArCXJldHVybiBj dHg7Cj4gK30KPiArCj4gK3VpbnQzMl90IGdlbV9xdWV1ZV9jcmVhdGUoaW50IGk5MTUpCj4gK3sK PiArCXJldHVybiBnZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLAo+ICsJCQkJIEk5MTVfQ09OVEVY VF9DTE9ORV9WTSwKPiArCQkJCSBJOTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1F TElORSk7Cj4gK30KPiArCj4gICBib29sIGdlbV9jb250ZXh0X2hhc19lbmdpbmUoaW50IGZkLCB1 aW50MzJfdCBjdHgsIHVpbnQ2NF90IGVuZ2luZSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBleGVjID0ge307Cj4gZGlmZiAtLWdpdCBhL2xpYi9pOTE1L2dlbV9j b250ZXh0LmggYi9saWIvaTkxNS9nZW1fY29udGV4dC5oCj4gaW5kZXggYTA1MjcxNGQ0Li44MDQz YzM0MDEgMTAwNjQ0Cj4gLS0tIGEvbGliL2k5MTUvZ2VtX2NvbnRleHQuaAo+ICsrKyBiL2xpYi9p OTE1L2dlbV9jb250ZXh0LmgKPiBAQCAtMjksNiArMjksMTkgQEAgaW50IF9fZ2VtX2NvbnRleHRf Y3JlYXRlKGludCBmZCwgdWludDMyX3QgKmN0eF9pZCk7Cj4gICB2b2lkIGdlbV9jb250ZXh0X2Rl c3Ryb3koaW50IGZkLCB1aW50MzJfdCBjdHhfaWQpOwo+ICAgaW50IF9fZ2VtX2NvbnRleHRfZGVz dHJveShpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCk7Cj4gICAKPiAraW50IF9fZ2VtX2NvbnRleHRf Y2xvbmUoaW50IGk5MTUsCj4gKwkJCXVpbnQzMl90IHNyYywgdW5zaWduZWQgaW50IHNoYXJlLAo+ ICsJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsCj4gKwkJCXVpbnQzMl90ICpvdXQpOwo+ICt1aW50MzJf dCBnZW1fY29udGV4dF9jbG9uZShpbnQgaTkxNSwKPiArCQkJICAgdWludDMyX3Qgc3JjLCB1bnNp Z25lZCBpbnQgc2hhcmUsCj4gKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncyk7Cj4gKwo+ICt1aW50 MzJfdCBnZW1fcXVldWVfY3JlYXRlKGludCBpOTE1KTsKPiArCj4gK2Jvb2wgZ2VtX2NvbnRleHRz X2hhc19zaGFyZWRfZ3R0KGludCBpOTE1KTsKPiArYm9vbCBnZW1faGFzX3F1ZXVlcyhpbnQgaTkx NSk7Cj4gKwo+ICAgYm9vbCBnZW1faGFzX2NvbnRleHRzKGludCBmZCk7Cj4gICB2b2lkIGdlbV9y ZXF1aXJlX2NvbnRleHRzKGludCBmZCk7Cj4gICB2b2lkIGdlbV9jb250ZXh0X3JlcXVpcmVfYmFu bmFibGUoaW50IGZkKTsKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBlMWI3ZmVlYjIuLjM1NTJlODk1YiAxMDA2NDQK PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291 cmNlcwo+IEBAIC0yMiw2ICsyMiw3IEBAIFRFU1RTX3Byb2dzID0gXAo+ICAgCWRybV9tbSBcCj4g ICAJZHJtX3JlYWQgXAo+ICAgCWk5MTUvZ2VtX2N0eF9jbG9uZSBcCj4gKwlpOTE1L2dlbV9jdHhf c2hhcmVkIFwKPiAgIAlpOTE1L2dlbV92bV9jcmVhdGUgXAo+ICAgCWttc18zZCBcCj4gICAJa21z X2FkZGZiX2Jhc2ljIFwKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fY3R4X3NoYXJlZC5j IGIvdGVzdHMvaTkxNS9nZW1fY3R4X3NoYXJlZC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAuLjAwNzZmNWU5ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9p OTE1L2dlbV9jdHhfc2hhcmVkLmMKPiBAQCAtMCwwICsxLDg1NiBAQAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgoKMjAxOQoKPiArICoKPiArICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsg KiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKwo+ICsjaW5j bHVkZSA8dW5pc3RkLmg+Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0ZGlu dC5oPgo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5j bHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDxlcnJu by5oPgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ ICsjaW5jbHVkZSA8c3lzL3RpbWUuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0uaD4KPiArCj4gKyNp bmNsdWRlICJpZ3RfcmFuZC5oIgo+ICsjaW5jbHVkZSAiaWd0X3ZnZW0uaCIKPiArI2luY2x1ZGUg InN5bmNfZmlsZS5oIgo+ICsKPiArI2RlZmluZSBMTyAwCj4gKyNkZWZpbmUgSEkgMQo+ICsjZGVm aW5lIE5PSVNFIDIKPiArCj4gKyNkZWZpbmUgTUFYX1BSSU8gTE9DQUxfSTkxNV9DT05URVhUX01B WF9VU0VSX1BSSU9SSVRZCj4gKyNkZWZpbmUgTUlOX1BSSU8gTE9DQUxfSTkxNV9DT05URVhUX01J Tl9VU0VSX1BSSU9SSVRZCj4gKwo+ICtzdGF0aWMgaW50IHByaW9yaXRpZXNbXSA9IHsKPiArCVtM T10gPSBNSU5fUFJJTyAvIDIsCj4gKwlbSEldID0gTUFYX1BSSU8gLyAyLAo+ICt9Owo+ICsKPiAr I2RlZmluZSBNQVhfRUxTUF9RTEVOIDE2Cj4gKwo+ICtJR1RfVEVTVF9ERVNDUklQVElPTigiVGVz dCBzaGFyZWQgY29udGV4dHMuIik7Cj4gKwo+ICtzdGF0aWMgdm9pZCBjcmVhdGVfc2hhcmVkX2d0 dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQo+ICsjZGVmaW5lIERFVEFDSEVEIDB4MQo+ ICt7Cj4gKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewo+ICsJCS5oYW5kbGUgPSBnZW1f Y3JlYXRlKGk5MTUsIDQwOTYpLAo+ICsJfTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgZXhlY2J1ZiA9IHsKPiArCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9i aiksCj4gKwkJLmJ1ZmZlcl9jb3VudCA9IDEsCj4gKwl9Owo+ICsJdWludDMyX3QgcGFyZW50LCBj aGlsZDsKPiArCj4gKwlnZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9m KGJiZSkpOwo+ICsJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+ICsJZ2VtX3N5bmMoaTkx NSwgb2JqLmhhbmRsZSk7Cj4gKwo+ICsJY2hpbGQgPSBmbGFncyAmIERFVEFDSEVEID8gZ2VtX2Nv bnRleHRfY3JlYXRlKGk5MTUpIDogMDsKPiArCWlndF91bnRpbF90aW1lb3V0KDIpIHsKPiArCQlw YXJlbnQgPSBmbGFncyAmIERFVEFDSEVEID8gY2hpbGQgOiAwOwo+ICsJCWNoaWxkID0gZ2VtX2Nv bnRleHRfY2xvbmUoaTkxNSwKPiArCQkJCQkgIHBhcmVudCwgSTkxNV9DT05URVhUX0NMT05FX1ZN LAo+ICsJCQkJCSAgMCk7Cj4gKwkJZXhlY2J1Zi5yc3ZkMSA9IGNoaWxkOwo+ICsJCWdlbV9leGVj YnVmKGk5MTUsICZleGVjYnVmKTsKPiArCj4gKwkJaWYgKGZsYWdzICYgREVUQUNIRUQpIHsKPiAr CQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBwYXJlbnQpOwo+ICsJCQlnZW1fZXhlY2J1Zihp OTE1LCAmZXhlY2J1Zik7Cj4gKwkJfSBlbHNlIHsKPiArCQkJcGFyZW50ID0gY2hpbGQ7Cj4gKwkJ CWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcGFyZW50KTsKPiArCQl9Cj4gKwo+ICsJCWV4ZWNi dWYucnN2ZDEgPSBwYXJlbnQ7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGk5MTUs ICZleGVjYnVmKSwgLUVOT0VOVCk7Cj4gKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2Ns b25lKGk5MTUsCj4gKwkJCQkJCSAgcGFyZW50LCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sCj4gKwkJ CQkJCSAgMCwgJnBhcmVudCksIC1FTk9FTlQpOwo+ICsJfQo+ICsJaWYgKGZsYWdzICYgREVUQUNI RUQpCj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjaGlsZCk7Cj4gKwo+ICsJZ2VtX3N5 bmMoaTkxNSwgb2JqLmhhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwgb2JqLmhhbmRsZSk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGRpc2pvaW50X3RpbWVsaW5lcyhpbnQgaTkxNSkKPiArewo+ ICsJSUdUX0NPUktfSEFORExFKGNvcmspOwo+ICsJaWd0X3NwaW5fdCAqc3BpblsyXTsKPiArCXVp bnQzMl90IHBsdWcsIGNoaWxkOwo+ICsKPiArCWlndF9yZXF1aXJlKGdlbV9oYXNfZXhlY2xpc3Rz KGk5MTUpKTsKPiArCj4gKwkvKgo+ICsJICogRWFjaCBjb250ZXh0LCBhbHRob3VnaCB0aGV5IHNo YXJlIGEgdm0sIGFyZSBleHBlY3RlZCB0byBiZQo+ICsJICogZGlzdGluY3QgdGltZWxpbmVzLiBB IHJlcXVlc3QgcXVldWVkIHRvIG9uZSBjb250ZXh0IHNob3VsZCBiZQo+ICsJICogaW5kZXBlbmRl bnQgb2YgYW55IHNoYXJlZCBjb250ZXh0cy4KPiArCSAqLwo+ICsJY2hpbGQgPSBnZW1fY29udGV4 dF9jbG9uZShpOTE1LCAwLCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sIDApOwo+ICsJcGx1ZyA9IGln dF9jb3JrX3BsdWcoJmNvcmssIGk5MTUpOwo+ICsKPiArCXNwaW5bMF0gPSBfX2lndF9zcGluX25l dyhpOTE1LCAuY3R4ID0gMCwgLmRlcGVuZGVuY3kgPSBwbHVnKTsKPiArCXNwaW5bMV0gPSBfX2ln dF9zcGluX25ldyhpOTE1LCAuY3R4ID0gY2hpbGQpOwo+ICsKPiArCS8qIFdhaXQgZm9yIHRoZSBz ZWNvbmQgc3Bpbm5lciwgd2lsbCBoYW5nIGlmIHN0dWNrIGJlaGluZCB0aGUgZmlyc3QgKi8KPiAr CWlndF9zcGluX2VuZChzcGluWzFdKTsKPiArCWdlbV9zeW5jKGk5MTUsIHNwaW5bMV0tPmhhbmRs ZSk7Cj4gKwo+ICsJaWd0X2NvcmtfdW5wbHVnKCZjb3JrKTsKPiArCj4gKwlpZ3Rfc3Bpbl9mcmVl KGk5MTUsIHNwaW5bMV0pOwo+ICsJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluWzBdKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZXhoYXVzdF9zaGFyZWRfZ3R0KGludCBpOTE1LCB1bnNpZ25lZCBp bnQgZmxhZ3MpCj4gKyNkZWZpbmUgRVhIQVVTVF9MUkMgMHgxCj4gK3sKPiArCWk5MTUgPSBnZW1f cmVvcGVuX2RyaXZlcihpOTE1KTsKPiArCj4gKwlpZ3RfZm9yayhwaWQsIDEpIHsKPiArCQljb25z dCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKPiArCQkJLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkx NSwgNDA5NikKPiArCQl9Owo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhl Y2J1ZiA9IHsKPiArCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAo+ICsJ CQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQl9Owo+ICsJCXVpbnQzMl90IHBhcmVudCwgY2hpbGQ7 Cj4gKwkJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7Cj4gKwkJaW50IGVycjsKPiArCj4gKwkJZ2Vt X3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKPiArCj4gKwkJ Y2hpbGQgPSAwOwo+ICsJCWZvciAoOzspIHsKPiArCQkJcGFyZW50ID0gY2hpbGQ7Cj4gKwkJCWVy ciA9IF9fZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwKPiArCQkJCQkJICBwYXJlbnQsIEk5MTVfQ09O VEVYVF9DTE9ORV9WTSwKPiArCQkJCQkJICAwLCAmY2hpbGQpOwo+ICsJCQlpZiAoZXJyKQo+ICsJ CQkJYnJlYWs7Cj4gKwo+ICsJCQlpZiAoZmxhZ3MgJiBFWEhBVVNUX0xSQykgewo+ICsJCQkJZXhl Y2J1Zi5yc3ZkMSA9IGNoaWxkOwo+ICsJCQkJZXJyID0gX19nZW1fZXhlY2J1ZihpOTE1LCAmZXhl Y2J1Zik7Cj4gKwkJCQlpZiAoZXJyKQo+ICsJCQkJCWJyZWFrOwo+ICsJCQl9CgpXaGF0IGFyZSB0 aGUgc3RvcCBjb25kaXRpb25zIGluIHRoaXMgdGVzdCwgd2l0aCBhbmQgd2l0aG91dCB0aGUgCkVY SEFVU1RfTFJDIGZsYWc/IEl0IHdvdWxkIGJlIGdvb2QgdG8gcHV0IHRoYXQgaW4gYSBjb21tZW50 LgoKRXNwZWNpYWxseSBzaW5jZSBBRkFJUiB0aGlzIG9uZSB3YXMgY2F1c2luZyBPT00gZm9yIG1l IHNvIG1pZ2h0IG5lZWQgdG8gCmJlIHR3ZWFrZWQuCgo+ICsKPiArCQkJY291bnQrKzsKPiArCQl9 Cj4gKwkJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7Cj4gKwo+ICsJCWlndF9pbmZvKCJDcmVh dGVkICVsdSBzaGFyZWQgY29udGV4dHMsIGJlZm9yZSAlZCAoJXMpXG4iLAo+ICsJCQkgY291bnQs IGVyciwgc3RyZXJyb3IoLWVycikpOwo+ICsJfQo+ICsJY2xvc2UoaTkxNSk7Cj4gKwlpZ3Rfd2Fp dGNoaWxkcmVuKCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGV4ZWNfc2hhcmVkX2d0dChpbnQg aTkxNSwgdW5zaWduZWQgaW50IHJpbmcpCj4gK3sKPiArCWNvbnN0IGludCBnZW4gPSBpbnRlbF9n ZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSk7Cj4gKwljb25zdCB1aW50MzJfdCBiYmUgPSBN SV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg b2JqID0gewo+ICsJCS5oYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpCj4gKwl9Owo+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewo+ICsJCS5idWZmZXJz X3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKPiArCQkuYnVmZmVyX2NvdW50ID0gMSwKPiAr CQkuZmxhZ3MgPSByaW5nLAo+ICsJfTsKPiArCXVpbnQzMl90IHNjcmF0Y2ggPSBvYmouaGFuZGxl Owo+ICsJdWludDMyX3QgYmF0Y2hbMTZdOwo+ICsJaW50IGk7Cj4gKwo+ICsJZ2VtX3JlcXVpcmVf cmluZyhpOTE1LCByaW5nKTsKPiArCWlndF9yZXF1aXJlKGdlbV9jYW5fc3RvcmVfZHdvcmQoaTkx NSwgcmluZykpOwo+ICsKPiArCS8qIExvYWQgb2JqZWN0IGludG8gcGxhY2UgaW4gdGhlIEdUVCAq Lwo+ICsJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsK PiArCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiArCj4gKwkvKiBQcmVzdW1lIG5vdGhp bmcgY2F1c2VzIGFuIGV2aWN0aW9uIGluIHRoZSBtZWFudGltZSAqLwo+ICsKPiArCW9iai5oYW5k bGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCWkgPSAwOwo+ICsJYmF0Y2hbaV0g PSBNSV9TVE9SRV9EV09SRF9JTU0gfCAoZ2VuIDwgNiA/IDEgPDwgMjIgOiAwKTsKPiArCWlmIChn ZW4gPj0gOCkgewo+ICsJCWJhdGNoWysraV0gPSBvYmoub2Zmc2V0Owo+ICsJCWJhdGNoWysraV0g PSAwOwo+ICsJfSBlbHNlIGlmIChnZW4gPj0gNCkgewo+ICsJCWJhdGNoWysraV0gPSAwOwo+ICsJ CWJhdGNoWysraV0gPSBvYmoub2Zmc2V0Owo+ICsJfSBlbHNlIHsKPiArCQliYXRjaFtpXS0tOwo+ ICsJCWJhdGNoWysraV0gPSBvYmoub2Zmc2V0Owo+ICsJfQo+ICsJYmF0Y2hbKytpXSA9IDB4YzBm ZmVlOwo+ICsJYmF0Y2hbKytpXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwlnZW1fd3JpdGUo aTkxNSwgb2JqLmhhbmRsZSwgMCwgYmF0Y2gsIHNpemVvZihiYXRjaCkpOwo+ICsKPiArCW9iai5v ZmZzZXQgKz0gNDA5NjsgLyogbWFrZSBzdXJlIHdlIGRvbid0IGNhdXNlIGFuIGV2aWN0aW9uISAq LwoKSXMgNGsgYXBhcnQgc2FmZT8KCkEgc2hvcnQgY29tbWVudCBvbiBob3cgZG9lcyB0aGlzIHRl c3Qgd29yayB3b3VsZCBiZSBnb29kLgoKPiArCW9iai5mbGFncyB8PSBFWEVDX09CSkVDVF9QSU5O RUQ7Cj4gKwlleGVjYnVmLnJzdmQxID0gZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgMCwgSTkxNV9D T05URVhUX0NMT05FX1ZNLCAwKTsKPiArCWlmIChnZW4gPiAzICYmIGdlbiA8IDYpCj4gKwkJZXhl Y2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOwo+ICsKPiArCWdlbV9leGVjYnVmKGk5MTUs ICZleGVjYnVmKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgZXhlY2J1Zi5yc3ZkMSk7 Cj4gKwlnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxlKTsgLyogd3JpdGUgaGF6YXJkIGxpZXMgKi8K PiArCWdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKPiArCj4gKwlnZW1fcmVhZChpOTE1LCBz Y3JhdGNoLCAwLCBiYXRjaCwgc2l6ZW9mKHVpbnQzMl90KSk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwg c2NyYXRjaCk7Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcV91MzIoKmJhdGNoLCAweGMwZmZlZSk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgbm9wX3N5bmMoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwgdW5z aWduZWQgaW50IHJpbmcsIGludDY0X3QgdGltZW91dCkKPiArewo+ICsJY29uc3QgdWludDMyX3Qg YmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIG9iaiA9IHsKPiArCQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKPiAr CX07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7Cj4gKwkJ LmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAo+ICsJCS5idWZmZXJfY291bnQg PSAxLAo+ICsJCS5mbGFncyA9IHJpbmcsCj4gKwkJLnJzdmQxID0gY3R4LAo+ICsJfTsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVv ZihiYmUpKTsKPiArCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiArCWVyciA9IGdlbV93 YWl0KGk5MTUsIG9iai5oYW5kbGUsICZ0aW1lb3V0KTsKPiArCWdlbV9jbG9zZShpOTE1LCBvYmou aGFuZGxlKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYXNf c2luZ2xlX3RpbWVsaW5lKGludCBpOTE1KQo+ICt7Cj4gKwl1aW50MzJfdCBjdHg7Cj4gKwo+ICsJ X19nZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLCAwLAo+ICsJCQkgICAgSTkxNV9DT05URVhUX0NS RUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkUsCj4gKwkJCSAgICAmY3R4KTsKPiArCWlmIChjdHgp Cj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOwo+ICsKPiArCXJldHVybiBjdHgg IT0gMDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaWdub3JlX2VuZ2luZSh1bnNpZ25lZCBlbmdp bmUpCj4gK3sKPiArCWlmIChlbmdpbmUgPT0gMCkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlp ZiAoZW5naW5lID09IEk5MTVfRVhFQ19CU0QpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0 dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzaW5nbGVfdGltZWxpbmUoaW50IGk5 MTUpCj4gK3sKPiArCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7Cj4gKwkJLmhhbmRsZSA9 IGdlbV9jcmVhdGUoaTkxNSwgNDA5NiksCj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmID0gewo+ICsJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRl cigmb2JqKSwKPiArCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCX07Cj4gKwlzdHJ1Y3Qgc3luY19m ZW5jZV9pbmZvIHJpbmdzWzE2XTsKCkNvdWxkIHVzZSBmb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUg dG8gY291bnQgdGhlIGVuZ2luZXMuIEJ1dCB3ZSBwcm9iYWJseSAKaGF2ZSBwbGVudHkgb2YgdGhp cyBhcm91bmQgdGhlIGNvZGUgYmFzZS4KCj4gKwlzdHJ1Y3Qgc3luY19maWxlX2luZm8gc3luY19m aWxlX2luZm8gPSB7Cj4gKwkJLm51bV9mZW5jZXMgPSAxLAo+ICsJfTsKPiArCXVuc2lnbmVkIGlu dCBlbmdpbmU7Cj4gKwlpbnQgbjsKPiArCj4gKwlpZ3RfcmVxdWlyZShoYXNfc2luZ2xlX3RpbWVs aW5lKGk5MTUpKTsKPiArCj4gKwlnZW1fd3JpdGUoaTkxNSwgb2JqLmhhbmRsZSwgMCwgJmJiZSwg c2l6ZW9mKGJiZSkpOwo+ICsJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+ICsJZ2VtX3N5 bmMoaTkxNSwgb2JqLmhhbmRsZSk7Cj4gKwo+ICsJLyoKPiArCSAqIEZvciBhICJzaW5nbGUgdGlt ZWxpbmUiIGNvbnRleHQsIGVhY2ggcmluZyBpcyBvbiB0aGUgY29tbW9uCj4gKwkgKiB0aW1lbGlu ZSwgdW5saWtlIGEgbm9ybWFsIGNvbnRleHQgd2hlcmUgZWFjaCByaW5nIGhhcyBhbgo+ICsJICog aW5kZXBlbmRlbnQgdGltZWxpbmUuIFRoYXQgaXMgbm8gbWF0dGVyIHdoaWNoIGVuZ2luZSB3ZSBz dWJtaXQKPiArCSAqIHRvLCBpdCByZXBvcnRzIHRoZSBzYW1lIHRpbWVsaW5lIG5hbWUgYW5kIGZl bmNlIGNvbnRleHQuIEhvd2V2ZXIsCj4gKwkgKiB0aGUgZmVuY2UgY29udGV4dCBpcyBub3QgcmVw b3J0ZWQgdGhyb3VnaCB0aGUgc3luY19mZW5jZV9pbmZvLgoKSXMgdGhlIHRlc3QgdXNlZnVsIHRo ZW4/IFRoZXJlIHdhcyBvbmUgSSByZXZpZXdlZCBlYXJsaWVyIGluIHRoaXMgc2VyaWVzIAp3aGlj aCB0ZXN0ZWQgZm9yIGV4ZWN1dGlvbiBvcmRlcmluZywgd2hpY2ggc291bmRzIGxpa2UgaXMgd2hh dCdzIG5lZWRlZC4KCj4gKwkgKi8KPiArCWV4ZWNidWYucnN2ZDEgPQo+ICsJCWdlbV9jb250ZXh0 X2Nsb25lKGk5MTUsIDAsIDAsCj4gKwkJCQkgIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lO R0xFX1RJTUVMSU5FKTsKPiArCWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNfRkVOQ0VfT1VUOwo+ ICsJbiA9IDA7Cj4gKwlmb3JfZWFjaF9lbmdpbmUoaTkxNSwgZW5naW5lKSB7Cgpmb3JfZWFjaF9w aHlzaWNhbF9lbmdpbmUgdG8gYWxpZ24gd2l0aCBBbmRpJ3Mgd29yaz8KCj4gKwkJZ2VtX2V4ZWNi dWZfd3IoaTkxNSwgJmV4ZWNidWYpOwo+ICsJCXN5bmNfZmlsZV9pbmZvLnN5bmNfZmVuY2VfaW5m byA9IHRvX3VzZXJfcG9pbnRlcigmcmluZ3Nbbl0pOwo+ICsJCWRvX2lvY3RsKGV4ZWNidWYucnN2 ZDIgPj4gMzIsIFNZTkNfSU9DX0ZJTEVfSU5GTywgJnN5bmNfZmlsZV9pbmZvKTsKPiArCQljbG9z ZShleGVjYnVmLnJzdmQyID4+IDMyKTsKPiArCj4gKwkJaWd0X2luZm8oInJpbmdbJWRdIGZlbmNl OiAlcyAlc1xuIiwKPiArCQkJIG4sIHJpbmdzW25dLmRyaXZlcl9uYW1lLCByaW5nc1tuXS5vYmpf bmFtZSk7Cj4gKwkJbisrOwo+ICsJfQo+ICsJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7Cj4g KwlnZW1fY2xvc2UoaTkxNSwgb2JqLmhhbmRsZSk7Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDE7IGkg PCBuOyBpKyspIHsKPiArCQlpZ3RfYXNzZXJ0KCFzdHJjbXAocmluZ3NbMF0uZHJpdmVyX25hbWUs IHJpbmdzW2ldLmRyaXZlcl9uYW1lKSk7Cj4gKwkJaWd0X2Fzc2VydCghc3RyY21wKHJpbmdzWzBd Lm9ial9uYW1lLCByaW5nc1tpXS5vYmpfbmFtZSkpOwoKV2hhdCBpcyBpbiBvYmpfbmFtZT8KCj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGV4ZWNfc2luZ2xlX3RpbWVsaW5lKGludCBpOTE1 LCB1bnNpZ25lZCBpbnQgcmluZykKPiArewo+ICsJdW5zaWduZWQgaW50IG90aGVyOwo+ICsJaWd0 X3NwaW5fdCAqc3BpbjsKPiArCXVpbnQzMl90IGN0eDsKPiArCj4gKwlnZW1fcmVxdWlyZV9yaW5n KGk5MTUsIHJpbmcpOwo+ICsJaWd0X3JlcXVpcmUoaGFzX3NpbmdsZV90aW1lbGluZShpOTE1KSk7 Cj4gKwo+ICsJLyoKPiArCSAqIE9uIGFuIG9yZGluYXJ5IGNvbnRleHQsIGEgYmxvY2thZ2Ugb24g b25lIHJpbmcgZG9lc24ndCBwcmV2ZW50Cj4gKwkgKiBleGVjdXRpb24gb24gYW4gb3RoZXIuCj4g KwkgKi8KPiArCWN0eCA9IDA7Cj4gKwlzcGluID0gTlVMTDsKPiArCWZvcl9lYWNoX2VuZ2luZShp OTE1LCBvdGhlcikgewoKZm9yX2VhY2hfcGh5c2ljYWwKCj4gKwkJaWYgKG90aGVyID09IHJpbmcg fHwgaWdub3JlX2VuZ2luZShvdGhlcikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoc3Bp biA9PSBOVUxMKSB7Cj4gKwkJCXNwaW4gPSBfX2lndF9zcGluX25ldyhpOTE1LCAuY3R4ID0gY3R4 LCAuZW5naW5lID0gb3RoZXIpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsKPiArCQkJCS5idWZmZXJzX3B0ciA9IHNwaW4tPmV4 ZWNidWYuYnVmZmVyc19wdHIsCj4gKwkJCQkuYnVmZmVyX2NvdW50ID0gc3Bpbi0+ZXhlY2J1Zi5i dWZmZXJfY291bnQsCj4gKwkJCQkuZmxhZ3MgPSBvdGhlciwKPiArCQkJCS5yc3ZkMSA9IGN0eCwK PiArCQkJfTsKPiArCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOwo+ICsJCX0KPiArCX0K PiArCWlndF9yZXF1aXJlKHNwaW4pOwo+ICsJaWd0X2Fzc2VydF9lcShub3Bfc3luYyhpOTE1LCBj dHgsIHJpbmcsIE5TRUNfUEVSX1NFQyksIDApOwo+ICsJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGlu KTsKPiArCj4gKwkvKgo+ICsJICogQnV0IGlmIHdlIGNyZWF0ZSBhIGNvbnRleHQgd2l0aCBqdXN0 IGEgc2luZ2xlIHNoYXJlZCB0aW1lbGluZSwKPiArCSAqIHRoZW4gaXQgd2lsbCBibG9jayB3YWl0 aW5nIGZvciB0aGUgZWFybGllciByZXF1ZXN0cyBvbiB0aGUKPiArCSAqIG90aGVyIGVuZ2luZXMu Cj4gKwkgKi8KPiArCWN0eCA9IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIDAsIDAsCj4gKwkJCQlJ OTE1X0NPTlRFWFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElORSk7Cj4gKwlzcGluID0gTlVM TDsKPiArCWZvcl9lYWNoX2VuZ2luZShpOTE1LCBvdGhlcikgewoKRGl0dG8uCgo+ICsJCWlmIChv dGhlciA9PSByaW5nIHx8IGlnbm9yZV9lbmdpbmUob3RoZXIpKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJaWYgKHNwaW4gPT0gTlVMTCkgewo+ICsJCQlzcGluID0gX19pZ3Rfc3Bpbl9uZXcoaTkx NSwgLmN0eCA9IGN0eCwgLmVuZ2luZSA9IG90aGVyKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7Cj4gKwkJCQkuYnVmZmVyc19w dHIgPSBzcGluLT5leGVjYnVmLmJ1ZmZlcnNfcHRyLAo+ICsJCQkJLmJ1ZmZlcl9jb3VudCA9IHNw aW4tPmV4ZWNidWYuYnVmZmVyX2NvdW50LAo+ICsJCQkJLmZsYWdzID0gb3RoZXIsCj4gKwkJCQku cnN2ZDEgPSBjdHgsCj4gKwkJCX07Cj4gKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsK PiArCQl9Cj4gKwl9Cj4gKwlpZ3RfYXNzZXJ0KHNwaW4pOwo+ICsJaWd0X2Fzc2VydF9lcShub3Bf c3luYyhpOTE1LCBjdHgsIHJpbmcsIE5TRUNfUEVSX1NFQyksIC1FVElNRSk7Cj4gKwlpZ3Rfc3Bp bl9mcmVlKGk5MTUsIHNwaW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzdG9yZV9kd29yZChp bnQgaTkxNSwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCByaW5nLAo+ICsJCQl1aW50MzJfdCB0YXJn ZXQsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUsCj4gKwkJCXVpbnQzMl90IGNvcmss IHVuc2lnbmVkIHdyaXRlX2RvbWFpbikKPiArewo+ICsJY29uc3QgaW50IGdlbiA9IGludGVsX2dl bihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyIG9ialszXTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSByZWxvYzsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiAr CXVpbnQzMl90IGJhdGNoWzE2XTsKPiArCWludCBpOwo+ICsKPiArCW1lbXNldCgmZXhlY2J1Ziwg MCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiArCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3Bv aW50ZXIob2JqICsgIWNvcmspOwo+ICsJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAyICsgISFjb3Jr Owo+ICsJZXhlY2J1Zi5mbGFncyA9IHJpbmc7Cj4gKwlpZiAoZ2VuIDwgNikKPiArCQlleGVjYnVm LmZsYWdzIHw9IEk5MTVfRVhFQ19TRUNVUkU7Cj4gKwlleGVjYnVmLnJzdmQxID0gY3R4Owo+ICsK PiArCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKPiArCW9ialswXS5oYW5kbGUgPSBjb3Jr Owo+ICsJb2JqWzFdLmhhbmRsZSA9IHRhcmdldDsKPiArCW9ialsyXS5oYW5kbGUgPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpOwo+ICsKPiArCW1lbXNldCgmcmVsb2MsIDAsIHNpemVvZihyZWxvYykp Owo+ICsJcmVsb2MudGFyZ2V0X2hhbmRsZSA9IG9ialsxXS5oYW5kbGU7Cj4gKwlyZWxvYy5wcmVz dW1lZF9vZmZzZXQgPSAwOwo+ICsJcmVsb2Mub2Zmc2V0ID0gc2l6ZW9mKHVpbnQzMl90KTsKPiAr CXJlbG9jLmRlbHRhID0gb2Zmc2V0Owo+ICsJcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OOwo+ICsJcmVsb2Mud3JpdGVfZG9tYWluID0gd3JpdGVfZG9tYWlu Owo+ICsJb2JqWzJdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnJlbG9jKTsKPiArCW9i alsyXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPiArCj4gKwlpID0gMDsKPiArCWJhdGNoW2ldID0g TUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAxIDw8IDIyIDogMCk7Cj4gKwlpZiAoZ2Vu ID49IDgpIHsKPiArCQliYXRjaFsrK2ldID0gb2Zmc2V0Owo+ICsJCWJhdGNoWysraV0gPSAwOwo+ ICsJfSBlbHNlIGlmIChnZW4gPj0gNCkgewo+ICsJCWJhdGNoWysraV0gPSAwOwo+ICsJCWJhdGNo WysraV0gPSBvZmZzZXQ7Cj4gKwkJcmVsb2Mub2Zmc2V0ICs9IHNpemVvZih1aW50MzJfdCk7Cj4g Kwl9IGVsc2Ugewo+ICsJCWJhdGNoW2ldLS07Cj4gKwkJYmF0Y2hbKytpXSA9IG9mZnNldDsKPiAr CX0KPiArCWJhdGNoWysraV0gPSB2YWx1ZTsKPiArCWJhdGNoWysraV0gPSBNSV9CQVRDSF9CVUZG RVJfRU5EOwo+ICsJZ2VtX3dyaXRlKGk5MTUsIG9ialsyXS5oYW5kbGUsIDAsIGJhdGNoLCBzaXpl b2YoYmF0Y2gpKTsKPiArCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKPiArCWdlbV9jbG9z ZShpOTE1LCBvYmpbMl0uaGFuZGxlKTsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQzMl90IGNyZWF0 ZV9oaWdoZXN0X3ByaW9yaXR5KGludCBpOTE1KQo+ICt7Cj4gKwl1aW50MzJfdCBjdHggPSBnZW1f Y29udGV4dF9jcmVhdGUoaTkxNSk7Cj4gKwo+ICsJLyoKPiArCSAqIElmIHRoZXJlIGlzIG5vIHBy aW9yaXR5IHN1cHBvcnQsIGFsbCBjb250ZXh0cyB3aWxsIGhhdmUgZXF1YWwKPiArCSAqIHByaW9y aXR5IChhbmQgdGhlcmVmb3JlIHRoZSBtYXggdXNlciBwcmlvcml0eSksIHNvIG5vIGNvbnRleHQK PiArCSAqIGNhbiBvdmVydGFrZSB1cywgYW5kIHdlIGVmZmVjdGl2ZWx5IGNhbiBmb3JtIGEgcGx1 Zy4KPiArCSAqLwo+ICsJX19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBNQVhf UFJJTyk7Cj4gKwo+ICsJcmV0dXJuIGN0eDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdW5wbHVn X3Nob3dfcXVldWUoaW50IGk5MTUsIHN0cnVjdCBpZ3RfY29yayAqYywgdW5zaWduZWQgaW50IGVu Z2luZSkKPiArewo+ICsJaWd0X3NwaW5fdCAqc3BpbltNQVhfRUxTUF9RTEVOXTsKCldoeSBpcyB0 aGlzIDE2PwoKPiArCj4gKwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7IG4r Kykgewo+ICsJCWNvbnN0IHN0cnVjdCBpZ3Rfc3Bpbl9mYWN0b3J5IG9wdHMgPSB7Cj4gKwkJCS5j dHggPSBjcmVhdGVfaGlnaGVzdF9wcmlvcml0eShpOTE1KSwKPiArCQkJLmVuZ2luZSA9IGVuZ2lu ZSwKPiArCQl9Owo+ICsJCXNwaW5bbl0gPSBfX2lndF9zcGluX2ZhY3RvcnkoaTkxNSwgJm9wdHMp Owo+ICsJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgb3B0cy5jdHgpOwo+ICsJfQo+ICsKPiAr CWlndF9jb3JrX3VucGx1ZyhjKTsgLyogYmF0Y2hlcyB3aWxsIG5vdyBiZSBxdWV1ZWQgb24gdGhl IGVuZ2luZSAqLwo+ICsJaWd0X2RlYnVnZnNfZHVtcChpOTE1LCAiaTkxNV9lbmdpbmVfaW5mbyIp Owo+ICsKPiArCWZvciAoaW50IG4gPSAwOyBuIDwgQVJSQVlfU0laRShzcGluKTsgbisrKQo+ICsJ CWlndF9zcGluX2ZyZWUoaTkxNSwgc3BpbltuXSk7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50MzJf dCBzdG9yZV90aW1lc3RhbXAoaW50IGk5MTUsCj4gKwkJCQl1aW50MzJfdCBjdHgsIHVuc2lnbmVk IHJpbmcsCj4gKwkJCQl1bnNpZ25lZCBtbWlvX2Jhc2UpCj4gK3sKPiArCWNvbnN0IGJvb2wgcjY0 YiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSA4Owo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewo+ICsJCS5oYW5kbGUgPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpLAo+ICsJCS5yZWxvY2F0aW9uX2NvdW50ID0gMSwKPiArCX07Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2MgPSB7Cj4gKwkJLnRhcmdl dF9oYW5kbGUgPSBvYmouaGFuZGxlLAo+ICsJCS5vZmZzZXQgPSAyICogc2l6ZW9mKHVpbnQzMl90 KSwKPiArCQkuZGVsdGEgPSA0MDkyLAo+ICsJCS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01B SU5fSU5TVFJVQ1RJT04sCj4gKwl9Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVy MiBleGVjYnVmID0gewo+ICsJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwK PiArCQkuYnVmZmVyX2NvdW50ID0gMSwKPiArCQkuZmxhZ3MgPSByaW5nLAo+ICsJCS5yc3ZkMSA9 IGN0eCwKPiArCX07Cj4gKwl1aW50MzJfdCBiYXRjaFtdID0gewo+ICsJCTB4MjQgPDwgMjMgfCAo MSArIHI2NGIpLCAvKiBTUk0gKi8KPiArCQltbWlvX2Jhc2UgKyAweDM1OCwKPiArCQk0MDkyLAo+ ICsJCTAsCj4gKwkJTUlfQkFUQ0hfQlVGRkVSX0VORAo+ICsJfTsKPiArCj4gKwlpZ3RfcmVxdWly ZShpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KSkgPj0gNyk7Cj4gKwo+ICsJZ2Vt X3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsIGJhdGNoLCBzaXplb2YoYmF0Y2gpKTsKPiArCW9i ai5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZyZWxvYyk7Cj4gKwo+ICsJZ2VtX2V4ZWNi dWYoaTkxNSwgJmV4ZWNidWYpOwo+ICsKPiArCXJldHVybiBvYmouaGFuZGxlOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpbmRlcGVuZGVudChpbnQgaTkxNSwgdW5zaWduZWQgcmluZywgdW5zaWdu ZWQgZmxhZ3MpCj4gK3sKPiArCXVpbnQzMl90IGhhbmRsZVtBUlJBWV9TSVpFKHByaW9yaXRpZXMp XTsKPiArCWlndF9zcGluX3QgKnNwaW5bTUFYX0VMU1BfUUxFTl07Cj4gKwl1bnNpZ25lZCBpbnQg bW1pb19iYXNlOwo+ICsKPiArCS8qIFhYWCBpOTE1X3F1ZXJ5KCkhICovCj4gKwlzd2l0Y2ggKHJp bmcpIHsKPiArCWNhc2UgSTkxNV9FWEVDX0RFRkFVTFQ6Cj4gKwljYXNlIEk5MTVfRVhFQ19SRU5E RVI6Cj4gKwkJbW1pb19iYXNlID0gMHgyMDAwOwo+ICsJCWJyZWFrOwo+ICsjaWYgMAo+ICsJY2Fz ZSBJOTE1X0VYRUNfQlNEOgo+ICsJCW1taW9fYmFzZSA9IDB4MTIwMDA7Cj4gKwkJYnJlYWs7Cj4g KyNlbmRpZgo+ICsJY2FzZSBJOTE1X0VYRUNfQkxUOgo+ICsJCW1taW9fYmFzZSA9IDB4MjIwMDA7 Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBJOTE1X0VYRUNfVkVCT1g6Cj4gKwkJaWYgKGludGVs X2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSAxMSkKPiArCQkJbW1pb19iYXNlID0g MHgxZDgwMDA7Cj4gKwkJZWxzZQo+ICsJCQltbWlvX2Jhc2UgPSAweDFhMDAwOwo+ICsJCWJyZWFr Owo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJaWd0X3NraXAoIm1taW8gYmFzZSBub3Qga25vd25cbiIp Owo+ICsJfQoKVWZmZiB0aGlzIGlzIHF1aXRlIHF1ZXN0aW9uYWJsZS4gU2hvdWxkIHdlIHJhdGhl ciBoYXZlIHRoaXMgc3VidGVzdCBpbiAKc2VsZnRlc3RzIG9ubHk/Cgo+ICsKPiArCWZvciAoaW50 IG4gPSAwOyBuIDwgQVJSQVlfU0laRShzcGluKTsgbisrKSB7Cj4gKwkJY29uc3Qgc3RydWN0IGln dF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKPiArCQkJLmN0eCA9IGNyZWF0ZV9oaWdoZXN0X3ByaW9y aXR5KGk5MTUpLAo+ICsJCQkuZW5naW5lID0gcmluZywKPiArCQl9Owo+ICsJCXNwaW5bbl0gPSBf X2lndF9zcGluX2ZhY3RvcnkoaTkxNSwgJm9wdHMpOwo+ICsJCWdlbV9jb250ZXh0X2Rlc3Ryb3ko aTkxNSwgb3B0cy5jdHgpOwo+ICsJfQo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlf U0laRShwcmlvcml0aWVzKTsgaSsrKSB7Cj4gKwkJdWludDMyX3QgY3R4ID0gZ2VtX3F1ZXVlX2Ny ZWF0ZShpOTE1KTsKPiArCQlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBwcmlv cml0aWVzW2ldKTsKPiArCQloYW5kbGVbaV0gPSBzdG9yZV90aW1lc3RhbXAoaTkxNSwgY3R4LCBy aW5nLCBtbWlvX2Jhc2UpOwo+ICsJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiAr CX0KPiArCj4gKwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7IG4rKykKPiAr CQlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5bbl0pOwo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBp IDwgQVJSQVlfU0laRShwcmlvcml0aWVzKTsgaSsrKSB7Cj4gKwkJdWludDMyX3QgKnB0cjsKPiAr Cj4gKwkJcHRyID0gZ2VtX21tYXBfX2d0dChpOTE1LCBoYW5kbGVbaV0sIDQwOTYsIFBST1RfUkVB RCk7Cj4gKwkJZ2VtX3NldF9kb21haW4oaTkxNSwgaGFuZGxlW2ldLCAvKiBubyB3cml0ZSBoYXph cmQgbGllcyEgKi8KPiArCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RP TUFJTl9HVFQpOwo+ICsJCWdlbV9jbG9zZShpOTE1LCBoYW5kbGVbaV0pOwo+ICsKPiArCQloYW5k bGVbaV0gPSBwdHJbMTAyM107CgoxMDIzIHJlbGF0ZXMgdG8gNDA5MiBmcm9tIHN0b3JlX3RpbWVz dGFtcCBJIGdhdGhlci4gVGhlIHR3byBuZWVkIHRvIGJlIApkZWZpbmVkIGNsb3NlciB0b2dldGhl ci4KCj4gKwkJbXVubWFwKHB0ciwgNDA5Nik7Cj4gKwo+ICsJCWlndF9kZWJ1ZygiY3R4WyVkXSAu cHJpbz0lZCwgdGltZXN0YW1wPSV1XG4iLAo+ICsJCQkgIGksIHByaW9yaXRpZXNbaV0sIGhhbmRs ZVtpXSk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2Fzc2VydCgoaW50MzJfdCkoaGFuZGxlW0hJXSAtIGhh bmRsZVtMT10pIDwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJlb3JkZXIoaW50IGk5MTUs IHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIGZsYWdzKQo+ICsjZGVmaW5lIEVRVUFMIDEKPiArewo+ ICsJSUdUX0NPUktfSEFORExFKGNvcmspOwo+ICsJdWludDMyX3Qgc2NyYXRjaDsKPiArCXVpbnQz Ml90ICpwdHI7Cj4gKwl1aW50MzJfdCBjdHhbMl07Cj4gKwl1aW50MzJfdCBwbHVnOwo+ICsKPiAr CWN0eFtMT10gPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUpOwo+ICsJZ2VtX2NvbnRleHRfc2V0X3By aW9yaXR5KGk5MTUsIGN0eFtMT10sIE1JTl9QUklPKTsKPiArCj4gKwljdHhbSEldID0gZ2VtX3F1 ZXVlX2NyZWF0ZShpOTE1KTsKPiArCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHhb SEldLCBmbGFncyAmIEVRVUFMID8gTUlOX1BSSU8gOiAwKTsKPiArCj4gKwlzY3JhdGNoID0gZ2Vt X2NyZWF0ZShpOTE1LCA0MDk2KTsKPiArCXBsdWcgPSBpZ3RfY29ya19wbHVnKCZjb3JrLCBpOTE1 KTsKPiArCj4gKwkvKiBXZSBleHBlY3QgdGhlIGhpZ2ggcHJpb3JpdHkgY29udGV4dCB0byBiZSBl eGVjdXRlZCBmaXJzdCwgYW5kCj4gKwkgKiBzbyB0aGUgZmluYWwgcmVzdWx0IHdpbGwgYmUgdmFs dWUgZnJvbSB0aGUgbG93IHByaW9yaXR5IGNvbnRleHQuCj4gKwkgKi8KPiArCXN0b3JlX2R3b3Jk KGk5MTUsIGN0eFtMT10sIHJpbmcsIHNjcmF0Y2gsIDAsIGN0eFtMT10sIHBsdWcsIDApOwo+ICsJ c3RvcmVfZHdvcmQoaTkxNSwgY3R4W0hJXSwgcmluZywgc2NyYXRjaCwgMCwgY3R4W0hJXSwgcGx1 ZywgMCk7Cj4gKwo+ICsJdW5wbHVnX3Nob3dfcXVldWUoaTkxNSwgJmNvcmssIHJpbmcpOwo+ICsJ Z2VtX2Nsb3NlKGk5MTUsIHBsdWcpOwo+ICsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg Y3R4W0xPXSk7Cj4gKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtISV0pOwo+ICsKPiAr CXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgc2NyYXRjaCwgNDA5NiwgUFJPVF9SRUFEKTsKPiAr CWdlbV9zZXRfZG9tYWluKGk5MTUsIHNjcmF0Y2gsIC8qIG5vIHdyaXRlIGhhemFyZCBsaWVzISAq Lwo+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsK PiArCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKPiArCj4gKwlpZiAoZmxhZ3MgJiBFUVVBTCkg LyogZXF1YWwgcHJpb3JpdHksIHJlc3VsdCB3aWxsIGJlIGZpZm8gKi8KPiArCQlpZ3RfYXNzZXJ0 X2VxX3UzMihwdHJbMF0sIGN0eFtISV0pOwo+ICsJZWxzZQo+ICsJCWlndF9hc3NlcnRfZXFfdTMy KHB0clswXSwgY3R4W0xPXSk7Cj4gKwltdW5tYXAocHRyLCA0MDk2KTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgcHJvbW90aW9uKGludCBpOTE1LCB1bnNpZ25lZCByaW5nKQo+ICt7Cj4gKwlJR1Rf Q09SS19IQU5ETEUoY29yayk7Cj4gKwl1aW50MzJfdCByZXN1bHQsIGRlcDsKPiArCXVpbnQzMl90 ICpwdHI7Cj4gKwl1aW50MzJfdCBjdHhbM107Cj4gKwl1aW50MzJfdCBwbHVnOwo+ICsKPiArCWN0 eFtMT10gPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUpOwo+ICsJZ2VtX2NvbnRleHRfc2V0X3ByaW9y aXR5KGk5MTUsIGN0eFtMT10sIE1JTl9QUklPKTsKPiArCj4gKwljdHhbSEldID0gZ2VtX3F1ZXVl X2NyZWF0ZShpOTE1KTsKPiArCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHhbSEld LCAwKTsKPiArCj4gKwljdHhbTk9JU0VdID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKPiArCWdl bV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHhbTk9JU0VdLCBNSU5fUFJJTy8yKTsKPiAr Cj4gKwlyZXN1bHQgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsJZGVwID0gZ2VtX2NyZWF0 ZShpOTE1LCA0MDk2KTsKPiArCj4gKwlwbHVnID0gaWd0X2NvcmtfcGx1ZygmY29yaywgaTkxNSk7 Cj4gKwo+ICsJLyogRXhwZWN0IHRoYXQgSEkgcHJvbW90ZXMgTE8sIHNvIHRoZSBvcmRlciB3aWxs IGJlIExPLCBISSwgTk9JU0UuCj4gKwkgKgo+ICsJICogZmlmbyB3b3VsZCBiZSBOT0lTRSwgTE8s IEhJLgo+ICsJICogc3RyaWN0IHByaW9yaXR5IHdvdWxkIGJlICBISSwgTk9JU0UsIExPCj4gKwkg Ki8KPiArCXN0b3JlX2R3b3JkKGk5MTUsIGN0eFtOT0lTRV0sIHJpbmcsIHJlc3VsdCwgMCwgY3R4 W05PSVNFXSwgcGx1ZywgMCk7Cj4gKwlzdG9yZV9kd29yZChpOTE1LCBjdHhbTE9dLCByaW5nLCBy ZXN1bHQsIDAsIGN0eFtMT10sIHBsdWcsIDApOwo+ICsKPiArCS8qIGxpbmsgTE8gPC0+IEhJIHZp YSBhIGRlcGVuZGVuY3kgb24gYW5vdGhlciBidWZmZXIgKi8KPiArCXN0b3JlX2R3b3JkKGk5MTUs IGN0eFtMT10sIHJpbmcsIGRlcCwgMCwgY3R4W0xPXSwgMCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OKTsKPiArCXN0b3JlX2R3b3JkKGk5MTUsIGN0eFtISV0sIHJpbmcsIGRlcCwgMCwgY3R4 W0hJXSwgMCwgMCk7Cj4gKwo+ICsJc3RvcmVfZHdvcmQoaTkxNSwgY3R4W0hJXSwgcmluZywgcmVz dWx0LCAwLCBjdHhbSEldLCAwLCAwKTsKPiArCj4gKwl1bnBsdWdfc2hvd19xdWV1ZShpOTE1LCAm Y29yaywgcmluZyk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwgcGx1Zyk7Cj4gKwo+ICsJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCBjdHhbTk9JU0VdKTsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkx NSwgY3R4W0xPXSk7Cj4gKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtISV0pOwo+ICsK PiArCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgZGVwLCA0MDk2LCBQUk9UX1JFQUQpOwo+ICsJ Z2VtX3NldF9kb21haW4oaTkxNSwgZGVwLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KPiAr CQkJSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gKwlnZW1fY2xv c2UoaTkxNSwgZGVwKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxX3UzMihwdHJbMF0sIGN0eFtISV0p Owo+ICsJbXVubWFwKHB0ciwgNDA5Nik7Cj4gKwo+ICsJcHRyID0gZ2VtX21tYXBfX2d0dChpOTE1 LCByZXN1bHQsIDQwOTYsIFBST1RfUkVBRCk7Cj4gKwlnZW1fc2V0X2RvbWFpbihpOTE1LCByZXN1 bHQsIC8qIG5vIHdyaXRlIGhhemFyZCBsaWVzISAqLwo+ICsJCQlJOTE1X0dFTV9ET01BSU5fR1RU LCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPiArCWdlbV9jbG9zZShpOTE1LCByZXN1bHQpOwo+ICsK PiArCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4W05PSVNFXSk7Cj4gKwltdW5tYXAocHRy LCA0MDk2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc21va2V0ZXN0KGludCBpOTE1LCB1bnNp Z25lZCByaW5nLCB1bnNpZ25lZCB0aW1lb3V0KQo+ICt7Cj4gKwljb25zdCBpbnQgbmNwdXMgPSBz eXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKPiArCXVuc2lnbmVkIGVuZ2luZXNbMTZdOwo+ ICsJdW5zaWduZWQgbmVuZ2luZTsKPiArCXVuc2lnbmVkIGVuZ2luZTsKPiArCXVpbnQzMl90IHNj cmF0Y2g7Cj4gKwl1aW50MzJfdCAqcHRyOwo+ICsKPiArCW5lbmdpbmUgPSAwOwo+ICsJZm9yX2Vh Y2hfZW5naW5lKGk5MTUsIGVuZ2luZSkgewo+ICsJCWlmIChpZ25vcmVfZW5naW5lKGVuZ2luZSkp Cj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQllbmdpbmVzW25lbmdpbmUrK10gPSBlbmdpbmU7Cj4g Kwl9Cj4gKwlpZ3RfcmVxdWlyZShuZW5naW5lKTsKCmZvcl9lYWNoX3BoeXNpY2FsIGFuZCBjb3Vu cmluZyB0aGUgZW5naW5lcyBmb3IgZW5naW5lcyBhcnJheSB3b3VsZCBiZSAKYmV0dGVyIEkgdGhp bmsuCgo+ICsKPiArCXNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwo+ICsJaWd0X2Zv cmsoY2hpbGQsIG5jcHVzKSB7Cj4gKwkJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7Cj4gKwkJdWlu dDMyX3QgY3R4Owo+ICsKPiArCQloYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV9wZXJ0dXJiKGNo aWxkKTsKPiArCj4gKwkJY3R4ID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKPiArCQlpZ3RfdW50 aWxfdGltZW91dCh0aW1lb3V0KSB7Cj4gKwkJCWludCBwcmlvOwo+ICsKPiArCQkJcHJpbyA9IGhh cnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoTUFYX1BSSU8gLSBNSU5fUFJJTykg KyBNSU5fUFJJTzsKPiArCQkJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUsIGN0eCwgcHJp byk7Cj4gKwo+ICsJCQllbmdpbmUgPSBlbmdpbmVzW2hhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9t X3Vuc2FmZV9tYXgobmVuZ2luZSldOwo+ICsJCQlzdG9yZV9kd29yZChpOTE1LCBjdHgsIGVuZ2lu ZSwgc2NyYXRjaCwKPiArCQkJCSAgICA4KmNoaWxkICsgMCwgfmNoaWxkLAo+ICsJCQkJICAgIDAs IDApOwo+ICsJCQlmb3IgKHVuc2lnbmVkIGludCBzdGVwID0gMDsgc3RlcCA8IDg7IHN0ZXArKykK PiArCQkJCXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwgZW5naW5lLCBzY3JhdGNoLAo+ICsJCQkJCSAg ICA4KmNoaWxkICsgNCwgY291bnQrKywKPiArCQkJCQkgICAgMCwgMCk7Cj4gKwkJfQo+ICsJCWdl bV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKPiArCX0KPiArCWlndF93YWl0Y2hpbGRyZW4o KTsKPiArCj4gKwlwdHIgPSBnZW1fbW1hcF9fZ3R0KGk5MTUsIHNjcmF0Y2gsIDQwOTYsIFBST1Rf UkVBRCk7Cj4gKwlnZW1fc2V0X2RvbWFpbihpOTE1LCBzY3JhdGNoLCAvKiBubyB3cml0ZSBoYXph cmQgbGllcyEgKi8KPiArCQkJSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dU VCk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwgc2NyYXRjaCk7Cj4gKwo+ICsJZm9yICh1bnNpZ25lZCBu ID0gMDsgbiA8IG5jcHVzOyBuKyspIHsKPiArCQlpZ3RfYXNzZXJ0X2VxX3UzMihwdHJbMipuXSwg fm4pOwo+ICsJCS8qCj4gKwkJICogTm90ZSB0aGlzIGNvdW50IGlzIGFwcHJveGltYXRlIGR1ZSB0 byB1bmNvbnN0cmFpbmVkCj4gKwkJICogb3JkZXJpbmcgb2YgdGhlIGR3b3JkIHdyaXRlcyBiZXR3 ZWVuIGVuZ2luZXMuCj4gKwkJICoKPiArCQkgKiBUYWtlIHRoZSByZXN1bHQgd2l0aCBhIHBpbmNo IG9mIHNhbHQuCj4gKwkJICovCj4gKwkJaWd0X2luZm8oIkNoaWxkWyVkXSBjb21wbGV0ZWQgJXUg Y3ljbGVzXG4iLCAgbiwgcHRyWzIqbisxXSk7Cj4gKwl9Cj4gKwltdW5tYXAocHRyLCA0MDk2KTsK PiArfQo+ICsKPiAraWd0X21haW4KPiArewo+ICsJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUgKmU7Cj4gKwlpbnQgaTkxNSA9IC0xOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiAr CQlpOTE1ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwkJaWd0X3JlcXVpcmVf Z2VtKGk5MTUpOwo+ICsJfQo+ICsKPiArCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiArCQlpZ3RfZml4 dHVyZSB7Cj4gKwkJCWlndF9yZXF1aXJlKGdlbV9jb250ZXh0c19oYXNfc2hhcmVkX2d0dChpOTE1 KSk7Cj4gKwkJCWlndF9mb3JrX2hhbmdfZGV0ZWN0b3IoaTkxNSk7Cj4gKwkJfQo+ICsKPiArCQlp Z3Rfc3VidGVzdCgiY3JlYXRlLXNoYXJlZC1ndHQiKQo+ICsJCQljcmVhdGVfc2hhcmVkX2d0dChp OTE1LCAwKTsKPiArCj4gKwkJaWd0X3N1YnRlc3QoImRldGFjaGVkLXNoYXJlZC1ndHQiKQo+ICsJ CQljcmVhdGVfc2hhcmVkX2d0dChpOTE1LCBERVRBQ0hFRCk7Cj4gKwo+ICsJCWlndF9zdWJ0ZXN0 KCJkaXNqb2ludC10aW1lbGluZXMiKQo+ICsJCQlkaXNqb2ludF90aW1lbGluZXMoaTkxNSk7Cj4g Kwo+ICsJCWlndF9zdWJ0ZXN0KCJzaW5nbGUtdGltZWxpbmUiKQo+ICsJCQlzaW5nbGVfdGltZWxp bmUoaTkxNSk7Cj4gKwo+ICsJCWlndF9zdWJ0ZXN0KCJleGhhdXN0LXNoYXJlZC1ndHQiKQo+ICsJ CQlleGhhdXN0X3NoYXJlZF9ndHQoaTkxNSwgMCk7Cj4gKwo+ICsJCWlndF9zdWJ0ZXN0KCJleGhh dXN0LXNoYXJlZC1ndHQtbHJjIikKPiArCQkJZXhoYXVzdF9zaGFyZWRfZ3R0KGk5MTUsIEVYSEFV U1RfTFJDKTsKPiArCj4gKwkJZm9yIChlID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXM7IGUtPm5h bWU7IGUrKykgewo+ICsJCQlpZ3Rfc3VidGVzdF9mKCJleGVjLXNoYXJlZC1ndHQtJXMiLCBlLT5u YW1lKQo+ICsJCQkJZXhlY19zaGFyZWRfZ3R0KGk5MTUsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncyk7 CgpUaGUgc2FtZSBwcmV2aW91c2x5IHJhaXNlZCBxdWVzdGlvbiBvbiBzaG91bGQgaXQgaXRlcmF0 ZSB0aGUgbGVnYWN5IApleGVjYnVmIGVuZ2luZXMgb3IgcGh5c2ljYWwgZW5naW5lcy4gTWF5YmUg eW91IHdvbid0IGRpZmZlcmVudCBzdWJ0ZXN0cyAKZG8gYm90aD8KCj4gKwo+ICsJCQlpZiAoIWln bm9yZV9lbmdpbmUoZS0+ZXhlY19pZCB8IGUtPmZsYWdzKSkgewo+ICsJCQkJaWd0X3N1YnRlc3Rf ZigiZXhlYy1zaW5nbGUtdGltZWxpbmUtJXMiLAo+ICsJCQkJCSAgICAgIGUtPm5hbWUpCj4gKwkJ CQkJZXhlY19zaW5nbGVfdGltZWxpbmUoaTkxNSwKPiArCQkJCQkJCSAgICAgZS0+ZXhlY19pZCB8 IGUtPmZsYWdzKTsKPiArCQkJfQo+ICsKPiArCQkJLyoKPiArCQkJICogQ2hlY2sgdGhhdCB0aGUg c2hhcmVkIGNvbnRleHRzIG9wZXJhdGUgaW5kZXBlbmRlbnRseSwKPiArCQkJICogdGhhdCBpcyBy ZXF1ZXN0cyBvbiBvbmUgKCJxdWV1ZSIpIGNhbiBiZSBzY2hlZHVsZWQKPiArCQkJICogYXJvdW5k IGFub3RoZXIgcXVldWUuIFdlIG9ubHkgY2hlY2sgdGhlIGJhc2ljcyBoZXJlLAo+ICsJCQkgKiBl bm91Z2ggdG8gcmVkdWNlIHRoZSBxdWV1ZSBpbnRvIGp1c3QgYW5vdGhlciBjb250ZXh0LAo+ICsJ CQkgKiBhbmQgc28gcmVseSBvbiBnZW1fZXhlY19zY2hlZHVsZSB0byBwcm92ZSB0aGUgcmVzdC4K PiArCQkJICovCj4gKwkJCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPiArCQkJCWlndF9maXh0dXJlIHsK PiArCQkJCQlnZW1fcmVxdWlyZV9yaW5nKGk5MTUsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncyk7Cj4g KwkJCQkJaWd0X3JlcXVpcmUoZ2VtX2Nhbl9zdG9yZV9kd29yZChpOTE1LCBlLT5leGVjX2lkKSB8 IGUtPmZsYWdzKTsKPiArCQkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2VuYWJsZWQoaTkx NSkpOwo+ICsJCQkJCWlndF9yZXF1aXJlKGdlbV9zY2hlZHVsZXJfaGFzX2N0eF9wcmlvcml0eShp OTE1KSk7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJaWd0X3N1YnRlc3RfZigiUS1pbmRlcGVuZGVudC0l cyIsIGUtPm5hbWUpCj4gKwkJCQkJaW5kZXBlbmRlbnQoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZs YWdzLCAwKTsKPiArCj4gKwkJCQlpZ3Rfc3VidGVzdF9mKCJRLWluLW9yZGVyLSVzIiwgZS0+bmFt ZSkKPiArCQkJCQlyZW9yZGVyKGk5MTUsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncywgRVFVQUwpOwo+ ICsKPiArCQkJCWlndF9zdWJ0ZXN0X2YoIlEtb3V0LW9yZGVyLSVzIiwgZS0+bmFtZSkKPiArCQkJ CQlyZW9yZGVyKGk5MTUsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncywgMCk7Cj4gKwo+ICsJCQkJaWd0 X3N1YnRlc3RfZigiUS1wcm9tb3Rpb24tJXMiLCBlLT5uYW1lKQo+ICsJCQkJCXByb21vdGlvbihp OTE1LCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOwo+ICsKPiArCQkJCWlndF9zdWJ0ZXN0X2YoIlEt c21va2V0ZXN0LSVzIiwgZS0+bmFtZSkKPiArCQkJCQlzbW9rZXRlc3QoaTkxNSwgZS0+ZXhlY19p ZCB8IGUtPmZsYWdzLCA1KTsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJaWd0X3N1YnRlc3QoIlEt c21va2V0ZXN0LWFsbCIpIHsKPiArCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9lbmFibGVk KGk5MTUpKTsKPiArCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9oYXNfY3R4X3ByaW9yaXR5 KGk5MTUpKTsKPiArCQkJc21va2V0ZXN0KGk5MTUsIC0xLCAzMCk7Cj4gKwkJfQo+ICsKPiArCQlp Z3RfZml4dHVyZSB7Cj4gKwkJCWlndF9zdG9wX2hhbmdfZGV0ZWN0b3IoKTsKPiArCQl9Cj4gKwl9 Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fZXhlY193aGlzcGVyLmMgYi90ZXN0 cy9pOTE1L2dlbV9leGVjX3doaXNwZXIuYwo+IGluZGV4IDZjM2I1Mzc1Ni4uZDNlMGIwYmEyIDEw MDY0NAo+IC0tLSBhL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfd2hpc3Blci5jCj4gKysrIGIvdGVzdHMv aTkxNS9nZW1fZXhlY193aGlzcGVyLmMKPiBAQCAtODcsNiArODcsNyBAQCBzdGF0aWMgdm9pZCB2 ZXJpZnlfcmVsb2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsCj4gICAjZGVmaW5lIEhBTkcgMHgy MAo+ICAgI2RlZmluZSBTWU5DIDB4NDAKPiAgICNkZWZpbmUgUFJJT1JJVFkgMHg4MAo+ICsjZGVm aW5lIFFVRVVFUyAweDEwMAo+ICAgCj4gICBzdHJ1Y3QgaGFuZyB7Cj4gICAJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIgb2JqOwo+IEBAIC0xNzEsNyArMTcyLDcgQEAgc3RhdGljIHZv aWQgY3R4X3NldF9yYW5kb21fcHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHgpCj4gICB7Cj4g ICAJaW50IHByaW8gPSBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KDEwMjQp IC0gNTEyOwo+ICAgCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4LCBwcmlvKTsKPiAt fTsKPiArfQo+ICAgCj4gICBzdGF0aWMgdm9pZCB3aGlzcGVyKGludCBmZCwgdW5zaWduZWQgZW5n aW5lLCB1bnNpZ25lZCBmbGFncykKPiAgIHsKPiBAQCAtMjI2LDYgKzIyNyw5IEBAIHN0YXRpYyB2 b2lkIHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVuc2lnbmVkIGZsYWdzKQo+ICAg CWlmIChmbGFncyAmIENPTlRFWFRTKQo+ICAgCQlnZW1fcmVxdWlyZV9jb250ZXh0cyhmZCk7Cj4g ICAKPiArCWlmIChmbGFncyAmIFFVRVVFUykKPiArCQlpZ3RfcmVxdWlyZShnZW1faGFzX3F1ZXVl cyhmZCkpOwo+ICsKPiAgIAlpZiAoZmxhZ3MgJiBIQU5HKQo+ICAgCQlpbml0X2hhbmcoJmhhbmcp Owo+ICAgCj4gQEAgLTI5MCw2ICsyOTQsMTAgQEAgc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQs IHVuc2lnbmVkIGVuZ2luZSwgdW5zaWduZWQgZmxhZ3MpCj4gICAJCQlmb3IgKG4gPSAwOyBuIDwg NjQ7IG4rKykKPiAgIAkJCQljb250ZXh0c1tuXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7Cj4g ICAJCX0KPiArCQlpZiAoZmxhZ3MgJiBRVUVVRVMpIHsKPiArCQkJZm9yIChuID0gMDsgbiA8IDY0 OyBuKyspCj4gKwkJCQljb250ZXh0c1tuXSA9IGdlbV9xdWV1ZV9jcmVhdGUoZmQpOwo+ICsJCX0K PiAgIAkJaWYgKGZsYWdzICYgRkRTKSB7Cj4gICAJCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykK PiAgIAkJCQlmZHNbbl0gPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiBAQCAtNDAz LDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUs IHVuc2lnbmVkIGZsYWdzKQo+ICAgCQkJCQkJZXhlY2J1Zi5mbGFncyAmPSB+RU5HSU5FX01BU0s7 Cj4gICAJCQkJCQlleGVjYnVmLmZsYWdzIHw9IGVuZ2luZXNbcmFuZCgpICUgbmVuZ2luZV07Cj4g ICAJCQkJCX0KPiAtCQkJCQlpZiAoZmxhZ3MgJiBDT05URVhUUykgewo+ICsJCQkJCWlmIChmbGFn cyAmIChDT05URVhUUyB8IFFVRVVFUykpIHsKPiAgIAkJCQkJCWV4ZWNidWYucnN2ZDEgPSBjb250 ZXh0c1tyYW5kKCkgJSA2NF07Cj4gICAJCQkJCQlpZiAoZmxhZ3MgJiBQUklPUklUWSkKPiAgIAkJ CQkJCQljdHhfc2V0X3JhbmRvbV9wcmlvcml0eSh0aGlzX2ZkLCBleGVjYnVmLnJzdmQxKTsKPiBA QCAtNDg2LDcgKzQ5NCw3IEBAIHN0YXRpYyB2b2lkIHdoaXNwZXIoaW50IGZkLCB1bnNpZ25lZCBl bmdpbmUsIHVuc2lnbmVkIGZsYWdzKQo+ICAgCQkJZm9yIChuID0gMDsgbiA8IDY0OyBuKyspCj4g ICAJCQkJY2xvc2UoZmRzW25dKTsKPiAgIAkJfQo+IC0JCWlmIChmbGFncyAmIENPTlRFWFRTKSB7 Cj4gKwkJaWYgKGZsYWdzICYgKENPTlRFWFRTIHwgUVVFVUVTKSkgewo+ICAgCQkJZm9yIChuID0g MDsgbiA8IDY0OyBuKyspCj4gICAJCQkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY29udGV4dHNb bl0pOwo+ICAgCQl9Cj4gQEAgLTUyMiwxOCArNTMwLDI0IEBAIGlndF9tYWluCj4gICAJCXsgImNo YWluLWZvcmtlZCIsIENIQUlOIHwgRk9SS0VEIH0sCj4gICAJCXsgImNoYWluLWludGVycnVwdGli bGUiLCBDSEFJTiB8IElOVEVSUlVQVElCTEUgfSwKPiAgIAkJeyAiY2hhaW4tc3luYyIsIENIQUlO IHwgU1lOQyB9LAo+IC0JCXsgImNvbnRleHRzIiwgQ09OVEVYVFMgfSwKPiAtCQl7ICJjb250ZXh0 cy1pbnRlcnJ1cHRpYmxlIiwgQ09OVEVYVFMgfCBJTlRFUlJVUFRJQkxFfSwKPiAtCQl7ICJjb250 ZXh0cy1mb3JrZWQiLCBDT05URVhUUyB8IEZPUktFRH0sCj4gLQkJeyAiY29udGV4dHMtcHJpb3Jp dHkiLCBDT05URVhUUyB8IEZPUktFRCB8IFBSSU9SSVRZIH0sCj4gLQkJeyAiY29udGV4dHMtY2hh aW4iLCBDT05URVhUUyB8IENIQUlOIH0sCj4gLQkJeyAiY29udGV4dHMtc3luYyIsIENPTlRFWFRT IHwgU1lOQyB9LAo+ICAgCQl7ICJmZHMiLCBGRFMgfSwKPiAgIAkJeyAiZmRzLWludGVycnVwdGli bGUiLCBGRFMgfCBJTlRFUlJVUFRJQkxFfSwKPiAgIAkJeyAiZmRzLWZvcmtlZCIsIEZEUyB8IEZP UktFRH0sCj4gICAJCXsgImZkcy1wcmlvcml0eSIsIEZEUyB8IEZPUktFRCB8IFBSSU9SSVRZIH0s Cj4gICAJCXsgImZkcy1jaGFpbiIsIEZEUyB8IENIQUlOfSwKPiAgIAkJeyAiZmRzLXN5bmMiLCBG RFMgfCBTWU5DfSwKPiArCQl7ICJjb250ZXh0cyIsIENPTlRFWFRTIH0sCj4gKwkJeyAiY29udGV4 dHMtaW50ZXJydXB0aWJsZSIsIENPTlRFWFRTIHwgSU5URVJSVVBUSUJMRX0sCj4gKwkJeyAiY29u dGV4dHMtZm9ya2VkIiwgQ09OVEVYVFMgfCBGT1JLRUR9LAo+ICsJCXsgImNvbnRleHRzLXByaW9y aXR5IiwgQ09OVEVYVFMgfCBGT1JLRUQgfCBQUklPUklUWSB9LAo+ICsJCXsgImNvbnRleHRzLWNo YWluIiwgQ09OVEVYVFMgfCBDSEFJTiB9LAo+ICsJCXsgImNvbnRleHRzLXN5bmMiLCBDT05URVhU UyB8IFNZTkMgfSwKPiArCQl7ICJxdWV1ZXMiLCBRVUVVRVMgfSwKPiArCQl7ICJxdWV1ZXMtaW50 ZXJydXB0aWJsZSIsIFFVRVVFUyB8IElOVEVSUlVQVElCTEV9LAo+ICsJCXsgInF1ZXVlcy1mb3Jr ZWQiLCBRVUVVRVMgfCBGT1JLRUR9LAo+ICsJCXsgInF1ZXVlcy1wcmlvcml0eSIsIFFVRVVFUyB8 IEZPUktFRCB8IFBSSU9SSVRZIH0sCj4gKwkJeyAicXVldWVzLWNoYWluIiwgUVVFVUVTIHwgQ0hB SU4gfSwKPiArCQl7ICJxdWV1ZXMtc3luYyIsIFFVRVVFUyB8IFNZTkMgfSwKPiAgIAkJeyBOVUxM IH0KPiAgIAl9Owo+ICAgCWludCBmZDsKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQg Yi90ZXN0cy9tZXNvbi5idWlsZAo+IGluZGV4IDM4MTBiZDc2MC4uMzg4M2FlMTI3IDEwMDY0NAo+ IC0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBAQCAt MTE0LDYgKzExNCw3IEBAIGk5MTVfcHJvZ3MgPSBbCj4gICAJJ2dlbV9jdHhfZXhlYycsCj4gICAJ J2dlbV9jdHhfaXNvbGF0aW9uJywKPiAgIAknZ2VtX2N0eF9wYXJhbScsCj4gKwknZ2VtX2N0eF9z aGFyZWQnLAo+ICAgCSdnZW1fY3R4X3N3aXRjaCcsCj4gICAJJ2dlbV9jdHhfdGhyYXNoJywKPiAg IAknZ2VtX2RvdWJsZV9pcnFfbG9vcCcsCj4gCgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==