From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Subject: Re: [PATCH v3 09/15] argo: implement the sendv op; evtchn: expose send_guest_global_virq Date: Wed, 9 Jan 2019 19:57:10 +0100 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-10-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ghJ2c-0004b4-Nx for xen-devel@lists.xenproject.org; Wed, 09 Jan 2019 18:57:26 +0000 Received: by mail-oi1-f178.google.com with SMTP id j21so7179440oii.8 for ; Wed, 09 Jan 2019 10:57:23 -0800 (PST) In-Reply-To: <1546846968-7372-10-git-send-email-christopher.w.clark@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Christopher Clark Cc: Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Julien Grall , Tim Deegan , Daniel Smith , Rich Persaud , Paul Durrant , Jan Beulich , xen-devel , James McKenzie , Eric Chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org IHRvLk9uIE1vbiwgSmFuIDcsIDIwMTkgYXQgODo0NCBBTSBDaHJpc3RvcGhlciBDbGFyawo8Y2hy aXN0b3BoZXIudy5jbGFya0BnbWFpbC5jb20+IHdyb3RlOgo+Cj4gc2VuZHYgb3BlcmF0aW9uIGlz IGludm9rZWQgdG8gcGVyZm9ybSBhIHN5bmNocm9ub3VzIHNlbmQgb2YgYnVmZmVycwo+IGNvbnRh aW5lZCBpbiBpb3ZzIHRvIGEgcmVtb3RlIGRvbWFpbidzIHJlZ2lzdGVyZWQgcmluZy4KPgo+IEl0 IHRha2VzOgo+ICAqIEEgZGVzdGluYXRpb24gYWRkcmVzcyAoZG9taWQsIHBvcnQpIGZvciB0aGUg cmluZyB0byBzZW5kIHRvLgo+ICAgIEl0IHBlcmZvcm1zIGEgbW9zdC1zcGVjaWZpYyBtYXRjaCBs b29rdXAsIHRvIGFsbG93IGZvciB3aWxkY2FyZC4KPiAgKiBBIHNvdXJjZSBhZGRyZXNzLCB1c2Vk IHRvIGluZm9ybSB0aGUgZGVzdGluYXRpb24gb2Ygd2hlcmUgdG8gcmVwbHkuCj4gICogVGhlIGFk ZHJlc3Mgb2YgYW4gYXJyYXkgb2YgaW92cyBjb250YWluaW5nIHRoZSBkYXRhIHRvIHNlbmQKPiAg KiAuLiBhbmQgdGhlIGxlbmd0aCBvZiB0aGF0IGFycmF5IG9mIGlvdnMKPiAgKiBhbmQgYSAzMi1i aXQgbWVzc2FnZSB0eXBlLCBhdmFpbGFibGUgdG8gY29tbXVuaWNhdGUgbWVzc2FnZSBjb250ZXh0 Cj4gICAgZGF0YSAoZWcuIGtlcm5lbC10by1rZXJuZWwsIHNlcGFyYXRlIGZyb20gdGhlIGFwcGxp Y2F0aW9uIGRhdGEpLgo+Cj4gSWYgaW5zdWZmaWNpZW50IHNwYWNlIGV4aXN0cyBpbiB0aGUgZGVz dGluYXRpb24gcmluZywgaXQgd2lsbCByZXR1cm4KPiAtRUFHQUlOIGFuZCBYZW4gd2lsbCBub3Rp ZnkgdGhlIGNhbGxlciB3aGVuIHN1ZmZpY2llbnQgc3BhY2UgYmVjb21lcwo+IGF2YWlsYWJsZS4K Pgo+IEFjY2Vzc2VzIHRvIHRoZSByaW5nIGluZGljZXMgYXJlIGFwcHJvcHJpYXRlbHkgYXRvbWlj LiBUaGUgcmluZ3MgYXJlCj4gbWFwcGVkIGludG8gWGVuJ3MgcHJpdmF0ZSBhZGRyZXNzIHNwYWNl IHRvIHdyaXRlIGFzIG5lZWRlZCBhbmQgdGhlCj4gbWFwcGluZ3MgYXJlIHJldGFpbmVkIGZvciBs YXRlciB1c2UuCj4KPiBGaXhlZC1zaXplIHR5cGVzIGFyZSB1c2VkIGluIHNvbWUgYXJlYXMgd2l0 aGluIHRoaXMgY29kZSB3aGVyZSBjYXV0aW9uCj4gYXJvdW5kIGF2b2lkaW5nIGludGVnZXIgb3Zl cmZsb3cgaXMgaW1wb3J0YW50Lgo+Cj4gTm90aWZpY2F0aW9ucyBhcmUgc2VudCB0byBndWVzdHMg dmlhIFZJUlEgYW5kIHNlbmRfZ3Vlc3RfZ2xvYmFsX3ZpcnEgaXMKPiBleHBvc2VkIGluIHRoZSBj aGFuZ2UgdG8gZW5hYmxlIGFyZ28gdG8gY2FsbCBpdC4gVklSUV9BUkdPX01FU1NBR0UgaXMKPiBj bGFpbWVkIGZyb20gdGhlIFZJUlEgcHJldmlvdXNseSByZXNlcnZlZCBmb3IgdGhpcyBwdXJwb3Nl ICgjMTEpLgo+Cj4gVGhlIFZJUlEgbm90aWZpY2F0aW9uIG1ldGhvZCBpcyB1c2VkIHJhdGhlciB0 aGFuIHNlbmRpbmcgZXZlbnRzIHVzaW5nCj4gZXZ0Y2huIGZ1bmN0aW9ucyBkaXJlY3RseSBiZWNh dXNlOgo+Cj4gKiBubyBjdXJyZW50IGV2ZW50IGNoYW5uZWwgdHlwZSBpcyBhbiBleGFjdCBmaXQg Zm9yIHRoZSBpbnRlbmRlZAo+ICAgYmVoYXZpb3VyLiBFQ1NfSVBJIGlzIGNsb3Nlc3QsIGJ1dCBp dCBkaXNhbGxvd3MgbWlncmF0aW9uIHRvCj4gICBvdGhlciBWQ1BVcyB3aGljaCBpcyBub3QgbmVj ZXNzYXJpbHkgYSByZXF1aXJlbWVudCBmb3IgQXJnby4KPgo+ICogYXQgdGhlIHBvaW50IG9mIGFy Z29faW5pdCwgYWxsb2NhdGlvbiBvZiBhbiBldmVudCBjaGFubmVsIGlzCj4gICBjb21wbGljYXRl ZCBieSBub25lIG9mIHRoZSBndWVzdCBWQ1BVcyBiZWluZyBpbml0aWFsaXplZCB5ZXQKPiAgIGFu ZCB0aGUgZXZlbnQgY2hhbm5lbCBsb2dpYyBleHBlY3RzIHRoYXQgYSB2YWxpZCBldmVudCBjaGFu bmVsCj4gICBoYXMgYSBwcmVzZW50IFZDUFUuCj4KPiAqIGF0IHRoZSBwb2ludCBvZiBzaWduYWxs aW5nIGEgbm90aWZpY2F0aW9uLCB0aGUgVklSUSBsb2dpYyBpcyBhbHJlYWR5Cj4gICBkZWZlbnNp dmU6IGlmIGQtPnZjcHVbMF0gaXMgTlVMTCwgdGhlIG5vdGlmaWNhdGlvbiBpcyBqdXN0IHNpbGVu dGx5Cj4gICBkcm9wcGVkLCB3aGVyZWFzIHRoZSBldnRjaG5fc2VuZCBsb2dpYyBpcyBub3Qgc28g ZGVmZW5zaXZlOiB2Y3B1WzBdCj4gICBtdXN0IG5vdCBiZSBOVUxMLCBvdGhlcndpc2UgYSBudWxs IHBvaW50ZXIgZGVyZWZlcmVuY2Ugb2NjdXJzLgo+Cj4gVXNpbmcgYSBWSVJRIHJlbW92ZXMgdGhl IG5lZWQgZm9yIHRoZSBndWVzdCB0byBxdWVyeSB0byBkZXRlcm1pbmUgd2hpY2gKPiBldmVudCBj aGFubmVsIG5vdGlmaWNhdGlvbnMgd2lsbCBiZSBkZWxpdmVyZWQgb24uIFRoaXMgaXMgYWxzbyBs aWtlbHkgdG8KPiBzaW1wbGlmeSBlc3RhYmxpc2hpbmcgZnV0dXJlIEwwL0wxIG5lc3RlZCBoeXBl cnZpc29yIGFyZ28gY29tbXVuaWNhdGlvbi4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzdG9waGVy IENsYXJrIDxjaHJpc3RvcGhlci5jbGFyazZAYmFlc3lzdGVtcy5jb20+Cj4gLS0tCj4gVGhlIHBy ZXZpb3VzIGRvdWJsZS1yZWFkIG9mIGlvdnMgZnJvbSBndWVzdCBtZW1vcnkgaGFzIGJlZW4gcmVt b3ZlZC4KPgo+IHYyIHNlbGY6IHVzZSByaW5nX2luZm8gYmFja3BvaW50ZXIgaW4gcGVuZGluZ19l bnQgdG8gbWFpbnRhaW4gbnBlbmRpbmcKPiB2MiBmZWVkYmFjayBKYW46IGRyb3AgY29va2llLCBp bXBsZW1lbnQgdGVhcmRvd24KPiB2MiBzZWxmOiBwZW5kaW5nX3F1ZXVlOiByZWFwIHN0YWxlIGVu dHMgd2hlbiBpbiBuZWVkIG9mIHNwYWNlCj4gdjIgc2VsZjogcGVuZGluZ19yZXF1ZXVlOiByZWNs YWltIGVudHMgZm9yIHN0YWxlIGRvbWFpbnMKPiB2Mi5mZWVkYmFjayBKYW46IG9ubHkgb3ZlcnJp ZGUgc2VuZGVyIGRvbWlkIGlmIERPTUlEX0FOWQo+IHYyIGZlZWRiYWNrIEphbjogZHJvcCBtZXNz YWdlIGZyb20gYXJnb19tZXNzYWdlX29wCj4gdjIgc2VsZjogY2hlY2sgbnBlbmRpbmcgdnMgbWF4 aW11bSBsaW1pdAo+IHYyIHNlbGY6IGdldF9zYW5pdGl6ZWRfcmluZyBpbnN0ZWFkIG9mIGdldF9y eF9wdHIKPiB2MiBmZWVkYmFjayB2MSMxMyBKYW46IHJlbW92ZSBkb3VibGUgcmVhZCBmcm9tIHJp bmdidWYgaW5zZXJ0LCBsb3dlciBNQVhfSU9WCj4gdjIgc2VsZjogbWFrZSBpb3ZfY291bnQgY29u c3QKPiB2MiBzZWxmOiBpb3ZfY291bnQgOiByZXR1cm4gRU1TR1NJWkUgZm9yIG1lc3NhZ2UgdG9v IGJpZwo+IHYyIHNlbGY6IE9WRVJIQVVMCj4gdjIgc2VsZjogcy9hcmdvX3BlbmRpbmdfZW50L3Bl bmRpbmdfZW50L2cKPiB2MiBmZWVkYmFjayB2MSMxMyBSb2dlcjogdXNlIE9TLXN1cHBsaWVkIHJv dW5kdXA7IGRyb3AgZnJvbSBwdWJsaWMgaGVhZGVyCj4gdjEsMiBmZWVkYmFjayBKYW4vUm9nZXIv UGF1bDogZHJvcCBlcnJubyByZXR1cm5pbmcgZ3Vlc3QgYWNjZXNzIGZ1bmN0aW9ucwo+IHYxIGZl ZWRiYWNrIFJvZ2VyLCBKYW46IGRyb3AgYXJnbyBwcmVmaXggb24gc3RhdGljIGZ1bmN0aW9ucwo+ IHYxIGZlZWRiYWNrICMxMyBKYW46IGRyb3AgZ3Vlc3RfaGFuZGxlX29rYXkgd2hlbiB1c2luZyBj b3B5X2Zyb21fZ3Vlc3QKPiAgICAgLSByZW9yZGVyIGRvX2FyZ29fb3AgbG9naWMKPiB2MiBzZWxm OiBhZGQgX2huZCBzdWZmaXggdG8gaW92cyB2YXJpYWJsZSBuYW1lIHRvIGluZGljYXRlIGd1ZXN0 IGhhbmRsZSB0eXBlCj4gdjIgc2VsZjogcmVwbGFjZSB1c2Ugb2YgWEVOX0dVRVNUX0hBTkRMRV9O VUxMIHdpdGggdHdvIGV4aXN0aW5nIG1hY3Jvcwo+Cj4gdjEgIzE1IGZlZWRiYWNrLCBKYW46IHNl bmR2IG9wIDogcy9FQ09OTlJFRlVTRUQvRVNSQ0gvCj4gdjEgIzUgKCMxNSkgZmVlZGJhY2sgUGF1 bDogc2VuZHY6IHVzZSBjdXJyZCBpbiBkb19hcmdvX21lc3NhZ2Vfb3AKPiB2MSAjMTMgKCMxNSkg ZmVlZGJhY2sgUGF1bDogc2VuZHYgb3A6IGRvL3doaWxlIHJlaW5kZW50IG9ubHkKPiB2MSAjMTMg KCMxNSkgZmVlZGJhY2sgUGF1bDogc2VuZHYgb3A6IGRvL3doaWxlOiBhcmdvX3JpbmdidWZfaW5z ZXJ0IHRvIGdvdG8gc3R5bGUKPiB2MSAjMTMgKCMxNSkgZmVlZGJhY2sgUGF1bDogc2VuZHYgb3A6 IGRvL3doaWxlOiByZWluZGVudCBvbmx5IGFnYWluCj4gdjEgIzEzICgjMTUpIGZlZWRiYWNrIFBh dWw6IHNlbmR2IG9wOiBkby93aGlsZSA6IGdvdG8KPiB2MSAjMTUgZmVlZGJhY2sgUGF1bDogc2Vu ZHYgb3A6IG1ha2UgcGFnZSB2YXI6IHVuc2lnbmVkCj4gdjEgIzE1IGZlZWRiYWNrIFBhdWw6IHNl bmR2IG9wOiBuZXcgbG9jYWwgdmFyIGZvciBQQUdFX1NJWkUgLSBvZmZzZXQKPiB2MSAjOCBmZWVk YmFjayBKYW46IFhFTl9HVUVTVF9IQU5ETEUgOiBDODkgY29tcGxpYW5jZQo+IHYxIHJlYmFzZSBh ZnRlciBzd2l0Y2hpbmcgcmVnaXN0ZXIgb3AgZnJvbSBwZm5zIHRvIHBhZ2UgZGVzY3JpcHRvcnMK PiB2MSBzZWxmOiBtb3ZlIGlvdiBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSBvdXQgb2YgcHVibGlj IGhlYWRlciBpbnRvIGFyZ28uYwo+IHYxICMxMyAoIzE1KSBmZWVkYmFjayBQYXVsOiBmaXggbG9n bGV2ZWwgZm9yIGd1ZXN0LXRyaWdnZXJlZCBtZXNzYWdlcwo+IHYxIDogYWRkIGNvbXBhdCB4bGF0 LmxzdCBlbnRyaWVzCj4gdjEgc2VsZjogc3dpdGNoZWQgbm90aWZpY2F0aW9uIHRvIHNlbmRfZ3Vl c3RfZ2xvYmFsX3ZpcnEgaW5zdGVhZCBvZiBldmVudAo+IHYxOiBmaXggZ3ByaW50ayB1c2UgZm9y IEFSTSBhcyBpdHMgZGVmbiBkaXNsaWtlcyBzcGxpdCBmb3JtYXQgc3RyaW5ncwo+IHYxOiBpbml0 IGxlbiB2YXJpYWJsZSB0byBzYXRpc2Z5IEFSTSBjb21waWxlciBpbml0aWFsaXplZCBjaGVja2lu Zwo+IHYxICMxMyBmZWVkYmFjayBKYW46IHJlbmFtZSBwYWdlIHZhcgo+IHYxOiMxNCBmZWVkYmFj ayBKYW46IHVpbnQ4X3QqIC0+IHZvaWQqCj4gdjE6ICMxMyBmZWVkYmFjayBKYW46IHB1YmxpYyBu YW1lc3BhY2U6IHByZWZpeCB3aXRoIHhlbgo+IHYxOiAjMTMgZmVlZGJhY2sgSmFuOiBibGFuayBs aW5lIGFmdGVyIGNhc2Ugb3AgaW4gZG9fYXJnb19tZXNzYWdlX29wCj4gdjE6ICMxNSBmZWVkYmFj ayBKYW46IGFkZCBjb21tZW50cyBleHBsYWluaW5nIHdoeSB0aGUgd3JpdGVzIGRvbid0IG92ZXJy dW4KPiB2MTogc2VsZjogYWRkIEFTU0VSVCB0byBzdXBwb3J0IGNvbW1lbnQgdGhhdCBvdmVycnVu IGNhbm5vdCBoYXBwZW4KPiB2MTogc2VsZjogZmFpbCBvbiBzaG9ydCB3cml0ZXMgd2hlcmUgZ3Vl c3QgbWFuaXB1bGF0ZWQgdGhlIGlvdl9sZW5zCj4gdjE6IHNlbGY6IHJlbmFtZSBlbnQgaWQgdG8g ZG9tYWluX2lkCj4gdjE6IHNlbGY6IGFkZCBtb2FuIGZvciBpb3YgcmV3cml0ZQo+IHYxLiBmZWVk YmFjayAjMTUgSmFuOiByZXF1aXJlIHRoZSBwYWQgYml0cyBhcmUgemVybwo+IHYxLiBmZWVkYmFj ayAjMTUgSmFuOiBkcm9wIE5VTEwgY2hlY2sgaW4gYXJnb19zaWduYWxfZG9tYWluIGFzIG5vdyB1 c2luZyBWSVJRCj4gdjEuIHNlbGY6IHN0b3JlIGRvbWFpbl9jb29raWUgaW4gcGVuZGluZyBlbnQK PiB2MS4gZmVlZGJhY2sgIzE1IEphbjogdXNlIHVuc2lnbmVkIHdoZXJlIHBvc3NpYmxlCj4gdjEu IGZlZWRiYWNrIEphbjogdXNlIGhhbmRsZSB0eXBlIGZvciBpb3ZfYmFzZSBpbiBwdWJsaWMgaW92 IGludGVyZmFjZQo+IHYxLiBzZWxmOiBsb2cgd2hlbmV2ZXIgdmlzaWJsZSBlcnJvciBvY2N1cnMK PiB2MSBmZWVkYmFjayAjMTUsIEphbjogZHJvcCB1bm5lY2Vzc2FyeSBtYgo+IHYxIHNlbGY6IG9u bHkgdXBkYXRlIGludGVybmFsIHR4X3B0ciBpZiBhYmxlIHRvIHJldHVybiBzdWNjZXNzCj4gICAg ICAgICAgYW5kIHVwZGF0ZSB0aGUgdmlzaWJsZSB0eF9wdHIKPiB2MSBzZWxmOiBsb2cgb24gZmFp bHVyZSB0byBtYXAgcmluZyB0byB1cGRhdGUgdmlzaWJsZSB0eF9wdHIKPiB2MSBmZWVkYmFjayAj MTUgSmFuOiBhZGQgY29tbWVudCByZTogbm90aWZpY2F0aW9uIHNpemUgcG9saWN5Cj4gdjEgc2Vs Zi9Sb2dlcj8gcmVtb3ZlIGVycmFudCBzcGFjZSBhZnRlciBzaXplb2YKPiB2MS4gZmVlZGJhY2sg IzE1IEphbjogcmVxdWlyZSBpb3YgcGFkIGJlIHplcm8KPiB2MS4gc2VsZjogcmVuYW1lIGlvdl9i YXNlIHRvIGlvdl9obmQgZm9yIGhhbmRsZSBpbiBwdWJsaWMgaW92IGludGVyZmFjZQo+IHYxOiBm ZWVkYmFjayAjMTUgSmFuOiBoYW5kbGUgdXBwZXItaGFsdmVzIG9mIGh5cGVyY2FsbCBhcmdzOyBj aGFuZ2VzIHNvbWUKPiAgICAgdHlwZXMgaW4gZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBtYXRjaC4K PiB2MTogc2VsZjogYWRkIGRwcmludGsgdG8gc2VuZHYKPiB2MTogc2VsZjogYWRkIGRlYnVnIG91 dHB1dCB0byBhcmdvX2lvdl9jb3VudAo+IHYxLiBmZWVkYmFjayAjMTQgSmFuOiBibGFuayBsaW5l IGJlZm9yZSByZXR1cm4gaW4gYXJnb19pb3ZfY291bnQKPiB2MSBmZWVkYmFjayAjMTUgSmFuOiB2 ZXJpZnkgc3JjIGlkLCBub3Qgb3ZlcnJpZGUKPgo+ICB4ZW4vY29tbW9uL2FyZ28uYyAgICAgICAg ICB8IDY1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg eGVuL2NvbW1vbi9ldmVudF9jaGFubmVsLmMgfCAgIDIgKy0KPiAgeGVuL2luY2x1ZGUvcHVibGlj L2FyZ28uaCAgfCAgNjAgKysrKysKPiAgeGVuL2luY2x1ZGUvcHVibGljL3hlbi5oICAgfCAgIDIg Ky0KPiAgeGVuL2luY2x1ZGUveGVuL2V2ZW50LmggICAgfCAgIDcgKwo+ICB4ZW4vaW5jbHVkZS94 bGF0LmxzdCAgICAgICB8ICAgMiArCj4gIDYgZmlsZXMgY2hhbmdlZCwgNzI0IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9hcmdvLmMgYi94 ZW4vY29tbW9uL2FyZ28uYwo+IGluZGV4IDU5Y2U4YzQuLjQ1NDg0MzUgMTAwNjQ0Cj4gLS0tIGEv eGVuL2NvbW1vbi9hcmdvLmMKPiArKysgYi94ZW4vY29tbW9uL2FyZ28uYwo+IEBAIC0yOSwxNCAr MjksMjEgQEAKPiAgI2luY2x1ZGUgPHB1YmxpYy9hcmdvLmg+Cj4KPiAgI2RlZmluZSBNQVhfUklO R1NfUEVSX0RPTUFJTiAgICAgICAgICAgIDEyOFUKPiArI2RlZmluZSBNQVhfUEVORElOR19QRVJf UklORyAgICAgICAgICAgICAzMlUKPgo+ICAvKiBBbGwgbWVzc2FnZXMgb24gdGhlIHJpbmcgYXJl IHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIHRoZSBzbG90IHNpemUuICovCj4gICNkZWZpbmUgUk9V TkRVUF9NRVNTQUdFKGEpIChST1VORFVQKChhKSwgWEVOX0FSR09fTVNHX1NMT1RfU0laRSkpCj4K PiArLyogVGhlIG1heGltdW0gc2l6ZSBvZiBhIG1lc3NhZ2UgdGhhdCBtYXkgYmUgc2VudCBvbiB0 aGUgbGFyZ2VzdCBBcmdvIHJpbmcuICovCj4gKyNkZWZpbmUgTUFYX0FSR09fTUVTU0FHRV9TSVpF ICgoWEVOX0FSR09fTUFYX1JJTkdfU0laRSkgLSBcCj4gKyAgICAgICAgKHNpemVvZihzdHJ1Y3Qg eGVuX2FyZ29fcmluZ19tZXNzYWdlX2hlYWRlcikpIC0gUk9VTkRVUF9NRVNTQUdFKDEpKQo+ICsK PiAgREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVuX2FyZ29fYWRkcl90KTsKPiArREVGSU5FX1hF Tl9HVUVTVF9IQU5ETEUoeGVuX2FyZ29faW92X3QpOwo+ICBERUZJTkVfWEVOX0dVRVNUX0hBTkRM RSh4ZW5fYXJnb19wYWdlX2Rlc2NyX3QpOwo+ICBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5f YXJnb19yZWdpc3Rlcl9yaW5nX3QpOwo+ICBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fYXJn b19yaW5nX3QpOwo+ICtERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fYXJnb19zZW5kX2FkZHJf dCk7Cj4gIERFRklORV9YRU5fR1VFU1RfSEFORExFKHhlbl9hcmdvX3VucmVnaXN0ZXJfcmluZ190 KTsKPgo+ICAvKiBYZW4gY29tbWFuZCBsaW5lIG9wdGlvbiB0byBlbmFibGUgYXJnbyAqLwo+IEBA IC0yNTAsNiArMjU3LDE0IEBAIGhhc2hfaW5kZXgoY29uc3Qgc3RydWN0IGFyZ29fcmluZ19pZCAq aWQpCj4gIH0KPgo+ICBzdGF0aWMgdm9pZAo+ICtzaWduYWxfZG9tYWluKHN0cnVjdCBkb21haW4g KmQpCj4gK3sKPiArICAgIGFyZ29fZHByaW50aygic2lnbmFsbGluZyBkb21pZDolZFxuIiwgZC0+ ZG9tYWluX2lkKTsKPiArCj4gKyAgICBzZW5kX2d1ZXN0X2dsb2JhbF92aXJxKGQsIFZJUlFfQVJH T19NRVNTQUdFKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAgcmluZ191bm1hcChzdHJ1Y3Qg YXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbykKPiAgewo+ICAgICAgdW5zaWduZWQgaW50IGk7Cj4g QEAgLTM0Miw2ICszNTcsNDEzIEBAIHVwZGF0ZV90eF9wdHIoc3RydWN0IGFyZ29fcmluZ19pbmZv ICpyaW5nX2luZm8sIHVpbnQzMl90IHR4X3B0cikKPiAgICAgIHNtcF93bWIoKTsKPiAgfQo+Cj4g K3N0YXRpYyBpbnQKPiArbWVtY3B5X3RvX2d1ZXN0X3Jpbmcoc3RydWN0IGFyZ29fcmluZ19pbmZv ICpyaW5nX2luZm8sIHVpbnQzMl90IG9mZnNldCwKPiArICAgICAgICAgICAgICAgICAgICAgY29u c3Qgdm9pZCAqc3JjLCBYRU5fR1VFU1RfSEFORExFKHVpbnQ4X3QpIHNyY19obmQsCj4gKyAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbikKPiArewo+ICsgICAgdW5zaWduZWQgaW50IG1m bnNfaW5kZXggPSBvZmZzZXQgPj4gUEFHRV9TSElGVDsKPiArICAgIHZvaWQgKmRzdDsKPiArICAg IGludCByZXQ7Cj4gKyAgICB1bnNpZ25lZCBpbnQgc3JjX29mZnNldCA9IDA7Cj4gKwo+ICsgICAg QVNTRVJUKHNwaW5faXNfbG9ja2VkKCZyaW5nX2luZm8tPmxvY2spKTsKPiArCj4gKyAgICBvZmZz ZXQgJj0gflBBR0VfTUFTSzsKPiArCj4gKyAgICBpZiAoIChsZW4gPiBYRU5fQVJHT19NQVhfUklO R19TSVpFKSB8fCAob2Zmc2V0ID4gWEVOX0FSR09fTUFYX1JJTkdfU0laRSkgKQo+ICsgICAgICAg IHJldHVybiAtRUZBVUxUOwo+ICsKPiArICAgIHdoaWxlICggKG9mZnNldCArIGxlbikgPiBQQUdF X1NJWkUgKQoKSSB0aGluayB5b3UgY291bGQgbWFwIHRoZSB3aG9sZSByaW5nIGluIGNvbnRpZ3Vv dXMgdmlydHVhbCBhZGRyZXNzCnNwYWNlIGFuZCB0aGVuIHdyaXRpbmcgdG8gaXQgd291bGQgYmUg bXVjaCBtb3JlIGVhc3ksIHlvdSB3b3VsZG4ndApuZWVkIHRvIGl0ZXJhdGUgd2l0aCBtZW1jcHkg b3IgY29weV9mcm9tX2d1ZXN0LCB0YWtlIGEgbG9vayBhdCBfX3ZtYXAuCllvdSBjb3VsZCBsaWtl bHkgbWFwIHRoaXMgd2hlbiB0aGUgcmluZyBnZXRzIHNldHVwIGFuZCBrZWVwIGl0IG1hcHBlZApm b3IgdGhlIGxpZmV0aW1lIG9mIHRoZSByaW5nLgoKPiArICAgIHsKPiArICAgICAgICB1bnNpZ25l ZCBpbnQgaGVhZF9sZW4gPSBQQUdFX1NJWkUgLSBvZmZzZXQ7Cj4gKwo+ICsgICAgICAgIHJldCA9 IHJpbmdfbWFwX3BhZ2UocmluZ19pbmZvLCBtZm5zX2luZGV4LCAmZHN0KTsKPiArICAgICAgICBp ZiAoIHJldCApCj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgICAgIGlmICgg c3JjICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIG1lbWNweShkc3QgKyBvZmZzZXQsIHNy YyArIHNyY19vZmZzZXQsIGhlYWRfbGVuKTsKPiArICAgICAgICAgICAgc3JjX29mZnNldCArPSBo ZWFkX2xlbjsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgIHsKPiArICAg ICAgICAgICAgcmV0ID0gY29weV9mcm9tX2d1ZXN0KGRzdCArIG9mZnNldCwgc3JjX2huZCwgaGVh ZF9sZW4pID8KPiArICAgICAgICAgICAgICAgICAgICAtRUZBVUxUIDogMDsKPiArICAgICAgICAg ICAgaWYgKCByZXQgKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKCllvdSBjYW4gc2lt cGxpZnkgdGhpcyB0bzoKCmlmICggY29weV9mcm9tX2d1ZXN0KC4uLikgKQogICAgcmV0dXJuIC1F RkFVTFQ7Cgo+ICsKPiArICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQoc3JjX2hu ZCwgaGVhZF9sZW4pOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbWZuc19pbmRleCsrOwo+ ICsgICAgICAgIGxlbiAtPSBoZWFkX2xlbjsKPiArICAgICAgICBvZmZzZXQgPSAwOwo+ICsgICAg fQo+ICsKPiArICAgIHJldCA9IHJpbmdfbWFwX3BhZ2UocmluZ19pbmZvLCBtZm5zX2luZGV4LCAm ZHN0KTsKPiArICAgIGlmICggcmV0ICkKPiArICAgIHsKPiArICAgICAgICBhcmdvX2RwcmludGso ImFyZ286IHJpbmcgKHZtJXU6JXggdm0lZCkgJXAgYXR0ZW1wdGVkIHRvIG1hcCBwYWdlIgo+ICsg ICAgICAgICAgICAgICAgICAgICAiICVkIG9mICVkXG4iLCByaW5nX2luZm8tPmlkLmRvbWFpbl9p ZCwgcmluZ19pbmZvLT5pZC5wb3J0LAo+ICsgICAgICAgICAgICAgICAgICAgICByaW5nX2luZm8t PmlkLnBhcnRuZXJfaWQsIHJpbmdfaW5mbywgbWZuc19pbmRleCwKPiArICAgICAgICAgICAgICAg ICAgICAgcmluZ19pbmZvLT5ubWZucyk7Cj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0K PiArCj4gKyAgICBpZiAoIHNyYyApCj4gKyAgICAgICAgbWVtY3B5KGRzdCArIG9mZnNldCwgc3Jj ICsgc3JjX29mZnNldCwgbGVuKTsKPiArICAgIGVsc2UKPiArICAgICAgICByZXQgPSBjb3B5X2Zy b21fZ3Vlc3QoZHN0ICsgb2Zmc2V0LCBzcmNfaG5kLCBsZW4pID8gLUVGQVVMVCA6IDA7Cj4gKwo+ ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICogVXNlIHRoaXMgd2l0aCBjYXV0 aW9uOiByeF9wdHIgaXMgdW5kZXIgZ3Vlc3QgY29udHJvbCBhbmQgbWF5IGJlIGJvZ3VzLgo+ICsg KiBTZWUgZ2V0X3Nhbml0aXplZF9yaW5nIGZvciBhIHNhZmVyIGFsdGVybmF0aXZlLgo+ICsgKi8K PiArc3RhdGljIGludAo+ICtnZXRfcnhfcHRyKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19p bmZvLCB1aW50MzJfdCAqcnhfcHRyKQo+ICt7Cj4gKyAgICB2b2lkICpzcmM7Cj4gKyAgICB4ZW5f YXJnb19yaW5nX3QgKnJpbmdwOwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBBU1NFUlQoc3Bp bl9pc19sb2NrZWQoJnJpbmdfaW5mby0+bG9jaykpOwo+ICsKPiArICAgIGlmICggIXJpbmdfaW5m by0+bm1mbnMgfHwgcmluZ19pbmZvLT5ubWZucyA8IHJpbmdfaW5mby0+bnBhZ2UgKQo+ICsgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgIHJldCA9IHJpbmdfbWFwX3BhZ2UocmluZ19p bmZvLCAwLCAmc3JjKTsKPiArICAgIGlmICggcmV0ICkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ ICsKPiArICAgIHJpbmdwID0gKHhlbl9hcmdvX3JpbmdfdCAqKXNyYzsKPiArCj4gKyAgICAqcnhf cHRyID0gcmVhZF9hdG9taWMoJnJpbmdwLT5yeF9wdHIpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICsvKgo+ICsgKiBnZXRfc2FuaXRpemVkX3JpbmcgY3JlYXRlcyBhIG1vZGlmaWVk IGNvcHkgb2YgdGhlIHJpbmcgcG9pbnRlcnMgd2hlcmUKPiArICogdGhlIHJ4X3B0ciBpcyByb3Vu ZGVkIHVwIHRvIGVuc3VyZSBpdCBpcyBhbGlnbmVkLCBhbmQgdGhlbiByaW5nCj4gKyAqIHdyYXAg aXMgaGFuZGxlZC4gU2ltcGxpZmllcyBzYWZlIHVzZSBvZiB0aGUgcnhfcHRyIGZvciBhdmFpbGFi bGUKPiArICogc3BhY2UgY2FsY3VsYXRpb24uCj4gKyAqLwo+ICtzdGF0aWMgaW50Cj4gK2dldF9z YW5pdGl6ZWRfcmluZyh4ZW5fYXJnb19yaW5nX3QgKnJpbmcsIHN0cnVjdCBhcmdvX3JpbmdfaW5m byAqcmluZ19pbmZvKQo+ICt7Cj4gKyAgICB1aW50MzJfdCByeF9wdHI7Cj4gKyAgICBpbnQgcmV0 Owo+ICsKPiArICAgIHJldCA9IGdldF9yeF9wdHIocmluZ19pbmZvLCAmcnhfcHRyKTsKPiArICAg IGlmICggcmV0ICkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHJpbmctPnR4X3B0 ciA9IHJpbmdfaW5mby0+dHhfcHRyOwo+ICsKPiArICAgIHJ4X3B0ciA9IFJPVU5EVVBfTUVTU0FH RShyeF9wdHIpOwo+ICsgICAgaWYgKCByeF9wdHIgPj0gcmluZ19pbmZvLT5sZW4gKQo+ICsgICAg ICAgIHJ4X3B0ciA9IDA7Cj4gKwo+ICsgICAgcmluZy0+cnhfcHRyID0gcnhfcHRyOwoKTmV3bGlu ZS4KCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogaW92X2NvdW50IHJldHVy bnMgaXRzIGNvdW50IG9uIHN1Y2Nlc3MgdmlhIGFuIG91dCB2YXJpYWJsZSB0byBhdm9pZAo+ICsg KiBwb3RlbnRpYWwgZm9yIGEgbmVnYXRpdmUgcmV0dXJuIHZhbHVlIHRvIGJlIHVzZWQgaW5jb3Jy ZWN0bHkKPiArICogKGVnLiBjb2VyY2VkIGludG8gYW4gdW5zaWduZWQgdmFyaWFibGUgcmVzdWx0 aW5nIGluIGEgbGFyZ2UgaW5jb3JyZWN0IHZhbHVlKQo+ICsgKi8KPiArc3RhdGljIGludAo+ICtp b3ZfY291bnQoY29uc3QgeGVuX2FyZ29faW92X3QgKnBpb3YsIHVuc2lnbmVkIGxvbmcgbmlvdiwg dWludDMyX3QgKmNvdW50KQo+ICt7Cj4gKyAgICB1aW50MzJfdCBzdW1faW92X2xlbnMgPSAwOwo+ ICsKPiArICAgIGlmICggbmlvdiA+IFhFTl9BUkdPX01BWElPViApCj4gKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsgICAgd2hpbGUgKCBuaW92LS0gKQoKSSB3b3VsZCB1c2UgYSBmb3Ig bG9vcCBoZXJlLCB0aGF0IHdvdWxkIHJlbW92ZSB0aGUgbmVlZCB0byBwaW92KyssIGlmCnlvdSB3 YW50IHRvIGtlZXAgaXQgcXVpdGUgc2ltaWxhcjoKCmZvciAoIDsgbmlvdi0tOyBwaW92KysgKQp7 CiAgICAuLi4KCj4gKyAgICB7Cj4gKyAgICAgICAgLyogdmFsaWQgaW92cyBtdXN0IGhhdmUgdGhl IHBhZGRpbmcgZmllbGQgc2V0IHRvIHplcm8gKi8KPiArICAgICAgICBpZiAoIHBpb3YtPnBhZCAp Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBhcmdvX2RwcmludGsoImludmFsaWQgaW92OiBw YWRkaW5nIGlzIG5vdCB6ZXJvXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4g KyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiBjaGVjayBlYWNoIHRvIHByb3RlY3Qgc3VtIGFn YWluc3QgaW50ZWdlciBvdmVyZmxvdyAqLwo+ICsgICAgICAgIGlmICggcGlvdi0+aW92X2xlbiA+ IFhFTl9BUkdPX01BWF9SSU5HX1NJWkUgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgYXJn b19kcHJpbnRrKCJpbnZhbGlkIGlvdl9sZW46IHRvbyBiaWcgKCV1KT4lbGx1XG4iLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgcGlvdi0+aW92X2xlbiwgWEVOX0FSR09fTUFYX1JJTkdfU0la RSk7Cj4gKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsgICAgICAgIH0KPiArCj4gKyAg ICAgICAgc3VtX2lvdl9sZW5zICs9IHBpb3YtPmlvdl9sZW47Cj4gKwo+ICsgICAgICAgIC8qCj4g KyAgICAgICAgICogQWdhaW4gcHJvdGVjdCBzdW0gZnJvbSBpbnRlZ2VyIG92ZXJmbG93Cj4gKyAg ICAgICAgICogYW5kIGVuc3VyZSB0b3RhbCBtc2cgc2l6ZSB3aWxsIGJlIHdpdGhpbiBib3VuZHMu Cj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCBzdW1faW92X2xlbnMgPiBNQVhfQVJHT19N RVNTQUdFX1NJWkUgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgYXJnb19kcHJpbnRrKCJp bnZhbGlkIGlvdiBzZXJpZXM6IHRvdGFsIG1lc3NhZ2UgdG9vIGJpZ1xuIik7Cj4gKyAgICAgICAg ICAgIHJldHVybiAtRU1TR1NJWkU7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBwaW92Kys7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgKmNvdW50ID0gc3VtX2lvdl9sZW5zOwo+ICsKPiArICAgIHJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK3JpbmdidWZfaW5zZXJ0KHN0cnVjdCBk b21haW4gKmQsIHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLAo+ICsgICAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgYXJnb19yaW5nX2lkICpzcmNfaWQsCj4gKyAgICAgICAgICAgICAg IFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2FyZ29faW92X3QpIGlvdnNfaG5kLAo+ICsgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5pb3YsIHVpbnQzMl90IG1lc3NhZ2VfdHlwZSwKPiAr ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X2xlbikKPiArewo+ICsgICAgeGVuX2Fy Z29fcmluZ190IHJpbmc7Cj4gKyAgICBzdHJ1Y3QgeGVuX2FyZ29fcmluZ19tZXNzYWdlX2hlYWRl ciBtaCA9IHsgMCB9OwoKTm8gbmVlZCBmb3IgdGhlIDAsIHsgfSB3aWxsIGFjaGlldmUgZXhhY3Rs eSB0aGUgc2FtZS4KCj4gKyAgICBpbnQzMl90IHNwOwo+ICsgICAgaW50MzJfdCByZXQ7Cj4gKyAg ICB1aW50MzJfdCBsZW4gPSAwOwo+ICsgICAgeGVuX2FyZ29faW92X3QgaW92c1tYRU5fQVJHT19N QVhJT1ZdOwoKVGhpcyBzZWVtcyBzbGlnaHRseSBkYW5nZXJvdXMsIGEgY2hhbmdlIG9mIHRoZSBt YXhpbXVtIGNvdWxkIGNhdXNlCnN0YWNrIG92ZXJmbG93IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBv ZiB4ZW5fYXJnb19pb3ZfdC4gSSB0aGluayB5b3UKbmVlZCBzb21lIGNvbW1lbnQgbmV4dCB0byBk ZWZpbml0aW9uIG9mIFhFTl9BUkdPX01BWElPViB0byBub3RlIHRoYXQKaW5jcmVhc2luZyB0aGlz IGNvdWxkIGNhdXNlIGlzc3Vlcy4KCj4gKyAgICB4ZW5fYXJnb19pb3ZfdCAqcGlvdjsKPiArICAg IFhFTl9HVUVTVF9IQU5ETEUodWludDhfdCkgTlVMTF9obmQgPQo+ICsgICAgICAgZ3Vlc3RfaGFu ZGxlX2Zyb21fcGFyYW0oZ3Vlc3RfaGFuZGxlX2Zyb21fcHRyKE5VTEwsIHVpbnQ4X3QpLCB1aW50 OF90KTsKPiArCj4gKyAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnJpbmdfaW5mby0+bG9jaykp Owo+ICsKPiArICAgIHJldCA9IF9fY29weV9mcm9tX2d1ZXN0KGlvdnMsIGlvdnNfaG5kLCBuaW92 KSA/IC1FRkFVTFQgOiAwOwo+ICsgICAgaWYgKCByZXQgKQo+ICsgICAgICAgIGdvdG8gb3V0Owo+ ICsKPiArICAgIC8qCj4gKyAgICAgKiBPYnRhaW4gdGhlIHRvdGFsIHNpemUgb2YgZGF0YSB0byB0 cmFuc21pdCAtLSBzZXRzIHRoZSAnbGVuJyB2YXJpYWJsZQo+ICsgICAgICogLS0gYW5kIHNhbml0 eSBjaGVjayB0aGF0IHRoZSBpb3ZzIGNvbmZvcm0gdG8gc2l6ZSBhbmQgbnVtYmVyIGxpbWl0cy4K PiArICAgICAqIEVuZm9yY2VkIGJlbG93OiBubyBtb3JlIHRoYW4gJ2xlbicgYnl0ZXMgb2YgZ3Vl c3QgZGF0YQo+ICsgICAgICogKHBsdXMgdGhlIG1lc3NhZ2UgaGVhZGVyKSB3aWxsIGJlIHNlbnQg aW4gdGhpcyBvcGVyYXRpb24uCj4gKyAgICAgKi8KPiArICAgIHJldCA9IGlvdl9jb3VudChpb3Zz LCBuaW92LCAmbGVuKTsKPiArICAgIGlmICggcmV0ICkKPiArICAgICAgICBnb3RvIG91dDsKPiAr Cj4gKyAgICAvKgo+ICsgICAgICogU2l6ZSBib3VuZHMgY2hlY2sgYWdhaW5zdCByaW5nIHNpemUg YW5kIHN0YXRpYyBtYXhpbXVtIG1lc3NhZ2UgbGltaXQuCj4gKyAgICAgKiBUaGUgbWVzc2FnZSBt dXN0IG5vdCBmaWxsIHRoZSByaW5nOyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBzbG90Cj4g KyAgICAgKiByZW1haW5pbmcgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIGEgZnVsbCByaW5nIGZyb20g YW4gZW1wdHkgb25lLgo+ICsgICAgICovCj4gKyAgICBpZiAoICgoUk9VTkRVUF9NRVNTQUdFKGxl bikgKwo+ICsgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHhlbl9hcmdvX3JpbmdfbWVzc2FnZV9o ZWFkZXIpKSA+PSByaW5nX2luZm8tPmxlbikgfHwKPiArICAgICAgICAgKGxlbiA+IE1BWF9BUkdP X01FU1NBR0VfU0laRSkgKQo+ICsgICAgewo+ICsgICAgICAgIHJldCA9IC1FTVNHU0laRTsKPiAr ICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSBnZXRfc2FuaXRpemVk X3JpbmcoJnJpbmcsIHJpbmdfaW5mbyk7Cj4gKyAgICBpZiAoIHJldCApCj4gKyAgICAgICAgZ290 byBvdXQ7Cj4gKwo+ICsgICAgYXJnb19kcHJpbnRrKCJyaW5nLnR4X3B0cj0lZCByaW5nLnJ4X3B0 cj0lZCByaW5nIGxlbj0lZCIKPiArICAgICAgICAgICAgICAgICAiIHJpbmdfaW5mby0+dHhfcHRy PSVkXG4iLAo+ICsgICAgICAgICAgICAgICAgIHJpbmcudHhfcHRyLCByaW5nLnJ4X3B0ciwgcmlu Z19pbmZvLT5sZW4sIHJpbmdfaW5mby0+dHhfcHRyKTsKPiArCj4gKyAgICBpZiAoIHJpbmcucnhf cHRyID09IHJpbmcudHhfcHRyICkKPiArICAgICAgICBzcCA9IHJpbmdfaW5mby0+bGVuOwo+ICsg ICAgZWxzZQo+ICsgICAgewo+ICsgICAgICAgIHNwID0gcmluZy5yeF9wdHIgLSByaW5nLnR4X3B0 cjsKPiArICAgICAgICBpZiAoIHNwIDwgMCApCj4gKyAgICAgICAgICAgIHNwICs9IHJpbmdfaW5m by0+bGVuOwo+ICsgICAgfQo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBTaXplIGJvdW5kcyBjaGVj ayBhZ2FpbnN0IGN1cnJlbnRseSBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIHJpbmcuCj4gKyAgICAg KiBBZ2FpbjogdGhlIG1lc3NhZ2UgbXVzdCBub3QgZmlsbCB0aGUgcmluZyBsZWF2aW5nIG5vIHNw YWNlIHJlbWFpbmluZy4KPiArICAgICAqLwo+ICsgICAgaWYgKCAoUk9VTkRVUF9NRVNTQUdFKGxl bikgKwo+ICsgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHhlbl9hcmdvX3JpbmdfbWVzc2FnZV9o ZWFkZXIpKSA+PSBzcCApCj4gKyAgICB7Cj4gKyAgICAgICAgYXJnb19kcHJpbnRrKCJFQUdBSU5c biIpOwo+ICsgICAgICAgIHJldCA9IC1FQUdBSU47Cj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgbWgubGVuID0gbGVuICsgc2l6ZW9mKHN0cnVjdCB4ZW5fYXJnb19yaW5n X21lc3NhZ2VfaGVhZGVyKTsKPiArICAgIG1oLnNvdXJjZS5wb3J0ID0gc3JjX2lkLT5wb3J0Owo+ ICsgICAgbWguc291cmNlLmRvbWFpbl9pZCA9IHNyY19pZC0+ZG9tYWluX2lkOwo+ICsgICAgbWgu bWVzc2FnZV90eXBlID0gbWVzc2FnZV90eXBlOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBGb3Ig dGhpcyBjb3B5IHRvIHRoZSBndWVzdCByaW5nLCB0eF9wdHIgaXMgYWx3YXlzIDE2LWJ5dGUgYWxp Z25lZAo+ICsgICAgICogYW5kIHRoZSBtZXNzYWdlIGhlYWRlciBpcyAxNiBieXRlcyBsb25nLgo+ ICsgICAgICovCj4gKyAgICBCVUlMRF9CVUdfT04oCj4gKyAgICAgICAgc2l6ZW9mKHN0cnVjdCB4 ZW5fYXJnb19yaW5nX21lc3NhZ2VfaGVhZGVyKSAhPSBST1VORFVQX01FU1NBR0UoMSkpOwo+ICsK PiArICAgIC8qCj4gKyAgICAgKiBGaXJzdCBkYXRhIHdyaXRlIGludG8gdGhlIGRlc3RpbmF0aW9u IHJpbmc6IGZpeGVkIHNpemUsIG1lc3NhZ2UgaGVhZGVyLgo+ICsgICAgICogVGhpcyBjYW5ub3Qg b3ZlcnJ1biBiZWNhdXNlIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSAodmFsdWUgaW4gJ3NwJykK PiArICAgICAqIGlzIGNoZWNrZWQgYWJvdmUgYW5kIG11c3QgYmUgYXQgbGVhc3QgdGhpcyBzaXpl Lgo+ICsgICAgICovCj4gKyAgICByZXQgPSBtZW1jcHlfdG9fZ3Vlc3RfcmluZyhyaW5nX2luZm8s IHJpbmcudHhfcHRyICsgc2l6ZW9mKHhlbl9hcmdvX3JpbmdfdCksCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmbWgsIE5VTExfaG5kLCBzaXplb2YobWgpKTsKPiArICAgIGlmICgg cmV0ICkKPiArICAgIHsKPiArICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsCj4gKyAgICAgICAg ICAgICAgICAiYXJnbzogZmFpbGVkIHRvIHdyaXRlIG1lc3NhZ2UgaGVhZGVyIHRvIHJpbmcgKHZt JXU6JXggdm0lZClcbiIsCj4gKyAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLmRvbWFpbl9p ZCwgcmluZ19pbmZvLT5pZC5wb3J0LAo+ICsgICAgICAgICAgICAgICAgcmluZ19pbmZvLT5pZC5w YXJ0bmVyX2lkKTsKPiArCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAg cmluZy50eF9wdHIgKz0gc2l6ZW9mKG1oKTsKPiArICAgIGlmICggcmluZy50eF9wdHIgPT0gcmlu Z19pbmZvLT5sZW4gKQo+ICsgICAgICAgIHJpbmcudHhfcHRyID0gMDsKPiArCj4gKyAgICBwaW92 ID0gaW92czsKPiArCj4gKyAgICB3aGlsZSAoIG5pb3YtLSApCgpBRkFJQ1QgdXNpbmcgYSBmb3Ig bG9vcCB3b3VsZCByZW1vdmUgdGhlIG5lZWQgdG8gYWxzbyBkbyBhIHBpb3YrKyBhdAplYWNoIGl0 ZXJhdGlvbi4KCj4gKyAgICB7Cj4gKyAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV82NCh1aW50OF90 KSBidWZfaG5kID0gcGlvdi0+aW92X2huZDsKPiArICAgICAgICB1aW50MzJfdCBpb3ZfbGVuID0g cGlvdi0+aW92X2xlbjsKPiArCj4gKyAgICAgICAgLyogSWYgbm8gZGF0YSBpcyBwcm92aWRlZCBp biB0aGlzIGlvdiwgbW9hbiBhbmQgc2tpcCBvbiB0byB0aGUgbmV4dCAqLwo+ICsgICAgICAgIGlm ICggIWlvdl9sZW4gKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLAo+ICsgICAgICAgICAgICAgICAgICAgICJhcmdvOiBubyBkYXRhIGlvdl9sZW49MCBpb3Zf aG5kPSVwIHJpbmcgKHZtJXU6JXggdm0lZClcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgYnVm X2huZC5wLCByaW5nX2luZm8tPmlkLmRvbWFpbl9pZCwgcmluZ19pbmZvLT5pZC5wb3J0LAo+ICsg ICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4gKwo+ICsgICAg ICAgICAgICBwaW92Kys7Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX29rYXkoYnVmX2huZCwgaW92 X2xlbikpICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwK PiArICAgICAgICAgICAgICAgICAgICAiYXJnbzogYmFkIGlvdiBoYW5kbGUgWyVwLCAlIlBSSXgz MiJdICh2bSV1OiV4IHZtJWQpXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgIGJ1Zl9obmQucCwg aW92X2xlbiwKPiArICAgICAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLmRvbWFpbl9pZCwg cmluZ19pbmZvLT5pZC5wb3J0LAo+ICsgICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQu cGFydG5lcl9pZCk7Cj4gKwo+ICsgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+ICsgICAgICAg ICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHNwID0gcmluZ19pbmZv LT5sZW4gLSByaW5nLnR4X3B0cjsKPiArCj4gKyAgICAgICAgLyogQ2hlY2s6IGlvdiBkYXRhIHNp emUgdmVyc3VzIGZyZWUgc3BhY2UgYXQgdGhlIHRhaWwgb2YgdGhlIHJpbmcgKi8KPiArICAgICAg ICBpZiAoIGlvdl9sZW4gPiBzcCApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICAvKgo+ICsg ICAgICAgICAgICAgKiBTZWNvbmQgcG9zc2libGUgZGF0YSB3cml0ZTogcmluZy10YWlsLXdyYXAt d3JpdGUuCj4gKyAgICAgICAgICAgICAqIFBvcHVsYXRlIHRoZSByaW5nIHRhaWwgYW5kIHVwZGF0 ZSB0aGUgaW50ZXJuYWwgdHhfcHRyIHRvIGhhbmRsZQo+ICsgICAgICAgICAgICAgKiB3cmFwcGlu ZyBhdCB0aGUgZW5kIG9mIHJpbmcuCj4gKyAgICAgICAgICAgICAqIFNpemUgb2YgZGF0YSB3cml0 dGVuIGhlcmU6IHNwCj4gKyAgICAgICAgICAgICAqIHdoaWNoIGlzIHRoZSBleGFjdCBmdWxsIGFt b3VudCBvZiBmcmVlIHNwYWNlIGF2YWlsYWJsZSBhdCB0aGUKPiArICAgICAgICAgICAgICogdGFp bCBvZiB0aGUgcmluZywgc28gdGhpcyBjYW5ub3Qgb3ZlcnJ1bi4KPiArICAgICAgICAgICAgICov Cj4gKyAgICAgICAgICAgIHJldCA9IG1lbWNweV90b19ndWVzdF9yaW5nKHJpbmdfaW5mbywKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy50eF9wdHIgKyBzaXpl b2YoeGVuX2FyZ29fcmluZ190KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgYnVmX2huZCwgc3ApOwo+ICsgICAgICAgICAgICBpZiAoIHJldCApCj4gKyAg ICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgImFyZ286IGZhaWxlZCB0byBjb3B5IHslcCwgJSJQUkl4MzIi fSAodm0ldToleCB2bSVkKVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2huZC5w LCBzcCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgcmluZ19pbmZvLT5pZC5kb21haW5faWQs IHJpbmdfaW5mby0+aWQucG9ydCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgcmluZ19pbmZv LT5pZC5wYXJ0bmVyX2lkKTsKPiArCj4gKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKPiArICAg ICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgcmluZy50eF9wdHIgPSAwOwo+ICsgICAgICAg ICAgICBpb3ZfbGVuIC09IHNwOwo+ICsgICAgICAgICAgICBndWVzdF9oYW5kbGVfYWRkX29mZnNl dChidWZfaG5kLCBzcCk7Cj4gKwo+ICsgICAgICAgICAgICBBU1NFUlQoaW92X2xlbiA8PSByaW5n X2luZm8tPmxlbik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAq IFRoaXJkIHBvc3NpYmxlIGRhdGEgd3JpdGU6IGFsbCBkYXRhIHJlbWFpbmluZyBmb3IgdGhpcyBp b3YuCj4gKyAgICAgICAgICogU2l6ZSBvZiBkYXRhIHdyaXR0ZW4gaGVyZTogaW92X2xlbgo+ICsg ICAgICAgICAqCj4gKyAgICAgICAgICogQ2FzZSAxOiBpZiB0aGUgcmluZy10YWlsLXdyYXAtd3Jp dGUgYWJvdmUgd2FzIHBlcmZvcm1lZCwgdGhlbgo+ICsgICAgICAgICAqICAgICAgICAgaW92X2xl biBoYXMgYmVlbiBkZWNyZWFzZWQgYnkgJ3NwJyBhbmQgcmluZy50eF9wdHIgaXMgemVyby4KPiAr ICAgICAgICAgKgo+ICsgICAgICAgICAqICAgIFdlIGtub3cgZnJvbSBjaGVja2luZyB0aGUgcmVz dWx0IG9mIGlvdl9jb3VudDoKPiArICAgICAgICAgKiAgICAgIGxlbiArIHNpemVvZihtZXNzYWdl X2hlYWRlcikgPD0gcmluZ19pbmZvLT5sZW4KPiArICAgICAgICAgKiAgICBXZSBhbHNvIGtub3cg dGhhdCBsZW4gaXMgdGhlIHRvdGFsIG9mIHN1bW1pbmcgYWxsIGlvdl9sZW5zLCBzbzoKPiArICAg ICAgICAgKiAgICAgICBpb3ZfbGVuIDw9IGxlbgo+ICsgICAgICAgICAqICAgIHNvIGJ5IHRyYW5z aXRpdml0eToKPiArICAgICAgICAgKiAgICAgICBpb3ZfbGVuIDw9IGxlbiA8PSAocmluZ19pbmZv LT5sZW4gLSBzaXplb2YobXNnaGVhZGVyKSkKPiArICAgICAgICAgKiAgICBhbmQgdGhlcmVmb3Jl Ogo+ICsgICAgICAgICAqICAgICAgIChpb3ZfbGVuICsgc2l6ZW9mKG1zZ2hlYWRlcikgPD0gcmlu Z19pbmZvLT5sZW4pICYmCj4gKyAgICAgICAgICogICAgICAgKHJpbmcudHhfcHRyID09IDApCj4g KyAgICAgICAgICogICAgc28gdGhpcyB3cml0ZSBjYW5ub3Qgb3ZlcnJ1biBoZXJlLgo+ICsgICAg ICAgICAqCj4gKyAgICAgICAgICogQ2FzZSAyOiByaW5nLXRhaWwtd3JhcC13cml0ZSBhYm92ZSB3 YXMgbm90IHBlcmZvcm1lZAo+ICsgICAgICAgICAqICAgIC0+IHNvIGlvdl9sZW4gaXMgdGhlIGd1 ZXN0LXN1cHBsaWVkIHZhbHVlIGFuZDogKGlvdl9sZW4gPD0gc3ApCj4gKyAgICAgICAgICogICAg aWUuIGxlc3MgdGhhbiBhdmFpbGFibGUgc3BhY2UgYXQgdGhlIHRhaWwgb2YgdGhlIHJpbmc6Cj4g KyAgICAgICAgICogICAgICAgIHNvIHRoaXMgd3JpdGUgY2Fubm90IG92ZXJydW4uCj4gKyAgICAg ICAgICovCj4gKyAgICAgICAgcmV0ID0gbWVtY3B5X3RvX2d1ZXN0X3JpbmcocmluZ19pbmZvLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmcudHhfcHRyICsgc2l6ZW9m KHhlbl9hcmdvX3JpbmdfdCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgYnVmX2huZCwgaW92X2xlbik7Cj4gKyAgICAgICAgaWYgKCByZXQgKQo+ICsgICAgICAg IHsKPiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAo+ICsgICAgICAgICAgICAgICAg ICAgICJhcmdvOiBmYWlsZWQgdG8gY29weSBbJXAsICUiUFJJeDMyIl0gKHZtJXU6JXggdm0lZClc biIsCj4gKyAgICAgICAgICAgICAgICAgICAgYnVmX2huZC5wLCBpb3ZfbGVuLCByaW5nX2luZm8t PmlkLmRvbWFpbl9pZCwKPiArICAgICAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLnBvcnQs IHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4gKwo+ICsgICAgICAgICAgICBnb3RvIG91dDsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJpbmcudHhfcHRyICs9IGlvdl9sZW47Cj4gKwo+ ICsgICAgICAgIGlmICggcmluZy50eF9wdHIgPT0gcmluZ19pbmZvLT5sZW4gKQo+ICsgICAgICAg ICAgICByaW5nLnR4X3B0ciA9IDA7Cj4gKwo+ICsgICAgICAgIHBpb3YrKzsKPiArICAgIH0KPiAr Cj4gKyAgICByaW5nLnR4X3B0ciA9IFJPVU5EVVBfTUVTU0FHRShyaW5nLnR4X3B0cik7Cj4gKwo+ ICsgICAgaWYgKCByaW5nLnR4X3B0ciA+PSByaW5nX2luZm8tPmxlbiApCj4gKyAgICAgICAgcmlu Zy50eF9wdHIgLT0gcmluZ19pbmZvLT5sZW47Cj4gKwo+ICsgICAgdXBkYXRlX3R4X3B0cihyaW5n X2luZm8sIHJpbmcudHhfcHRyKTsKPiArCj4gKyBvdXQ6CgpEbyB5b3UgcmVhbGx5IG5lZWQgdG8g b3V0IGxhYmVsPyAqb3V0X2xlbiBpdCdzIG9ubHkgc2V0IGluIHRoZSBzdWNjZXNzCmNhc2UsIHNv IGFsbCB0aGUgZXJyb3IgY2FzZXMgdGhhdCB1c2UgYSAnZ290byBvdXQnIGNvdWxkIGJlIHJlcGxh Y2VkCmJ5ICdyZXR1cm4gcmV0OycuCgo+ICsgICAgLyoKPiArICAgICAqIEF0IHRoaXMgcG9pbnQg aXQgaXMgcG9zc2libGUgdG8gdW5tYXAgdGhlIHJpbmdfaW5mbywgaWU6Cj4gKyAgICAgKiAgIHJp bmdfdW5tYXAocmluZ19pbmZvKTsKPiArICAgICAqIGJ1dCBwZXJmb3JtYW5jZSBzaG91bGQgYmUg aW1wcm92ZWQgYnkgbm90IGRvaW5nIHNvLCBhbmQgcmV0YWluaW5nCj4gKyAgICAgKiB0aGUgbWFw cGluZy4KPiArICAgICAqIEFuIFhTTSBwb2xpY3kgY29udHJvbCBvdmVyIGxldmVsIG9mIGNvbmZp ZGVudGlhbGl0eSByZXF1aXJlZAo+ICsgICAgICogdmVyc3VzIHBlcmZvcm1hbmNlIGNvc3QgY291 bGQgYmUgYWRkZWQgdG8gZGVjaWRlIHRoYXQgaGVyZS4KPiArICAgICAqIFNlZSB0aGUgc2ltaWxh ciBjb21tZW50IGluIHJpbmdfbWFwX3BhZ2UgcmU6IHdyaXRlLW9ubHkgbWFwcGluZ3MuCj4gKyAg ICAgKi8KPiArCj4gKyAgICBpZiAoICFyZXQgKQo+ICsgICAgICAgICpvdXRfbGVuID0gbGVuOwo+ ICsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4gIHdpbGRjYXJk X3BlbmRpbmdfbGlzdF9yZW1vdmUoZG9taWRfdCBkb21haW5faWQsIHN0cnVjdCBwZW5kaW5nX2Vu dCAqZW50KQo+ICB7Cj4gQEAgLTM1OSw2ICs3ODEsMjIgQEAgd2lsZGNhcmRfcGVuZGluZ19saXN0 X3JlbW92ZShkb21pZF90IGRvbWFpbl9pZCwgc3RydWN0IHBlbmRpbmdfZW50ICplbnQpCj4gIH0K Pgo+ICBzdGF0aWMgdm9pZAo+ICt3aWxkY2FyZF9wZW5kaW5nX2xpc3RfaW5zZXJ0KGRvbWlkX3Qg ZG9tYWluX2lkLCBzdHJ1Y3QgcGVuZGluZ19lbnQgKmVudCkKPiArewo+ICsgICAgc3RydWN0IGRv bWFpbiAqZCA9IGdldF9kb21haW5fYnlfaWQoZG9tYWluX2lkKTsKPiArICAgIGlmICggIWQgKQo+ ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBpZiAoIGQtPmFyZ28gKQo+ICsgICAgewo+ICsg ICAgICAgIHNwaW5fbG9jaygmZC0+YXJnby0+d2lsZGNhcmRfbG9jayk7Cj4gKyAgICAgICAgaGxp c3RfYWRkX2hlYWQoJmVudC0+d2lsZGNhcmRfbm9kZSwgJmQtPmFyZ28tPndpbGRjYXJkX3BlbmRf bGlzdCk7Cj4gKyAgICAgICAgc3Bpbl91bmxvY2soJmQtPmFyZ28tPndpbGRjYXJkX2xvY2spOwo+ ICsgICAgfQo+ICsgICAgcHV0X2RvbWFpbihkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAg cGVuZGluZ19yZW1vdmVfYWxsKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvKQo+ICB7 Cj4gICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7Cj4gQEAgLTM3NCw2ICs4MTIs NjcgQEAgcGVuZGluZ19yZW1vdmVfYWxsKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZv KQo+ICAgICAgcmluZ19pbmZvLT5ucGVuZGluZyA9IDA7Cj4gIH0KPgo+ICtzdGF0aWMgaW50Cj4g K3BlbmRpbmdfcXVldWUoc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8sIGRvbWlkX3Qg c3JjX2lkLAo+ICsgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArICAgIHN0 cnVjdCBwZW5kaW5nX2VudCAqZW50Owo+ICsKPiArICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgm cmluZ19pbmZvLT5sb2NrKSk7Cj4gKwo+ICsgICAgaWYgKCByaW5nX2luZm8tPm5wZW5kaW5nID49 IE1BWF9QRU5ESU5HX1BFUl9SSU5HICkKPiArICAgICAgICByZXR1cm4gLUVOT1NQQzsKPiArCj4g KyAgICBlbnQgPSB4bWFsbG9jKHN0cnVjdCBwZW5kaW5nX2VudCk7Cj4gKwoKRXh0cmEgbmV3bGlu ZS4KCj4gKyAgICBpZiAoICFlbnQgKQo+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ICsKPiAr ICAgIGVudC0+bGVuID0gbGVuOwo+ICsgICAgZW50LT5kb21haW5faWQgPSBzcmNfaWQ7Cj4gKyAg ICBlbnQtPnJpbmdfaW5mbyA9IHJpbmdfaW5mbzsKPiArCj4gKyAgICBpZiAoIHJpbmdfaW5mby0+ aWQucGFydG5lcl9pZCA9PSBYRU5fQVJHT19ET01JRF9BTlkgKQo+ICsgICAgICAgIHdpbGRjYXJk X3BlbmRpbmdfbGlzdF9pbnNlcnQoc3JjX2lkLCBlbnQpOwo+ICsgICAgaGxpc3RfYWRkX2hlYWQo JmVudC0+bm9kZSwgJnJpbmdfaW5mby0+cGVuZGluZyk7Cj4gKyAgICByaW5nX2luZm8tPm5wZW5k aW5nKys7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArcGVu ZGluZ19yZXF1ZXVlKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLCBkb21pZF90IHNy Y19pZCwKPiArICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArICAgIHN0 cnVjdCBobGlzdF9ub2RlICpub2RlOwo+ICsgICAgc3RydWN0IHBlbmRpbmdfZW50ICplbnQ7Cj4g Kwo+ICsgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZyaW5nX2luZm8tPmxvY2spKTsKPiArCj4g KyAgICBobGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsIG5vZGUsICZyaW5nX2luZm8tPnBlbmRpbmcs IG5vZGUpCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCBlbnQtPmRvbWFpbl9pZCA9PSBzcmNfaWQg KQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICogUmV1c2Ug YW4gZXhpc3RpbmcgcXVldWUgZW50cnkgZm9yIGEgbm90aWZpY2F0aW9uIHJhdGhlciB0aGFuIGFk ZAo+ICsgICAgICAgICAgICAgKiBhbm90aGVyLiBJZiB0aGUgZXhpc3RpbmcgZW50cnkgaXMgd2Fp dGluZyBmb3IgYSBzbWFsbGVyIHNpemUgdGhhbgo+ICsgICAgICAgICAgICAgKiB0aGUgY3VycmVu dCBtZXNzYWdlIHRoZW4gYWRqdXN0IHRoZSByZWNvcmQgdG8gd2FpdCBmb3IgdGhlCj4gKyAgICAg ICAgICAgICAqIGN1cnJlbnQgKGxhcmdlcikgc2l6ZSB0byBiZSBhdmFpbGFibGUgYmVmb3JlIHRy aWdnZXJpbmcgYQo+ICsgICAgICAgICAgICAgKiBub3RpZmljYXRpb24uCj4gKyAgICAgICAgICAg ICAqIFRoaXMgYXNzaXN0cyB0aGUgd2FpdGluZyBzZW5kZXIgYnkgZW5zdXJpbmcgdGhhdCB3aGVu ZXZlciBhCj4gKyAgICAgICAgICAgICAqIG5vdGlmaWNhdGlvbiBpcyB0cmlnZ2VyZWQsIHRoZXJl IGlzIHN1ZmZpY2llbnQgc3BhY2UgYXZhaWxhYmxlCj4gKyAgICAgICAgICAgICAqIGZvciAoYXQg bGVhc3QpIGFueSBvbmUgb2YgdGhlIG1lc3NhZ2VzIGF3YWl0aW5nIHRyYW5zbWlzc2lvbi4KPiAr ICAgICAgICAgICAgICovCj4gKyAgICAgICAgICAgIGlmICggZW50LT5sZW4gPCBsZW4gKQo+ICsg ICAgICAgICAgICAgICAgZW50LT5sZW4gPSBsZW47Cj4gKwo+ICsgICAgICAgICAgICByZXR1cm4g MDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHBlbmRpbmdfcXVldWUo cmluZ19pbmZvLCBzcmNfaWQsIGxlbik7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4gIHdpbGRj YXJkX3JpbmdzX3BlbmRpbmdfcmVtb3ZlKHN0cnVjdCBkb21haW4gKmQpCj4gIHsKPiBAQCAtNjY3 LDYgKzExNjYsMjggQEAgcmluZ19maW5kX2luZm8oY29uc3Qgc3RydWN0IGRvbWFpbiAqZCwgY29u c3Qgc3RydWN0IGFyZ29fcmluZ19pZCAqaWQpCj4gICAgICByZXR1cm4gTlVMTDsKPiAgfQo+Cj4g K3N0YXRpYyBzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKgo+ICtyaW5nX2ZpbmRfaW5mb19ieV9tYXRj aChjb25zdCBzdHJ1Y3QgZG9tYWluICpkLCB1aW50MzJfdCBwb3J0LAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBkb21pZF90IHBhcnRuZXJfaWQpCj4gK3sKPiArICAgIHN0cnVjdCBhcmdvX3Jp bmdfaWQgaWQ7Cj4gKyAgICBzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbzsKPiArCj4g KyAgICBBU1NFUlQocndfaXNfbG9ja2VkKCZkLT5hcmdvLT5sb2NrKSk7Cj4gKwo+ICsgICAgaWQu cG9ydCA9IHBvcnQ7Cj4gKyAgICBpZC5kb21haW5faWQgPSBkLT5kb21haW5faWQ7Cj4gKyAgICBp ZC5wYXJ0bmVyX2lkID0gcGFydG5lcl9pZDsKPiArCj4gKyAgICByaW5nX2luZm8gPSByaW5nX2Zp bmRfaW5mbyhkLCAmaWQpOwo+ICsgICAgaWYgKCByaW5nX2luZm8gKQo+ICsgICAgICAgIHJldHVy biByaW5nX2luZm87Cj4gKwo+ICsgICAgaWQucGFydG5lcl9pZCA9IFhFTl9BUkdPX0RPTUlEX0FO WTsKPiArCj4gKyAgICByZXR1cm4gcmluZ19maW5kX2luZm8oZCwgJmlkKTsKPiArfQo+ICsKPiAg c3RhdGljIHN0cnVjdCBhcmdvX3NlbmRfaW5mbyAqCj4gIHNlbmRfZmluZF9pbmZvKGNvbnN0IHN0 cnVjdCBkb21haW4gKmQsIGNvbnN0IHN0cnVjdCBhcmdvX3JpbmdfaWQgKmlkKQo+ICB7Cj4gQEAg LTEwMDUsNiArMTUyNiw5NSBAQCByZWdpc3Rlcl9yaW5nKHN0cnVjdCBkb21haW4gKmN1cnJkLAo+ ICAgICAgcmV0dXJuIHJldDsKPiAgfQo+Cj4gK3N0YXRpYyBsb25nCj4gK3NlbmR2KHN0cnVjdCBk b21haW4gKnNyY19kLCBjb25zdCB4ZW5fYXJnb19hZGRyX3QgKnNyY19hZGRyLAo+ICsgICAgICBj b25zdCB4ZW5fYXJnb19hZGRyX3QgKmRzdF9hZGRyLAo+ICsgICAgICBYRU5fR1VFU1RfSEFORExF X1BBUkFNKHhlbl9hcmdvX2lvdl90KSBpb3ZzX2huZCwgdW5zaWduZWQgbG9uZyBuaW92LAo+ICsg ICAgICB1aW50MzJfdCBtZXNzYWdlX3R5cGUpCj4gK3sKPiArICAgIHN0cnVjdCBkb21haW4gKmRz dF9kID0gTlVMTDsKPiArICAgIHN0cnVjdCBhcmdvX3JpbmdfaWQgc3JjX2lkOwo+ICsgICAgc3Ry dWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm87Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAg IHVuc2lnbmVkIGxvbmcgbGVuID0gMDsKPiArCj4gKyAgICBBU1NFUlQoc3JjX2QtPmRvbWFpbl9p ZCA9PSBzcmNfYWRkci0+ZG9tYWluX2lkKTsKPiArCj4gKyAgICBhcmdvX2RwcmludGsoInNlbmR2 OiAoJWQ6JXgpLT4oJWQ6JXgpIG5pb3Y6JWx1IGlvdjolcCB0eXBlOiV1XG4iLAo+ICsgICAgICAg ICAgICAgICAgIHNyY19hZGRyLT5kb21haW5faWQsIHNyY19hZGRyLT5wb3J0LAo+ICsgICAgICAg ICAgICAgICAgIGRzdF9hZGRyLT5kb21haW5faWQsIGRzdF9hZGRyLT5wb3J0LAo+ICsgICAgICAg ICAgICAgICAgIG5pb3YsIGlvdnNfaG5kLnAsIG1lc3NhZ2VfdHlwZSk7Cj4gKwo+ICsgICAgcmVh ZF9sb2NrKCZhcmdvX2xvY2spOwo+ICsKPiArICAgIGlmICggIXNyY19kLT5hcmdvICkKPiArICAg IHsKPiArICAgICAgICByZXQgPSAtRU5PREVWOwo+ICsgICAgICAgIGdvdG8gb3V0X3VubG9jazsK PiArICAgIH0KPiArCj4gKyAgICBzcmNfaWQucG9ydCA9IHNyY19hZGRyLT5wb3J0Owo+ICsgICAg c3JjX2lkLmRvbWFpbl9pZCA9IHNyY19kLT5kb21haW5faWQ7Cj4gKyAgICBzcmNfaWQucGFydG5l cl9pZCA9IGRzdF9hZGRyLT5kb21haW5faWQ7Cj4gKwo+ICsgICAgZHN0X2QgPSBnZXRfZG9tYWlu X2J5X2lkKGRzdF9hZGRyLT5kb21haW5faWQpOwo+ICsgICAgaWYgKCAhZHN0X2QgKQo+ICsgICAg ewo+ICsgICAgICAgIGFyZ29fZHByaW50aygiIWRzdF9kLCBFU1JDSFxuIik7Cj4gKyAgICAgICAg cmV0ID0gLUVTUkNIOwo+ICsgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiArICAgIH0KPiArCj4g KyAgICBpZiAoICFkc3RfZC0+YXJnbyApCj4gKyAgICB7Cj4gKyAgICAgICAgYXJnb19kcHJpbnRr KCIhZHN0X2QtPmFyZ28sIEVDT05OUkVGVVNFRFxuIik7Cj4gKyAgICAgICAgcmV0ID0gLUVDT05O UkVGVVNFRDsKPiArICAgICAgICBnb3RvIG91dF91bmxvY2s7CgpUaGUgdXNhZ2Ugb2Ygb3V0X3Vu bG9jayBoZXJlIGFuZCBpbiB0aGUgY29uZGl0aW9uIGFib3ZlIGlzIHdyb25nLApzaW5jZSBpdCB3 aWxsIHVuY29uZGl0aW9uYWxseSBjYWxsIHJlYWRfdW5sb2NrKCZhcmdvX2xvY2spOyB3aGljaCBp cwp3cm9uZyBoZXJlIGJlY2F1c2UgdGhlIGxvY2sgaGFzIG5vdCB5ZXQgYmVlbiBhY3F1aXJlZC4K Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmVhZF9sb2NrKCZkc3RfZC0+YXJnby0+bG9jayk7Cj4gKwo+ ICsgICAgcmluZ19pbmZvID0gcmluZ19maW5kX2luZm9fYnlfbWF0Y2goZHN0X2QsIGRzdF9hZGRy LT5wb3J0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Fk ZHItPmRvbWFpbl9pZCk7Cj4gKyAgICBpZiAoICFyaW5nX2luZm8gKQo+ICsgICAgewo+ICsgICAg ICAgIGdwcmludGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICAgICJhcmdvOiB2bSV1IGNv bm5lY3Rpb24gcmVmdXNlZCwgc3JjICh2bSV1OiV4KSBkc3QgKHZtJXU6JXgpXG4iLAo+ICsgICAg ICAgICAgICAgICAgY3VycmVudC0+ZG9tYWluLT5kb21haW5faWQsIHNyY19pZC5kb21haW5faWQs IHNyY19pZC5wb3J0LAo+ICsgICAgICAgICAgICAgICAgZHN0X2FkZHItPmRvbWFpbl9pZCwgZHN0 X2FkZHItPnBvcnQpOwo+ICsKPiArICAgICAgICByZXQgPSAtRUNPTk5SRUZVU0VEOwo+ICsgICAg ICAgIGdvdG8gb3V0X3VubG9jazI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZyaW5n X2luZm8tPmxvY2spOwo+ICsKPiArICAgIHJldCA9IHJpbmdidWZfaW5zZXJ0KGRzdF9kLCByaW5n X2luZm8sICZzcmNfaWQsIGlvdnNfaG5kLCBuaW92LAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgbWVzc2FnZV90eXBlLCAmbGVuKTsKPiArICAgIGlmICggcmV0ID09IC1FQUdBSU4gKQo+ICsg ICAgewo+ICsgICAgICAgIGFyZ29fZHByaW50aygiYXJnb19yaW5nYnVmX3NlbmR2IGZhaWxlZCwg RUFHQUlOXG4iKTsKPiArICAgICAgICAvKiByZXF1ZXVlIHRvIGlzc3VlIGEgbm90aWZpY2F0aW9u IHdoZW4gc3BhY2UgaXMgdGhlcmUgKi8KPiArICAgICAgICByZXQgPSBwZW5kaW5nX3JlcXVldWUo cmluZ19pbmZvLCBzcmNfYWRkci0+ZG9tYWluX2lkLCBsZW4pOwo+ICsgICAgfQo+ICsKPiArICAg IHNwaW5fdW5sb2NrKCZyaW5nX2luZm8tPmxvY2spOwo+ICsKPiArICAgIGlmICggcmV0ID49IDAg KQo+ICsgICAgICAgIHNpZ25hbF9kb21haW4oZHN0X2QpOwo+ICsKPiArIG91dF91bmxvY2syOgoK VGhlcmUncyBvbmx5IGEgc2luZ2xlIHVzZXIgb2YgdGhlIG91dF91bmxvY2syIGxhYmVsLCBhdCB3 aGljaCBwb2ludCBpdAptaWdodCBiZSBlYXNpZXIgdG8gcmVhZCB0byBqdXN0IHB1dCB0aGUgcmVh ZF91bmxvY2sgdGhlcmUgYW5kIGp1c3QgdXNlCnRoZSBleGlzdGluZyBvdXRfdW5sb2NrIGxhYmVs LgoKVGhhbmtzLCBSb2dlci4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2pl Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4t ZGV2ZWw=