From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH i-g-t 2/4] tests/gem_scheduler: Add gem_scheduler test Date: Wed, 17 Feb 2016 12:37:07 +0000 Message-ID: <56C46973.9080303@intel.com> References: <1455269934-7586-1-git-send-email-derek.j.morton@intel.com> <1455269934-7586-3-git-send-email-derek.j.morton@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id F05EE6E99C for ; Wed, 17 Feb 2016 12:37:09 +0000 (UTC) In-Reply-To: <1455269934-7586-3-git-send-email-derek.j.morton@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Derek Morton , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SGksCgpmaXJzdCByb3VuZCBvZiBjb21tZW50cyBpbmxpbmUuIEEgZmV3IHRoaW5ncyB3aWxsIHBy b2JhYmx5IGhhdmUgdG8gCmNoYW5nZSBiYXNlZCBvbiB0aGUgY29tbWVudHMgb24gdGhlIHByZXZp b3VzIHBhdGNoIGluIHRoZSBzZXJpZXMgc28gSSdsbCAKaGF2ZSBhIGJldHRlciBsb29rIGF0IHRo ZSByZWxhdGVkIGxvZ2ljIG9uY2UgdGhlIG5ldyBzZXJpZXMgaXMgdXAuCgpSZWdhcmRzLApEYW5p ZWxlCgoKT24gMTIvMDIvMTYgMDk6MzgsIERlcmVrIE1vcnRvbiB3cm90ZToKPiBUaGlzIGlzIGlu dGVuZGVkIHRvIHRlc3QgdGhlIHNjaGVkdWxlciBiZWhhdmlvdXIgaXMgY29ycmVjdC4KPiBUaGUg c3VidGVzdHMgYXJlCj4gPHJpbmc+LWJhc2ljCj4gVGVzdHMgdGhhdCBiYXRjaCBidWZmZXJzIG9m IHRoZSBzYW1lIHByaW9yaXR5IHN1Ym1pdHRlZCB0byBhIHJpbmcKPiBleGVjdXRlIGluIHRoZSBv cmRlciB0aGV5IGFyZSBzdWJtaXR0ZWQuCj4gPHJpbmc+LXJlYWQKPiBTdWJtaXRzIGEgYmF0Y2gg YnVmZmVyIHdpdGggYSByZWFkIGRlcGVuZGVuY3kgdG8gYSBidWZmZXIgb2JqZWN0IHRvCj4gYSBy aW5nIHdoaWNoIGlzIGhlbGQgaW4gdGhlIHNjaGVkdWxlciBxdWV1ZSBieSBhIGxvbmcgcnVubmlu ZyBiYXRjaAo+IGJ1ZmZlci4gU3VibWl0IGJhdGNoIGJ1ZmZlcnMgdG8gb3RoZXIgcmluZ3MgdGhh dCBoYXZlIGEgcmVhZCBkZXBlbmRlbmN5Cj4gdG8gdGhlIHNhbWUgYnVmZmVyIG9iamVjdC4gRW5z dXJlIHRoZXkgZXhlY3V0ZSBiZWZvcmUgdGhlIGJhdGNoIGJ1ZmZlcgo+IGJlaW5nIGhlbGQgdXAg YmVoaW5kIHRoZSBsb25nIHJ1bm5pbmcgYmF0Y2ggYnVmZmVyLgo+IDxyaW5nPi13cml0ZQo+IFN1 Ym1pdHMgYSBiYXRjaCBidWZmZXIgd2l0aCBhIHdyaXRlIGRlcGVuZGVuY3kgdG8gYSBidWZmZXIg b2JqZWN0IHRvCj4gYSByaW5nIHdoaWNoIGlzIGhlbGQgaW4gdGhlIHNjaGVkdWxlciBxdWV1ZSBi eSBhIGxvbmcgcnVubmluZyBiYXRjaAo+IGJ1ZmZlci4gU3VibWl0IGJhdGNoIGJ1ZmZlcnMgdG8g b3RoZXIgcmluZ3MgdGhhdCBoYXZlIGEgd3JpdGUgZGVwZW5kZW5jeQo+IHRvIHRoZSBzYW1lIGJ1 ZmZlciBvYmplY3QuIFN1Ym1pdCBiYXRjaCBidWZmZXJzIHdpdGggbm8gaW50ZXJkZXBlbmRlbmNp ZXMKPiB0byBhbGwgcmluZ3MuIEVuc3VyZSB0aGUgYmF0Y2ggYnVmZmVycyB0aGF0IGhhdmUgd3Jp dGUgZGVwZW5kZW5jaWVzIGFyZQo+IGV4ZWN1dGVkIGluIHN1Ym1pc3Npb24gb3JkZXIgYnV0IHRo ZSBiYXRjaCBidWZmZXJzIHdpdGhvdXQgaW50ZXJkZXBlbmRlbmNpZXMKPiBkbyBub3QgZ2V0IGhl bGQgdXAuCj4KPiBTaWduZWQtb2ZmLWJ5OiBEZXJlayBNb3J0b24gPGRlcmVrLmoubW9ydG9uQGlu dGVsLmNvbT4KPiAtLS0KPiAgIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+ICAgdGVz dHMvZ2VtX3NjaGVkdWxlci5jICB8IDQwOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gICAyIGZpbGVzIGNoYW5nZWQsIDQxMCBpbnNlcnRpb25zKCsp Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3NjaGVkdWxlci5jCj4KPiBkaWZmIC0t Z2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBp bmRleCBkZjkyNTg2Li40MzlmNjJjIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTY2LDYgKzY2LDcgQEAgVEVT VFNfcHJvZ3NfTSA9IFwKPiAgIAlnZW1fcmVxdWVzdF9yZXRpcmUgXAo+ICAgCWdlbV9yZXNldF9z dGF0cyBcCj4gICAJZ2VtX3JpbmdmaWxsIFwKPiArCWdlbV9zY2hlZHVsZXIgXAo+ICAgCWdlbV9z ZXRfdGlsaW5nX3ZzX2JsdCBcCj4gICAJZ2VtX3NvZnRwaW4gXAo+ICAgCWdlbV9zdG9sZW4gXAo+ IGRpZmYgLS1naXQgYS90ZXN0cy9nZW1fc2NoZWR1bGVyLmMgYi90ZXN0cy9nZW1fc2NoZWR1bGVy LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjQ4MjRjMTMKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvdGVzdHMvZ2VtX3NjaGVkdWxlci5jCj4gQEAgLTAsMCArMSw0MDkg QEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiArICoK PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiAr ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiAr ICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBEZXJlayBN b3J0b24gPGRlcmVrLmoubW9ydG9uQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5j bHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5o Pgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVk ZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8dGltZS5o Pgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsj aW5jbHVkZSA8ZmNudGwuaD4KPiArCj4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJDaGVjayBzY2hl ZHVsZXIgYmVoYXZpb3VyLiBCYXNpYyB0ZXN0cyBlbnN1cmUgaW5kZXBlbmRhbnQgIgo+ICsgICAg ICAgICAgICAgICAgICAgICAiYmF0Y2ggYnVmZmVycyBvZiB0aGUgc2FtZSBwcmlvcml0eSBhcmUg ZXhlY3V0ZWQgaW4gIgo+ICsgICAgICAgICAgICAgICAgICAgICAic3VibWlzc2lvbiBvcmRlci4g UmVhZC1yZWFkIHRlc3RzIGVuc3VyZSAiCj4gKyAgICAgICAgICAgICAgICAgICAgICJiYXRjaCBi dWZmZXJzIHdpdGggYSByZWFkIGRlcGVuZGVuY3kgdG8gdGhlIHNhbWUgYnVmZmVyICIKPiArICAg ICAgICAgICAgICAgICAgICAgIm9iamVjdCBkbyBub3QgYmxvY2sgZWFjaCBvdGhlci4gV3JpdGUt d3JpdGUgZGVwZW5kZW5jeSAiCj4gKyAgICAgICAgICAgICAgICAgICAgICJ0ZXN0cyBlbnN1cmUg YmF0Y2ggYnVmZmVycyB3aXRoIGEgd3JpdGUgZGVwZW5kZW5jeSB0byBhICIKPiArICAgICAgICAg ICAgICAgICAgICAgImJ1ZmZlciBvYmplY3Qgd2lsbCBiZSBleGVjdXRlZCBpbiBzdWJtaXNzaW9u IG9yZGVyIGJ1dCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICJ3aWxsIG5vdCBibG9jayBleGVj dXRpb24gb2Ygb3RoZXIgaW5kZXBlbmRhbnQgYmF0Y2ggIgo+ICsgICAgICAgICAgICAgICAgICAg ICAiYnVmZmVycy4iKTsKPiArCj4gKyNkZWZpbmUgU0VDX1RPX05TRUMgKDEwMDAgKiAxMDAwICog MTAwMCkKPiArCj4gK3N0cnVjdCByaW5nIHsKPiArCWNvbnN0IGNoYXIgKm5hbWU7Cj4gKwlpbnQg aWQ7Cj4gK30gcmluZ3NbXSA9IHsKPiArCXsgInJlbmRlciIsIEk5MTVfRVhFQ19SRU5ERVIgfSwK PiArCXsgImJzZCIsICAgIEk5MTVfRVhFQ19CU0QgfSwKCklzIEJTRDEvQlNEMiBkaWZmZXJlbmNl IG9mIGFueSBpbXBvcnRhbmNlIGZvciB0aGUgdGVzdHM/Cgo+ICsJeyAiYmx0IiwgICAgSTkxNV9F WEVDX0JMVCB9LAo+ICsJeyAidmVib3giLCAgSTkxNV9FWEVDX1ZFQk9YIH0sCj4gK307CgpUaGlz IGlzIGEgc2xpZ2h0IGR1cGxpY2F0aW9uIG9mIGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzLiBIb3dl dmVyLCBJJ20gCm5vdCBzdXJlIHRoYXQgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXMgaXMgc3VpdGFi bGUgaGVyZSBjb25zaWRlcmluZyB0aGF0IAppdCBkb2Vzbid0IHNlZW0geW91IHdhbnQgdG8gY2hl Y2sgYm90aCB0aGUgdmFuaWxsYSBJOTE1X0VYRUNfQlNEIGNhc2UgCmFuZCB0aGUgQlNEMS9CU0Qy IGNhc2UKCj4gKwo+ICsjZGVmaW5lIE5CUl9SSU5HUyAoc2l6ZW9mKHJpbmdzKS9zaXplb2Yoc3Ry dWN0IHJpbmcpKQo+ICsKPiArLyogQmFzaWMgdGVzdC4gQ2hlY2sgYmF0Y2ggYnVmZmVycyBvZiB0 aGUgc2FtZSBwcmlvcml0eSBhbmQgd2l0aCBubyBkZXBlbmRlbmNpZXMKPiArICogYXJlIGV4ZWN1 dGVkIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdWJtaXR0ZWQuCj4gKyAqLwo+ICsjZGVmaW5lIE5C Ul9CQVNJQ19GRHMgKDMpCj4gK3N0YXRpYyB2b2lkIHJ1bl90ZXN0X2Jhc2ljKGludCBpbl9mbGln aHQsIGludCByaW5naWQpCj4gK3sKPiArCWludCBmZFtOQlJfQkFTSUNfRkRzXTsKPiArCWludCBs b29wOwo+ICsJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyW05CUl9CQVNJQ19GRHNdOwo+ICsJdWlu dDMyX3QgKmRlbGF5X2J1ZiwgKnRzMV9idWYsICp0czJfYnVmOwo+ICsJc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICp0czFfYmIsICp0czJfYmI7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg Kippbl9mbGlnaHRfYmJzOwo+ICsJdWludDMyX3QgY2FsaWJyYXRlZF8xczsKPiArCWRybV9pbnRl bF9ibyAqZGVsYXlfYm8sICp0czFfYm8sICp0czJfYm87Cj4gKwo+ICsJaW5fZmxpZ2h0X2JicyA9 IG1hbGxvYyhpbl9mbGlnaHQgKiBzaXplb2Yoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICopKTsK PiArCWlndF9hc3NlcnQoaW5fZmxpZ2h0X2Jicyk7Cj4gKwo+ICsJLyogTmVlZCBtdWx0aXBsZSBp OTE1IGZkJ3MuIFNjaGVkdWxlciB3aWxsIG5vdCBjaGFuZ2UgZXhlY3V0aW9uIG9yZGVyIG9mCj4g KwkgKiBiYXRjaCBidWZmZXJzIGZyb20gdGhlIHNhbWUgY29udGV4dC4KPiArCSAqLwo+ICsJZm9y KGxvb3A9MDsgbG9vcCA8IE5CUl9CQVNJQ19GRHM7IGxvb3ArKykgewo+ICsJCXN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqbm9vcF9iYjsKPiArCQlmZFtsb29wXSA9IGRybV9vcGVuX2RyaXZlcihE UklWRVJfSU5URUwpOwo+ICsJCWlndF9hc3NlcnQoZmRbbG9vcF0gPj0gMCk7Cj4gKwkJYnVmbWdy W2xvb3BdID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChmZFtsb29wXSwgQkFUQ0hfU1opOwo+ ICsJCWlndF9hc3NlcnQoYnVmbWdyW2xvb3BdKTsKPiArCQlkcm1faW50ZWxfYnVmbWdyX2dlbV9l bmFibGVfcmV1c2UoYnVmbWdyW2xvb3BdKTsKPiArCQkvKiBTZW5kIGEgbm9vcCBiYXRjaCBidWZm ZXIgdG8gZm9yY2UgYW55IGRlZmVycmVkIGluaXRpYWxpc2F0aW9uICovCj4gKwkJbm9vcF9iYiA9 IGlndF9jcmVhdGVfbm9vcF9iYihmZFtsb29wXSwgYnVmbWdyW2xvb3BdLCByaW5naWQsIDUpOwo+ ICsJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3Jpbmcobm9vcF9iYiwgcmluZ2lkKTsKPiAr CQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKG5vb3BfYmIpOwo+ICsJfQo+ICsKPiArCS8qIENyZWF0 ZSBidWZmZXIgb2JqZWN0cyAqLwo+ICsJZGVsYXlfYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVm bWdyWzBdLCAiZGVsYXkgYm8iLCBCQVRDSF9TWiwgQkFUQ0hfU1opOwo+ICsJaWd0X2Fzc2VydChk ZWxheV9ibyk7Cj4gKwl0czFfYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdyWzFdLCAidHMx IGJvIiwgQkFUQ0hfU1osIEJBVENIX1NaKTsKPiArCWlndF9hc3NlcnQodHMxX2JvKTsKPiArCXRz Ml9ibyA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3JbMl0sICJ0czIgYm8iLCBCQVRDSF9TWiwg QkFUQ0hfU1opOwo+ICsJaWd0X2Fzc2VydCh0czJfYm8pOwo+ICsKPiArCS8qIFB1dCBzb21lIG5v biB6ZXJvIHZhbHVlcyBpbiB0aGUgZGVsYXkgYm8gKi8KPiArCWRybV9pbnRlbF9ib19tYXAoZGVs YXlfYm8sIDEpOwoKQXMgSSBhbHJlYWR5IG1lbnRpb25lZCBvbiB0aGUgb3RoZXIgcGF0Y2ggaW4g c29tZSBjYXNlcyB5b3UgY291bGQgdXNlIGEgCnN1YmRhdGEvZ2V0X3N1YmRhdGEgY2FsbCBpbnN0 ZWFkIG9mIHRoZSBtYXAvdW5tYXAgZGFuY2UKCj4gKwlkZWxheV9idWYgPSBkZWxheV9iby0+dmly dHVhbDsKPiArCWRlbGF5X2J1ZlswXSA9IDB4ZmY7Cj4gKwlkcm1faW50ZWxfYm9fdW5tYXAoZGVs YXlfYm8pOwo+ICsKPiArCWNhbGlicmF0ZWRfMXMgPSBpZ3RfY2FsaWJyYXRlX2RlbGF5X2JiKGZk WzBdLCBidWZtZ3JbMF0sIHJpbmdpZCk7Cj4gKwo+ICsJLyogQmF0Y2ggYnVmZmVycyB0byBmaWxs IHRoZSByaW5nICovCgoiZmlsbCB0aGUgcmluZyIgZmVlbHMgYSBiaXQgdW5jbGVhciB0byBtZSwg YmVjYXVzZSB5b3UncmUgbm90IGZpbGxpbmcgCnRoZSByaW5nYnVmZmVyIGJ1dCB0aGUgaW4tZmxp Z2h0IHF1ZXVlIG9mIHRoZSBzY2hlZHVsZXIuIE1heWJlIHVzZSAKc29tZXRoaW5nIGxpa2UgInJl YWNoIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbiBmbGlnaHQgYmF0Y2hlcyI/Cgo+ICsJaW5fZmxp Z2h0X2Jic1swXSA9IGlndF9jcmVhdGVfZGVsYXlfYmIoZmRbMF0sIGJ1Zm1nclswXSwgcmluZ2lk LCBjYWxpYnJhdGVkXzFzLCBkZWxheV9ibyk7Cj4gKwlmb3IobG9vcCA9IDE7IGxvb3AgPCBpbl9m bGlnaHQ7IGxvb3ArKykKPiArCQlpbl9mbGlnaHRfYmJzW2xvb3BdID0gaWd0X2NyZWF0ZV9ub29w X2JiKGZkWzBdLCBidWZtZ3JbMF0sIHJpbmdpZCwgNSk7Cj4gKwo+ICsJLyogRXh0cmEgYmF0Y2gg YnVmZmVycyBpbiB0aGUgc2NoZWR1bGVyIHF1ZXVlICovCj4gKwl0czFfYmIgPSBpZ3RfY3JlYXRl X3RpbWVzdGFtcF9iYihmZFsxXSwgYnVmbWdyWzFdLCByaW5naWQsIHRzMV9ibywgTlVMTCwgZmFs c2UpOwo+ICsJdHMyX2JiID0gaWd0X2NyZWF0ZV90aW1lc3RhbXBfYmIoZmRbMl0sIGJ1Zm1nclsy XSwgcmluZ2lkLCB0czJfYm8sIE5VTEwsIGZhbHNlKTsKPiArCj4gKwkvKiBGbHVzaCBiYXRjaGJ1 ZmZlcnMgKi8KPiArCWZvcihsb29wID0gMDsgbG9vcCA8IGluX2ZsaWdodDsgbG9vcCsrKQo+ICsJ CWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcoaW5fZmxpZ2h0X2Jic1tsb29wXSwgcmlu Z2lkKTsKPiArCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcodHMxX2JiLCByaW5naWQp Owo+ICsJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfb25fcmluZyh0czJfYmIsIHJpbmdpZCk7Cj4g Kwo+ICsJLyogVGhpcyB3aWxsIG5vdCByZXR1cm4gdW50aWwgdGhlIGJvIGhhcyBmaW5pc2hlZCBl eGVjdXRpbmcgKi8KPiArCWRybV9pbnRlbF9ib19tYXAoZGVsYXlfYm8sIDApOwo+ICsJZHJtX2lu dGVsX2JvX21hcCh0czFfYm8sIDApOwo+ICsJZHJtX2ludGVsX2JvX21hcCh0czJfYm8sIDApOwo+ ICsKPiArCWRlbGF5X2J1ZiA9IGRlbGF5X2JvLT52aXJ0dWFsOwo+ICsJdHMxX2J1ZiA9IHRzMV9i by0+dmlydHVhbDsKPiArCXRzMl9idWYgPSB0czJfYm8tPnZpcnR1YWw7Cj4gKwo+ICsJaWd0X2Rl YnVnKCJEZWxheSBUaW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIsIGRlbGF5X2J1ZlsyXSk7 Cj4gKwlpZ3RfZGVidWcoIlRTMSBUaW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIsIHRzMV9i dWZbMF0pOwo+ICsJaWd0X2RlYnVnKCJUUzIgVGltZXN0YW1wID0gMHglMDgiIFBSSXgzMiAiXG4i LCB0czJfYnVmWzBdKTsKPiArCj4gKwkvKiBidWZbMF0gaW4gdGhlIHRhcmdldCBidWZmZXIgc2hv dWxkIGJlIDAgaWYgdGhlIGJhdGNoIGJ1ZmZlciBjb21wbGV0ZWQgKi8KPiArCWlndF9hc3NlcnRf ZihkZWxheV9idWZbMF0gPT0gMCwKPiArCSAgICAgICAgICAgICAiZGVsYXlfYnVmWzBdIGV4cGVj dGVkIDB4MCwgZ290IDB4JSIgUFJJeDMyICJcbiIsIGRlbGF5X2J1ZlswXSk7Cj4gKwo+ICsJaWd0 X2Fzc2VydF9mKGlndF9jb21wYXJlX3RpbWVzdGFtcHMoZGVsYXlfYnVmWzJdLCB0czFfYnVmWzBd KSwKPiArCSAgICAgICAgICAgICAiRGVsYXkgdHMgKDB4JTA4IiBQUkl4MzIgIikgPiBUUzEgdHMg KDB4JTA4IiBQUkl4MzIgIilcbiIsCj4gKwkgICAgICAgICAgICAgZGVsYXlfYnVmWzJdLCB0czFf YnVmWzBdKTsKPiArCWlndF9hc3NlcnRfZihpZ3RfY29tcGFyZV90aW1lc3RhbXBzKHRzMV9idWZb MF0sIHRzMl9idWZbMF0pLAo+ICsJICAgICAgICAgICAgICJUUzEgdHMgKDB4JTA4IiBQUkl4MzIg IikgPiBUUzIgdHMgKDB4JTA4IiBQUkl4MzIgIilcbiIsCj4gKwkgICAgICAgICAgICAgdHMxX2J1 ZlswXSwgdHMyX2J1ZlswXSk7Cj4gKwo+ICsJLyogQ2xlYW51cCAqLwo+ICsJZm9yKGxvb3AgPSAw OyBsb29wIDwgaW5fZmxpZ2h0OyBsb29wKyspCj4gKwkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShp bl9mbGlnaHRfYmJzW2xvb3BdKTsKPiArCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUodHMxX2JiKTsK PiArCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUodHMyX2JiKTsKPiArCj4gKwlkcm1faW50ZWxfYm9f dW5yZWZlcmVuY2UoZGVsYXlfYm8pOwo+ICsJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHRzMV9i byk7Cj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UodHMyX2JvKTsKPiArCWZvcihsb29wID0g MDsgbG9vcCA8IDM7IGxvb3ArKykgewoKMyAgLT4gIE5CUl9CQVNJQ19GRHMKCj4gKwkJZHJtX2lu dGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncltsb29wXSk7Cj4gKwkJY2xvc2UoZmRbbG9vcF0pOwo+ ICsJfQo+ICsJZnJlZShpbl9mbGlnaHRfYmJzKTsKPiArfQo+ICsKPiArLyogRGVwZW5kZW5jeSB0 ZXN0Lgo+ICsgKiB3cml0ZT0wLCBTdWJtaXQgYmF0Y2ggYnVmZmVycyB3aXRoIHJlYWQgZGVwZW5k ZW5jaWVzIHRvIGFsbCByaW5ncy4gRGVsYXkgb25lCj4gKyAqIHdpdGggYSBsb25nIGV4ZWN1dGlu ZyBiYXRjaCBidWZmZXIuIENoZWNrIHRoZSBvdGhlcnMgYXJlIG5vdCBoZWxkIHVwLgo+ICsgKiB3 cml0ZT0xLCBTdWJtaXQgYmF0Y2ggYnVmZmVycyB3aXRoIHdyaXRlIGRlcGVuZGVuY2llcyB0byBh bGwgcmluZ3MuIERlbGF5IG9uZQo+ICsgKiB3aXRoIGEgbG9uZyBleGVjdXRpbmcgYmF0Y2ggYnVm ZmVyLiBBbHNvIHN1Ym1pdCBiYXRjaCBidWZmZXJzIHdpdGggbm8KPiArICogZGVwZW5kZW5jaWVz IHRvIGFsbCByaW5ncy4gQmF0Y2ggYnVmZmVycyB3aXRoIHdyaXRlIGRlcGVuZGVuY2llcyBzaG91 bGQgYmUKPiArICogZXhlY3V0ZWQgaW4gc3VibWlzc2lvbiBvcmRlci4gVGhlIGJhdGNoIGJ1ZmZl cnMgd2l0aCBubyBkZXBlbmRlbmNpZXMgc2hvdWxkCj4gKyAqIG5vdCBiZSBoZWxkIHVwLgo+ICsg Ki8KPiArc3RhdGljIHZvaWQgcnVuX3Rlc3RfZGVwZW5kZW5jeShpbnQgaW5fZmxpZ2h0LCBpbnQg cmluZywgYm9vbCB3cml0ZSkKClRoaXMgZnVuY3Rpb24gY29udGFpbnMgc2V2ZXJhbCBzZXR1cC9j bGVhbnVwIGxvb3BzIHRoYXQgbWFrZSB0aGUgYWN0dWFsIAp0ZXN0IGxvZ2ljIGl0c2VsZiBhIGJp dCBkaWZmaWN1bHQgdG8gaXNvbGF0ZS4gTWF5YmUgdGhvc2UgY291bGQgYmUgbW92ZWQgCnRvIGhl bHBlciBmdW5jdGlvbiB0byBtYWtlIHRoZSBkaXN0aW5jdGlvbiBjbGVhcmVyCgo+ICt7Cj4gKwlp bnQgZmRbTkJSX1JJTkdTXSwgZmQyW05CUl9SSU5HU107Cj4gKwlpbnQgbG9vcDsKPiArCWludCBw cmltZV9mZDsKPiArCXVpbnQzMl90ICpkZWxheV9idWYsICp0c19idWZbTkJSX1JJTkdTXSwgKnRz Ml9idWZbTkJSX1JJTkdTXSwgKnNoYXJlZF9idWY7Cj4gKwl1aW50MzJfdCBjYWxpYnJhdGVkXzFz Owo+ICsJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyW05CUl9SSU5HU10sICpidWZtZ3IyW05CUl9S SU5HU107Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKnRzX2JiW05CUl9SSU5HU10sICp0 czJfYmJbTkJSX1JJTkdTXSwgKippbl9mbGlnaHRfYmJzOwo+ICsJZHJtX2ludGVsX2JvICpkZWxh eV9ibywgKnRzX2JvW05CUl9SSU5HU10sICp0czJfYm9bTkJSX1JJTkdTXSwgKnNoYXJlZF9ib1tO QlJfUklOR1NdOwo+ICsKPiArCWluX2ZsaWdodF9iYnMgPSBtYWxsb2MoaW5fZmxpZ2h0ICogc2l6 ZW9mKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqKSk7Cj4gKwlpZ3RfYXNzZXJ0KGluX2ZsaWdo dF9iYnMpOwo+ICsKPiArCS8qIE5lZWQgbXVsdGlwbGUgaTkxNSBmZCdzLiBTY2hlZHVsZXIgd2ls bCBub3QgY2hhbmdlIGV4ZWN1dGlvbiBvcmRlciBvZgo+ICsJICogYmF0Y2ggYnVmZmVycyBmcm9t IHRoZSBzYW1lIGNvbnRleHQuCj4gKwkgKi8KPiArCWZvcihsb29wPTA7IGxvb3AgPCBOQlJfUklO R1M7IGxvb3ArKykgewo+ICsJCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqbm9vcF9iYjsKPiAr CQlmZFtsb29wXSA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJCWlndF9hc3Nl cnQoZmRbbG9vcF0gPj0gMCk7Cj4gKwkJYnVmbWdyW2xvb3BdID0gZHJtX2ludGVsX2J1Zm1ncl9n ZW1faW5pdChmZFtsb29wXSwgQkFUQ0hfU1opOwo+ICsJCWlndF9hc3NlcnQoYnVmbWdyW2xvb3Bd KTsKPiArCQlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyW2xvb3BdKTsK PiArCQkvKiBTZW5kIGEgbm9vcCBiYXRjaCBidWZmZXIgdG8gZm9yY2UgYW55IGRlZmVycmVkIGlu aXRpYWxpc2F0aW9uICovCj4gKwkJbm9vcF9iYiA9IGlndF9jcmVhdGVfbm9vcF9iYihmZFtsb29w XSwgYnVmbWdyW2xvb3BdLCByaW5nc1tsb29wXS5pZCwgNSk7Cj4gKwkJaW50ZWxfYmF0Y2hidWZm ZXJfZmx1c2hfb25fcmluZyhub29wX2JiLCByaW5nc1tsb29wXS5pZCk7Cj4gKwkJaW50ZWxfYmF0 Y2hidWZmZXJfZnJlZShub29wX2JiKTsKClRoZSBmZCBvcGVuaW5nIGNvZGUgaXMgZHVwbGljYXRl ZCBzZXZlcmFsIHRpbWVzIGluIHRoaXMgZmlsZS4gQ291bGQgdXNlIAphIHN0YXRpYyBmdW5jdGlv biB0byByZWR1Y2UgZHVwbGljYXRpb24KCj4gKwkJaWYod3JpdGUpIHsKPiArCQkJc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpub29wX2JiMjsKPiArCQkJZmQyW2xvb3BdID0gZHJtX29wZW5fZHJp dmVyKERSSVZFUl9JTlRFTCk7Cj4gKwkJCWlndF9hc3NlcnQoZmQyW2xvb3BdID49IDApOwo+ICsJ CQlidWZtZ3IyW2xvb3BdID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChmZDJbbG9vcF0sIEJB VENIX1NaKTsKPiArCQkJaWd0X2Fzc2VydChidWZtZ3IyW2xvb3BdKTsKPiArCQkJZHJtX2ludGVs X2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1ncjJbbG9vcF0pOwo+ICsJCQkvKiBTZW5kIGEg bm9vcCBiYXRjaCBidWZmZXIgdG8gZm9yY2UgYW55IGRlZmVycmVkIGluaXRpYWxpc2F0aW9uICov Cj4gKwkJCW5vb3BfYmIyID0gaWd0X2NyZWF0ZV9ub29wX2JiKGZkMltsb29wXSwgYnVmbWdyMlts b29wXSwgcmluZ3NbbG9vcF0uaWQsIDUpOwo+ICsJCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9v bl9yaW5nKG5vb3BfYmIyLCByaW5nc1tsb29wXS5pZCk7Cj4gKwkJCWludGVsX2JhdGNoYnVmZmVy X2ZyZWUobm9vcF9iYjIpOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBDcmVhdGUgYnVmZmVyIG9i amVjdHMgKi8KPiArCWRlbGF5X2JvID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1ncltyaW5nXSwg ImRlbGF5IGJvIiwgQkFUQ0hfU1osIEJBVENIX1NaKTsKPiArCWlndF9hc3NlcnQoZGVsYXlfYm8p Owo+ICsJZm9yKGxvb3AgPSAwOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspIHsKPiArCQl0c19i b1tsb29wXSA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3JbbG9vcF0sICJ0cyBibyIsIEJBVENI X1NaLCBCQVRDSF9TWik7Cj4gKwkJaWd0X2Fzc2VydCh0c19ib1tsb29wXSk7Cj4gKwkJaWYod3Jp dGUpIHsKPiArCQkJdHMyX2JvW2xvb3BdID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1ncjJbbG9v cF0sICJ0cyBibyIsIEJBVENIX1NaLCBCQVRDSF9TWik7Cj4gKwkJCWlndF9hc3NlcnQodHMyX2Jv W2xvb3BdKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogQ3JlYXRlIHNoYXJlZCBidWZmZXIgb2Jq ZWN0ICovCj4gKwlzaGFyZWRfYm9bMF0gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdyWzBdLCAi c2hhcmVkIGJvIiwgQkFUQ0hfU1osIEJBVENIX1NaKTsKPiArCWlndF9hc3NlcnQoc2hhcmVkX2Jv WzBdKTsKPiArCj4gKwlkcm1faW50ZWxfYm9fZ2VtX2V4cG9ydF90b19wcmltZShzaGFyZWRfYm9b MF0sICZwcmltZV9mZCk7Cj4gKwlmb3IobG9vcCA9IDE7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3Ar Kykgewo+ICsJCXNoYXJlZF9ib1tsb29wXSA9IGRybV9pbnRlbF9ib19nZW1fY3JlYXRlX2Zyb21f cHJpbWUoYnVmbWdyW2xvb3BdLAo+ICsJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbWVfZmQsIEJBVENIX1NaKTsKPiArCQlpZ3RfYXNzZXJ0 KHNoYXJlZF9ib1tsb29wXSk7Cj4gKwl9Cj4gKwljbG9zZShwcmltZV9mZCk7Cj4gKwo+ICsJLyog UHV0IHNvbWUgbm9uIHplcm8gdmFsdWVzIGluIHRoZSBkZWxheSBhbmQgc2hhcmVkIGJvICovCj4g Kwlkcm1faW50ZWxfYm9fbWFwKGRlbGF5X2JvLCAxKTsKPiArCWRlbGF5X2J1ZiA9IGRlbGF5X2Jv LT52aXJ0dWFsOwo+ICsJZGVsYXlfYnVmWzBdID0gMHhmZjsKPiArCWRybV9pbnRlbF9ib191bm1h cChkZWxheV9ibyk7Cj4gKwlkcm1faW50ZWxfYm9fbWFwKHNoYXJlZF9ib1swXSwgMSk7Cj4gKwlz aGFyZWRfYnVmID0gc2hhcmVkX2JvWzBdLT52aXJ0dWFsOwo+ICsJc2hhcmVkX2J1ZlswXSA9IDB4 ZmYwMGZmMDA7Cj4gKwlkcm1faW50ZWxfYm9fdW5tYXAoc2hhcmVkX2JvWzBdKTsKPiArCj4gKwlj YWxpYnJhdGVkXzFzID0gaWd0X2NhbGlicmF0ZV9kZWxheV9iYihmZFtyaW5nXSwgYnVmbWdyW3Jp bmddLCByaW5nc1tyaW5nXS5pZCk7Cj4gKwo+ICsJLyogQmF0Y2ggYnVmZmVycyB0byBmaWxsIHRo ZSByaW5nICovCj4gKwlpbl9mbGlnaHRfYmJzWzBdID0gaWd0X2NyZWF0ZV9kZWxheV9iYihmZFty aW5nXSwgYnVmbWdyW3JpbmddLAo+ICsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmluZ3NbcmluZ10uaWQsIGNhbGlicmF0ZWRfMXMsIGRlbGF5X2JvKTsKPiArCWZvcihs b29wID0gMTsgbG9vcCA8IGluX2ZsaWdodDsgbG9vcCsrKQo+ICsJCWluX2ZsaWdodF9iYnNbbG9v cF0gPSBpZ3RfY3JlYXRlX25vb3BfYmIoZmRbcmluZ10sIGJ1Zm1ncltyaW5nXSwKPiArCQkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmdzW3JpbmddLmlkLCA1KTsK PiArCj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykgewo+ICsJCXRz X2JiW2xvb3BdID0gaWd0X2NyZWF0ZV90aW1lc3RhbXBfYmIoZmRbbG9vcF0sIGJ1Zm1ncltsb29w XSwKPiArCQkgICAgICAgICAgICAgICAgICByaW5nc1tsb29wXS5pZCwgdHNfYm9bbG9vcF0sIHNo YXJlZF9ib1tsb29wXSwgd3JpdGUpOwo+ICsJCWlmKHdyaXRlKQo+ICsJCQl0czJfYmJbbG9vcF0g PSBpZ3RfY3JlYXRlX3RpbWVzdGFtcF9iYihmZDJbbG9vcF0sIGJ1Zm1ncjJbbG9vcF0sCj4gKwkJ CSAgICAgICAgICAgICAgICAgICByaW5nc1tsb29wXS5pZCwgdHMyX2JvW2xvb3BdLCBOVUxMLCBm YWxzZSk7Cj4gKwl9Cj4gKwo+ICsJLyogRmx1c2ggYmF0Y2hidWZmZXJzICovCj4gKwlmb3IobG9v cCA9IDA7IGxvb3AgPCBpbl9mbGlnaHQ7IGxvb3ArKykKPiArCQlpbnRlbF9iYXRjaGJ1ZmZlcl9m bHVzaF9vbl9yaW5nKGluX2ZsaWdodF9iYnNbbG9vcF0sIHJpbmdzW3JpbmddLmlkKTsKPiArCj4g KwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKHRzX2JiW3JpbmddLCByaW5nc1tyaW5n XS5pZCk7Cj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPiArCQlp Zihsb29wICE9IHJpbmcpCj4gKwkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcodHNf YmJbbG9vcF0sIHJpbmdzW2xvb3BdLmlkKTsKPiArCj4gKwlpZih3cml0ZSkgewo+ICsJCWludGVs X2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcodHMyX2JiW3JpbmddLCByaW5nc1tyaW5nXS5pZCk7 Cj4gKwkJZm9yKGxvb3AgPSAwOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspCj4gKwkJCWlmKGxv b3AgIT0gcmluZykKPiArCQkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcodHMyX2Ji W2xvb3BdLCByaW5nc1tsb29wXS5pZCk7Cj4gKwl9Cj4gKwo+ICsJLyogVGhpcyB3aWxsIG5vdCBy ZXR1cm4gdW50aWwgdGhlIGJvIGhhcyBmaW5pc2hlZCBleGVjdXRpbmcgKi8KPiArCWRybV9pbnRl bF9ib19tYXAoZGVsYXlfYm8sIDApOwo+ICsJZGVsYXlfYnVmID0gZGVsYXlfYm8tPnZpcnR1YWw7 Cj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykgewo+ICsJCWRybV9p bnRlbF9ib19tYXAodHNfYm9bbG9vcF0sIDApOwo+ICsJCXRzX2J1Zltsb29wXSA9IHRzX2JvW2xv b3BdLT52aXJ0dWFsOwo+ICsJCWlmKHdyaXRlKSB7Cj4gKwkJCWRybV9pbnRlbF9ib19tYXAodHMy X2JvW2xvb3BdLCAwKTsKPiArCQkJdHMyX2J1Zltsb29wXSA9IHRzMl9ib1tsb29wXS0+dmlydHVh bDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogYnVmWzBdIGluIHRoZSB0YXJnZXQgYnVmZmVyIHNo b3VsZCBiZSAwIGlmIHRoZSBiYXRjaCBidWZmZXIgY29tcGxldGVkICovCj4gKwlpZ3RfYXNzZXJ0 X2YoZGVsYXlfYnVmWzBdID09IDAsCj4gKwkgICAgICAgICAgICAgImRlbGF5X2J1ZlswXSBleHBl Y3RlZCAweDAsIGdvdCAweCUiIFBSSXgzMiAiXG4iLAo+ICsJICAgICAgICAgICAgIGRlbGF5X2J1 ZlswXSk7Cj4gKwo+ICsJaWd0X2RlYnVnKCIlNnMgZGVsYXkgdGltZXN0YW1wID0gMHglMDgiIFBS SXgzMiAiXG4iLAo+ICsJICAgICAgICAgIHJpbmdzW3JpbmddLm5hbWUsIGRlbGF5X2J1ZlsyXSk7 Cj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPiArCQlpZ3RfZGVi dWcoIiU2cyBiYXRjaCB0aW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIsCj4gKwkJICAgICAg ICAgIHJpbmdzW2xvb3BdLm5hbWUsIHRzX2J1Zltsb29wXVswXSk7Cj4gKwo+ICsJaWYod3JpdGUp IHsKPiArCQlpZ3RfZGVidWcoIkluZGVwZW5kYW50IGJhdGNoIGJ1ZmZlcnNcbiIpOwo+ICsJCWZv cihsb29wID0gMDsgbG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsrKQo+ICsJCQlpZ3RfZGVidWcoIiU2 cyBiYXRjaCB0aW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIsCj4gKwkJCSAgICAgICAgICBy aW5nc1tsb29wXS5uYW1lLCB0czJfYnVmW2xvb3BdWzBdKTsKPiArCX0KPiArCj4gKwlmb3IobG9v cCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykgewo+ICsJCWlmKGxvb3AgIT0gcmluZykg ewo+ICsJCQlpZih3cml0ZSkgewo+ICsJCQkJLyogV3JpdGUgZGVwZW5kZW5jeSwgZGVsYXllZCBy aW5nIHNob3VsZCBydW4gZmlyc3QgKi8KPiArCQkJCWlndF9hc3NlcnRfZihpZ3RfY29tcGFyZV90 aW1lc3RhbXBzKHRzX2J1ZltyaW5nXVswXSwgdHNfYnVmW2xvb3BdWzBdKSwKPiArCQkJCSAgICAg ICAgICAgICAiJXMgcmFuIGJlZm9yZSAlcyAtIDB4JTA4IiBQUkl4MzIgIiB2cyAweCUwOCIgUFJJ eDMyICJcbiIsCj4gKwkJCQkgICAgICAgICAgICAgcmluZ3NbbG9vcF0ubmFtZSwgcmluZ3Nbcmlu Z10ubmFtZSwKPiArCQkJCSAgICAgICAgICAgICB0c19idWZbbG9vcF1bMF0sIHRzX2J1ZltyaW5n XVswXSk7Cj4gKwkJCQkvKiBTZWNvbmQgYmIgd2l0aG91dCBkZXBlbmRlbmN5IHNob3VsZCBydW4g Zmlyc3QgKi8KPiArCQkJCWlndF9hc3NlcnRfZihpZ3RfY29tcGFyZV90aW1lc3RhbXBzKHRzMl9i dWZbbG9vcF1bMF0sIHRzX2J1Zltsb29wXVswXSksCj4gKwkJCQkgICAgICAgICAgICAgIiglcykg aW5kZXBlbmRhbnQgYmIgd2FzIGhlbGQgdXAgLSAweCUwOCIgUFJJeDMyICIgdnMgMHglMDgiIFBS SXgzMiAiXG4iLAo+ICsJCQkJICAgICAgICAgICAgIHJpbmdzW2xvb3BdLm5hbWUsIHRzX2J1Zlts b29wXVswXSwgdHMyX2J1Zltsb29wXVswXSk7Cj4gKwkJCX0KPiArCQkJZWxzZQo+ICsJCQkJLyog UmVhZCBkZXBlbmRlbmN5LCBkZWxheWVkIHJpbmcgc2hvdWxkIHJ1biBsYXN0ICovCj4gKwkJCQlp Z3RfYXNzZXJ0X2YoaWd0X2NvbXBhcmVfdGltZXN0YW1wcyh0c19idWZbbG9vcF1bMF0sIHRzX2J1 ZltyaW5nXVswXSksCj4gKwkJCQkgICAgICAgICAgICAgIiVzIHJhbiBhZnRlciAlcyAtIDB4JTA4 IiBQUkl4MzIgIiB2cyAweCUwOCIgUFJJeDMyICJcbiIsCj4gKwkJCQkgICAgICAgICAgICAgcmlu Z3NbbG9vcF0ubmFtZSwgcmluZ3NbcmluZ10ubmFtZSwKPiArCQkJCSAgICAgICAgICAgICB0c19i dWZbbG9vcF1bMF0sIHRzX2J1ZltyaW5nXVswXSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIENs ZWFudXAgKi8KPiArCWZvcihsb29wID0gMDsgbG9vcCA8IGluX2ZsaWdodDsgbG9vcCsrKQo+ICsJ CWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoaW5fZmxpZ2h0X2Jic1tsb29wXSk7Cj4gKwo+ICsJZm9y KGxvb3AgPSAwOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspIHsKPiArCQlpbnRlbF9iYXRjaGJ1 ZmZlcl9mcmVlKHRzX2JiW2xvb3BdKTsKPiArCQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UodHNf Ym9bbG9vcF0pOwo+ICsJCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShzaGFyZWRfYm9bbG9vcF0p Owo+ICsJCWlmKHdyaXRlKSB7Cj4gKwkJCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUodHMyX2JiW2xv b3BdKTsKPiArCQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHRzMl9ib1tsb29wXSk7Cj4gKwkJ fQo+ICsJfQo+ICsKPiArCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShkZWxheV9ibyk7Cj4gKwo+ ICsJZm9yKGxvb3AgPSAwOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspIHsKPiArCQlkcm1faW50 ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyW2xvb3BdKTsKPiArCQljbG9zZShmZFtsb29wXSk7Cj4g KwkJaWYod3JpdGUpIHsKPiArCQkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncjJbbG9v cF0pOwo+ICsJCQljbG9zZShmZDJbbG9vcF0pOwo+ICsJCX0KPiArCX0KPiArCj4gKwlmcmVlKGlu X2ZsaWdodF9iYnMpOwo+ICt9Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlpbnQgbG9vcDsKPiAr CWludCBpbl9mbGlnaHQ7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWludCBkZWJ1Z19mZDsK PiArCQlpbnQgbDsKPiArCQljaGFyIGJ1Zls2XTsKPiArCQkvKiBHZXQgbmJyIG9mIGJhdGNoIGJ1 ZmZlcnMgdGhhdCB0aGUgc2NoZWR1bGVyIHdpbGwgcXVldWUgaW4gdGhlCj4gKwkJICogSFcuIElm IHRoaXMgZGVidWdmcyBmaWxlIGRvZXMgbm90IGV4aXN0IHRoZXJlIGlzIG5vIHNjaGVkdWxlcgo+ ICsJCSAqIHNvIHNraXAgdGhlIHRlc3QuCj4gKwkJICovCj4gKwkJZGVidWdfZmQgPSBpZ3RfZGVi dWdmc19vcGVuKCJpOTE1X3NjaGVkdWxlcl9taW5fZmx5aW5nIiwgT19SRE9OTFkpOwo+ICsJCWln dF9za2lwX29uKGRlYnVnX2ZkID09IC0xKTsKPiArCQlsID0gcmVhZChkZWJ1Z19mZCwgYnVmLCBz aXplb2YoYnVmKS0xKTsKPiArCQlpZ3RfYXNzZXJ0KGwgPiAwKTsKPiArCQlpZ3RfYXNzZXJ0KGwg PCBzaXplb2YoYnVmKSk7Cj4gKwkJYnVmW2xdID0gJ1wwJzsKPiArCQkvKiBNYXkgYmUgYSBkZWNp bWFsIG9yIGhleCBudW1iZXIgZGVwZW5kaW5nIG9uIHNoZWR1bGVyIHZlcnNpb24gKi8KPiArCQlp Zihzc2NhbmYoYnVmLCAiMHglMngiLCAmaW5fZmxpZ2h0KSAhPSAxKQo+ICsJCQlpZ3RfYXNzZXJ0 X2Yoc3NjYW5mKGJ1ZiwgIiUyZCIsICZpbl9mbGlnaHQpID09IDEsCj4gKwkJCSAgICAgICAgICAg ICAiRXJyb3IgcmVhZGluZyBmcm9tIGk5MTVfc2NoZWR1bGVyX21pbl9mbHlpbmdcbiIpOwoKVGhp cyB3aWxsIHByb2JhYmx5IHN0YWJpbGl6ZSBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyBtZXJnZWQs IHNvIHRoZSAKZmluYWwgdmVyc2lvbiBzaG91bGQgcHJvYmFibHkgaGF2ZSBvbmx5IDEgc3NjYW5m IGNhbGwKCj4gKwkJY2xvc2UoZGVidWdfZmQpOwo+ICsJCWlndF9kZWJ1ZygiaW4gZmxpZ2h0ID0g JWRcbiIsIGluX2ZsaWdodCk7Cj4gKwl9Cj4gKwo+ICsJZm9yIChsb29wPTA7IGxvb3AgPCBOQlJf UklOR1M7IGxvb3ArKykKPiArCQlpZ3Rfc3VidGVzdF9mKCIlcy1iYXNpYyIsIHJpbmdzW2xvb3Bd Lm5hbWUpIHsKPiArCQkJcnVuX3Rlc3RfYmFzaWMoaW5fZmxpZ2h0LCByaW5nc1tsb29wXS5pZCk7 Cj4gKwkJfQo+ICsKPiArCWZvciAobG9vcD0wOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspCj4g KwkJaWd0X3N1YnRlc3RfZigiJXMtcmVhZCIsIHJpbmdzW2xvb3BdLm5hbWUpIHsKPiArCQkJcnVu X3Rlc3RfZGVwZW5kZW5jeShpbl9mbGlnaHQsIGxvb3AsIGZhbHNlKTsKPiArCQl9Cj4gKwo+ICsJ Zm9yIChsb29wPTA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPiArCQlpZ3Rfc3VidGVzdF9m KCIlcy13cml0ZSIsIHJpbmdzW2xvb3BdLm5hbWUpIHsKPiArCQkJcnVuX3Rlc3RfZGVwZW5kZW5j eShpbl9mbGlnaHQsIGxvb3AsIHRydWUpOwo+ICsJCX0KPiArCj4gK30KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=