From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH i-g-t v3 3/6] tests/gem_scheduler: Add gem_scheduler test Date: Thu, 17 Mar 2016 10:33:07 +0000 Message-ID: <56EA87E3.9060409@intel.com> References: <1457607814-18751-1-git-send-email-derek.j.morton@intel.com> <1457607814-18751-4-git-send-email-derek.j.morton@intel.com> <56EA6F97.4060002@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 579C56E876 for ; Thu, 17 Mar 2016 10:33:09 +0000 (UTC) In-Reply-To: <56EA6F97.4060002@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 CgpPbiAxNy8wMy8xNiAwODo0OSwgRGFuaWVsZSBDZXJhb2xvIFNwdXJpbyB3cm90ZToKPgo+Cj4g T24gMTAvMDMvMTYgMTE6MDMsIERlcmVrIE1vcnRvbiB3cm90ZToKPj4gVGhpcyBpcyBpbnRlbmRl ZCB0byB0ZXN0IHRoZSBzY2hlZHVsZXIgYmVoYXZpb3VyIGlzIGNvcnJlY3QuCj4+IFRoZSBzdWJ0 ZXN0cyBhcmUKPj4gPHJpbmc+LWJhc2ljCj4+IFRlc3RzIHRoYXQgYmF0Y2ggYnVmZmVycyBvZiB0 aGUgc2FtZSBwcmlvcml0eSBzdWJtaXR0ZWQgdG8gYSByaW5nCj4+IGV4ZWN1dGUgaW4gdGhlIG9y ZGVyIHRoZXkgYXJlIHN1Ym1pdHRlZC4KPj4gPHJpbmc+LXJlYWQKPj4gU3VibWl0cyBhIGJhdGNo IGJ1ZmZlciB3aXRoIGEgcmVhZCBkZXBlbmRlbmN5IHRvIGEgYnVmZmVyIG9iamVjdCB0bwo+PiBh IHJpbmcgd2hpY2ggaXMgaGVsZCBpbiB0aGUgc2NoZWR1bGVyIHF1ZXVlIGJ5IGEgbG9uZyBydW5u aW5nIGJhdGNoCj4+IGJ1ZmZlci4gU3VibWl0IGJhdGNoIGJ1ZmZlcnMgdG8gb3RoZXIgcmluZ3Mg dGhhdCBoYXZlIGEgcmVhZCBkZXBlbmRlbmN5Cj4+IHRvIHRoZSBzYW1lIGJ1ZmZlciBvYmplY3Qu IEVuc3VyZSB0aGV5IGV4ZWN1dGUgYmVmb3JlIHRoZSBiYXRjaCBidWZmZXIKPj4gYmVpbmcgaGVs ZCB1cCBiZWhpbmQgdGhlIGxvbmcgcnVubmluZyBiYXRjaCBidWZmZXIuCj4+IDxyaW5nPi13cml0 ZQo+PiBTdWJtaXRzIGEgYmF0Y2ggYnVmZmVyIHdpdGggYSB3cml0ZSBkZXBlbmRlbmN5IHRvIGEg YnVmZmVyIG9iamVjdCB0bwo+PiBhIHJpbmcgd2hpY2ggaXMgaGVsZCBpbiB0aGUgc2NoZWR1bGVy IHF1ZXVlIGJ5IGEgbG9uZyBydW5uaW5nIGJhdGNoCj4+IGJ1ZmZlci4gU3VibWl0IGJhdGNoIGJ1 ZmZlcnMgdG8gb3RoZXIgcmluZ3MgdGhhdCBoYXZlIGEgd3JpdGUgZGVwZW5kZW5jeQo+PiB0byB0 aGUgc2FtZSBidWZmZXIgb2JqZWN0LiBTdWJtaXQgYmF0Y2ggYnVmZmVycyB3aXRoIG5vIAo+PiBp bnRlcmRlcGVuZGVuY2llcwo+PiB0byBhbGwgcmluZ3MuIEVuc3VyZSB0aGUgYmF0Y2ggYnVmZmVy cyB0aGF0IGhhdmUgd3JpdGUgZGVwZW5kZW5jaWVzIGFyZQo+PiBleGVjdXRlZCBpbiBzdWJtaXNz aW9uIG9yZGVyIGJ1dCB0aGUgYmF0Y2ggYnVmZmVycyB3aXRob3V0IAo+PiBpbnRlcmRlcGVuZGVu Y2llcwo+PiBkbyBub3QgZ2V0IGhlbGQgdXAuCj4+Cj4+IHYyOiBBZGRyZXNzZWQgcmV2aWV3IGNv bW1lbnRzIGZyb20gRGFuaWVsZSBDZXJhb2xvIFNwdXJpbwo+Pgo+PiB2MzogQWRkZWQgbG9naWMg dG8gdXNlIGdlbmVyaWMgQlNEIHJpbmcgaWYgdGhlcmUgaXMgMSBhbmQgQlNEMSAvIEJTRDIgCj4+ IGlmIHRoZXJlCj4+ICAgICAgYXJlIDIuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IERlcmVrIE1vcnRv bjxkZXJlay5qLm1vcnRvbkBpbnRlbC5jb20+Cj4+IC0tLQo+PiAgIHRlc3RzL01ha2VmaWxlLnNv dXJjZXMgfCAgIDEgKwo+PiAgIHRlc3RzL2dlbV9zY2hlZHVsZXIuYyAgfCA0NTkgCj4+ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICAyIGZpbGVz IGNoYW5nZWQsIDQ2MCBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3Rz L2dlbV9zY2hlZHVsZXIuYwo+Pgo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNl cyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4gaW5kZXggZjhiMThiMC4uYzg4ZTA0NSAxMDA2 NDQKPj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+PiArKysgYi90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCj4+IEBAIC02Niw2ICs2Niw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4+ICAgICAg IGdlbV9yZXF1ZXN0X3JldGlyZSBcCj4+ICAgICAgIGdlbV9yZXNldF9zdGF0cyBcCj4+ICAgICAg IGdlbV9yaW5nZmlsbCBcCj4+ICsgICAgZ2VtX3NjaGVkdWxlciBcCj4+ICAgICAgIGdlbV9zZXRf dGlsaW5nX3ZzX2JsdCBcCj4+ICAgICAgIGdlbV9zb2Z0cGluIFwKPj4gICAgICAgZ2VtX3N0b2xl biBcCj4+IGRpZmYgLS1naXQgYS90ZXN0cy9nZW1fc2NoZWR1bGVyLmMgYi90ZXN0cy9nZW1fc2No ZWR1bGVyLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNDM2NDQw YQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3Rlc3RzL2dlbV9zY2hlZHVsZXIuYwo+PiBAQCAt MCwwICsxLDQ1OSBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBv cmF0aW9uCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gCj4+IG9idGFpbmluZyBhCj4+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIAo+PiAi U29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IAo+PiBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgCj4+IHN1 YmxpY2Vuc2UsCj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSAKPj4gdGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiAr ICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgCj4+IHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgCj4+IHBvcnRpb25zIG9mIHRo ZQo+PiArICogU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIAo+PiBFWFBSRVNTIE9SCj4+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIAo+PiBNRVJDSEFOVEFCSUxJVFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCAKPj4gU0hBTEwKPj4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIAo+PiBPUiBPVEhFUgo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIAo+PiBBUklTSU5HCj4+ICsgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIAo+PiBPVEhFUiBERUFMSU5HUwo+PiArICogSU4gVEhFIFNPRlRXQVJFLgo+PiArICoKPj4g KyAqIEF1dGhvcnM6Cj4+ICsgKiAgICBEZXJlayBNb3J0b248ZGVyZWsuai5tb3J0b25AaW50ZWwu Y29tPgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSAiaWd0LmgiCj4+ICsjaW5jbHVk ZSA8dW5pc3RkLmg+Cj4+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4+ICsjaW5jbHVkZSA8c3RkaW50 Lmg+Cj4+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPj4gKyNp bmNsdWRlIDxpbnR0eXBlcy5oPgo+PiArI2luY2x1ZGUgPHRpbWUuaD4KPj4gKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgo+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+PiArI2luY2x1ZGUgPGZjbnRs Lmg+Cj4+ICsKPj4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJDaGVjayBzY2hlZHVsZXIgYmVoYXZp b3VyLiBCYXNpYyB0ZXN0cyBlbnN1cmUgCj4+IGluZGVwZW5kYW50ICIKPj4gKyAgICAgICAgICAg ICAgICAgICAgICJiYXRjaCBidWZmZXJzIG9mIHRoZSBzYW1lIHByaW9yaXR5IGFyZSAKPj4gZXhl Y3V0ZWQgaW4gIgo+PiArICAgICAgICAgICAgICAgICAgICAgInN1Ym1pc3Npb24gb3JkZXIuIFJl YWQtcmVhZCB0ZXN0cyBlbnN1cmUgIgo+PiArICAgICAgICAgICAgICAgICAgICAgImJhdGNoIGJ1 ZmZlcnMgd2l0aCBhIHJlYWQgZGVwZW5kZW5jeSB0byB0aGUgCj4+IHNhbWUgYnVmZmVyICIKPj4g KyAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgZG8gbm90IGJsb2NrIGVhY2ggb3RoZXIuIFdy aXRlLXdyaXRlIAo+PiBkZXBlbmRlbmN5ICIKPj4gKyAgICAgICAgICAgICAgICAgICAgICJ0ZXN0 cyBlbnN1cmUgYmF0Y2ggYnVmZmVycyB3aXRoIGEgd3JpdGUgCj4+IGRlcGVuZGVuY3kgdG8gYSAi Cj4+ICsgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyIG9iamVjdCB3aWxsIGJlIGV4ZWN1dGVk IGluIHN1Ym1pc3Npb24gCj4+IG9yZGVyIGJ1dCAiCj4+ICsgICAgICAgICAgICAgICAgICAgICAi d2lsbCBub3QgYmxvY2sgZXhlY3V0aW9uIG9mIG90aGVyIGluZGVwZW5kYW50IAo+PiBiYXRjaCAi Cj4+ICsgICAgICAgICAgICAgICAgICAgICAiYnVmZmVycy4iKTsKPj4gKwo+PiArI2RlZmluZSBT RUNfVE9fTlNFQyAoMTAwMCAqIDEwMDAgKiAxMDAwKQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IHJp bmcgewo+PiArICAgIGNvbnN0IGNoYXIgKm5hbWU7Cj4+ICsgICAgaW50IGlkOwo+PiArICAgIGJv b2wgZXhpc3RzOwo+PiArfSByaW5nc1tdID0gewo+PiArICAgIHsgInJlbmRlciIsIEk5MTVfRVhF Q19SRU5ERVIsIGZhbHNlIH0sCj4+ICsgICAgeyAiYnNkIiwgICAgSTkxNV9FWEVDX0JTRCAsIGZh bHNlIH0sCj4+ICsgICAgeyAiYnNkMiIsICAgIEk5MTVfRVhFQ19CU0QgfCAyPDwxMywgZmFsc2Ug fSwKPj4gKyAgICB7ICJibHQiLCAgICBJOTE1X0VYRUNfQkxULCBmYWxzZSB9LAo+PiArICAgIHsg InZlYm94IiwgIEk5MTVfRVhFQ19WRUJPWCwgZmFsc2UgfSwKPj4gK307Cj4KPiBJZiB5b3UgY2Fu J3QgdXNlIGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzIGNvdWxkIHlvdSBhZGQgYSBjb21tZW50IHRv IAo+IGV4cGxhaW4gd2h5PyBhbHNvIGNvbnNpZGVyaW5nIHRoZSByZW5hbWluZyBnb2luZyBvbiBp biB0aGUga2VybmVsIHlvdSAKPiBjb2xkIHJlcGxhY2UgInJpbmciIHdpdGggImVuZ2luZSIKPgo+ PiArCj4+ICsjZGVmaW5lIE5CUl9SSU5HUyAoc2l6ZW9mKHJpbmdzKS9zaXplb2Yoc3RydWN0IHJp bmcpKQo+PiArCj4+ICtzdGF0aWMgdm9pZCBjaGVja19yaW5ncyhpbnQgZmQpIHsKPj4gKyAgICBp bnQgbG9vcDsKPj4gKyAgICBmb3IobG9vcD0wOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspIHsK Pgo+IFN0eWxlOiBzcGFjZSBiZXR3ZWVuIGZvci9pZiBhbmQgIigiIGluIHRoaXMgZmlsZQo+Cj4+ ICsgICAgICAgIGlmKGdlbV9oYXNfcmluZyhmZCwgcmluZ3NbbG9vcF0uaWQpKSB7Cj4+ICsgICAg ICAgICAgICBpZihyaW5nc1tsb29wXS5pZCA9PSAoSTkxNV9FWEVDX0JTRCB8IDI8PDEzKSkgewo+ PiArICAgICAgICAgICAgICAgIHJpbmdzW2xvb3BdLmV4aXN0cyA9IGdlbV9oYXNfYnNkMihmZCk7 Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBlbHNlIHsKPj4gKyAgICAgICAgICAg ICAgICByaW5nc1tsb29wXS5leGlzdHMgPSB0cnVlOwo+Cj4gWW91J3JlIG1hcmtpbmcgdGhlIFZF Qk9YIGFzIGV4aXN0aW5nIHNvIGFkZGluZyBhIGdlbiByZXF1aXJlbWVudCBpbiAKPiB0aGlzIGZ1 bmN0aW9uIHdvdWxkIGJlIG5pY2UuIEkga25vdyB0aGF0IHRoZSBsaWJyYXJ5IHlvdSdyZSB1c2lu ZyAKPiBhbHJlYWR5IHJlcXVpcmVzIGdlbjgsIGJ1dCB0aGUgcmVxdWlyZW1lbnQgZG9lc24ndCBs b29rIHRvIGJlIGV4cGxpY2l0IAo+IGFueXdoZXJlIGluIHRoaXMgZmlsZSBzbyBpdCB3b3VsZCBi ZSBuaWNlIHRvIGFkZCBpdCBmb3IgY2xhcml0eS4KPgo+PiArICAgICAgICAgICAgICAgIGlmKHJp bmdzW2xvb3BdLmlkID09IEk5MTVfRVhFQ19CU0QpCj4+ICsgICAgICAgICAgICAgICAgICAgIC8q IElmIHRoZXJlIGlzIEJTRDIsIG5lZWQgdG8gbWFrZSBCU0QxCj4+ICsgICAgICAgICAgICAgICAg ICAgICAqIGV4cGxpY2l0Lgo+PiArICAgICAgICAgICAgICAgICAgICAgKi8KPj4gKyAgICAgICAg ICAgICAgICAgICAgaWYoZ2VtX2hhc19ic2QyKGZkKSkKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHJpbmdzW2xvb3BdLmlkIHw9ICgxPDwxMyk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAg ICAgIH0KPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBkcm1faW50ZWxfYm8gKmNyZWF0 ZV9hbmRfY2hlY2tfYm8oZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCAKPj4gY29uc3QgY2hhciAq ZGVzYykKPj4gK3sKPj4gKyAgICBkcm1faW50ZWxfYm8gKmJvID0gZHJtX2ludGVsX2JvX2FsbG9j KGJ1Zm1nciwgZGVzYywgQkFUQ0hfU1osIAo+PiBCQVRDSF9TWik7Cj4+ICsgICAgaWd0X2Fzc2Vy dF9mKGJvLCAiRmFpbGVkIGFsbG9jYXRpbmcgJXNcbiIsIGRlc2MpOwo+PiArICAgIHJldHVybiBi bzsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqY3JlYXRl X2RlbGF5X2JiKGludCBmZCwgCj4+IGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmluZ2lkLCAK Pj4gdWludDMyX3QgbG9vcHMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHJtX2ludGVsX2JvICpkZXN0KQo+PiArewo+PiArICAgIHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYnVmZmVyOwo+PiArICAgIGJ1ZmZlciA9IGludGVsX2JhdGNoYnVm ZmVyX2FsbG9jKGJ1Zm1nciwgaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpOwo+PiArICAgIGlndF9h c3NlcnQoYnVmZmVyKTsKPj4gKyAgICBpZ3RfY3JlYXRlX2RlbGF5X2JiKGZkLCBidWZmZXIsIHJp bmdpZCwgbG9vcHMsIGRlc3QpOwo+PiArICAgIHJldHVybiBidWZmZXI7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmNyZWF0ZV90aW1lc3RhbXBfYmIoaW50 IGZkLCAKPj4gZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmluZ2lkLCAKPj4gZHJtX2lu dGVsX2JvICpkZXN0LAo+PiArIGRybV9pbnRlbF9ibyAqbG9hZCwgYm9vbCB3cml0ZSkKPj4gK3sK Pj4gKyAgICBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJ1ZmZlcjsKPj4gKyAgICBidWZmZXIg PSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3IsIGludGVsX2dldF9kcm1fZGV2aWQoZmQp KTsKPj4gKyAgICBpZ3RfYXNzZXJ0KGJ1ZmZlcik7Cj4+ICsgICAgaWd0X2NyZWF0ZV90aW1lc3Rh bXBfYmIoZmQsIGJ1ZmZlciwgcmluZ2lkLCBkZXN0LCBsb2FkLCB3cml0ZSk7Cj4+ICsgICAgcmV0 dXJuIGJ1ZmZlcjsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqY3JlYXRlX25vb3BfYmIoaW50IGZkLCAKPj4gZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5v b3BzKQo+PiArewo+PiArICAgIHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYnVmZmVyOwo+PiAr ICAgIGJ1ZmZlciA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgaW50ZWxfZ2V0X2Ry bV9kZXZpZChmZCkpOwo+PiArICAgIGlndF9hc3NlcnQoYnVmZmVyKTsKPj4gKyAgICBpZ3RfY3Jl YXRlX25vb3BfYmIoYnVmZmVyLCBub29wcyk7Cj4+ICsgICAgcmV0dXJuIGJ1ZmZlcjsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgaW5pdF9jb250ZXh0KGludCAqZmQsIGRybV9pbnRlbF9idWZt Z3IgKipidWZtZ3IsIGludCAKPj4gcmluZ2lkKQo+Cj4gaW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEg Yml0IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdyZSBub3QgCj4gaW5pdF9jb250ZXh0IG1p Z2h0IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdyZSBub3QgCj4gaW5pdF9j b250ZXh0IG1pZ2h0IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdyZSBub3Qg Cj4gaW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlv dSdyZSBub3QgCj4gaW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBu YW1lIGFzIHlvdSdyZSBub3QgCj4gaW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEgYml0IG1pc2xlYWRp bmcgYXMgYSBuYW1lIGFzIHlvdSdyZSBub3QgCj4gaW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEgYml0 IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdyZSBub3QgCj4gaW5pdF9jb250ZXh0IG1pZ2h0 IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdyZSBub3QgIGEgY3R4IAo+IGRp cmVjdGx5LCBhbHRob3VnaCBpbml0aWFsaXppbmcKCk5vdCByZWFsbHkgc3VyZSBob3cgdGhpcyBt ZXNzIGVuZGVkIHVwIGluIHRoZSBlbWFpbCA6LVAKCldoYXQgSSB3YW50ZWQgdG8gc2F5IGlzOgoK aW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdy ZSBub3QgCmluaXRpYWxpemluZyBhIGN0eCBkaXJlY3RseSwgYWx0aG91Z2ggaW5pdGlhbGl6aW5n IHRoZSBmZCBhbmQgZG9pbmcgYSAKc3VibWlzc2lvbiB5b3UgYWltIHRvIGluaXRpYWxpemUgdGhl IGRlZmF1bHQgY29udGV4dCBzbyBJJ20gbm90IHN1cmUgCndoYXQgdG8gc3VnZ2VzdCBhcyBhbiBh bHRlcm5hdGl2ZSBuYW1lLgoKUmVnYXJkcywKRGFuaWVsZQoKPgo+PiArewo+PiArICAgIHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqbm9vcF9iYjsKPj4gKyAgICAqZmQgPSBkcm1fb3Blbl9kcml2 ZXIoRFJJVkVSX0lOVEVMKTsKPj4gKyAgICBpZ3RfYXNzZXJ0KCpmZCA+PSAwKTsKPj4gKyAgICAq YnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdCgqZmQsIEJBVENIX1NaKTsKPj4gKyAg ICBpZ3RfYXNzZXJ0KCpidWZtZ3IpOwo+PiArICAgIGRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJs ZV9yZXVzZSgqYnVmbWdyKTsKPj4gKyAgICAvKiBTZW5kIGEgbm9vcCBiYXRjaCBidWZmZXIgdG8g Zm9yY2UgYW55IGRlZmVycmVkIGluaXRpYWxpc2F0aW9uICovCj4+ICsgICAgbm9vcF9iYiA9IGNy ZWF0ZV9ub29wX2JiKCpmZCwgKmJ1Zm1nciwgNSk7Cj4+ICsgICAgaW50ZWxfYmF0Y2hidWZmZXJf Zmx1c2hfb25fcmluZyhub29wX2JiLCByaW5naWQpOwo+PiArICAgIGludGVsX2JhdGNoYnVmZmVy X2ZyZWUobm9vcF9iYik7Cj4+ICt9Cj4+ICsKPj4gKy8qIEJhc2ljIHRlc3QuIENoZWNrIGJhdGNo IGJ1ZmZlcnMgb2YgdGhlIHNhbWUgcHJpb3JpdHkgYW5kIHdpdGggbm8gCj4+IGRlcGVuZGVuY2ll cwo+PiArICogYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdWJtaXR0ZWQuCj4+ ICsgKi8KPj4gKyNkZWZpbmUgTkJSX0JBU0lDX0ZEcyAoMykKPj4gK3N0YXRpYyB2b2lkIHJ1bl90 ZXN0X2Jhc2ljKGludCBpbl9mbGlnaHQsIGludCByaW5naWQpCj4+ICt7Cj4+ICsgICAgaW50IGZk W05CUl9CQVNJQ19GRHNdOwo+PiArICAgIGludCBsb29wOwo+PiArICAgIGRybV9pbnRlbF9idWZt Z3IgKmJ1Zm1ncltOQlJfQkFTSUNfRkRzXTsKPj4gKyAgICB1aW50MzJfdCAqZGVsYXlfYnVmLCAq dHMxX2J1ZiwgKnRzMl9idWY7Cj4+ICsgICAgc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICp0czFf YmIsICp0czJfYmI7Cj4+ICsgICAgc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICoqaW5fZmxpZ2h0 X2JiczsKPj4gKyAgICB1aW50MzJfdCBjYWxpYnJhdGVkXzFzOwo+PiArICAgIGRybV9pbnRlbF9i byAqZGVsYXlfYm8sICp0czFfYm8sICp0czJfYm87Cj4+ICsKPj4gKyAgICBpbl9mbGlnaHRfYmJz ID0gbWFsbG9jKGluX2ZsaWdodCAqIHNpemVvZihzdHJ1Y3QgCj4+IGludGVsX2JhdGNoYnVmZmVy ICopKTsKPj4gKyAgICBpZ3RfYXNzZXJ0KGluX2ZsaWdodF9iYnMpOwo+PiArCj4+ICsgICAgLyog TmVlZCBtdWx0aXBsZSBpOTE1IGZkJ3MuIFNjaGVkdWxlciB3aWxsIG5vdCBjaGFuZ2UgZXhlY3V0 aW9uIAo+PiBvcmRlciBvZgo+PiArICAgICAqIGJhdGNoIGJ1ZmZlcnMgZnJvbSB0aGUgc2FtZSBj b250ZXh0Lgo+PiArICAgICAqLwo+PiArICAgIGZvcihsb29wPTA7IGxvb3AgPCBOQlJfQkFTSUNf RkRzOyBsb29wKyspCj4+ICsgICAgICAgIGluaXRfY29udGV4dCgmKGZkW2xvb3BdKSwgJihidWZt Z3JbbG9vcF0pLCByaW5naWQpOwo+PiArCj4+ICsKPj4gKyAgICAvKiBDcmVhdGUgYnVmZmVyIG9i amVjdHMgKi8KPj4gKyAgICBkZWxheV9ibyA9IGNyZWF0ZV9hbmRfY2hlY2tfYm8oYnVmbWdyWzBd LCAiZGVsYXkgYm8iKTsKPj4gKyAgICB0czFfYm8gPSBjcmVhdGVfYW5kX2NoZWNrX2JvKGJ1Zm1n clsxXSwgInRzMSBibyIpOwo+PiArICAgIHRzMl9ibyA9IGNyZWF0ZV9hbmRfY2hlY2tfYm8oYnVm bWdyWzJdLCAidHMyIGJvIik7Cj4+ICsKPj4gKyAgICAvKiBQdXQgc29tZSBub24gemVybyB2YWx1 ZXMgaW4gdGhlIGRlbGF5IGJvICovCj4KPiBZb3UgZG8gdGhpcyB3cml0ZSBmb3IgZXZlcnkgZGVs YXkgYmF0Y2gsIHNvIHlvdSBjb3VsZCBtb3ZlIGl0IHRvIAo+IGNyZWF0ZV9kZWxheV9iYiAob3Ig dG8gdGhlIGxpYnJhcnkgZnVuY3Rpb24pCj4KPj4gKyAgICB7Cj4KPiBXaHkgaXMgdGhpcyBleHRy YSBzY29wZSBuZWVkZWQ/ICJkYXRhIiBkb2Vzbid0IGNsYXNoIHdpdGggYW55IG90aGVyIAo+IHZh cmlhYmxlIG5hbWUKPgo+PiArICAgICAgICB1aW50MzJfdCBkYXRhPTB4ZmZmZmZmZmY7Cj4+ICsg ICAgICAgIGRybV9pbnRlbF9ib19zdWJkYXRhKGRlbGF5X2JvLCAwLCA0LCAmZGF0YSk7Cj4+ICsg ICAgfQo+PiArCj4+ICsgICAgY2FsaWJyYXRlZF8xcyA9IGlndF9jYWxpYnJhdGVfZGVsYXlfYmIo ZmRbMF0sIGJ1Zm1nclswXSwgcmluZ2lkKTsKPj4gKwo+PiArICAgIC8qIEJhdGNoIGJ1ZmZlcnMg dG8gZmlsbCB0aGUgaW4gZmxpZ2h0IHF1ZXVlICovCj4+ICsgICAgaW5fZmxpZ2h0X2Jic1swXSA9 IGNyZWF0ZV9kZWxheV9iYihmZFswXSwgYnVmbWdyWzBdLCByaW5naWQsIAo+PiBjYWxpYnJhdGVk XzFzLCBkZWxheV9ibyk7Cj4+ICsgICAgZm9yKGxvb3AgPSAxOyBsb29wIDwgaW5fZmxpZ2h0OyBs b29wKyspCj4+ICsgICAgICAgIGluX2ZsaWdodF9iYnNbbG9vcF0gPSBjcmVhdGVfbm9vcF9iYihm ZFswXSwgYnVmbWdyWzBdLCA1KTsKPj4gKwo+PiArICAgIC8qIEV4dHJhIGJhdGNoIGJ1ZmZlcnMg aW4gdGhlIHNjaGVkdWxlciBxdWV1ZSAqLwo+PiArICAgIHRzMV9iYiA9IGNyZWF0ZV90aW1lc3Rh bXBfYmIoZmRbMV0sIGJ1Zm1nclsxXSwgcmluZ2lkLCB0czFfYm8sIAo+PiBOVUxMLCBmYWxzZSk7 Cj4+ICsgICAgdHMyX2JiID0gY3JlYXRlX3RpbWVzdGFtcF9iYihmZFsyXSwgYnVmbWdyWzJdLCBy aW5naWQsIHRzMl9ibywgCj4+IE5VTEwsIGZhbHNlKTsKPj4gKwo+PiArICAgIC8qIEZsdXNoIGJh dGNoYnVmZmVycyAqLwo+PiArICAgIGZvcihsb29wID0gMDsgbG9vcCA8IGluX2ZsaWdodDsgbG9v cCsrKQo+PiArICAgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKGluX2ZsaWdo dF9iYnNbbG9vcF0sIHJpbmdpZCk7Cj4+ICsgICAgaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfb25f cmluZyh0czFfYmIsIHJpbmdpZCk7Cj4+ICsgICAgaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfb25f cmluZyh0czJfYmIsIHJpbmdpZCk7Cj4+ICsKPj4gKyAgICAvKiBUaGlzIHdpbGwgbm90IHJldHVy biB1bnRpbCB0aGUgYm8gaGFzIGZpbmlzaGVkIGV4ZWN1dGluZyAqLwo+PiArICAgIGRybV9pbnRl bF9ib19tYXAoZGVsYXlfYm8sIDApOwo+PiArICAgIGRybV9pbnRlbF9ib19tYXAodHMxX2JvLCAw KTsKPj4gKyAgICBkcm1faW50ZWxfYm9fbWFwKHRzMl9ibywgMCk7Cj4+ICsKPj4gKyAgICBkZWxh eV9idWYgPSBkZWxheV9iby0+dmlydHVhbDsKPj4gKyAgICB0czFfYnVmID0gdHMxX2JvLT52aXJ0 dWFsOwo+PiArICAgIHRzMl9idWYgPSB0czJfYm8tPnZpcnR1YWw7Cj4+ICsKPj4gKyAgICBpZ3Rf ZGVidWcoIkRlbGF5IFRpbWVzdGFtcCA9IDB4JTA4IiBQUkl4MzIgIlxuIiwgZGVsYXlfYnVmWzJd KTsKPj4gKyAgICBpZ3RfZGVidWcoIlRTMSBUaW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIs IHRzMV9idWZbMF0pOwo+PiArICAgIGlndF9kZWJ1ZygiVFMyIFRpbWVzdGFtcCA9IDB4JTA4IiBQ Ukl4MzIgIlxuIiwgdHMyX2J1ZlswXSk7Cj4+ICsKPj4gKyAgICAvKiBidWZbMF0gaW4gdGhlIHRh cmdldCBidWZmZXIgc2hvdWxkIGJlIDAgaWYgdGhlIGJhdGNoIGJ1ZmZlciAKPj4gY29tcGxldGVk ICovCj4+ICsgICAgaWd0X2Fzc2VydF9mKGRlbGF5X2J1ZlswXSA9PSAwLAo+PiArICAgICAgICAg ICAgICAgICAiZGVsYXlfYnVmWzBdIGV4cGVjdGVkIDB4MCwgZ290IDB4JSIgUFJJeDMyICJcbiIs IAo+PiBkZWxheV9idWZbMF0pOwo+PiArCj4+ICsgICAgaWd0X2Fzc2VydF9mKGlndF9jb21wYXJl X3RpbWVzdGFtcHMoZGVsYXlfYnVmWzJdLCB0czFfYnVmWzBdKSwKPj4gKyAgICAgICAgICAgICAg ICAgIkRlbGF5IHRzICgweCUwOCIgUFJJeDMyICIpID4gVFMxIHRzICgweCUwOCIgUFJJeDMyIAo+ PiAiKVxuIiwKPj4gKyAgICAgICAgICAgICAgICAgZGVsYXlfYnVmWzJdLCB0czFfYnVmWzBdKTsK Pj4gKyAgICBpZ3RfYXNzZXJ0X2YoaWd0X2NvbXBhcmVfdGltZXN0YW1wcyh0czFfYnVmWzBdLCB0 czJfYnVmWzBdKSwKPj4gKyAgICAgICAgICAgICAgICAgIlRTMSB0cyAoMHglMDgiIFBSSXgzMiAi KSA+IFRTMiB0cyAoMHglMDgiIFBSSXgzMiAKPj4gIilcbiIsCj4+ICsgICAgICAgICAgICAgICAg IHRzMV9idWZbMF0sIHRzMl9idWZbMF0pOwo+PiArCj4+ICsgICAgLyogQ2xlYW51cCAqLwo+PiAr ICAgIGZvcihsb29wID0gMDsgbG9vcCA8IGluX2ZsaWdodDsgbG9vcCsrKQo+PiArICAgICAgICBp bnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGluX2ZsaWdodF9iYnNbbG9vcF0pOwo+PiArICAgIGludGVs X2JhdGNoYnVmZmVyX2ZyZWUodHMxX2JiKTsKPj4gKyAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVl KHRzMl9iYik7Cj4+ICsKPj4gKyAgICBkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoZGVsYXlfYm8p Owo+PiArICAgIGRybV9pbnRlbF9ib191bnJlZmVyZW5jZSh0czFfYm8pOwo+PiArICAgIGRybV9p bnRlbF9ib191bnJlZmVyZW5jZSh0czJfYm8pOwo+PiArICAgIGZvcihsb29wID0gMDsgbG9vcCA8 IE5CUl9CQVNJQ19GRHM7IGxvb3ArKykgewo+PiArICAgICAgICBkcm1faW50ZWxfYnVmbWdyX2Rl c3Ryb3koYnVmbWdyW2xvb3BdKTsKPj4gKyAgICAgICAgY2xvc2UoZmRbbG9vcF0pOwo+PiArICAg IH0KPj4gKyAgICBmcmVlKGluX2ZsaWdodF9iYnMpOwo+PiArfQo+PiArCj4+ICsvKiBEZXBlbmRl bmN5IHRlc3QuCj4+ICsgKiB3cml0ZT0wLCBTdWJtaXQgYmF0Y2ggYnVmZmVycyB3aXRoIHJlYWQg ZGVwZW5kZW5jaWVzIHRvIGFsbCAKPj4gcmluZ3MuIERlbGF5IG9uZQo+PiArICogd2l0aCBhIGxv bmcgZXhlY3V0aW5nIGJhdGNoIGJ1ZmZlci4gQ2hlY2sgdGhlIG90aGVycyBhcmUgbm90IGhlbGQg Cj4+IHVwLgo+PiArICogd3JpdGU9MSwgU3VibWl0IGJhdGNoIGJ1ZmZlcnMgd2l0aCB3cml0ZSBk ZXBlbmRlbmNpZXMgdG8gYWxsIAo+PiByaW5ncy4gRGVsYXkgb25lCj4+ICsgKiB3aXRoIGEgbG9u ZyBleGVjdXRpbmcgYmF0Y2ggYnVmZmVyLiBBbHNvIHN1Ym1pdCBiYXRjaCBidWZmZXJzIAo+PiB3 aXRoIG5vCj4+ICsgKiBkZXBlbmRlbmNpZXMgdG8gYWxsIHJpbmdzLiBCYXRjaCBidWZmZXJzIHdp dGggd3JpdGUgZGVwZW5kZW5jaWVzIAo+PiBzaG91bGQgYmUKPj4gKyAqIGV4ZWN1dGVkIGluIHN1 Ym1pc3Npb24gb3JkZXIuIFRoZSBiYXRjaCBidWZmZXJzIHdpdGggbm8gCj4+IGRlcGVuZGVuY2ll cyBzaG91bGQKPj4gKyAqIG5vdCBiZSBoZWxkIHVwLgo+PiArICovCj4+ICtzdGF0aWMgdm9pZCBy dW5fdGVzdF9kZXBlbmRlbmN5KGludCBpbl9mbGlnaHQsIGludCByaW5nLCBib29sIHdyaXRlKQo+ PiArewo+PiArICAgIGludCBmZFtOQlJfUklOR1NdLCBmZDJbTkJSX1JJTkdTXTsKPj4gKyAgICBp bnQgbG9vcDsKPj4gKyAgICBpbnQgcHJpbWVfZmQ7Cj4+ICsgICAgdWludDMyX3QgKmRlbGF5X2J1 ZiwgKnRzX2J1ZltOQlJfUklOR1NdLCAqdHMyX2J1ZltOQlJfUklOR1NdLCAKPj4gKnNoYXJlZF9i dWY7Cj4+ICsgICAgdWludDMyX3QgY2FsaWJyYXRlZF8xczsKPj4gKyAgICBkcm1faW50ZWxfYnVm bWdyICpidWZtZ3JbTkJSX1JJTkdTXSwgKmJ1Zm1ncjJbTkJSX1JJTkdTXTsKPj4gKyAgICBzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKnRzX2JiW05CUl9SSU5HU10sICp0czJfYmJbTkJSX1JJTkdT XSwgCj4+ICoqaW5fZmxpZ2h0X2JiczsKPj4gKyAgICBkcm1faW50ZWxfYm8gKmRlbGF5X2JvLCAq dHNfYm9bTkJSX1JJTkdTXSwgKnRzMl9ib1tOQlJfUklOR1NdLCAKPj4gKnNoYXJlZF9ib1tOQlJf UklOR1NdOwo+PiArCj4+ICsgICAgaW5fZmxpZ2h0X2JicyA9IG1hbGxvYyhpbl9mbGlnaHQgKiBz aXplb2Yoc3RydWN0IAo+PiBpbnRlbF9iYXRjaGJ1ZmZlciAqKSk7Cj4+ICsgICAgaWd0X2Fzc2Vy dChpbl9mbGlnaHRfYmJzKTsKPj4gKwo+PiArICAgIC8qIE5lZWQgbXVsdGlwbGUgaTkxNSBmZCdz LiBTY2hlZHVsZXIgd2lsbCBub3QgY2hhbmdlIGV4ZWN1dGlvbiAKPj4gb3JkZXIgb2YKPj4gKyAg ICAgKiBiYXRjaCBidWZmZXJzIGZyb20gdGhlIHNhbWUgY29udGV4dC4KPj4gKyAgICAgKi8KPj4g KyAgICBmb3IobG9vcD0wOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspIHsKPgo+IFlvdSBoYXZl IHNldmVyYWwgbG9vcHMgb24gYWxsIGVuZ2luZXMgYnV0IHdpdGggYSBiaXQgb2YgcmVvcmRlcmlu ZyB5b3UgCj4gc2hvdWxkIGJlIGFibGUgdG8gZml0IGV2ZXJ5dGhpbmcgaW4gbGVzcyBsb29wcy4g VW5sZXNzIEkndmUgbWlzc2VkIGEgCj4gZGVwZW5kZW5jeSwgeW91IHNob3VsZCBiZSBhYmxlIHRv IGRvIHNvbWV0aGluZyBsaWtlOgo+Cj4gZm9yIChsb29wPTA7IGxvb3AgPCBOQlJfUklOR1M7IGxv b3ArKykgewo+ICAgICBpbml0X2NvbnRleHQoJihmZFtsb29wXSksICYoYnVmbWdyW2xvb3BdKSwg cmluZ3NbbG9vcF0uaWQpOwo+ICAgICB0c19ib1tsb29wXSA9IGNyZWF0ZV9hbmRfY2hlY2tfYm8o YnVmbWdyW2xvb3BdLCAidHMgYm8iKTsKPgo+ICAgICBpZiAobG9vcCA9PSAwKQo+ICAgICAgICAg c2hhcmVkX2JvWzBdID0gY3JlYXRlX2FuZF9jaGVja19ibyguLi4pOwo+ICAgICAgICAgZHJtX2lu dGVsX2JvX2dlbV9leHBvcnRfdG9fcHJpbWUoLi4uKTsKPiAgICAgZWxzZQo+ICAgICAgICAgc2hh cmVkX2JvW2xvb3BdID0gZHJtX2ludGVsX2JvX2dlbV9jcmVhdGVfZnJvbV9wcmltZSguLi4pOwo+ Cj4gICAgIHRzX2JiW2xvb3BdID0gY3JlYXRlX3RpbWVzdGFtcF9iYiguLik7Cj4KPiAgICAgaWYg KHdyaXRlKSB7Cj4gICAgICAgICAuLi4uCj4gICAgIH0KPiB9Cj4KPgo+IEFsc28gdGhlIG9wZXJh dGlvbnMgcGVyZm9ybWVkIGluIHRoZSAiaWYgKHdyaXRlKSIgY2FzZSBhcmUgdGhlIHNhbWUgb2Yg Cj4gdGhlIG9uZXMgaW4gdGhlIG1haW4gbG9vcCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHNo YXJlZCBibyBzbyAKPiBwb3RlbnRpYWxseSB5b3UgY291bGQgbW92ZSB0aGUgd2hvbGUgYmxvY2sg aW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiBpZiAKPiBpdCBkb2Vzbid0IGdldCB0b28gbWVzc3kuCj4K Pgo+PiArICAgICAgICBpbml0X2NvbnRleHQoJihmZFtsb29wXSksICYoYnVmbWdyW2xvb3BdKSwg cmluZ3NbbG9vcF0uaWQpOwo+PiArICAgICAgICBpZih3cml0ZSkKPj4gKyAgICAgICAgICAgIGlu aXRfY29udGV4dCgmKGZkMltsb29wXSksICYoYnVmbWdyMltsb29wXSksIAo+PiByaW5nc1tsb29w XS5pZCk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyogQ3JlYXRlIGJ1ZmZlciBvYmplY3RzICov Cj4+ICsgICAgZGVsYXlfYm8gPSBjcmVhdGVfYW5kX2NoZWNrX2JvKGJ1Zm1ncltyaW5nXSwgImRl bGF5IGJvIik7Cj4+ICsgICAgZm9yKGxvb3AgPSAwOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKysp IHsKPj4gKyAgICAgICAgdHNfYm9bbG9vcF0gPSBjcmVhdGVfYW5kX2NoZWNrX2JvKGJ1Zm1nclts b29wXSwgInRzIGJvIik7Cj4+ICsgICAgICAgIGlmKHdyaXRlKQo+PiArICAgICAgICAgICAgdHMy X2JvW2xvb3BdID0gY3JlYXRlX2FuZF9jaGVja19ibyhidWZtZ3IyW2xvb3BdLCAidHMyIAo+PiBi byIpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qIENyZWF0ZSBzaGFyZWQgYnVmZmVyIG9iamVj dCAqLwo+PiArICAgIHNoYXJlZF9ib1swXSA9IGNyZWF0ZV9hbmRfY2hlY2tfYm8oYnVmbWdyWzBd LCAic2hhcmVkIGJvIik7Cj4+ICsKPj4gKyAgICBkcm1faW50ZWxfYm9fZ2VtX2V4cG9ydF90b19w cmltZShzaGFyZWRfYm9bMF0sICZwcmltZV9mZCk7Cj4+ICsgICAgZm9yKGxvb3AgPSAxOyBsb29w IDwgTkJSX1JJTkdTOyBsb29wKyspIHsKPj4gKyAgICAgICAgc2hhcmVkX2JvW2xvb3BdID0gCj4+ IGRybV9pbnRlbF9ib19nZW1fY3JlYXRlX2Zyb21fcHJpbWUoYnVmbWdyW2xvb3BdLAo+PiArIHBy aW1lX2ZkLCBCQVRDSF9TWik7Cj4+ICsgICAgICAgIGlndF9hc3NlcnQoc2hhcmVkX2JvW2xvb3Bd KTsKPj4gKyAgICB9Cj4+ICsgICAgY2xvc2UocHJpbWVfZmQpOwo+PiArCj4+ICsgICAgLyogUHV0 IHNvbWUgbm9uIHplcm8gdmFsdWVzIGluIHRoZSBkZWxheSBhbmQgc2hhcmVkIGJvICovCj4+ICsg ICAgZHJtX2ludGVsX2JvX21hcChkZWxheV9ibywgMSk7Cj4+ICsgICAgZGVsYXlfYnVmID0gZGVs YXlfYm8tPnZpcnR1YWw7Cj4+ICsgICAgZGVsYXlfYnVmWzBdID0gMHhmZjsKPj4gKyAgICBkcm1f aW50ZWxfYm9fdW5tYXAoZGVsYXlfYm8pOwo+PiArICAgIGRybV9pbnRlbF9ib19tYXAoc2hhcmVk X2JvWzBdLCAxKTsKPj4gKyAgICBzaGFyZWRfYnVmID0gc2hhcmVkX2JvWzBdLT52aXJ0dWFsOwo+ PiArICAgIHNoYXJlZF9idWZbMF0gPSAweGZmMDBmZjAwOwo+PiArICAgIGRybV9pbnRlbF9ib191 bm1hcChzaGFyZWRfYm9bMF0pOwo+Cj4gdXNpbmcgc3ViZGF0YSBtaWdodCBiZSBjbGVhbmVyIGhl cmUgYXMgd2VsbAo+Cj4+ICsKPj4gKyAgICBjYWxpYnJhdGVkXzFzID0gaWd0X2NhbGlicmF0ZV9k ZWxheV9iYihmZFtyaW5nXSwgYnVmbWdyW3JpbmddLCAKPj4gcmluZ3NbcmluZ10uaWQpOwo+PiAr Cj4+ICsgICAgLyogQmF0Y2ggYnVmZmVycyB0byBmaWxsIHRoZSBpbiBmbGlnaHQgcXVldWUgKi8K Pj4gKyAgICBpbl9mbGlnaHRfYmJzWzBdID0gY3JlYXRlX2RlbGF5X2JiKGZkW3JpbmddLCBidWZt Z3JbcmluZ10sIAo+PiByaW5nc1tyaW5nXS5pZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhbGlicmF0ZWRfMXMsIGRlbGF5X2JvKTsKPj4gKyAgICBmb3IobG9v cCA9IDE7IGxvb3AgPCBpbl9mbGlnaHQ7IGxvb3ArKykKPj4gKyAgICAgICAgaW5fZmxpZ2h0X2Ji c1tsb29wXSA9IGNyZWF0ZV9ub29wX2JiKGZkW3JpbmddLCBidWZtZ3JbcmluZ10sIAo+PiA1KTsK Pj4gKwo+PiArICAgIGZvcihsb29wID0gMDsgbG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsrKSB7Cj4+ ICsgICAgICAgIHRzX2JiW2xvb3BdID0gY3JlYXRlX3RpbWVzdGFtcF9iYihmZFtsb29wXSwgYnVm bWdyW2xvb3BdLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmluZ3NbbG9vcF0uaWQsIHRzX2JvW2xvb3BdLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2hhcmVkX2JvW2xvb3BdLCB3cml0ZSk7Cj4+ICsgICAgICAgIGlm KHdyaXRlKQo+PiArICAgICAgICAgICAgdHMyX2JiW2xvb3BdID0gY3JlYXRlX3RpbWVzdGFtcF9i YihmZDJbbG9vcF0sIAo+PiBidWZtZ3IyW2xvb3BdLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByaW5nc1tsb29wXS5pZCwgCj4+IHRzMl9ib1tsb29w XSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgZmFsc2UpOwo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qIEZsdXNoIGJhdGNoYnVmZmVycyAq Lwo+PiArICAgIGZvcihsb29wID0gMDsgbG9vcCA8IGluX2ZsaWdodDsgbG9vcCsrKQo+PiArICAg ICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKGluX2ZsaWdodF9iYnNbbG9vcF0s IAo+PiByaW5nc1tyaW5nXS5pZCk7Cj4+ICsKPj4gKyAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVz aF9vbl9yaW5nKHRzX2JiW3JpbmddLCByaW5nc1tyaW5nXS5pZCk7Cj4+ICsgICAgZm9yKGxvb3Ag PSAwOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspCj4+ICsgICAgICAgIGlmKChsb29wICE9IHJp bmcpICYmIHJpbmdzW2xvb3BdLmV4aXN0cykKPj4gKyAgICAgICAgICAgIGludGVsX2JhdGNoYnVm ZmVyX2ZsdXNoX29uX3JpbmcodHNfYmJbbG9vcF0sIAo+PiByaW5nc1tsb29wXS5pZCk7Cj4+ICsK Pj4gKyAgICBpZih3cml0ZSkgewo+PiArICAgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9v bl9yaW5nKHRzMl9iYltyaW5nXSwgcmluZ3NbcmluZ10uaWQpOwo+PiArICAgICAgICBmb3IobG9v cCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPj4gKyAgICAgICAgICAgIGlmKChsb29w ICE9IHJpbmcpICYmIHJpbmdzW2xvb3BdLmV4aXN0cykKPj4gKyAgICAgICAgICAgICAgICBpbnRl bF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKHRzMl9iYltsb29wXSwgCj4+IHJpbmdzW2xvb3Bd LmlkKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvKiBUaGlzIHdpbGwgbm90IHJldHVybiB1bnRp bCB0aGUgYm8gaGFzIGZpbmlzaGVkIGV4ZWN1dGluZyAqLwo+PiArICAgIGRybV9pbnRlbF9ib19t YXAoZGVsYXlfYm8sIDApOwo+PiArICAgIGRlbGF5X2J1ZiA9IGRlbGF5X2JvLT52aXJ0dWFsOwo+ PiArICAgIGZvcihsb29wID0gMDsgbG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsrKSB7Cj4+ICsgICAg ICAgIGRybV9pbnRlbF9ib19tYXAodHNfYm9bbG9vcF0sIDApOwo+PiArICAgICAgICB0c19idWZb bG9vcF0gPSB0c19ib1tsb29wXS0+dmlydHVhbDsKPj4gKyAgICAgICAgaWYod3JpdGUpIHsKPj4g KyAgICAgICAgICAgIGRybV9pbnRlbF9ib19tYXAodHMyX2JvW2xvb3BdLCAwKTsKPj4gKyAgICAg ICAgICAgIHRzMl9idWZbbG9vcF0gPSB0czJfYm9bbG9vcF0tPnZpcnR1YWw7Cj4+ICsgICAgICAg IH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvKiBidWZbMF0gaW4gdGhlIHRhcmdldCBidWZmZXIg c2hvdWxkIGJlIDAgaWYgdGhlIGJhdGNoIGJ1ZmZlciAKPj4gY29tcGxldGVkICovCj4+ICsgICAg aWd0X2Fzc2VydF9mKGRlbGF5X2J1ZlswXSA9PSAwLAo+PiArICAgICAgICAgICAgICAgICAiZGVs YXlfYnVmWzBdIGV4cGVjdGVkIDB4MCwgZ290IDB4JSIgUFJJeDMyICJcbiIsCj4+ICsgICAgICAg ICAgICAgICAgIGRlbGF5X2J1ZlswXSk7Cj4+ICsKPj4gKyAgICBpZ3RfZGVidWcoIiU2cyBkZWxh eSB0aW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIsCj4+ICsgICAgICAgICAgICAgIHJpbmdz W3JpbmddLm5hbWUsIGRlbGF5X2J1ZlsyXSk7Cj4+ICsgICAgZm9yKGxvb3AgPSAwOyBsb29wIDwg TkJSX1JJTkdTOyBsb29wKyspCj4+ICsgICAgICAgIGlndF9kZWJ1ZygiJTZzIGJhdGNoIHRpbWVz dGFtcCA9IDB4JTA4IiBQUkl4MzIgIlxuIiwKPj4gKyAgICAgICAgICAgICAgICAgIHJpbmdzW2xv b3BdLm5hbWUsIHRzX2J1Zltsb29wXVswXSk7Cj4+ICsKPj4gKyAgICBpZih3cml0ZSkgewo+PiAr ICAgICAgICBpZ3RfZGVidWcoIkluZGVwZW5kYW50IGJhdGNoIGJ1ZmZlcnNcbiIpOwo+PiArICAg ICAgICBmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPj4gKyAgICAgICAg ICAgIGlndF9kZWJ1ZygiJTZzIGJhdGNoIHRpbWVzdGFtcCA9IDB4JTA4IiBQUkl4MzIgIlxuIiwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICByaW5nc1tsb29wXS5uYW1lLCB0czJfYnVmW2xvb3Bd WzBdKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklO R1M7IGxvb3ArKykgewo+PiArICAgICAgICBpZigobG9vcCAhPSByaW5nKSAmJiByaW5nc1tsb29w XS5leGlzdHMpIHsKPj4gKyAgICAgICAgICAgIGlmKHdyaXRlKSB7Cj4+ICsgICAgICAgICAgICAg ICAgLyogV3JpdGUgZGVwZW5kZW5jeSwgZGVsYXllZCByaW5nIHNob3VsZCBydW4gZmlyc3QgKi8K Pj4gKyBpZ3RfYXNzZXJ0X2YoaWd0X2NvbXBhcmVfdGltZXN0YW1wcyh0c19idWZbcmluZ11bMF0s IHRzX2J1Zltsb29wXVswXSksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBy YW4gYmVmb3JlICVzIC0gMHglMDgiIFBSSXgzMiAiIHZzIAo+PiAweCUwOCIgUFJJeDMyICJcbiIs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmdzW2xvb3BdLm5hbWUsIHJpbmdz W3JpbmddLm5hbWUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzX2J1Zltsb29w XVswXSwgdHNfYnVmW3JpbmddWzBdKTsKPj4gKyAgICAgICAgICAgICAgICAvKiBTZWNvbmQgYmIg d2l0aG91dCBkZXBlbmRlbmN5IHNob3VsZCBydW4gZmlyc3QgKi8KPj4gKyBpZ3RfYXNzZXJ0X2Yo aWd0X2NvbXBhcmVfdGltZXN0YW1wcyh0czJfYnVmW2xvb3BdWzBdLCAKPj4gdHNfYnVmW2xvb3Bd WzBdKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiglcykgaW5kZXBlbmRhbnQg YmIgd2FzIGhlbGQgdXAgLSAKPj4gMHglMDgiIFBSSXgzMiAiIHZzIDB4JTA4IiBQUkl4MzIgIlxu IiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ3NbbG9vcF0ubmFtZSwgdHNf YnVmW2xvb3BdWzBdLCAKPj4gdHMyX2J1Zltsb29wXVswXSk7Cj4+ICsgICAgICAgICAgICB9Cj4+ ICsgICAgICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICAgICAgLyogUmVhZCBkZXBlbmRlbmN5 LCBkZWxheWVkIHJpbmcgc2hvdWxkIHJ1biBsYXN0ICovCj4+ICsgaWd0X2Fzc2VydF9mKGlndF9j b21wYXJlX3RpbWVzdGFtcHModHNfYnVmW2xvb3BdWzBdLCB0c19idWZbcmluZ11bMF0pLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgcmFuIGFmdGVyICVzIC0gMHglMDgiIFBS SXgzMiAiIHZzIAo+PiAweCUwOCIgUFJJeDMyICJcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJpbmdzW2xvb3BdLm5hbWUsIHJpbmdzW3JpbmddLm5hbWUsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRzX2J1Zltsb29wXVswXSwgdHNfYnVmW3JpbmddWzBdKTsK Pj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qIENsZWFudXAgKi8KPj4gKyAg ICBmb3IobG9vcCA9IDA7IGxvb3AgPCBpbl9mbGlnaHQ7IGxvb3ArKykKPj4gKyAgICAgICAgaW50 ZWxfYmF0Y2hidWZmZXJfZnJlZShpbl9mbGlnaHRfYmJzW2xvb3BdKTsKPj4gKwo+PiArICAgIGZv cihsb29wID0gMDsgbG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsrKSB7Cj4+ICsgICAgICAgIGludGVs X2JhdGNoYnVmZmVyX2ZyZWUodHNfYmJbbG9vcF0pOwo+PiArICAgICAgICBkcm1faW50ZWxfYm9f dW5yZWZlcmVuY2UodHNfYm9bbG9vcF0pOwo+PiArICAgICAgICBkcm1faW50ZWxfYm9fdW5yZWZl cmVuY2Uoc2hhcmVkX2JvW2xvb3BdKTsKPj4gKyAgICAgICAgaWYod3JpdGUpIHsKPj4gKyAgICAg ICAgICAgIGludGVsX2JhdGNoYnVmZmVyX2ZyZWUodHMyX2JiW2xvb3BdKTsKPj4gKyAgICAgICAg ICAgIGRybV9pbnRlbF9ib191bnJlZmVyZW5jZSh0czJfYm9bbG9vcF0pOwo+PiArICAgICAgICB9 Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGRlbGF5X2Jv KTsKPgo+IFlvdSBjYW4gbW92ZSB0aGlzIHVucmVmZXJlbmNpbmcgdG8gYmVmb3JlIHRoZSBhYm92 ZSBsb29wIGFuZCB0aGVuIAo+IHNxdWFzaCB0aGUgMiBsb29wcyBvbk5CUl9SSU5HU2ludG8gb25l Lgo+Cj4gUmVnYXJkcywKPiBEYW5pZWxlCj4KPj4gKwo+PiArICAgIGZvcihsb29wID0gMDsgbG9v cCA8IE5CUl9SSU5HUzsgbG9vcCsrKSB7Cj4+ICsgICAgICAgIGRybV9pbnRlbF9idWZtZ3JfZGVz dHJveShidWZtZ3JbbG9vcF0pOwo+PiArICAgICAgICBjbG9zZShmZFtsb29wXSk7Cj4+ICsgICAg ICAgIGlmKHdyaXRlKSB7Cj4+ICsgICAgICAgICAgICBkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3ko YnVmbWdyMltsb29wXSk7Cj4+ICsgICAgICAgICAgICBjbG9zZShmZDJbbG9vcF0pOwo+PiArICAg ICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgZnJlZShpbl9mbGlnaHRfYmJzKTsKPj4gK30K Pj4gKwo+PiAraWd0X21haW4KPj4gK3sKPj4gKyAgICBpbnQgbG9vcDsKPj4gKyAgICBpbnQgaW5f ZmxpZ2h0Owo+PiArICAgIGludCBmZDsKPj4gKwo+PiArICAgIGlndF9maXh0dXJlIHsKPj4gKyAg ICAgICAgaW50IGRlYnVnX2ZkOwo+PiArICAgICAgICBpbnQgbDsKPj4gKyAgICAgICAgY2hhciBi dWZbNl07Cj4+ICsgICAgICAgIC8qIEdldCBuYnIgb2YgYmF0Y2ggYnVmZmVycyB0aGF0IHRoZSBz Y2hlZHVsZXIgd2lsbCBxdWV1ZSBpbiAKPj4gdGhlCj4+ICsgICAgICAgICAqIEhXLiBJZiB0aGlz IGRlYnVnZnMgZmlsZSBkb2VzIG5vdCBleGlzdCB0aGVyZSBpcyBubyAKPj4gc2NoZWR1bGVyCj4+ ICsgICAgICAgICAqIHNvIHNraXAgdGhlIHRlc3QuCj4+ICsgICAgICAgICAqLwo+PiArICAgICAg ICBkZWJ1Z19mZCA9IGlndF9kZWJ1Z2ZzX29wZW4oImk5MTVfc2NoZWR1bGVyX21pbl9mbHlpbmci LCAKPj4gT19SRE9OTFkpOwo+PiArICAgICAgICBpZ3Rfc2tpcF9vbihkZWJ1Z19mZCA9PSAtMSk7 Cj4+ICsgICAgICAgIGwgPSByZWFkKGRlYnVnX2ZkLCBidWYsIHNpemVvZihidWYpLTEpOwo+PiAr ICAgICAgICBpZ3RfYXNzZXJ0KGwgPiAwKTsKPj4gKyAgICAgICAgaWd0X2Fzc2VydChsIDwgc2l6 ZW9mKGJ1ZikpOwo+PiArICAgICAgICBidWZbbF0gPSAnXDAnOwo+PiArICAgICAgICAvKiBNYXkg YmUgYSBkZWNpbWFsIG9yIGhleCBudW1iZXIgZGVwZW5kaW5nIG9uIHNjaGVkdWxlciAKPj4gdmVy c2lvbiAqLwo+PiArICAgICAgICBpZihzc2NhbmYoYnVmLCAiMHglMngiLCAmaW5fZmxpZ2h0KSAh PSAxKQo+PiArICAgICAgICAgICAgaWd0X2Fzc2VydF9mKHNzY2FuZihidWYsICIlMmQiLCAmaW5f ZmxpZ2h0KSA9PSAxLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciByZWFkaW5n IGZyb20gCj4+IGk5MTVfc2NoZWR1bGVyX21pbl9mbHlpbmdcbiIpOwo+PiArICAgICAgICBjbG9z ZShkZWJ1Z19mZCk7Cj4+ICsgICAgICAgIGlndF9kZWJ1ZygiaW4gZmxpZ2h0ID0gJWRcbiIsIGlu X2ZsaWdodCk7Cj4+ICsgICAgICAgIGZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7 Cj4+ICsgICAgICAgIGlndF9hc3NlcnQoZmQgPj0gMCk7Cj4+ICsgICAgICAgIGNoZWNrX3Jpbmdz KGZkKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBmb3IgKGxvb3A9MDsgbG9vcCA8IE5CUl9SSU5H UzsgbG9vcCsrKQo+PiArICAgICAgICBpZ3Rfc3VidGVzdF9mKCIlcy1iYXNpYyIsIHJpbmdzW2xv b3BdLm5hbWUpIHsKPj4gKyAgICAgICAgICAgIGdlbV9yZXF1aXJlX3JpbmcoZmQsIHJpbmdzW2xv b3BdLmlkKTsKPj4gKyAgICAgICAgICAgIHJ1bl90ZXN0X2Jhc2ljKGluX2ZsaWdodCwgcmluZ3Nb bG9vcF0uaWQpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICBmb3IgKGxvb3A9MDsgbG9vcCA8 IE5CUl9SSU5HUzsgbG9vcCsrKQo+PiArICAgICAgICBpZ3Rfc3VidGVzdF9mKCIlcy1yZWFkIiwg cmluZ3NbbG9vcF0ubmFtZSkgewo+PiArICAgICAgICAgICAgZ2VtX3JlcXVpcmVfcmluZyhmZCwg cmluZ3NbbG9vcF0uaWQpOwo+PiArICAgICAgICAgICAgcnVuX3Rlc3RfZGVwZW5kZW5jeShpbl9m bGlnaHQsIGxvb3AsIGZhbHNlKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgZm9yIChsb29w PTA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPj4gKyAgICAgICAgaWd0X3N1YnRlc3RfZigi JXMtd3JpdGUiLCByaW5nc1tsb29wXS5uYW1lKSB7Cj4+ICsgICAgICAgICAgICBnZW1fcmVxdWly ZV9yaW5nKGZkLCByaW5nc1tsb29wXS5pZCk7Cj4+ICsgICAgICAgICAgICBydW5fdGVzdF9kZXBl bmRlbmN5KGluX2ZsaWdodCwgbG9vcCwgdHJ1ZSk7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAg IGlndF9maXh0dXJlIHsKPj4gKyAgICAgICAgY2xvc2UoZmQpOwo+PiArICAgIH0KPj4gK30KPgo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==