From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x22b.google.com (mail-wm0-x22b.google.com [IPv6:2a00:1450:400c:c09::22b]) by gabe.freedesktop.org (Postfix) with ESMTPS id 653B56E46C for ; Mon, 7 May 2018 18:34:21 +0000 (UTC) Received: by mail-wm0-x22b.google.com with SMTP id n10-v6so17079841wmc.1 for ; Mon, 07 May 2018 11:34:21 -0700 (PDT) Date: Mon, 7 May 2018 20:34:16 +0200 From: Daniel Vetter Message-ID: <20180507183416.GH28661@phenom.ffwll.local> References: <20180430092848.10830-1-petri.latvala@intel.com> <20180430092848.10830-4-petri.latvala@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180430092848.10830-4-petri.latvala@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t 3/4] runner: New test runner List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Petri Latvala Cc: igt-dev@lists.freedesktop.org, Tomi Sarvela , Martin Peres List-ID: T24gTW9uLCBBcHIgMzAsIDIwMTggYXQgMTI6Mjg6NDdQTSArMDMwMCwgUGV0cmkgTGF0dmFsYSB3 cm90ZToKPiBUaGlzIGlzIGEgbmV3IHRlc3QgcnVubmVyIHRvIHJlcGxhY2UgcGlnbGl0LiBQaWds aXQgaGFzIGJlZW4gdmVyeQo+IHVzZWZ1bCBhcyBhIHRlc3QgcnVubmVyLCBidXQgY2VydGFpbiBp bXByb3ZlbWVudHMgaGF2ZSBiZWVuIHZlcnkKPiBkaWZmaWN1bHQgaWYgcG9zc2libGUgYXQgYWxs IGluIGEgZ2VuZXJpYyB0ZXN0IHJ1bm5pbmcgZnJhbWV3b3JrLgo+IAo+IEltcG9ydGFudCBpbXBy b3ZlbWVudHMgb3ZlciBwaWdsaXQ6Cj4gCj4gLSBGYXN0ZXIgdG8gbGF1bmNoLiBCZWluZyBhYmxl IHRvIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCB3ZSdyZQo+ICAgZXhlY3V0aW5nIG1ha2Vz IGl0IHBvc3NpYmxlIHRvIHNhdmUgc2lnbmlmaWNhbnQgYW1vdW50cyBvZiB0aW1lLiBGb3IKPiAg IGV4YW1wbGUsIGEgdGVzdGxpc3QgZmlsZSdzIGxpbmUgImlndEBzb21lYmluYXJ5QHNvbWVzdWJ0 ZXN0IiBhbHJlYWR5Cj4gICBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIHRvIGNvbnN0 cnVjdCB0aGUgY29ycmVjdCBjb21tYW5kCj4gICBsaW5lIHRvIGV4ZWN1dGUgdGhhdCBwYXJ0aWN1 bGFyIHN1YnRlc3QsIGluc3RlYWQgb2YgbGlzdGluZyBhbGwKPiAgIHN1YnRlc3RzIG9mIGFsbCB0 ZXN0IGJpbmFyaWVzIGFuZCBtYXBwaW5nIHRoZW0gdG8gY29tbWFuZAo+ICAgbGluZXMuIFNhbWUg Z29lcyBmb3IgdGhlIHJlZ2V4cCBmaWx0ZXJzIGNvbW1hbmQgbGluZSBmbGFncyAtdCBhbmQKPiAg IC14OyBJZiB3ZSB1c2UgLXggc29tZWJpbmFyeW5hbWUsIHdlIGRvbid0IG5lZWQgdG8gbGlzdCBz dWJ0ZXN0cyBmcm9tCj4gICBzb21lYmluYXJ5bmFtZSwgd2UgYWxyZWFkeSBrbm93IG5vbmUgb2Yg dGhlbSB3aWxsIGdldCBleGVjdXRlZC4KPiAKPiAtIExvZ3Mgb2YgaW5jb21wbGV0ZSB0ZXN0cy4g UGlnbGl0IGNvbGxlY3RzIHRlc3Qgb3V0cHV0IHRvIG1lbW9yeSBhbmQKPiAgIGR1bXBzIHRoZW0g dG8gYSBmaWxlIHdoZW4gdGhlIHRlc3QgaXMgY29tcGxldGUuIFRoZSBuZXcgcnVubmVyCj4gICB3 cml0ZXMgYWxsIG91dHB1dCB0byBkaXNrIGltbWVkaWF0ZWx5Lgo+IAo+IC0gQWJpbGl0eSB0byBl eGVjdXRlIG11bHRpcGxlIHN1YnRlc3RzIGluIG9uZSBiaW5hcnkgZXhlY3V0aW9uLiBUaGlzCj4g ICB3YXMgcG9zc2libGUgd2l0aCBwaWdsaXQsIGJ1dCBpdHMgc2VtYW50aWNzIG1hZGUgaXQgdmVy eSBoYXJkIHRvCj4gICBpbXBsZW1lbnQgaW4gcHJhY3RpY2UuIEZvciBleGFtcGxlLCBoYXZpbmcg YSB0ZXN0bGlzdCBmaWxlIG5vdCBvbmx5Cj4gICBzZWxlY3RlZCBhIHN1YnNldCBvZiB0ZXN0cyB0 byBydW4sIGJ1dCBhbHNvIG1hbmRhdGVkIHRoYXQgdGhleSBiZQo+ICAgZXhlY3V0ZWQgaW4gdGhl IHNhbWUgb3JkZXIuCj4gCj4gLSBGbGV4aWJsZSB0aW1lb3V0IHN1cHBvcnQuIEluc3RlYWQgb2Yg bWFuZGF0aW5nIGEgdGltZSB0ZXN0cyBjYW5ub3QKPiAgIGV4Y2VlZCwgdGhlIG5ldyBydW5uZXIg aGFzIGEgdGltZW91dCBvbiBpbmFjdGl2aXR5LiBBY3Rpdml0eSBpcwo+ICAgYW55IG91dHB1dCBv biB0aGUgdGVzdCdzIHN0ZG91dCBvciBzdGRlcnIsIG9yIGtlcm5lbCBhY3Rpdml0eSB2aWEKPiAg IC9kZXYva21zZy4KPiAKPiBUaGUgcnVubmVyIGlzIGZhaXJseSBwaWdsaXQgY29tcGF0aWJsZS4g VGhlIGNvbW1hbmQgbGluZSBpcyB2ZXJ5Cj4gc2ltaWxhciwgd2l0aCBhIGZldyBhZGRpdGlvbnMu IElHVF9URVNUX1JPT1QgZW52aXJvbm1lbnQgZmxhZyBpcyBzdGlsbAo+IHN1cHBvcnRlZCwgYnV0 IGNhbiBhbHNvIGJlIHNldCB2aWEgY29tbWFuZCBsaW5lIChpbiBwbGFjZSBvZiBpZ3QucHkgaW4K PiBwaWdsaXQgY29tbWFuZCBsaW5lKS4KPiAKPiBUaGUgcmVzdWx0cyBhcmUgYSBzZXQgb2YgbG9n IGZpbGVzLCBwcm9jZXNzZWQgaW50byBhIHBpZ2xpdC1jb21wYXRpYmxlCj4gcmVzdWx0cy5qc29u IGZpbGUgKEJaMiBjb21wcmVzc2lvbiBUT0RPKS4gVGhlcmUgYXJlIHNvbWUgbmV3IGZpZWxkcyBp bgo+IHRoZSBqc29uIGZvciBleHRyYSBpbmZvcm1hdGlvbjoKPiAKPiAtICJpZ3QtdmVyc2lvbiIg Y29udGFpbnMgdGhlIElHVCB2ZXJzaW9uIGxpbmUuIEluCj4gICBtdWx0aXBsZS1zdWJ0ZXN0cy1t b2RlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIG9ubHkgcHJpbnRlZCBvbmNlLAo+ICAgc28g aXQgbmVlZHMgdG8gYmUgZHVwbGljYXRlZCB0byBhbGwgc3VidGVzdCByZXN1bHRzIHRoaXMgd2F5 Lgo+IC0gImRtZXNnLXdhcm5pbmdzIiBjb250YWlucyB0aGUgZG1lc2cgbGluZXMgdGhhdCB0cmln Z2VyZWQgYQo+ICAgZG1lc2ctd2Fybi9kbWVzZy1mYWlsIHN0YXRlLgoKSG0sIEkgdGhvdWdodCBh Z3JlZW1lbnQgd2FzIHRoYXQgaWYgd2UgZG8gYSBuZXcgdGVzdCBydW5uZXIgdGhlbiB3ZQpkZWZp bml0ZWx5IGRvbid0IHdhbnQgaXQgdG8gY2FwdHVyZSZhbmFseXplIGRtZXNnPyBUaGF0J3Mgd2h5 IEkndmUKb3JpZ2luYWxseSBkb25lCgpodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcv c2VyaWVzLzM5MjYzLwoKd2hpY2ggeW91IHRoZW4gdG9vayBvdmVyLiBJcyB0aGF0IHN0aWxsIHBh cnQgb2YgdGhlIG92ZXJhbGwgcGxhbiwganVzdCBub3QKeWV0IHRoZXJlPwotRGFuaWVsCgo+IC0g UnVudGltZSBpbmZvcm1hdGlvbiB3aWxsIGJlIGRpZmZlcmVudC4gUGlnbGl0IHRha2VzIGEgdGlt ZXN0YW1wIGF0Cj4gICB0aGUgYmVnaW5uaW5nIGFuZCBhdCB0aGUgZW5kIG9mIGV4ZWN1dGlvbiBm b3IgcnVudGltZS4gVGhlIG5ldwo+ICAgcnVubmVyIHVzZXMgdGhlIHN1YnRlc3Qgb3V0cHV0IHRl eHQuIFRoZSBiaW5hcnkgZXhlY3V0aW9uIHRpbWUgd2lsbAo+ICAgYWxzbyBiZSBpbmNsdWRlZDsg VGhlIGtleSAiaWd0QHNvbWViaW5hcnkiIHdpbGwgaGF2ZSB0aGUgcnVudGltZSBvZgo+ICAgdGhl IGJpbmFyeSAic29tZWJpbmFyeSIsIHdoZXJlYXMgImlndEBzb21lYmluYXJ5QGEiIGV0YyB3aWxs IGhhdmUKPiAgIHRoZSBydW50aW1lIG9mIHRoZSBzdWJ0ZXN0cy4gU3Vic3RyYWN0aW5nIHRoZSBz dWJ0ZXN0IHJ1bnRpbWVzIGZyb20KPiAgIHRoZSBiaW5hcnkgcnVudGltZSB5aWVsZHMgdGhlIHRv dGFsIHRpbWUgc3BlbnQgZG9pbmcgc2V0dXAgaW4KPiAgIGlndF9maXh0dXJlIGJsb2Nrcy4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4K PiBDYzogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNv bT4KPiBDYzogQXJrYWRpdXN6IEhpbGVyIDxhcmthZGl1c3ouaGlsZXJAaW50ZWwuY29tPgo+IENj OiBUb21pIFNhcnZlbGEgPHRvbWkucC5zYXJ2ZWxhQGludGVsLmNvbT4KPiBDYzogTWFydGluIFBl cmVzIDxtYXJ0aW4ucGVyZXNAbGludXguaW50ZWwuY29tPgo+IC0tLQoKWyBzbmlwXQoKPiArLyoK PiArICogVGhpcyByZWdleHAgY29udHJvbHMgdGhlIGttc2cgaGFuZGxpbmcuIEFsbCBrZXJuZWwg bG9nIHJlY29yZHMgdGhhdAo+ICsgKiBoYXZlIGxvZyBsZXZlbCBvZiB3YXJuaW5nIG9yIGhpZ2hl ciBjb252ZXJ0IHRoZSByZXN1bHQgdG8KPiArICogZG1lc2ctd2Fybi9kbWVzZy1mYWlsIHVubGVz cyB0aGV5IG1hdGNoIHRoaXMgcmVnZXhwLgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgXyAifCIKPiAr c3RhdGljIGNvbnN0IGNoYXIgaWd0X2RtZXNnX3doaXRlbGlzdFtdID0KPiArCSJBQ1BJOiBidXR0 b246IFRoZSBsaWQgZGV2aWNlIGlzIG5vdCBjb21wbGlhbnQgdG8gU1dfTElEIiBfCj4gKwkiQUNQ STogLio6IFVuYWJsZSB0byBkb2NrISIgXwo+ICsJIklSUSBbMC05XSs6IG5vIGxvbmdlciBhZmZp bmUgdG8gQ1BVWzAtOV0rIiBfCj4gKwkiSVJRIGZpeHVwOiBpcnEgWzAtOV0rIG1vdmUgaW4gcHJv Z3Jlc3MsIG9sZCB2ZWN0b3IgWzAtOV0rIiBfCj4gKwkvKiBpOTE1IHRlc3RzIHNldCBtb2R1bGUg b3B0aW9ucywgZXhwZWN0ZWQgbWVzc2FnZSAqLwo+ICsJIlNldHRpbmcgZGFuZ2Vyb3VzIG9wdGlv biBbYS16X10rIC0gdGFpbnRpbmcga2VybmVsIiBfCj4gKwkvKiBSYXcgcHJpbnRrKCkgY2FsbCwg dXNlcyBkZWZhdWx0IGxvZyBsZXZlbCAod2FybikgKi8KPiArCSJTdXNwZW5kaW5nIGNvbnNvbGVc XChzXFwpIFxcKHVzZSBub19jb25zb2xlX3N1c3BlbmQgdG8gZGVidWdcXCkiIF8KPiArCSJhdGti ZCBzZXJpb1swLTldKzogRmFpbGVkIHRvIChkZWFjdGl2YXRlfGVuYWJsZSkga2V5Ym9hcmQgb24g aXNhWzAtOV0rL3NlcmlvWzAtOV0rIiBfCj4gKwkiY2FjaGU6IHBhcmVudCBjcHVbMC05XSsgc2hv dWxkIG5vdCBiZSBzbGVlcGluZyIgXwo+ICsJImhwZXRbMC05XSs6IGxvc3QgWzAtOV0rIHJ0YyBp bnRlcnJ1cHRzIiBfCj4gKwkvKiBpOTE1IHNlbGZ0ZXN0cyB0ZXJtaW5hdGUgbm9ybWFsbHkgd2l0 aCBFTk9ERVYgZnJvbSB0aGUKPiArCSAqIG1vZHVsZSBsb2FkIGFmdGVyIHRoZSB0ZXN0aW5nIGZp bmlzaGVzLCB3aGljaCBwcm9kdWNlcyB0aGlzCj4gKwkgKiBtZXNzYWdlLgo+ICsJICovCj4gKwki aTkxNTogcHJvYmUgb2YgWzAtOTouXSsgZmFpbGVkIHdpdGggZXJyb3IgLTI1IiBfCj4gKwkvKiBz d2lvdGJsIHdhcm5zIGV2ZW4gd2hlbiBhc2tlZCBub3QgdG8gKi8KPiArCSJtb2NrOiBETUE6IE91 dCBvZiBTVy1JT01NVSBzcGFjZSBmb3IgWzAtOV0rIGJ5dGVzIiBfCj4gKwkidXNiIHVzYlswLTld Kzogcm9vdCBodWIgbG9zdCBwb3dlciBvciB3YXMgcmVzZXQiCgpUaGUgYWJvdmUgcmVhbGx5IGlz bid0IHN0dWZmIHdlIHNob3VsZCBoYXZlIGluIHRoZSBydW5uZXIgOi0pCi1EYW5pZWwKCj4gKwk7 Cj4gKyN1bmRlZiBfCj4gKwo+ICtzdGF0aWMgcmVnZXhfdCByZTsKPiArCj4gK3N0YXRpYyBib29s IGluaXRfcmVnZXhfd2hpdGVsaXN0KCkKPiArewo+ICsJaW50IHN0YXR1cyA9IC0xOwo+ICsKPiAr CWlmIChzdGF0dXMgPT0gLTEpIHsKPiArCQlpZiAocmVnY29tcCgmcmUsIGlndF9kbWVzZ193aGl0 ZWxpc3QsIFJFR19FWFRFTkRFRCB8IFJFR19OT1NVQikgIT0gMCkgewo+ICsJCQlmcHJpbnRmKHN0 ZGVyciwgIkNhbm5vdCBjb21waWxlIGRtZXNnIHdoaXRlbGlzdCByZWdleHBcbiIpOwo+ICsJCQlz dGF0dXMgPSAwOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlzdGF0dXMgPSAx Owo+ICsJfQo+ICsKPiArCXJldHVybiBzdGF0dXM7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGZp bGxfZnJvbV9kbWVzZyhpbnQgZmQsIGNoYXIgKmJpbmFyeSwKPiArCQkJICAgIHN0cnVjdCBzdWJ0 ZXN0cyAqc3VidGVzdHMsCj4gKwkJCSAgICBzdHJ1Y3QganNvbl9vYmplY3QgKnRlc3RzKQo+ICt7 Cj4gKwljaGFyICpsaW5lID0gTlVMTCwgKndhcm5pbmdzID0gTlVMTCwgKmRtZXNnID0gTlVMTDsK PiArCXNpemVfdCBsaW5lbGVuID0gMCwgd2FybmluZ3NsZW4gPSAwLCBkbWVzZ2xlbiA9IDA7Cj4g KwlzdHJ1Y3QganNvbl9vYmplY3QgKmN1cnJlbnRfdGVzdCA9IE5VTEw7Cj4gKwlGSUxFICpmID0g ZmRvcGVuKGZkLCAiciIpOwo+ICsJY2hhciAqaWd0X25hbWUgPSBOVUxMOwo+ICsJc3NpemVfdCBy ZWFkOwo+ICsJc2l6ZV90IGk7Cj4gKwo+ICsJaWYgKCFmKSB7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsJfQo+ICsKPiArCWlmIChpbml0X3JlZ2V4X3doaXRlbGlzdCgpICE9IDEpIHsKPiArCQlmY2xv c2UoZik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXdoaWxlICgocmVhZCA9IGdl dGxpbmUoJmxpbmUsICZsaW5lbGVuLCBmKSkgPiAwKSB7Cj4gKwkJY2hhciBmb3JtYXR0ZWRbMjU2 XTsKPiArCQl1bnNpZ25lZCBmbGFnczsKPiArCQl1bnNpZ25lZCBsb25nIGxvbmcgc2VxLCB0c191 c2VjOwo+ICsJCWNoYXIgY29udGludWF0aW9uOwo+ICsJCWNoYXIgKm1lc3NhZ2UsICpzdWJ0ZXN0 Owo+ICsJCWludCBzOwo+ICsKPiArCQlzID0gc3NjYW5mKGxpbmUsICIldSwlbGx1LCVsbHUsJWM7 IiwgJmZsYWdzLCAmc2VxLCAmdHNfdXNlYywgJmNvbnRpbnVhdGlvbik7Cj4gKwo+ICsJCWlmIChz ICE9IDQpIHsKPiArCQkJLyoKPiArCQkJICogTWFjaGluZSByZWFkYWJsZSBrZXkvdmFsdWUgcGFp cnMgYmVnaW4gd2l0aAo+ICsJCQkgKiBhIHNwYWNlLiBXZSBpZ25vcmUgdGhlbS4KPiArCQkJICov Cj4gKwkJCWlmIChsaW5lWzBdICE9ICcgJykgewo+ICsJCQkJZnByaW50ZihzdGRlcnIsICJDYW5u b3QgcGFyc2Uga21zZyByZWNvcmQ6ICVzXG4iLCBsaW5lKTsKPiArCQkJfQo+ICsKPiArCQkJY29u dGludWU7Cj4gKwkJfQo+ICsKPiArCQltZXNzYWdlID0gc3RyY2hyKGxpbmUsICc7Jyk7Cj4gKwkJ aWYgKCFtZXNzYWdlKSB7Cj4gKwkJCWZwcmludGYoc3RkZXJyLCAiTm8gOyBmb3VuZCwgdGhpcyBz aG91bGRuJ3QgaGFwcGVuXG4iKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCQltZXNz YWdlKys7Cj4gKwkJc25wcmludGYoZm9ybWF0dGVkLCBzaXplb2YoZm9ybWF0dGVkKSwgIjwldT4g WyVsbHUuJTA2bGx1XSAlcyIsCj4gKwkJCSBmbGFncyAmIDB4MDcsIHRzX3VzZWMgLyAxMDAwMDAw LCB0c191c2VjICUgMTAwMDAwMCwgbWVzc2FnZSk7Cj4gKwo+ICsJCWlmICgoc3VidGVzdCA9IHN0 cnN0cihtZXNzYWdlLCBzdGFydGluZ19zdWJ0ZXN0X2RtZXNnKSkgIT0gTlVMTCkgewo+ICsJCQlp ZiAoY3VycmVudF90ZXN0ICE9IE5VTEwpIHsKPiArCQkJCS8qIERvbmUgd2l0aCB0aGUgcHJldmlv dXMgc3VidGVzdCwgZmlsZSB1cCAqLwo+ICsJCQkJanNvbl9vYmplY3Rfb2JqZWN0X2FkZChjdXJy ZW50X3Rlc3QsICJkbWVzZyIsCj4gKwkJCQkJCSAgICAgICBqc29uX29iamVjdF9uZXdfc3RyaW5n X2xlbihkbWVzZywgZG1lc2dsZW4pKTsKPiArCQkJCWlmICh3YXJuaW5ncykgewo+ICsJCQkJCWpz b25fb2JqZWN0X29iamVjdF9hZGQoY3VycmVudF90ZXN0LCAiZG1lc2ctd2FybmluZ3MiLAo+ICsJ CQkJCQkJICAgICAgIGpzb25fb2JqZWN0X25ld19zdHJpbmdfbGVuKHdhcm5pbmdzLCB3YXJuaW5n c2xlbikpOwo+ICsJCQkJCWFkZF9vcl9vdmVycmlkZV9yZXN1bHQoY3VycmVudF90ZXN0LCAicGFz cyIsICJkbWVzZy13YXJuIik7Cj4gKwkJCQkJYWRkX29yX292ZXJyaWRlX3Jlc3VsdChjdXJyZW50 X3Rlc3QsICJmYWlsIiwgImRtZXNnLWZhaWwiKTsKPiArCQkJCQlhZGRfb3Jfb3ZlcnJpZGVfcmVz dWx0KGN1cnJlbnRfdGVzdCwgIndhcm4iLCAiZG1lc2ctd2FybiIpOwo+ICsJCQkJfQo+ICsJCQkJ ZnJlZShkbWVzZyk7Cj4gKwkJCQlmcmVlKHdhcm5pbmdzKTsKPiArCQkJCWRtZXNnID0gd2Fybmlu Z3MgPSBOVUxMOwo+ICsJCQkJZG1lc2dsZW4gPSB3YXJuaW5nc2xlbiA9IDA7Cj4gKwkJCX0KPiAr Cj4gKwkJCXN1YnRlc3QgKz0gc3RhcnRpbmdfc3VidGVzdF9kbWVzZ19sZW47Cj4gKwkJCWlndF9u YW1lID0gZ2VuX2lndF9uYW1lKGJpbmFyeSwgc3VidGVzdCk7Cj4gKwkJCWN1cnJlbnRfdGVzdCA9 IGdldF9vcl9jcmVhdGVfanNvbl9vYmplY3QodGVzdHMsIGlndF9uYW1lKTsKPiArCQl9Cj4gKwo+ ICsJCWlmICgoZmxhZ3MgJiAweDA3KSA8PSA0ICYmIGNvbnRpbnVhdGlvbiAhPSAnYycgJiYKPiAr CQkgICAgcmVnZXhlYygmcmUsIG1lc3NhZ2UsIChzaXplX3QpMCwgTlVMTCwgMCkgPT0gUkVHX05P TUFUQ0gpIHsKPiArCQkJYXBwZW5kX2xpbmUoJndhcm5pbmdzLCAmd2FybmluZ3NsZW4sIGZvcm1h dHRlZCk7Cj4gKwkJfQo+ICsJCWFwcGVuZF9saW5lKCZkbWVzZywgJmRtZXNnbGVuLCBmb3JtYXR0 ZWQpOwo+ICsJfQo+ICsKPiArCWlmIChjdXJyZW50X3Rlc3QgIT0gTlVMTCkgewo+ICsJCWpzb25f b2JqZWN0X29iamVjdF9hZGQoY3VycmVudF90ZXN0LCAiZG1lc2ciLAo+ICsJCQkJICAgICAgIGpz b25fb2JqZWN0X25ld19zdHJpbmdfbGVuKGRtZXNnLCBkbWVzZ2xlbikpOwo+ICsJCWlmICh3YXJu aW5ncykgewo+ICsJCQlqc29uX29iamVjdF9vYmplY3RfYWRkKGN1cnJlbnRfdGVzdCwgImRtZXNn LXdhcm5pbmdzIiwKPiArCQkJCQkgICAgICAganNvbl9vYmplY3RfbmV3X3N0cmluZ19sZW4od2Fy bmluZ3MsIHdhcm5pbmdzbGVuKSk7Cj4gKwkJCWFkZF9vcl9vdmVycmlkZV9yZXN1bHQoY3VycmVu dF90ZXN0LCAicGFzcyIsICJkbWVzZy13YXJuIik7Cj4gKwkJCWFkZF9vcl9vdmVycmlkZV9yZXN1 bHQoY3VycmVudF90ZXN0LCAiZmFpbCIsICJkbWVzZy1mYWlsIik7Cj4gKwkJCWFkZF9vcl9vdmVy cmlkZV9yZXN1bHQoY3VycmVudF90ZXN0LCAid2FybiIsICJkbWVzZy13YXJuIik7Cj4gKwkJfQo+ ICsJfSBlbHNlIHsKPiArCQkvKgo+ICsJCSAqIERpZG4ndCBnZXQgYW55IHN1YnRlc3QgbWVzc2Fn ZXMgYXQgYWxsLiBJZiB0aGVyZQo+ICsJCSAqIGFyZSBzdWJ0ZXN0cywgYWRkIGFsbCBvZiB0aGUg ZG1lc2cgZ290dGVuIHRvIGFsbCBvZgo+ICsJCSAqIHRoZW0uCj4gKwkJICovCj4gKwkJZm9yIChp ID0gMDsgaSA8IHN1YnRlc3RzLT5zaXplOyBpKyspIHsKPiArCQkJaWd0X25hbWUgPSBnZW5faWd0 X25hbWUoYmluYXJ5LCBzdWJ0ZXN0cy0+bmFtZXNbaV0pOwo+ICsJCQljdXJyZW50X3Rlc3QgPSBn ZXRfb3JfY3JlYXRlX2pzb25fb2JqZWN0KHRlc3RzLCBpZ3RfbmFtZSk7Cj4gKwkJCWpzb25fb2Jq ZWN0X29iamVjdF9hZGQoY3VycmVudF90ZXN0LCAiZG1lc2ciLAo+ICsJCQkJCSAgICAgICBqc29u X29iamVjdF9uZXdfc3RyaW5nX2xlbihkbWVzZywgZG1lc2dsZW4pKTsKPiArCQkJLyoKPiArCQkJ ICogRG9uJ3QgYm90aGVyIHdpdGggd2FybmluZ3MsIGFueSBzdWJ0ZXN0cwo+ICsJCQkgKiB0aGVy ZSBhcmUgd291bGQgaGF2ZSBza2lwIGFzIHRoZWlyIHJlc3VsdAo+ICsJCQkgKiBhbnl3YXkuCj4g KwkJCSAqLwo+ICsJCX0KPiArCj4gKwkJaWYgKGkgPT0gMCkgewo+ICsJCQkvKiBUaGVyZSB3ZXJl IG5vIHN1YnRlc3RzICovCj4gKwkJCWlndF9uYW1lID0gZ2VuX2lndF9uYW1lKGJpbmFyeSwgTlVM TCk7Cj4gKwkJCWN1cnJlbnRfdGVzdCA9IGdldF9vcl9jcmVhdGVfanNvbl9vYmplY3QodGVzdHMs IGlndF9uYW1lKTsKPiArCQkJanNvbl9vYmplY3Rfb2JqZWN0X2FkZChjdXJyZW50X3Rlc3QsICJk bWVzZyIsCj4gKwkJCQkJICAgICAgIGpzb25fb2JqZWN0X25ld19zdHJpbmdfbGVuKGRtZXNnLCBk bWVzZ2xlbikpOwo+ICsJCQlpZiAod2FybmluZ3MpIHsKPiArCQkJCWpzb25fb2JqZWN0X29iamVj dF9hZGQoY3VycmVudF90ZXN0LCAiZG1lc2ctd2FybmluZ3MiLAo+ICsJCQkJCQkgICAgICAganNv bl9vYmplY3RfbmV3X3N0cmluZ19sZW4od2FybmluZ3MsIHdhcm5pbmdzbGVuKSk7Cj4gKwkJCQlh ZGRfb3Jfb3ZlcnJpZGVfcmVzdWx0KGN1cnJlbnRfdGVzdCwgInBhc3MiLCAiZG1lc2ctd2FybiIp Owo+ICsJCQkJYWRkX29yX292ZXJyaWRlX3Jlc3VsdChjdXJyZW50X3Rlc3QsICJmYWlsIiwgImRt ZXNnLWZhaWwiKTsKPiArCQkJCWFkZF9vcl9vdmVycmlkZV9yZXN1bHQoY3VycmVudF90ZXN0LCAi d2FybiIsICJkbWVzZy13YXJuIik7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyoKPiAr CSAqIEFkZCBhbiBlbXB0eSBzdHJpbmcgYXMgdGhlIGRtZXNnIG9mIGFsbCBzdWJ0ZXN0cyB0aGF0 Cj4gKwkgKiBkaWRuJ3QgZ2V0IGFueSBkbWVzZyB5ZXQuCj4gKwkgKi8KPiArCWZvciAoaSA9IDA7 IGkgPCBzdWJ0ZXN0cy0+c2l6ZTsgaSsrKSB7Cj4gKwkJaWd0X25hbWUgPSBnZW5faWd0X25hbWUo YmluYXJ5LCBzdWJ0ZXN0cy0+bmFtZXNbaV0pOwo+ICsJCWN1cnJlbnRfdGVzdCA9IGdldF9vcl9j cmVhdGVfanNvbl9vYmplY3QodGVzdHMsIGlndF9uYW1lKTsKPiArCQlpZiAoIWpzb25fb2JqZWN0 X29iamVjdF9nZXRfZXgoY3VycmVudF90ZXN0LCAiZG1lc2ciLCBOVUxMKSkgewo+ICsJCQlqc29u X29iamVjdF9vYmplY3RfYWRkKGN1cnJlbnRfdGVzdCwgImRtZXNnIiwKPiArCQkJCQkgICAgICAg anNvbl9vYmplY3RfbmV3X3N0cmluZygiIikpOwo+ICsJCX0KPiArCX0KPiArCj4gKwlmcmVlKGRt ZXNnKTsKPiArCWZyZWUod2FybmluZ3MpOwo+ICsJZmNsb3NlKGYpOwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gK3N0YXRpYyBjaGFyICpyZXN1bHRfZnJvbV9leGl0Y29kZShpbnQgZXhpdGNv ZGUpCj4gK3sKPiArCXN3aXRjaCAoZXhpdGNvZGUpIHsKPiArCWNhc2UgSUdUX0VYSVRfVElNRU9V VDoKPiArCQlyZXR1cm4gInRpbWVvdXQiOwo+ICsJY2FzZSBJR1RfRVhJVF9TS0lQOgo+ICsJCXJl dHVybiAic2tpcCI7Cj4gKwljYXNlIElHVF9FWElUX1NVQ0NFU1M6Cj4gKwkJcmV0dXJuICJwYXNz IjsKPiArCWNhc2UgSUdUX0VYSVRfSU5WQUxJRDoKPiArCQlyZXR1cm4gIm5vdHJ1biI7Cj4gKwlk ZWZhdWx0Ogo+ICsJCXJldHVybiAiZmFpbCI7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGFkZF9zdWJ0ZXN0KHN0cnVjdCBzdWJ0ZXN0cyAqc3VidGVzdHMsIGNoYXIgKnN1YnRlc3QpCj4g K3sKPiArCXNpemVfdCBsZW4gPSBzdHJsZW4oc3VidGVzdCk7Cj4gKwo+ICsJaWYgKGxlbiA9PSAw KQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoc3VidGVzdFtsZW4gLSAxXSA9PSAnXG4nKQo+ICsJ CXN1YnRlc3RbbGVuIC0gMV0gPSAnXDAnOwo+ICsKPiArCXN1YnRlc3RzLT5zaXplKys7Cj4gKwlz dWJ0ZXN0cy0+bmFtZXMgPSByZWFsbG9jKHN1YnRlc3RzLT5uYW1lcywgc2l6ZW9mKCpzdWJ0ZXN0 cy0+bmFtZXMpICogc3VidGVzdHMtPnNpemUpOwo+ICsJc3VidGVzdHMtPm5hbWVzW3N1YnRlc3Rz LT5zaXplIC0gMV0gPSBzdWJ0ZXN0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBmaWxsX2Zyb21f am91cm5hbChpbnQgZmQsIGNoYXIgKmJpbmFyeSwKPiArCQkJCSAgc3RydWN0IHN1YnRlc3RzICpz dWJ0ZXN0cywKPiArCQkJCSAgc3RydWN0IGpzb25fb2JqZWN0ICp0ZXN0cykKPiArewo+ICsJRklM RSAqZiA9IGZkb3BlbihmZCwgInIiKTsKPiArCWNoYXIgKmxpbmUgPSBOVUxMOwo+ICsJc2l6ZV90 IGxpbmVsZW4gPSAwOwo+ICsJc3NpemVfdCByZWFkOwo+ICsJY2hhciBleGl0bGluZVtdID0gImV4 aXQ6IjsKPiArCXNpemVfdCBleGl0bGVuID0gc2l6ZW9mKGV4aXRsaW5lKSAtIDE7Cj4gKwljaGFy IHRpbWVvdXRsaW5lW10gPSAidGltZW91dDoiOwo+ICsJc2l6ZV90IHRpbWVvdXRsZW4gPSBzaXpl b2YodGltZW91dGxpbmUpIC0gMTsKPiArCWludCBleGl0Y29kZSA9IDEwMDAwOwo+ICsKPiArCXdo aWxlICgocmVhZCA9IGdldGxpbmUoJmxpbmUsICZsaW5lbGVuLCBmKSkgPiAwKSB7Cj4gKwkJaWYg KHJlYWQgPj0gZXhpdGxlbiAmJiAhbWVtY21wKGxpbmUsIGV4aXRsaW5lLCBleGl0bGVuKSkgewo+ ICsJCQljaGFyICpwID0gc3RyY2hyKGxpbmUsICcoJyk7Cj4gKwkJCWNoYXIgKmlndF9uYW1lID0g Z2VuX2lndF9uYW1lKGJpbmFyeSwgTlVMTCk7Cj4gKwkJCWRvdWJsZSB0aW1lID0gMC4wOwo+ICsJ CQlzdHJ1Y3QganNvbl9vYmplY3QgKm9iaiA9IGdldF9vcl9jcmVhdGVfanNvbl9vYmplY3QodGVz dHMsIGlndF9uYW1lKTsKPiArCj4gKwkJCWV4aXRjb2RlID0gYXRvaShsaW5lICsgZXhpdGxlbik7 Cj4gKwo+ICsJCQlpZiAocCkgewo+ICsJCQkJdGltZSA9IHN0cnRvZChwICsgMSwgTlVMTCk7Cj4g KwkJCX0KPiArCj4gKwkJCWFkZF9ydW50aW1lKG9iaiwgdGltZSk7Cj4gKwkJfSBlbHNlIGlmIChy ZWFkID49IHRpbWVvdXRsZW4gJiYgIW1lbWNtcChsaW5lLCB0aW1lb3V0bGluZSwgdGltZW91dGxl bikpIHsKPiArCQkJaWYgKHN1YnRlc3RzLT5zaXplKSB7Cj4gKwkJCQljaGFyICpsYXN0X3N1YnRl c3QgPSBzdWJ0ZXN0cy0+bmFtZXNbc3VidGVzdHMtPnNpemUgLSAxXTsKPiArCQkJCWNoYXIgKmln dF9uYW1lID0gZ2VuX2lndF9uYW1lKGJpbmFyeSwgbGFzdF9zdWJ0ZXN0KTsKPiArCQkJCWNoYXIg KnAgPSBzdHJjaHIobGluZSwgJygnKTsKPiArCQkJCWRvdWJsZSB0aW1lID0gMC4wOwo+ICsJCQkJ c3RydWN0IGpzb25fb2JqZWN0ICpvYmogPSBnZXRfb3JfY3JlYXRlX2pzb25fb2JqZWN0KHRlc3Rz LCBpZ3RfbmFtZSk7Cj4gKwo+ICsJCQkJanNvbl9vYmplY3Rfb2JqZWN0X2FkZChvYmosICJyZXN1 bHQiLAo+ICsJCQkJCQkgICAgICAganNvbl9vYmplY3RfbmV3X3N0cmluZygidGltZW91dCIpKTsK PiArCj4gKwkJCQlpZiAocCkgewo+ICsJCQkJCXRpbWUgPSBzdHJ0b2QocCArIDEsIE5VTEwpOwo+ ICsJCQkJfQo+ICsKPiArCQkJCWFkZF9ydW50aW1lKG9iaiwgdGltZSk7Cj4gKwo+ICsJCQkJaWd0 X25hbWUgPSBnZW5faWd0X25hbWUoYmluYXJ5LCBOVUxMKTsKPiArCQkJCW9iaiA9IGdldF9vcl9j cmVhdGVfanNvbl9vYmplY3QodGVzdHMsIGlndF9uYW1lKTsKPiArCQkJCWFkZF9ydW50aW1lKG9i aiwgdGltZSk7Cj4gKwkJCX0KPiArCQl9IGVsc2Ugewo+ICsJCQlhZGRfc3VidGVzdChzdWJ0ZXN0 cywgc3RyZHVwKGxpbmUpKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHN1YnRlc3RzLT5zaXpl ID09IDAgJiYgZXhpdGNvZGUgIT0gMTAwMDApIHsKPiArCQljaGFyICppZ3RfbmFtZSA9IGdlbl9p Z3RfbmFtZShiaW5hcnksIE5VTEwpOwo+ICsJCXN0cnVjdCBqc29uX29iamVjdCAqb2JqID0gZ2V0 X29yX2NyZWF0ZV9qc29uX29iamVjdCh0ZXN0cywgaWd0X25hbWUpOwo+ICsJCWNoYXIgKnJlc3Vs dCA9IHJlc3VsdF9mcm9tX2V4aXRjb2RlKGV4aXRjb2RlKTsKPiArCQlqc29uX29iamVjdF9vYmpl Y3RfYWRkKG9iaiwgInJlc3VsdCIsCj4gKwkJCQkgICAgICAganNvbl9vYmplY3RfbmV3X3N0cmlu ZyhyZXN1bHQpKTsKPiArCX0KPiArCj4gKwlmcmVlKGxpbmUpOwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gK3N0YXRpYyBib29sIHBhcnNlX3Rlc3RfZGlyZWN0b3J5KGludCBkaXJmZCwgY2hh ciAqYmluYXJ5LCBzdHJ1Y3QganNvbl9vYmplY3QgKnRlc3RzKQo+ICt7Cj4gKwlpbnQgZmRzW19G X0xBU1RdOwo+ICsJc3RydWN0IHN1YnRlc3RzIHN1YnRlc3RzID0ge307Cj4gKwo+ICsJaWYgKCFv cGVuX291dHB1dF9maWxlcyhkaXJmZCwgZmRzLCBmYWxzZSkpIHsKPiArCQlmcHJpbnRmKHN0ZGVy ciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVzXG4iKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4g Kwl9Cj4gKwo+ICsJLyogZmlsbF9mcm9tX2pvdXJuYWwgYWxzbyBmaWxscyB0aGUgc3VidGVzdHMg c3RydWN0ICovCj4gKwlpZiAoIWZpbGxfZnJvbV9qb3VybmFsKGZkc1tfRl9KT1VSTkFMXSwgYmlu YXJ5LCAmc3VidGVzdHMsIHRlc3RzKSkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgcmVh ZGluZyBmcm9tIGpvdXJuYWxcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwkv KiBPcmRlciBvZiB0aGVzZSBpcyBpbXBvcnRhbnQgKi8KPiArCWlmICghZmlsbF9mcm9tX291dHB1 dChmZHNbX0ZfT1VUXSwgYmluYXJ5LCB0cnVlLCAmc3VidGVzdHMsIHRlc3RzKSB8fAo+ICsJICAg ICFmaWxsX2Zyb21fb3V0cHV0KGZkc1tfRl9FUlJdLCBiaW5hcnksIGZhbHNlLCAmc3VidGVzdHMs IHRlc3RzKSB8fAo+ICsJICAgICFmaWxsX2Zyb21fZG1lc2coZmRzW19GX0RNRVNHXSwgYmluYXJ5 LCAmc3VidGVzdHMsIHRlc3RzKSkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgcGFyc2lu ZyBvdXRwdXQgZmlsZXNcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwljbG9z ZV9vdXRwdXRzKGZkcyk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK2Jvb2wgZ2Vu ZXJhdGVfcmVzdWx0cyhpbnQgZGlyZmQpCj4gK3sKPiArCXN0cnVjdCBzZXR0aW5ncyBzZXR0aW5n czsKPiArCXN0cnVjdCBqb2JfbGlzdCBqb2JfbGlzdDsKPiArCXN0cnVjdCBqc29uX29iamVjdCAq b2JqLCAqdGVzdHM7Cj4gKwlpbnQgcmVzdWx0c2ZkLCB0ZXN0ZGlyZmQsIHVuYW1lZmQ7Cj4gKwlj b25zdCBjaGFyICpqc29uX3N0cmluZzsKPiArCXNpemVfdCBpOwo+ICsKPiArCWluaXRfc2V0dGlu Z3MoJnNldHRpbmdzKTsKPiArCWluaXRfam9iX2xpc3QoJmpvYl9saXN0KTsKPiArCj4gKwlpZiAo IXJlYWRfc2V0dGluZ3MoJnNldHRpbmdzLCBkaXJmZCkpIHsKPiArCQlmcHJpbnRmKHN0ZGVyciwg InJlc3VsdGdlbjogQ2Fubm90IHBhcnNlIHNldHRpbmdzXG4iKTsKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gKwl9Cj4gKwo+ICsJaWYgKCFyZWFkX2pvYl9saXN0KCZqb2JfbGlzdCwgZGlyZmQpKSB7Cj4g KwkJZnByaW50ZihzdGRlcnIsICJyZXN1bHRnZW46IENhbm5vdCBwYXJzZSBqb2IgbGlzdFxuIik7 Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCS8qIFRPRE86IHNldHRpbmdzLm92ZXJ3 cml0ZSAqLwo+ICsJaWYgKChyZXN1bHRzZmQgPSBvcGVuYXQoZGlyZmQsICJyZXN1bHRzLmpzb24i LCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjY2KSkgPCAwKSB7Cj4gKwkJZnByaW50 ZihzdGRlcnIsICJyZXN1bHRnZW46IENhbm5vdCBjcmVhdGUgcmVzdWx0cyBmaWxlXG4iKTsKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJb2JqID0ganNvbl9vYmplY3RfbmV3X29iamVj dCgpOwo+ICsJanNvbl9vYmplY3Rfb2JqZWN0X2FkZChvYmosICJfX3R5cGVfXyIsIGpzb25fb2Jq ZWN0X25ld19zdHJpbmcoIlRlc3RydW5SZXN1bHQiKSk7Cj4gKwlqc29uX29iamVjdF9vYmplY3Rf YWRkKG9iaiwgInJlc3VsdHNfdmVyc2lvbiIsIGpzb25fb2JqZWN0X25ld19pbnQoOSkpOwo+ICsJ anNvbl9vYmplY3Rfb2JqZWN0X2FkZChvYmosICJuYW1lIiwKPiArCQkJICAgICAgIHNldHRpbmdz Lm5hbWUgPwo+ICsJCQkgICAgICAganNvbl9vYmplY3RfbmV3X3N0cmluZyhzZXR0aW5ncy5uYW1l KSA6Cj4gKwkJCSAgICAgICBqc29uX29iamVjdF9uZXdfc3RyaW5nKCIiKSk7Cj4gKwo+ICsJaWYg KCh1bmFtZWZkID0gb3BlbmF0KGRpcmZkLCAidW5hbWUudHh0IiwgT19SRE9OTFkpKSA+PSAwKSB7 Cj4gKwkJY2hhciBidWZbMTI4XTsKPiArCQlzc2l6ZV90IHIgPSByZWFkKHVuYW1lZmQsIGJ1Ziwg MTI4KTsKPiArCj4gKwkJaWYgKHIgPiAwICYmIGJ1ZltyIC0gMV0gPT0gJ1xuJykKPiArCQkJci0t Owo+ICsKPiArCQlqc29uX29iamVjdF9vYmplY3RfYWRkKG9iaiwgInVuYW1lIiwKPiArCQkJCSAg ICAgICBqc29uX29iamVjdF9uZXdfc3RyaW5nX2xlbihidWYsIHIpKTsKPiArCQljbG9zZSh1bmFt ZWZkKTsKPiArCX0KPiArCj4gKwkvKiBsc3BjaSAqLwo+ICsJLyogcmVzdWx0c192ZXJzaW9uICov Cj4gKwkvKiBnbHhpbmZvICovCj4gKwkvKiB3Z2xpbmZvICovCj4gKwkvKiBjbGluZm8gKi8KPiAr CS8qIG9wdGlvbnMgKi8KPiArCS8qIHRpbWVfZWxhcHNlZCAqLwo+ICsJLyogdG90YWxzICovCj4g Kwo+ICsJdGVzdHMgPSBqc29uX29iamVjdF9uZXdfb2JqZWN0KCk7Cj4gKwlqc29uX29iamVjdF9v YmplY3RfYWRkKG9iaiwgInRlc3RzIiwgdGVzdHMpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBq b2JfbGlzdC5zaXplOyBpKyspIHsKPiArCQljaGFyIG5hbWVbMTZdOwo+ICsKPiArCQlzbnByaW50 ZihuYW1lLCAxNiwgIiV6ZCIsIGkpOwo+ICsJCWlmICgodGVzdGRpcmZkID0gb3BlbmF0KGRpcmZk LCBuYW1lLCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKSkgPCAwKSB7Cj4gKwkJCWZwcmludGYoc3Rk ZXJyLCAiV2FybmluZzogQ2Fubm90IG9wZW4gcmVzdWx0IGRpcmVjdG9yeSAlc1xuIiwgbmFtZSk7 Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaWYgKCFwYXJzZV90ZXN0X2RpcmVjdG9yeSh0 ZXN0ZGlyZmQsIGpvYl9saXN0LmVudHJpZXNbaV0uYmluYXJ5LCB0ZXN0cykpIHsKPiArCQkJY2xv c2UocmVzdWx0c2ZkKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCX0KPiArCj4gKwlq c29uX3N0cmluZyA9IGpzb25fb2JqZWN0X3RvX2pzb25fc3RyaW5nX2V4dChvYmosIEpTT05fQ19U T19TVFJJTkdfUFJFVFRZKTsKPiArCXdyaXRlKHJlc3VsdHNmZCwganNvbl9zdHJpbmcsIHN0cmxl bihqc29uX3N0cmluZykpOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK2Jvb2wgZ2VuZXJh dGVfcmVzdWx0c19wYXRoKGNoYXIgKnJlc3VsdHNwYXRoKQo+ICt7Cj4gKwlpbnQgZGlyZmQgPSBv cGVuKHJlc3VsdHNwYXRoLCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKTsKPiArCj4gKwlpZiAoZGly ZmQgPCAwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gZ2VuZXJhdGVfcmVzdWx0 cyhkaXJmZCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvcnVubmVyL3Jlc3VsdGdlbi5oIGIvcnVubmVy L3Jlc3VsdGdlbi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uODNh MDg3NmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvcnVubmVyL3Jlc3VsdGdlbi5oCj4gQEAgLTAs MCArMSw5IEBACj4gKyNpZm5kZWYgUlVOTkVSX1JFU1VMVEdFTl9ICj4gKyNkZWZpbmUgUlVOTkVS X1JFU1VMVEdFTl9ICj4gKwo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsKPiArYm9vbCBnZW5l cmF0ZV9yZXN1bHRzKGludCBkaXJmZCk7Cj4gK2Jvb2wgZ2VuZXJhdGVfcmVzdWx0c19wYXRoKGNo YXIgKnJlc3VsdHNwYXRoKTsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9ydW5uZXIvcmVz dWx0cy5jIGIvcnVubmVyL3Jlc3VsdHMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAuLjNlYjdjYjE1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3J1bm5lci9yZXN1bHRz LmMKPiBAQCAtMCwwICsxLDI2IEBACj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8 c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4K PiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsKPiArI2luY2x1ZGUgInJlc3VsdGdlbi5oIgo+ ICsKPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4gKwlpbnQgZGlyZmQ7 Cj4gKwo+ICsJaWYgKGFyZ2MgPCAyKQo+ICsJCWV4aXQoMSk7Cj4gKwo+ICsJZGlyZmQgPSBvcGVu KGFyZ3ZbMV0sIE9fRElSRUNUT1JZIHwgT19SRE9OTFkpOwo+ICsJaWYgKGRpcmZkIDwgMCkKPiAr CQlleGl0KDEpOwo+ICsKPiArCWlmIChnZW5lcmF0ZV9yZXN1bHRzKGRpcmZkKSkgewo+ICsJCXBy aW50ZigiUmVzdWx0cyBnZW5lcmF0ZWRcbiIpOwo+ICsJCWV4aXQoMCk7Cj4gKwl9Cj4gKwo+ICsJ ZXhpdCgxKTsKPiArfQo+IGRpZmYgLS1naXQgYS9ydW5uZXIvcnVubmVyLmMgYi9ydW5uZXIvcnVu bmVyLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi5iNjg1Nzg2YQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9ydW5uZXIvcnVubmVyLmMKPiBAQCAtMCwwICsxLDQwIEBA Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKwo+ICsjaW5j bHVkZSAic2V0dGluZ3MuaCIKPiArI2luY2x1ZGUgImpvYl9saXN0LmgiCj4gKyNpbmNsdWRlICJl eGVjdXRvci5oIgo+ICsjaW5jbHVkZSAicmVzdWx0Z2VuLmgiCj4gKwo+ICtpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCj4gK3sKPiArCXN0cnVjdCBzZXR0aW5ncyBzZXR0aW5nczsKPiAr CXN0cnVjdCBqb2JfbGlzdCBqb2JfbGlzdDsKPiArCXN0cnVjdCBleGVjdXRlX3N0YXRlIHN0YXRl Owo+ICsKPiArCWluaXRfc2V0dGluZ3MoJnNldHRpbmdzKTsKPiArCWluaXRfam9iX2xpc3QoJmpv Yl9saXN0KTsKPiArCj4gKwlpZiAoIXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgJnNldHRpbmdz KSkgewo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICsKPiArCWlmICghY3JlYXRlX2pvYl9saXN0KCZq b2JfbGlzdCwgJnNldHRpbmdzKSkgewo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICsKPiArCWlmICgh aW5pdGlhbGl6ZV9leGVjdXRlX3N0YXRlKCZzdGF0ZSwgJnNldHRpbmdzLCAmam9iX2xpc3QpKSB7 Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFleGVjdXRlKCZzdGF0ZSwgJnNldHRp bmdzLCAmam9iX2xpc3QpKSB7Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFnZW5l cmF0ZV9yZXN1bHRzX3BhdGgoc2V0dGluZ3MucmVzdWx0c19wYXRoKSkgewo+ICsJCXJldHVybiAx Owo+ICsJfQo+ICsKPiArCXByaW50ZigiRG9uZS5cbiIpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiBk aWZmIC0tZ2l0IGEvcnVubmVyL3NldHRpbmdzLmMgYi9ydW5uZXIvc2V0dGluZ3MuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLjUwZTRlYTEwCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL3J1bm5lci9zZXR0aW5ncy5jCj4gQEAgLTAsMCArMSw1MDYgQEAKPiArI2luY2x1 ZGUgInNldHRpbmdzLmgiCj4gKwo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGdl dG9wdC5oPgo+ICsjaW5jbHVkZSA8bGliZ2VuLmg+Cj4gKyNpbmNsdWRlIDxsaW1pdHMuaD4KPiAr I2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0 cmluZy5oPgo+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5o Pgo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gKwo+ICtlbnVtIHsKPiArCU9QVF9BQk9SVF9PTl9F UlJPUiwKPiArCU9QVF9URVNUX0xJU1QsCj4gKwlPUFRfSUdOT1JFX01JU1NJTkcsCj4gKwlPUFRf SEVMUCA9ICdoJywKPiArCU9QVF9OQU1FID0gJ24nLAo+ICsJT1BUX0RSWV9SVU4gPSAnZCcsCj4g KwlPUFRfSU5DTFVERSA9ICd0JywKPiArCU9QVF9FWENMVURFID0gJ3gnLAo+ICsJT1BUX1NZTkMg PSAncycsCj4gKwlPUFRfTE9HX0xFVkVMID0gJ2wnLAo+ICsJT1BUX09WRVJXUklURSA9ICdvJywK PiArCU9QVF9NVUxUSVBMRSA9ICdtJywKPiArCU9QVF9USU1FT1VUID0gJ2MnLAo+ICsJT1BUX1dB VENIRE9HID0gJ2cnLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCB7Cj4gKwlpbnQgbGV2ZWw7 Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICt9IGxvZ19sZXZlbHNbXSA9IHsKPiArCXsgTE9HX0xF VkVMX05PUk1BTCwgIm5vcm1hbCIgfSwKPiArCXsgTE9HX0xFVkVMX1FVSUVULCAicXVpZXQiIH0s Cj4gKwl7IExPR19MRVZFTF9WRVJCT1NFLCAidmVyYm9zZSIgfSwKPiArCXsgMCwgMCB9LAo+ICt9 Owo+ICsKPiArc3RhdGljIGJvb2wgc2V0X2xvZ19sZXZlbChzdHJ1Y3Qgc2V0dGluZ3MqIHNldHRp bmdzLCBjb25zdCBjaGFyICpsZXZlbCkKPiArewo+ICsJaW50IGM7Cj4gKwo+ICsJZm9yIChjID0g MDsgbG9nX2xldmVsc1tjXS5uYW1lICE9IE5VTEw7IGMrKykgewo+ICsJCWlmICghc3RyY21wKGxl dmVsLCBsb2dfbGV2ZWxzW2NdLm5hbWUpKSB7Cj4gKwkJCXNldHRpbmdzLT5sb2dfbGV2ZWwgPSBs b2dfbGV2ZWxzW2NdLmxldmVsOwo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2Vfc3Ry ID0KPiArCSJ1c2FnZTogcnVubmVyIFtvcHRpb25zXSBbdGVzdF9yb290XSByZXN1bHRzLXBhdGhc blxuIgo+ICsJIk9wdGlvbnM6XG4iCj4gKwkiIFBpZ2xpdCBjb21wYXRpYmxlOlxuIgo+ICsJIiAg LWgsIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXRcbiIK PiArCSIgIC1uIDx0ZXN0IG5hbWU+LCAtLW5hbWUgPHRlc3QgbmFtZT5cbiIKPiArCSIgICAgICAg ICAgICAgICAgICAgICAgICBOYW1lIG9mIHRoaXMgdGVzdCBydW5cbiIKPiArCSIgIC1kLCAtLWRy eS1ydW4gICAgICAgICBEbyBub3QgZXhlY3V0ZSB0aGUgdGVzdHNcbiIKPiArCSIgIC10IDxyZWdl eD4sIC0taW5jbHVkZS10ZXN0cyA8cmVnZXg+XG4iCj4gKwkiICAgICAgICAgICAgICAgICAgICAg ICAgUnVuIG9ubHkgbWF0Y2hpbmcgdGVzdHMgKGNhbiBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlKVxu Igo+ICsJIiAgLXggPHJlZ2V4PiwgLS1leGNsdWRlLXRlc3RzIDxyZWdleD5cbiIKPiArCSIgICAg ICAgICAgICAgICAgICAgICAgICBFeGNsdWRlIG1hdGNoaW5nIHRlc3RzIChjYW4gYmUgdXNlZCBt b3JlIHRoYW4gb25jZSlcbiIKPiArCSIgIC0tYWJvcnQtb24tbW9uaXRvcmVkLWVycm9yXG4iCj4g KwkiICAgICAgICAgICAgICAgICAgICAgICAgQWJvcnQgZXhlY3V0aW9uIHdoZW4gYSBmYXRhbCBj b25kaXRpb24gaXMgZGV0ZWN0ZWQuXG4iCj4gKwkiICAgICAgICAgICAgICAgICAgICAgICAgPFRP RE8+XG4iCj4gKwkiICAtcywgLS1zeW5jICAgICAgICAgICAgU3luYyByZXN1bHRzIHRvIGRpc2sg YWZ0ZXIgZXZlcnkgdGVzdFxuIgo+ICsJIiAgLWwge3F1aWV0LHZlcmJvc2UsZHVtbXl9LCAtLWxv Zy1sZXZlbCB7cXVpZXQsdmVyYm9zZSxkdW1teX1cbiIKPiArCSIgICAgICAgICAgICAgICAgICAg ICAgICBTZXQgdGhlIGxvZ2dlciB2ZXJib3NpdHkgbGV2ZWxcbiIKPiArCSIgIC0tdGVzdC1saXN0 IFRFU1RfTElTVFxuIgo+ICsJIiAgICAgICAgICAgICAgICAgICAgICAgIEEgZmlsZSBjb250YWlu aW5nIGEgbGlzdCBvZiB0ZXN0cyB0byBydW5cbiIKPiArCSIgIC1vLCAtLW92ZXJ3cml0ZSAgICAg ICBJZiB0aGUgcmVzdWx0cy1wYXRoIGFscmVhZHkgZXhpc3RzLCBkZWxldGUgaXRcbiIKPiArCSIg IC0taWdub3JlLW1pc3NpbmcgICAgICBJZ25vcmVkIGJ1dCBhY2NlcHRlZCwgZm9yIHBpZ2xpdCBj b21wYXRpYmlsaXR5XG4iCj4gKwkiXG4iCj4gKwkiIEluY29tcGF0aWJsZSBvcHRpb25zOlxuIgo+ ICsJIiAgLW0sIC0tbXVsdGlwbGUtbW9kZSAgIFJ1biBtdWx0aXBsZSBzdWJ0ZXN0cyBpbiB0aGUg c2FtZSBiaW5hcnkgZXhlY3V0aW9uLlxuIgo+ICsJIiAgICAgICAgICAgICAgICAgICAgICAgIElm IGEgdGVzdGxpc3QgZmlsZSBpcyBnaXZlbiwgY29uc2VjdXRpdmUgc3VidGVzdHMgYXJlXG4iCj4g KwkiICAgICAgICAgICAgICAgICAgICAgICAgcnVuIGluIHRoZSBzYW1lIGV4ZWN1dGlvbiBpZiB0 aGV5IGFyZSBmcm9tIHRoZSBzYW1lXG4iCj4gKwkiICAgICAgICAgICAgICAgICAgICAgICAgYmlu YXJ5LiBOb3RlIHRoYXQgaW4gdGhhdCBjYXNlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIHRoZVxuIgo+ ICsJIiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRlc3QgZXhlY3V0aW9uIGlzIGRpY3RhdGVk IGJ5IHRoZSB0ZXN0IGJpbmFyeSwgbm90XG4iCj4gKwkiICAgICAgICAgICAgICAgICAgICAgICAg dGhlIHRlc3RsaXN0XG4iCj4gKwkiICAtLWluYWN0aXZpdHktdGltZW91dCA8c2Vjb25kcz5cbiIK PiArCSIgICAgICAgICAgICAgICAgICAgICAgICBLaWxsIHRoZSBydW5uaW5nIHRlc3QgYWZ0ZXIg PHNlY29uZHM+IG9mIGluYWN0aXZpdHkgaW5cbiIKPiArCSIgICAgICAgICAgICAgICAgICAgICAg ICB0aGUgdGVzdCdzIHN0ZG91dCwgc3RkZXJyLCBvciBkbWVzZ1xuIgo+ICsJIiAgLS11c2Utd2F0 Y2hkb2cgICAgICAgIFVzZSBoYXJkd2FyZSB3YXRjaGRvZyBmb3IgbGV0aGFsIGVuZm9yY2VtZW50 IG9mIHRoZVxuIgo+ICsJIiAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIHRpbWVvdXQuIEtp bGxpbmcgdGhlIHRlc3QgcHJvY2VzcyBpcyBzdGlsbFxuIgo+ICsJIiAgICAgICAgICAgICAgICAg ICAgICAgIGF0dGVtcHRlZCBhdCB0aW1lb3V0IHRyaWdnZXIuXG4iCj4gKwkiICBbdGVzdF9yb290 XSAgICAgICAgICAgRGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIElHVCB0ZXN0cy4gVGhlIGVu dmlyb25tZW50XG4iCj4gKwkiICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgSUdUX1RF U1RfUk9PVCB3aWxsIGJlIHVzZWQgaWYgc2V0LCBvdmVycmlkaW5nXG4iCj4gKwkiICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcyBvcHRpb24gaWYgZ2l2ZW4uXG4iCj4gKwk7Cj4gKwo+ICtzdGF0 aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpleHRyYV9tZXNzYWdlLCBib29sIHVzZV9zdGRlcnIp Cj4gK3sKPiArCUZJTEUgKmYgPSB1c2Vfc3RkZXJyID8gc3RkZXJyIDogc3Rkb3V0Owo+ICsKPiAr CWlmIChleHRyYV9tZXNzYWdlKQo+ICsJCWZwcmludGYoZiwgIiVzXG5cbiIsIGV4dHJhX21lc3Nh Z2UpOwo+ICsKPiArCWZwcmludGYoZiwgIiVzIiwgdXNhZ2Vfc3RyKTsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgYWRkX3JlZ2V4KHN0cnVjdCByZWdleF9saXN0ICpsaXN0LCBjaGFyICpuZXcpCj4g K3sKPiArCXJlZ2V4X3QgKnJlZ2V4Owo+ICsJc2l6ZV90IGJ1ZmxlbjsKPiArCWNoYXIgKmJ1ZjsK PiArCWludCBzOwo+ICsKPiArCXJlZ2V4ID0gbWFsbG9jKHNpemVvZigqcmVnZXgpKTsKPiArCj4g KwlpZiAoKHMgPSByZWdjb21wKHJlZ2V4LCBuZXcsCj4gKwkJCSBSRUdfRVhURU5ERUQgfCBSRUdf Tk9TVUIpKSAhPSAwKSB7Cj4gKwkJYnVmbGVuID0gcmVnZXJyb3IocywgcmVnZXgsIE5VTEwsIDAp Owo+ICsJCWJ1ZiA9IG1hbGxvYyhidWZsZW4pOwo+ICsJCXJlZ2Vycm9yKHMsIHJlZ2V4LCBidWYs IGJ1Zmxlbik7Cj4gKwkJdXNhZ2UoYnVmLCB0cnVlKTsKPiArCj4gKwkJZnJlZShidWYpOwo+ICsJ CXJlZ2ZyZWUocmVnZXgpOwo+ICsJCWZyZWUocmVnZXgpOwo+ICsJCXJldHVybiBmYWxzZTsKPiAr CX0KPiArCj4gKwlsaXN0LT5yZWdleGVzID0gcmVhbGxvYyhsaXN0LT5yZWdleGVzLAo+ICsJCQkJ KGxpc3QtPnNpemUgKyAxKSAqIHNpemVvZigqbGlzdC0+cmVnZXhlcykpOwo+ICsJbGlzdC0+cmVn ZXhfc3RyaW5ncyA9IHJlYWxsb2MobGlzdC0+cmVnZXhfc3RyaW5ncywKPiArCQkJCSAgICAgIChs aXN0LT5zaXplICsgMSkgKiBzaXplb2YoKmxpc3QtPnJlZ2V4X3N0cmluZ3MpKTsKPiArCWxpc3Qt PnJlZ2V4ZXNbbGlzdC0+c2l6ZV0gPSByZWdleDsKPiArCWxpc3QtPnJlZ2V4X3N0cmluZ3NbbGlz dC0+c2l6ZV0gPSBuZXc7Cj4gKwlsaXN0LT5zaXplKys7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGZyZWVfcmVnZXhlcyhzdHJ1Y3QgcmVnZXhfbGlzdCAqcmVn ZXhlcykKPiArewo+ICsJc2l6ZV90IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHJlZ2V4ZXMt PnNpemU7IGkrKykgewo+ICsJCWZyZWUocmVnZXhlcy0+cmVnZXhfc3RyaW5nc1tpXSk7Cj4gKwkJ cmVnZnJlZShyZWdleGVzLT5yZWdleGVzW2ldKTsKPiArCQlmcmVlKHJlZ2V4ZXMtPnJlZ2V4ZXNb aV0pOwo+ICsJfQo+ICsJZnJlZShyZWdleGVzLT5yZWdleF9zdHJpbmdzKTsKPiArCWZyZWUocmVn ZXhlcy0+cmVnZXhlcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHJlYWRhYmxlX2ZpbGUoY2hh ciAqZmlsZW5hbWUpCj4gK3sKPiArCXJldHVybiAhYWNjZXNzKGZpbGVuYW1lLCBSX09LKTsKPiAr fQo+ICsKPiArdm9pZCBpbml0X3NldHRpbmdzKHN0cnVjdCBzZXR0aW5ncyAqc2V0dGluZ3MpCj4g K3sKPiArCW1lbXNldChzZXR0aW5ncywgMCwgc2l6ZW9mKCpzZXR0aW5ncykpOwo+ICt9Cj4gKwo+ ICt2b2lkIGZyZWVfc2V0dGluZ3Moc3RydWN0IHNldHRpbmdzICpzZXR0aW5ncykKPiArewo+ICsJ ZnJlZShzZXR0aW5ncy0+dGVzdF9saXN0KTsKPiArCWZyZWUoc2V0dGluZ3MtPm5hbWUpOwo+ICsJ ZnJlZShzZXR0aW5ncy0+dGVzdF9yb290KTsKPiArCWZyZWUoc2V0dGluZ3MtPnJlc3VsdHNfcGF0 aCk7Cj4gKwo+ICsJZnJlZV9yZWdleGVzKCZzZXR0aW5ncy0+aW5jbHVkZV9yZWdleGVzKTsKPiAr CWZyZWVfcmVnZXhlcygmc2V0dGluZ3MtPmV4Y2x1ZGVfcmVnZXhlcyk7Cj4gKwo+ICsJaW5pdF9z ZXR0aW5ncyhzZXR0aW5ncyk7Cj4gK30KPiArCj4gK2Jvb2wgcGFyc2Vfb3B0aW9ucyhpbnQgYXJn YywgY2hhciAqKmFyZ3YsCj4gKwkJICAgc3RydWN0IHNldHRpbmdzICpzZXR0aW5ncykKPiArewo+ ICsJaW50IGM7Cj4gKwljaGFyICplbnZfdGVzdF9yb290Owo+ICsKPiArCXN0YXRpYyBzdHJ1Y3Qg b3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewo+ICsJCXsiaGVscCIsIG5vX2FyZ3VtZW50LCBOVUxM LCBPUFRfSEVMUH0sCj4gKwkJeyJuYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVF9O QU1FfSwKPiArCQl7ImRyeS1ydW4iLCBub19hcmd1bWVudCwgTlVMTCwgT1BUX0RSWV9SVU59LAo+ ICsJCXsiaW5jbHVkZS10ZXN0cyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfSU5DTFVE RX0sCj4gKwkJeyJleGNsdWRlLXRlc3RzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVF9F WENMVURFfSwKPiArCQl7ImFib3J0LW9uLW1vbml0b3JlZC1lcnJvciIsIG5vX2FyZ3VtZW50LCBO VUxMLCBPUFRfQUJPUlRfT05fRVJST1J9LAo+ICsJCXsic3luYyIsIG5vX2FyZ3VtZW50LCBOVUxM LCBPUFRfU1lOQ30sCj4gKwkJeyJsb2ctbGV2ZWwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg T1BUX0xPR19MRVZFTH0sCj4gKwkJeyJ0ZXN0LWxpc3QiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgT1BUX1RFU1RfTElTVH0sCj4gKwkJeyJvdmVyd3JpdGUiLCBub19hcmd1bWVudCwgTlVMTCwg T1BUX09WRVJXUklURX0sCj4gKwkJeyJpZ25vcmUtbWlzc2luZyIsIG5vX2FyZ3VtZW50LCBOVUxM LCBPUFRfSUdOT1JFX01JU1NJTkd9LAo+ICsJCXsibXVsdGlwbGUtbW9kZSIsIG5vX2FyZ3VtZW50 LCBOVUxMLCBPUFRfTVVMVElQTEV9LAo+ICsJCXsiaW5hY3Rpdml0eS10aW1lb3V0IiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIE9QVF9USU1FT1VUfSwKPiArCQl7InVzZS13YXRjaGRvZyIsIG5v X2FyZ3VtZW50LCBOVUxMLCBPUFRfV0FUQ0hET0d9LAo+ICsJCXsgMCwgMCwgMCwgMH0sCj4gKwl9 Owo+ICsKPiArCWZyZWVfc2V0dGluZ3Moc2V0dGluZ3MpOwo+ICsKPiArCW9wdGluZCA9IDE7Cj4g Kwo+ICsJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhuOmR0Ong6c2w6b20i LCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgewo+ICsJCXN3aXRjaCAoYykgewo+ICsJCWNh c2UgT1BUX0hFTFA6Cj4gKwkJCXVzYWdlKE5VTEwsIGZhbHNlKTsKPiArCQkJZ290byBlcnJvcjsK PiArCQljYXNlIE9QVF9OQU1FOgo+ICsJCQlzZXR0aW5ncy0+bmFtZSA9IHN0cmR1cChvcHRhcmcp Owo+ICsJCQlicmVhazsKPiArCQljYXNlIE9QVF9EUllfUlVOOgo+ICsJCQlzZXR0aW5ncy0+ZHJ5 X3J1biA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BUX0lOQ0xVREU6Cj4gKwkJCWlm ICghYWRkX3JlZ2V4KCZzZXR0aW5ncy0+aW5jbHVkZV9yZWdleGVzLCBzdHJkdXAob3B0YXJnKSkp Cj4gKwkJCQlnb3RvIGVycm9yOwo+ICsJCQlicmVhazsKPiArCQljYXNlIE9QVF9FWENMVURFOgo+ ICsJCQlpZiAoIWFkZF9yZWdleCgmc2V0dGluZ3MtPmV4Y2x1ZGVfcmVnZXhlcywgc3RyZHVwKG9w dGFyZykpKQo+ICsJCQkJZ290byBlcnJvcjsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfQUJP UlRfT05fRVJST1I6Cj4gKwkJCXNldHRpbmdzLT5hYm9ydF9vbl9lcnJvciA9IHRydWU7Cj4gKwkJ CWJyZWFrOwo+ICsJCWNhc2UgT1BUX1NZTkM6Cj4gKwkJCXNldHRpbmdzLT5zeW5jID0gdHJ1ZTsK PiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfTE9HX0xFVkVMOgo+ICsJCQlpZiAoIXNldF9sb2df bGV2ZWwoc2V0dGluZ3MsIG9wdGFyZykpIHsKPiArCQkJCXVzYWdlKCJDYW5ub3QgcGFyc2UgbG9n IGxldmVsIiwgdHJ1ZSk7Cj4gKwkJCQlnb3RvIGVycm9yOwo+ICsJCQl9Cj4gKwkJCWJyZWFrOwo+ ICsJCWNhc2UgT1BUX1RFU1RfTElTVDoKPiArCQkJc2V0dGluZ3MtPnRlc3RfbGlzdCA9IGFic29s dXRlX3BhdGgob3B0YXJnKTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfT1ZFUldSSVRFOgo+ ICsJCQlzZXR0aW5ncy0+b3ZlcndyaXRlID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBP UFRfSUdOT1JFX01JU1NJTkc6Cj4gKwkJCS8qIElnbm9yZWQsIHBpZ2xpdCBjb21wYXRpYmlsaXR5 ICovCj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BUX01VTFRJUExFOgo+ICsJCQlzZXR0aW5ncy0+ bXVsdGlwbGVfbW9kZSA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BUX1RJTUVPVVQ6 Cj4gKwkJCXNldHRpbmdzLT5pbmFjdGl2aXR5X3RpbWVvdXQgPSBhdG9pKG9wdGFyZyk7Cj4gKwkJ CWJyZWFrOwo+ICsJCWNhc2UgT1BUX1dBVENIRE9HOgo+ICsJCQlzZXR0aW5ncy0+dXNlX3dhdGNo ZG9nID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAnPyc6Cj4gKwkJCXVzYWdlKE5VTEws IHRydWUpOwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCWRlZmF1bHQ6Cj4gKwkJCXVzYWdlKCJDYW5u b3QgcGFyc2Ugb3B0aW9ucyIsIHRydWUpOwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCX0K PiArCj4gKwlzd2l0Y2ggKGFyZ2MgLSBvcHRpbmQpIHsKPiArCWNhc2UgMjoKPiArCQlzZXR0aW5n cy0+dGVzdF9yb290ID0gYWJzb2x1dGVfcGF0aChhcmd2W29wdGluZF0pOwo+ICsJCSsrb3B0aW5k Owo+ICsJCS8qIGZhbGx0aHJvdWdoICovCj4gKwljYXNlIDE6Cj4gKwkJc2V0dGluZ3MtPnJlc3Vs dHNfcGF0aCA9IGFic29sdXRlX3BhdGgoYXJndltvcHRpbmRdKTsKPiArCQlicmVhazsKPiArCWNh c2UgMDoKPiArCQl1c2FnZSgiUmVzdWx0cy1wYXRoIG1pc3NpbmciLCB0cnVlKTsKPiArCQlnb3Rv IGVycm9yOwo+ICsJZGVmYXVsdDoKPiArCQl1c2FnZSgiRXh0cmEgYXJndW1lbnRzIGFmdGVyIHJl c3VsdHMtcGF0aCIsIHRydWUpOwo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJaWYgKChl bnZfdGVzdF9yb290ID0gZ2V0ZW52KCJJR1RfVEVTVF9ST09UIikpICE9IE5VTEwpIHsKPiArCQlm cmVlKHNldHRpbmdzLT50ZXN0X3Jvb3QpOwo+ICsJCXNldHRpbmdzLT50ZXN0X3Jvb3QgPSBhYnNv bHV0ZV9wYXRoKGVudl90ZXN0X3Jvb3QpOwo+ICsJfQo+ICsKPiArCWlmICghc2V0dGluZ3MtPnRl c3Rfcm9vdCkgewo+ICsJCXVzYWdlKCJUZXN0IHJvb3Qgbm90IHNldCIsIHRydWUpOwo+ICsJCWdv dG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFzZXR0aW5ncy0+bmFtZSkgewo+ICsJCWNoYXIg Km5hbWUgPSBzdHJkdXAoc2V0dGluZ3MtPnJlc3VsdHNfcGF0aCk7Cj4gKwkJc2V0dGluZ3MtPm5h bWUgPSBzdHJkdXAoYmFzZW5hbWUobmFtZSkpOwo+ICsJCWZyZWUobmFtZSk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIHRydWU7Cj4gKwo+ICsgZXJyb3I6Cj4gKwlmcmVlX3NldHRpbmdzKHNldHRpbmdz KTsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArYm9vbCB2YWxpZGF0ZV9zZXR0aW5ncyhz dHJ1Y3Qgc2V0dGluZ3MgKnNldHRpbmdzKQo+ICt7Cj4gKwlpbnQgZGlyZmQsIGZkOwo+ICsKPiAr CWlmIChzZXR0aW5ncy0+dGVzdF9saXN0ICYmICFyZWFkYWJsZV9maWxlKHNldHRpbmdzLT50ZXN0 X2xpc3QpKSB7Cj4gKwkJdXNhZ2UoIkNhbm5vdCBvcGVuIHRlc3QtbGlzdCBmaWxlIiwgdHJ1ZSk7 Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCWlmICghc2V0dGluZ3MtPnJlc3VsdHNf cGF0aCkgewo+ICsJCXVzYWdlKCJObyByZXN1bHRzLXBhdGggc2V0OyB0aGlzIHNob3VsZG4ndCBo YXBwZW4iLCB0cnVlKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFzZXR0 aW5ncy0+dGVzdF9yb290KSB7Cj4gKwkJdXNhZ2UoIk5vIHRlc3Qgcm9vdCBzZXQ7IHRoaXMgc2hv dWxkbid0IGhhcHBlbiIsIHRydWUpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlk aXJmZCA9IG9wZW4oc2V0dGluZ3MtPnRlc3Rfcm9vdCwgT19ESVJFQ1RPUlkgfCBPX1JET05MWSk7 Cj4gKwlpZiAoZGlyZmQgPCAwKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJUZXN0IGRpcmVjdG9y eSAlcyBjYW5ub3QgYmUgb3BlbmVkXG4iLCBzZXR0aW5ncy0+dGVzdF9yb290KTsKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZmQgPSBvcGVuYXQoZGlyZmQsICJ0ZXN0LWxpc3QudHh0 IiwgT19SRE9OTFkpOwo+ICsJaWYgKGZkIDwgMCkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiQ2Fu bm90IG9wZW4gJXMvdGVzdC1saXN0LnR4dFxuIiwgc2V0dGluZ3MtPnRlc3Rfcm9vdCk7Cj4gKwkJ Y2xvc2UoZGlyZmQpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwljbG9zZShmZCk7 Cj4gKwljbG9zZShkaXJmZCk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK2NoYXIg KmFic29sdXRlX3BhdGgoY2hhciAqcGF0aCkKPiArewo+ICsJY2hhciAqcmVzdWx0ID0gTlVMTDsK PiArCWNoYXIgKnRtcHBhdGgsICp0bXBuYW1lOwo+ICsKPiArCXJlc3VsdCA9IHJlYWxwYXRoKHBh dGgsIE5VTEwpOwo+ICsJaWYgKHJlc3VsdCAhPSBOVUxMKQo+ICsJCXJldHVybiByZXN1bHQ7Cj4g Kwo+ICsJdG1wcGF0aCA9IHN0cmR1cChwYXRoKTsKPiArCXRtcG5hbWUgPSBkaXJuYW1lKHRtcHBh dGgpOwo+ICsJZnJlZShyZXN1bHQpOwo+ICsJcmVzdWx0ID0gcmVhbHBhdGgodG1wbmFtZSwgTlVM TCk7Cj4gKwlmcmVlKHRtcHBhdGgpOwo+ICsKPiArCWlmIChyZXN1bHQgIT0gTlVMTCkgewo+ICsJ CXRtcHBhdGggPSBzdHJkdXAocGF0aCk7Cj4gKwkJdG1wbmFtZSA9IGJhc2VuYW1lKHRtcHBhdGgp Owo+ICsJCXN0cmNhdChyZXN1bHQsICIvIik7Cj4gKwkJc3RyY2F0KHJlc3VsdCwgdG1wbmFtZSk7 Cj4gKwkJZnJlZSh0bXBwYXRoKTsKPiArCQlyZXR1cm4gcmVzdWx0Owo+ICsJfQo+ICsKPiArCWZy ZWUocmVzdWx0KTsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY2hhciBzZXR0 aW5nc19maWxlbmFtZVtdID0gIm1ldGFkYXRhLnR4dCI7Cj4gK2Jvb2wgc2VyaWFsaXplX3NldHRp bmdzKHN0cnVjdCBzZXR0aW5ncyAqc2V0dGluZ3MpCj4gK3sKPiArI2RlZmluZSBTRVJJQUxJWkVf TElORShmLCBzLCBuYW1lLCBmb3JtYXQpIGZwcmludGYoZiwgIiVzIDogIiBmb3JtYXQgIlxuIiwg I25hbWUsIHMtPm5hbWUpCj4gKwo+ICsJaW50IGRpcmZkLCBmZDsKPiArCUZJTEUgKmY7Cj4gKwo+ ICsJaWYgKCFzZXR0aW5ncy0+cmVzdWx0c19wYXRoKSB7Cj4gKwkJdXNhZ2UoIk5vIHJlc3VsdHMt cGF0aCBzZXQ7IHRoaXMgc2hvdWxkbid0IGhhcHBlbiIsIHRydWUpOwo+ICsJCXJldHVybiBmYWxz ZTsKPiArCX0KPiArCj4gKwlpZiAoKGRpcmZkID0gb3BlbihzZXR0aW5ncy0+cmVzdWx0c19wYXRo LCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKSkgPCAwKSB7Cj4gKwkJbWtkaXIoc2V0dGluZ3MtPnJl c3VsdHNfcGF0aCwgMDc1NSk7Cj4gKwkJaWYgKChkaXJmZCA9IG9wZW4oc2V0dGluZ3MtPnJlc3Vs dHNfcGF0aCwgT19ESVJFQ1RPUlkgfCBPX1JET05MWSkpIDwgMCkgewo+ICsJCQl1c2FnZSgiQ3Jl YXRpbmcgcmVzdWx0cy1wYXRoIGZhaWxlZCIsIHRydWUpOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCWlmICgoZmQgPSBvcGVuYXQoZGlyZmQsIHNldHRpbmdzX2ZpbGVu YW1lLCBPX1JET05MWSkpID49IDApIHsKPiArCQljbG9zZShmZCk7Cj4gKwo+ICsJCWlmICghc2V0 dGluZ3MtPm92ZXJ3cml0ZSkgewo+ICsJCQkvKiBTZXJpYWxpemF0aW9uIGRhdGEgYWxyZWFkeSBl eGlzdHMsIG5vdCBvdmVyd3JpdGluZyAqLwo+ICsJCQljbG9zZShkaXJmZCk7Cj4gKwkJCXJldHVy biBmYWxzZTsKPiArCQl9Cj4gKwo+ICsJCWlmICh1bmxpbmthdChkaXJmZCwgc2V0dGluZ3NfZmls ZW5hbWUsIDApICE9IDApIHsKPiArCQkJdXNhZ2UoIkVycm9yIG92ZXJ3cml0aW5nIG9sZCBzZXR0 aW5ncyBtZXRhZGF0YSIsIHRydWUpOwo+ICsJCQljbG9zZShkaXJmZCk7Cj4gKwkJCXJldHVybiBm YWxzZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKChmZCA9IG9wZW5hdChkaXJmZCwgc2V0dGlu Z3NfZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSwgMDY2NikpIDwgMCkgewo+ ICsJCXVzYWdlKCJDcmVhdGluZyBzZXR0aW5ncyBzZXJpYWxpemF0aW9uIGZpbGUgZmFpbGVkIiwg dHJ1ZSk7Cj4gKwkJY2xvc2UoZGlyZmQpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4g KwlmID0gZmRvcGVuKGZkLCAidyIpOwo+ICsJaWYgKCFmKSB7Cj4gKwkJY2xvc2UoZmQpOwo+ICsJ CWNsb3NlKGRpcmZkKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJU0VSSUFMSVpF X0xJTkUoZiwgc2V0dGluZ3MsIGFib3J0X29uX2Vycm9yLCAiJWQiKTsKPiArCWlmIChzZXR0aW5n cy0+dGVzdF9saXN0KQo+ICsJCVNFUklBTElaRV9MSU5FKGYsIHNldHRpbmdzLCB0ZXN0X2xpc3Qs ICIlcyIpOwo+ICsJaWYgKHNldHRpbmdzLT5uYW1lKQo+ICsJCVNFUklBTElaRV9MSU5FKGYsIHNl dHRpbmdzLCBuYW1lLCAiJXMiKTsKPiArCVNFUklBTElaRV9MSU5FKGYsIHNldHRpbmdzLCBkcnlf cnVuLCAiJWQiKTsKPiArCVNFUklBTElaRV9MSU5FKGYsIHNldHRpbmdzLCBzeW5jLCAiJWQiKTsK PiArCVNFUklBTElaRV9MSU5FKGYsIHNldHRpbmdzLCBsb2dfbGV2ZWwsICIlZCIpOwo+ICsJU0VS SUFMSVpFX0xJTkUoZiwgc2V0dGluZ3MsIG92ZXJ3cml0ZSwgIiVkIik7Cj4gKwlTRVJJQUxJWkVf TElORShmLCBzZXR0aW5ncywgbXVsdGlwbGVfbW9kZSwgIiVkIik7Cj4gKwlTRVJJQUxJWkVfTElO RShmLCBzZXR0aW5ncywgaW5hY3Rpdml0eV90aW1lb3V0LCAiJWQiKTsKPiArCVNFUklBTElaRV9M SU5FKGYsIHNldHRpbmdzLCB1c2Vfd2F0Y2hkb2csICIlZCIpOwo+ICsJU0VSSUFMSVpFX0xJTkUo Ziwgc2V0dGluZ3MsIHRlc3Rfcm9vdCwgIiVzIik7Cj4gKwlTRVJJQUxJWkVfTElORShmLCBzZXR0 aW5ncywgcmVzdWx0c19wYXRoLCAiJXMiKTsKPiArCj4gKwlpZiAoc2V0dGluZ3MtPnN5bmMpIHsK PiArCQlmc3luYyhmZCk7Cj4gKwkJZnN5bmMoZGlyZmQpOwo+ICsJfQo+ICsKPiArCWZjbG9zZShm KTsKPiArCWNsb3NlKGRpcmZkKTsKPiArCXJldHVybiB0cnVlOwo+ICsKPiArI3VuZGVmIFNFUklB TElaRV9MSU5FCj4gK30KPiArCj4gK3N0YXRpYyBjaGFyICptYXliZV9zdHJkdXAoY2hhciAqc3Ry KQo+ICt7Cj4gKwlpZiAoIXN0cikKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gc3Ry ZHVwKHN0cik7Cj4gK30KPiArCj4gK2Jvb2wgcmVhZF9zZXR0aW5ncyhzdHJ1Y3Qgc2V0dGluZ3Mg KnNldHRpbmdzLCBpbnQgZGlyZmQpCj4gK3sKPiArI2RlZmluZSBQQVJTRV9MSU5FKHMsIG5hbWUs IHZhbCwgZmllbGQsIHdyaXRlKSBcCj4gKwlpZiAoIXN0cmNtcChuYW1lLCAjZmllbGQpKSB7CSAg ICAgICBcCj4gKwkJcy0+ZmllbGQgPSB3cml0ZTsJICAgICAgIFwKPiArCQlmcmVlKG5hbWUpOwkJ ICAgICAgIFwKPiArCQlmcmVlKHZhbCk7CQkgICAgICAgXAo+ICsJCW5hbWUgPSB2YWwgPSBOVUxM OwkgICAgICAgXAo+ICsJCWNvbnRpbnVlOwkJICAgICAgIFwKPiArCX0KPiArCj4gKwlpbnQgZmQ7 Cj4gKwlGSUxFICpmOwo+ICsJY2hhciAqbmFtZSA9IE5VTEwsICp2YWwgPSBOVUxMOwo+ICsKPiAr CWZyZWVfc2V0dGluZ3Moc2V0dGluZ3MpOwo+ICsKPiArCWlmICgoZmQgPSBvcGVuYXQoZGlyZmQs IHNldHRpbmdzX2ZpbGVuYW1lLCBPX1JET05MWSkpIDwgMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4g Kwo+ICsJZiA9IGZkb3BlbihmZCwgInIiKTsKPiArCWlmICghZikgewo+ICsJCWNsb3NlKGZkKTsK PiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJd2hpbGUgKGZzY2FuZihmLCAiJW1zIDog JW1zIiwgJm5hbWUsICZ2YWwpID09IDIpIHsKPiArCQlpbnQgbnVtdmFsID0gYXRvaSh2YWwpOwo+ ICsJCVBBUlNFX0xJTkUoc2V0dGluZ3MsIG5hbWUsIHZhbCwgYWJvcnRfb25fZXJyb3IsIG51bXZh bCk7Cj4gKwkJUEFSU0VfTElORShzZXR0aW5ncywgbmFtZSwgdmFsLCB0ZXN0X2xpc3QsIG1heWJl X3N0cmR1cCh2YWwpKTsKPiArCQlQQVJTRV9MSU5FKHNldHRpbmdzLCBuYW1lLCB2YWwsIG5hbWUs IG1heWJlX3N0cmR1cCh2YWwpKTsKPiArCQlQQVJTRV9MSU5FKHNldHRpbmdzLCBuYW1lLCB2YWws IGRyeV9ydW4sIG51bXZhbCk7Cj4gKwkJUEFSU0VfTElORShzZXR0aW5ncywgbmFtZSwgdmFsLCBz eW5jLCBudW12YWwpOwo+ICsJCVBBUlNFX0xJTkUoc2V0dGluZ3MsIG5hbWUsIHZhbCwgbG9nX2xl dmVsLCBudW12YWwpOwo+ICsJCVBBUlNFX0xJTkUoc2V0dGluZ3MsIG5hbWUsIHZhbCwgb3Zlcndy aXRlLCBudW12YWwpOwo+ICsJCVBBUlNFX0xJTkUoc2V0dGluZ3MsIG5hbWUsIHZhbCwgbXVsdGlw bGVfbW9kZSwgbnVtdmFsKTsKPiArCQlQQVJTRV9MSU5FKHNldHRpbmdzLCBuYW1lLCB2YWwsIGlu YWN0aXZpdHlfdGltZW91dCwgbnVtdmFsKTsKPiArCQlQQVJTRV9MSU5FKHNldHRpbmdzLCBuYW1l LCB2YWwsIHVzZV93YXRjaGRvZywgbnVtdmFsKTsKPiArCQlQQVJTRV9MSU5FKHNldHRpbmdzLCBu YW1lLCB2YWwsIHRlc3Rfcm9vdCwgbWF5YmVfc3RyZHVwKHZhbCkpOwo+ICsJCVBBUlNFX0xJTkUo c2V0dGluZ3MsIG5hbWUsIHZhbCwgcmVzdWx0c19wYXRoLCBtYXliZV9zdHJkdXAodmFsKSk7Cj4g Kwo+ICsJCXByaW50ZigiV2FybmluZzogVW5rbm93biBmaWVsZCBpbiBzZXR0aW5ncyBmaWxlOiAl cyA9ICVzXG4iLAo+ICsJCSAgICAgICBuYW1lLCB2YWwpOwo+ICsJCWZyZWUobmFtZSk7Cj4gKwkJ ZnJlZSh2YWwpOwo+ICsJCW5hbWUgPSB2YWwgPSBOVUxMOwo+ICsJfQo+ICsKPiArCWZyZWUobmFt ZSk7Cj4gKwlmcmVlKHZhbCk7Cj4gKwlmY2xvc2UoZik7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g Kwo+ICsjdW5kZWYgUEFSU0VfTElORQo+ICt9Cj4gZGlmZiAtLWdpdCBhL3J1bm5lci9zZXR0aW5n cy5oIGIvcnVubmVyL3NldHRpbmdzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwLi45ZDFmMDNmYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9ydW5uZXIvc2V0dGluZ3Mu aAo+IEBAIC0wLDAgKzEsMTExIEBACj4gKyNpZm5kZWYgUlVOTkVSX1NFVFRJTkdTX0gKPiArI2Rl ZmluZSBSVU5ORVJfU0VUVElOR1NfSAo+ICsKPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArI2lu Y2x1ZGUgPHN0ZGRlZi5oPgo+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxy ZWdleC5oPgo+ICsKPiArZW51bSB7Cj4gKwlMT0dfTEVWRUxfTk9STUFMID0gMCwKPiArCUxPR19M RVZFTF9RVUlFVCA9IC0xLAo+ICsJTE9HX0xFVkVMX1ZFUkJPU0UgPSAxLAo+ICt9Owo+ICsKPiAr c3RydWN0IHJlZ2V4X2xpc3Qgewo+ICsJY2hhciAqKnJlZ2V4X3N0cmluZ3M7Cj4gKwlyZWdleF90 KiogcmVnZXhlczsKPiArCXNpemVfdCBzaXplOwo+ICt9Owo+ICsKPiArc3RydWN0IHNldHRpbmdz IHsKPiArCWJvb2wgYWJvcnRfb25fZXJyb3I7Cj4gKwljaGFyICp0ZXN0X2xpc3Q7Cj4gKwljaGFy ICpuYW1lOwo+ICsJYm9vbCBkcnlfcnVuOwo+ICsJc3RydWN0IHJlZ2V4X2xpc3QgaW5jbHVkZV9y ZWdleGVzOwo+ICsJc3RydWN0IHJlZ2V4X2xpc3QgZXhjbHVkZV9yZWdleGVzOwo+ICsJYm9vbCBz eW5jOwo+ICsJaW50IGxvZ19sZXZlbDsKPiArCWJvb2wgb3ZlcndyaXRlOwo+ICsJYm9vbCBtdWx0 aXBsZV9tb2RlOwo+ICsJaW50IGluYWN0aXZpdHlfdGltZW91dDsKPiArCWJvb2wgdXNlX3dhdGNo ZG9nOwo+ICsJY2hhciAqdGVzdF9yb290Owo+ICsJY2hhciAqcmVzdWx0c19wYXRoOwo+ICt9Owo+ ICsKPiArLyoqCj4gKyAqIGluaXRfc2V0dGluZ3M6Cj4gKyAqCj4gKyAqIEluaXRpYWxpemVzIGEg c2V0dGluZ3Mgb2JqZWN0IHRvIGFuIGVtcHR5IHN0YXRlIChhbGwgdmFsdWVzIE5VTEwsIDAKPiAr ICogb3IgZmFsc2UpLgo+ICsgKgo+ICsgKiBAc2V0dGluZ3M6IE9iamVjdCB0byBpbml0aWFsaXpl LiBTdG9yYWdlIGZvciBpdCBtdXN0IGV4aXN0Lgo+ICsgKi8KPiArdm9pZCBpbml0X3NldHRpbmdz KHN0cnVjdCBzZXR0aW5ncyAqc2V0dGluZ3MpOwo+ICsKPiArLyoqCj4gKyAqIGZyZWVfc2V0dGlu Z3M6Cj4gKyAqCj4gKyAqIFJlbGVhc2VzIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIGZvciBhIHNl dHRpbmdzIG9iamVjdCBhbmQKPiArICogaW5pdGlhbGl6ZXMgaXQgdG8gYW4gZW1wdHkgc3RhdGUg KHNlZSAjaW5pdF9zZXR0aW5ncykuCj4gKyAqCj4gKyAqIEBzZXR0aW5nczogT2JqZWN0IHRvIHJl bGVhc2UgYW5kIGluaXRpYWxpemUuCj4gKyAqLwo+ICt2b2lkIGZyZWVfc2V0dGluZ3Moc3RydWN0 IHNldHRpbmdzICpzZXR0aW5ncyk7Cj4gKwo+ICsvKioKPiArICogcGFyc2Vfb3B0aW9uczoKPiAr ICoKPiArICogUGFyc2VzIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCBzZXRzIHRoZSBzZXR0aW5n cyBvYmplY3QgdG8KPiArICogZGVzaWduYXRlZCB2YWx1ZXMuCj4gKyAqCj4gKyAqIFRoZSBmdW5j dGlvbiBjYW4gYmUgY2FsbGVkIGFnYWluIG9uIHRoZSBzYW1lIHNldHRpbmdzIG9iamVjdC4gVGhl Cj4gKyAqIG9sZCB2YWx1ZXMgd2lsbCBiZSBwcm9wZXJseSByZWxlYXNlZCBhbmQgY2xlYXJlZC4g T24gYSBwYXJzZQo+ICsgKiBmYWlsdXJlLCB0aGUgc2V0dGluZ3Mgb2JqZWN0IHdpbGwgYmUgaW4g YW4gZW1wdHkgc3RhdGUgKHNlZQo+ICsgKiAjaW5pdF9zZXR0aW5ncykgYW5kIHVzYWdlIGluc3Ry dWN0aW9ucyB3aWxsIGJlIHByaW50ZWQgd2l0aCBhbgo+ICsgKiBlcnJvciBtZXNzYWdlLgo+ICsg Kgo+ICsgKiBAYXJnYzogQXJndW1lbnQgY291bnQKPiArICogQGFyZ3Y6IEFyZ3VtZW50IGFycmF5 LiBGaXJzdCBlbGVtZW50IGlzIHRoZSBwcm9ncmFtIG5hbWUuCj4gKyAqIEBzZXR0aW5nczogU2V0 dGluZ3Mgb2JqZWN0IHRvIGZpbGwgd2l0aCB2YWx1ZXMuIE11c3QgaGF2ZSBwcm9wZXIKPiArICog c3RvcmFnZS4KPiArICoKPiArICogUmV0dXJuczogVHJ1ZSBvbiBzdWNjZXNzZnVsIHBhcnNlLCBm YWxzZSBvbiBlcnJvci4KPiArICovCj4gK2Jvb2wgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hh ciAqKmFyZ3YsCj4gKwkJICAgc3RydWN0IHNldHRpbmdzICpzZXR0aW5ncyk7Cj4gKwo+ICsvKioK PiArICogdmFsaWRhdGVfc2V0dGluZ3M6Cj4gKyAqCj4gKyAqIENoZWNrcyB0aGUgc2V0dGluZ3Mg b2JqZWN0IGFnYWluc3QgdGhlIHN5c3RlbSB0byBzZWUgaWYgZXhlY3V0aW5nCj4gKyAqIG9uIGl0 IGNhbiBiZSBkb25lLiBDaGVja3MgcGF0aG5hbWVzIGZvciBleGlzdGVuY2UgYW5kIGFjY2Vzcwo+ ICsgKiByaWdodHMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGNoZWNrIHRoYXQg dGhlIGRlc2lnbmF0ZWQKPiArICogam9iIGxpc3RpbmcgKHRocm91Z2ggYSB0ZXN0LWxpc3QgZmls ZSBvciB0aGUgLXQvLXggZmxhZ3MpIHlpZWxkcyBhCj4gKyAqIG5vbi16ZXJvIGFtb3VudCBvZiB0 ZXN0aW5nIHRvIGJlIGRvbmUuIE9uIGVycm9ycywgdXNhZ2UKPiArICogaW5zdHJ1Y3Rpb25zIHdp bGwgYmUgcHJpbnRlZCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuCj4gKyAqCj4gKyAqIEBzZXR0aW5n czogU2V0dGluZ3Mgb2JqZWN0IHRvIGNoZWNrLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBUcnVlIG9u IHZhbGlkIHNldHRpbmdzLCBmYWxzZSBvbiBhbnkgZXJyb3IuCj4gKyAqLwo+ICtib29sIHZhbGlk YXRlX3NldHRpbmdzKHN0cnVjdCBzZXR0aW5ncyAqc2V0dGluZ3MpOwo+ICsKPiArLyogVE9ETzog QmV0dGVyIHBsYWNlIGZvciB0aGlzICovCj4gK2NoYXIgKmFic29sdXRlX3BhdGgoY2hhciAqcGF0 aCk7Cj4gKwo+ICsvKioKPiArICogc2VyaWFsaXplX3NldHRpbmdzOgo+ICsgKgo+ICsgKiBTZXJp YWxpemVzIHRoZSBzZXR0aW5ncyBvYmplY3QgdG8gYSBmaWxlIGluIHRoZSByZXN1bHRzX3BhdGgK PiArICogZGlyZWN0b3J5Lgo+ICsgKgo+ICsgKiBAc2V0dGluZ3M6IFNldHRpbmdzIG9iamVjdCB0 byBzZXJpYWxpemUuCj4gKyAqLwo+ICtib29sIHNlcmlhbGl6ZV9zZXR0aW5ncyhzdHJ1Y3Qgc2V0 dGluZ3MgKnNldHRpbmdzKTsKPiArCj4gK2Jvb2wgcmVhZF9zZXR0aW5ncyhzdHJ1Y3Qgc2V0dGlu Z3MgKnNldHRpbmdzLCBpbnQgZGlyZmQpOwo+ICsKPiArI2VuZGlmCj4gLS0gCj4gMi4xNC4xCj4g Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBpZ3Qt ZGV2IG1haWxpbmcgbGlzdAo+IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2CgotLSAKRGFu aWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Js b2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==