From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9B112C47080 for ; Tue, 1 Jun 2021 17:31:00 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5043760234 for ; Tue, 1 Jun 2021 17:31:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5043760234 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id ACE366EAC5; Tue, 1 Jun 2021 17:30:59 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 725FD6EAC6 for ; Tue, 1 Jun 2021 17:30:58 +0000 (UTC) IronPort-SDR: AYXr6anx3kpuyYybukQUFByu7YPlDUP2kBAyVdmV+LrztdumlfJBF9mUZMpKaml2ZBArBWgnUw T3rHdGEo/k8g== X-IronPort-AV: E=McAfee;i="6200,9189,10002"; a="183957027" X-IronPort-AV: E=Sophos;i="5.83,240,1616482800"; d="scan'208";a="183957027" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 10:30:56 -0700 IronPort-SDR: 0Vdz6NzXpgaqRrOMWmUHikujASfFP0yqOGCTHJg6zRef7VGq2W3UiYs8YS4yiEPlkUL0KK8FEP oW8oXoVcG99w== X-IronPort-AV: E=Sophos;i="5.83,240,1616482800"; d="scan'208";a="467129214" Received: from mdroper-desk1.fm.intel.com (HELO mdroper-desk1.amr.corp.intel.com) ([10.1.27.134]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jun 2021 10:30:56 -0700 Date: Tue, 1 Jun 2021 10:30:55 -0700 From: Matt Roper To: Lucas De Marchi Message-ID: <20210601173055.GB6936@mdroper-desk1.amr.corp.intel.com> References: <20210527181700.1676790-1-lucas.demarchi@intel.com> <20210527181700.1676790-2-lucas.demarchi@intel.com> <20210601165834.GA6936@mdroper-desk1.amr.corp.intel.com> <20210601171514.63lh3lqb2yprri73@ldmartin-desk2> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210601171514.63lh3lqb2yprri73@ldmartin-desk2> Subject: Re: [Intel-gfx] [PATCH 1/7] drm/i915/gt: replace IS_GEN and friends with IS_GRAPHICS_VER X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: intel-gfx@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gVHVlLCBKdW4gMDEsIDIwMjEgYXQgMTA6MTU6MTRBTSAtMDcwMCwgTHVjYXMgRGUgTWFyY2hp IHdyb3RlOgo+IE9uIFR1ZSwgSnVuIDAxLCAyMDIxIGF0IDA5OjU4OjM0QU0gLTA3MDAsIE1hdHQg Um9wZXIgd3JvdGU6Cj4gPiBPbiBUaHUsIE1heSAyNywgMjAyMSBhdCAxMToxNjo1NEFNIC0wNzAw LCBMdWNhcyBEZSBNYXJjaGkgd3JvdGU6Cj4gPiA+IFRoaXMgd2FzIGRvbmUgYnkgdGhlIGZvbGxv d2luZyBzZW1hbnRpYyBwYXRjaDoKPiA+IAo+ID4gSXMgdGhlIGNvbW1pdCBtZXNzYWdlIGhlcmUg b3V0LW9mLWRhdGU/ICBUaGUgY29jY2kgZG9lc24ndCBhcHBlYXIgdG8KPiA+IG1hdGNoIHRoZSBk aWZmIGFueW1vcmUuICBJU19HUkFQSElDU19WRVIoKSBpcyB0aGUgcmFuZ2UgbWFjcm8gbm93IGFu ZAo+ID4gSVNfR0VOIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBkaXJlY3QgIj09IiBjb21wYXJp c29uLgo+IAo+IG5vdCBuZWNlc3NhcmlseSwgaXQncyBpbmNsdWRlZCBpbiAiYW5kIGZyaWVuZHMu Li4iLiBNYXliZSByZXdvcmRpbmcgdG8KPiBzb21ldGhpbmcgbGlrZSAicmVwbGFjZSBnZW4tYmFz ZWQgbWFjcm9zIHdpdGggbmV3IHZlci1iYXNlZCBvbmVzIiB3b3VsZAo+IG1ha2UgaXQgY2xlYXJl cj8KCkkgbWVhbiB0aGF0IHJ1bm5pbmcgdGhlIGNvY2NpbmVsbGUgcnVsZXMgYmVsb3cgdGhyb3Vn aCBzcGF0Y2ggd29uJ3QKZ2VuZXJhdGUgdGhlIGNvZGUgZGlmZiBoZXJlOyBpdCB3b3VsZCBnZW5l cmF0ZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50CnBhdGNoICh0aGF0IEkgZG9uJ3QgdGhpbmsgd291 bGQgYnVpbGQgcHJvcGVybHkgZWl0aGVyKS4KCgpNYXR0Cgo+IAo+IEx1Y2FzIERlIE1hcmNoaQo+ IAo+ID4gCj4gPiAKPiA+IE1hdHQKPiA+IAo+ID4gPiAKPiA+ID4gCUBAIGV4cHJlc3Npb24gZGV2 X3ByaXYsIEU7IEBACj4gPiA+IAktIElOVEVMX0dFTihkZXZfcHJpdikgPT0gRQo+ID4gPiAJKyBJ U19HUkFQSElDU19WRVIoZGV2X3ByaXYsIEUpCj4gPiA+IAo+ID4gPiAJQEAgZXhwcmVzc2lvbiBk ZXZfcHJpdjsgQEAKPiA+ID4gCS0gSU5URUxfR0VOKGRldl9wcml2KQo+ID4gPiAJKyBHUkFQSElD U19WRVIoZGV2X3ByaXYpCj4gPiA+IAo+ID4gPiAJQEAgZXhwcmVzc2lvbiBkZXZfcHJpdjsgZXhw cmVzc2lvbiBFOyBAQAo+ID4gPiAJLSBJU19HRU4oZGV2X3ByaXYsIEUpCj4gPiA+IAkrIElTX0dS QVBISUNTX1ZFUihkZXZfcHJpdiwgRSkKPiA+ID4gCj4gPiA+IAlAQAo+ID4gPiAJZXhwcmVzc2lv biBkZXZfcHJpdjsKPiA+ID4gCWV4cHJlc3Npb24gZnJvbSwgdW50aWw7Cj4gPiA+IAlAQAo+ID4g PiAJLSBJU19HRU5fUkFOR0UoZGV2X3ByaXYsIGZyb20sIHVudGlsKQo+ID4gPiAJKyBJU19HUkFQ SElDU19SQU5HRShkZXZfcHJpdiwgZnJvbSwgdW50aWwpCj4gPiA+IAo+ID4gPiAJQGRlZkAKPiA+ ID4gCWV4cHJlc3Npb24gRTsKPiA+ID4gCWlkZW50aWZpZXIgaWQgPX4gIl5nZW4kIjsKPiA+ID4g CUBACj4gPiA+IAktIGlkID0gR1JBUEhJQ1NfVkVSKEUpCj4gPiA+IAkrIHZlciA9IEdSQVBISUNT X1ZFUihFKQo+ID4gPiAKPiA+ID4gCUBACj4gPiA+IAlpZGVudGlmaWVyIGRlZi5pZDsKPiA+ID4g CUBACj4gPiA+IAktIGlkCj4gPiA+IAkrIHZlcgo+ID4gPiAKPiA+ID4gSXQgYWxzbyB0YWtlcyBj YXJlIG9mIHJlbmFtaW5nIHRoZSB2YXJpYWJsZSB3ZSBhc3NpZ24gdG8gR1JBUEhJQ1NfVkVSKCkK PiA+ID4gc28gdG8gdXNlICJ2ZXIiIHJhdGhlciB0aGFuICJnZW4iLgo+ID4gPiAKPiA+ID4gU2ln bmVkLW9mZi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNoaUBpbnRlbC5jb20+Cj4g PiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jICAg ICAgIHwgMzggKysrKystLS0tLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJf ZW5naW5lX2NzLmMgICAgICB8ICAyICstCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9n ZW44X2VuZ2luZV9jcy5jICAgICAgfCAgMiArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvZ2VuOF9wcGd0dC5jICAgICAgICAgIHwgIDIgKy0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2NvbnRleHRfc3NldS5jICB8ICAyICstCj4gPiA+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYyAgICAgfCA1NCArKysrKysrLS0tLS0tLS0KPiA+ ID4gIC4uLi9kcm0vaTkxNS9ndC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jICB8IDE4ICsr LS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9nZ3R0LmMgICAgICAgICAg fCAxOCArKy0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dF9mZW5j aW5nLmMgIHwgMzQgKysrKystLS0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3QuYyAgICAgICAgICAgIHwgMjcgKysrKy0tLS0KPiA+ID4gIC4uLi9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3RfY2xvY2tfdXRpbHMuYyAgICB8IDEyICsrLS0KPiA+ID4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jICAgICAgICB8ICA2ICstCj4gPiA+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbV9pcnEuYyAgICAgfCAxMCArLS0KPiA+ID4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jICAgICAgICAgICB8IDE0ICsrLS0KPiA+ ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5jICAgICAgICAgICB8ICA2ICst Cj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyAgICAgICAgICAgfCA0 NiArKysrKystLS0tLS0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9tb2Nz LmMgICAgICAgICAgfCAgOCArLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3BwZ3R0LmMgICAgICAgICB8ICA2ICstCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9yYzYuYyAgICAgICAgICAgfCAxNiArKy0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcmVuZGVyc3RhdGUuYyAgIHwgIDIgKy0KPiA+ID4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX3Jlc2V0LmMgICAgICAgICB8IDEyICsrLS0KPiA+ID4gIC4uLi9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMgICB8IDY0ICsrKysrKysrKy0tLS0t LS0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMgICAgICAgICAg IHwgNjAgKysrKysrKystLS0tLS0tLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX3NzZXUuYyAgICAgICAgICB8IDE0ICsrLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3dvcmthcm91bmRzLmMgICB8IDY2ICsrKysrKysrKy0tLS0tLS0tLS0KPiA+ID4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jICB8ICA2ICstCj4g PiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYyAgfCAgMiAr LQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmMgIHwg IDQgKy0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2d0X3BtLmMgICAg ICB8ICA4ICstLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2No ZWNrLmMgIHwgIDggKy0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9s bGMuYyAgICAgICAgfCAgNCArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRl c3RfbHJjLmMgICAgICAgIHwgIDggKy0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9tb2NzLmMgICAgICAgfCAgMiArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3RfcmM2LmMgICAgICAgIHwgIDQgKy0KPiA+ID4gIC4uLi9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9yaW5nX3N1Ym1pc3Npb24uYyAgICB8ICA2ICstCj4gPiA+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9zZWxmdGVzdF9ycHMuYyAgICAgICAgfCAxNiArKy0tLQo+ID4gPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYyAgIHwgIDYgKy0KPiA+ID4gIC4u Li9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYyAgICB8ICA4ICstLQo+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmMgICAgICAgIHwgIDQgKy0K PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYyAgICB8ICAy ICstCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfZncuYyAgICAg fCAgMiArLQo+ID4gPiAgLi4uL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lv bi5jIHwgMTAgKy0tCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9odWMu YyAgICAgICAgfCAgMiArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxf dWMuYyAgICAgICAgIHwgIDQgKy0KPiA+ID4gIDQ0IGZpbGVzIGNoYW5nZWQsIDMyMyBpbnNlcnRp b25zKCspLCAzMjIgZGVsZXRpb25zKC0pCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvZGVidWdmc19ndF9wbS5jCj4gPiA+IGluZGV4IGQ0ZjQ0NTJjZTVlZC4uMDM4OWJjZWViZDA2 IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9kZWJ1Z2ZzX2d0X3Bt LmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZGVidWdmc19ndF9wbS5jCj4g PiA+IEBAIC04NSwxNCArODUsMTQgQEAgc3RhdGljIGludCBnZW42X2RycGMoc3RydWN0IHNlcV9m aWxlICptKQo+ID4gPiAgCWd0X2NvcmVfc3RhdHVzID0gaW50ZWxfdW5jb3JlX3JlYWRfZncodW5j b3JlLCBHRU42X0dUX0NPUkVfU1RBVFVTKTsKPiA+ID4gCj4gPiA+ICAJcmNjdGwxID0gaW50ZWxf dW5jb3JlX3JlYWQodW5jb3JlLCBHRU42X1JDX0NPTlRST0wpOwo+ID4gPiAtCWlmIChJTlRFTF9H RU4oaTkxNSkgPj0gOSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkgewo+ ID4gPiAgCQlnZW45X3Bvd2VyZ2F0ZV9lbmFibGUgPQo+ID4gPiAgCQkJaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBHRU45X1BHX0VOQUJMRSk7Cj4gPiA+ICAJCWdlbjlfcG93ZXJnYXRlX3N0YXR1 cyA9Cj4gPiA+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjlfUFdSR1RfRE9NQUlO X1NUQVRVUyk7Cj4gPiA+ICAJfQo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDw9 IDcpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA3KQo+ID4gPiAgCQlzYW5keWJy aWRnZV9wY29kZV9yZWFkKGk5MTUsIEdFTjZfUENPREVfUkVBRF9SQzZWSURTLAo+ID4gPiAgCQkJ CSAgICAgICAmcmM2dmlkcywgTlVMTCk7Cj4gPiA+IAo+ID4gPiBAQCAtMTAwLDcgKzEwMCw3IEBA IHN0YXRpYyBpbnQgZ2VuNl9kcnBjKHN0cnVjdCBzZXFfZmlsZSAqbSkKPiA+ID4gIAkJICAgeWVz bm8ocmNjdGwxICYgR0VONl9SQ19DVExfUkMxZV9FTkFCTEUpKTsKPiA+ID4gIAlzZXFfcHJpbnRm KG0sICJSQzYgRW5hYmxlZDogJXNcbiIsCj4gPiA+ICAJCSAgIHllc25vKHJjY3RsMSAmIEdFTjZf UkNfQ1RMX1JDNl9FTkFCTEUpKTsKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpIHsK PiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpIHsKPiA+ID4gIAkJc2VxX3ByaW50 ZihtLCAiUmVuZGVyIFdlbGwgR2F0aW5nIEVuYWJsZWQ6ICVzXG4iLAo+ID4gPiAgCQkJICAgeWVz bm8oZ2VuOV9wb3dlcmdhdGVfZW5hYmxlICYgR0VOOV9SRU5ERVJfUEdfRU5BQkxFKSk7Cj4gPiA+ ICAJCXNlcV9wcmludGYobSwgIk1lZGlhIFdlbGwgR2F0aW5nIEVuYWJsZWQ6ICVzXG4iLAo+ID4g PiBAQCAtMTM0LDcgKzEzNCw3IEBAIHN0YXRpYyBpbnQgZ2VuNl9kcnBjKHN0cnVjdCBzZXFfZmls ZSAqbSkKPiA+ID4gCj4gPiA+ICAJc2VxX3ByaW50ZihtLCAiQ29yZSBQb3dlciBEb3duOiAlc1xu IiwKPiA+ID4gIAkJICAgeWVzbm8oZ3RfY29yZV9zdGF0dXMgJiBHRU42X0NPUkVfQ1BEX1NUQVRF X01BU0spKTsKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpIHsKPiA+ID4gKwlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpIHsKPiA+ID4gIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVy IFBvd2VyIFdlbGw6ICVzXG4iLAo+ID4gPiAgCQkJICAgKGdlbjlfcG93ZXJnYXRlX3N0YXR1cyAm Cj4gPiA+ICAJCQkgICAgR0VOOV9QV1JHVF9SRU5ERVJfU1RBVFVTX01BU0spID8gIlVwIiA6ICJE b3duIik7Cj4gPiA+IEBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGludCBnZW42X2RycGMoc3Ry dWN0IHNlcV9maWxlICptKQo+ID4gPiAgCXByaW50X3JjNl9yZXMobSwgIlJDNisgcmVzaWRlbmN5 IHNpbmNlIGJvb3Q6IiwgR0VONl9HVF9HRlhfUkM2cCk7Cj4gPiA+ICAJcHJpbnRfcmM2X3Jlcyht LCAiUkM2KysgcmVzaWRlbmN5IHNpbmNlIGJvb3Q6IiwgR0VONl9HVF9HRlhfUkM2cHApOwo+ID4g PiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDcpIHsKPiA+ID4gKwlpZiAoR1JBUEhJ Q1NfVkVSKGk5MTUpIDw9IDcpIHsKPiA+ID4gIAkJc2VxX3ByaW50ZihtLCAiUkM2ICAgdm9sdGFn ZTogJWRtVlxuIiwKPiA+ID4gIAkJCSAgIEdFTjZfREVDT0RFX1JDNl9WSUQoKChyYzZ2aWRzID4+ IDApICYgMHhmZikpKTsKPiA+ID4gIAkJc2VxX3ByaW50ZihtLCAiUkM2KyAgdm9sdGFnZTogJWRt VlxuIiwKPiA+ID4gQEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9zaG93 KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ID4gPiAKPiA+ID4gIAl3YWtlcmVm ID0gaW50ZWxfcnVudGltZV9wbV9nZXQodW5jb3JlLT5ycG0pOwo+ID4gPiAKPiA+ID4gLQlpZiAo SVNfR0VOKGk5MTUsIDUpKSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KSB7 Cj4gPiA+ICAJCXUxNiByZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1T V0NUTCk7Cj4gPiA+ICAJCXUxNiByZ3ZzdGF0ID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUs IE1FTVNUQVRfSUxLKTsKPiA+ID4gCj4gPiA+IEBAIC0yOTYsNyArMjk2LDcgQEAgc3RhdGljIGlu dCBmcmVxdWVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiA+ID4g Cj4gPiA+ICAJCXNlcV9wcmludGYobSwgImVmZmljaWVudCAoUlBlKSBmcmVxdWVuY3k6ICVkIE1I elxuIiwKPiA+ID4gIAkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2llbnRfZnJl cSkpOwo+ID4gPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpIHsKPiA+ID4gKwl9 IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KSB7Cj4gPiA+ICAJCXUzMiBycF9zdGF0 ZV9saW1pdHM7Cj4gPiA+ICAJCXUzMiBndF9wZXJmX3N0YXR1czsKPiA+ID4gIAkJdTMyIHJwX3N0 YXRlX2NhcDsKPiA+ID4gQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgaW50IGZyZXF1ZW5jeV9z aG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ID4gPiAgCQlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX2dldCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ID4gPiAKPiA+ID4gIAkJ cmVxZiA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VONl9SUE5TV1JFUSk7Cj4gPiA+IC0J CWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkgewo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpID49IDkpIHsKPiA+ID4gIAkJCXJlcWYgPj49IDIzOwo+ID4gPiAgCQl9IGVsc2Ugewo+ID4g PiAgCQkJcmVxZiAmPSB+R0VONl9UVVJCT19ESVNBQkxFOwo+ID4gPiBAQCAtMzU0LDcgKzM1NCw3 IEBAIHN0YXRpYyBpbnQgZnJlcXVlbmN5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1 bnVzZWQpCj4gPiA+IAo+ID4gPiAgCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCh1bmNvcmUs IEZPUkNFV0FLRV9BTEwpOwo+ID4gPiAKPiA+ID4gLQkJaWYgKElOVEVMX0dFTihpOTE1KSA+PSAx MSkgewo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKSB7Cj4gPiA+ICAJCQlw bV9pZXIgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjExX0dQTV9XR0JPWFBFUkZfSU5U Ul9FTkFCTEUpOwo+ID4gPiAgCQkJcG1faW1yID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBH RU4xMV9HUE1fV0dCT1hQRVJGX0lOVFJfTUFTSyk7Cj4gPiA+ICAJCQkvKgo+ID4gPiBAQCAtMzYz LDcgKzM2Myw3IEBAIHN0YXRpYyBpbnQgZnJlcXVlbmN5X3Nob3coc3RydWN0IHNlcV9maWxlICpt LCB2b2lkICp1bnVzZWQpCj4gPiA+ICAJCQkgKi8KPiA+ID4gIAkJCXBtX2lzciA9IDA7Cj4gPiA+ ICAJCQlwbV9paXIgPSAwOwo+ID4gPiAtCQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4 KSB7Cj4gPiA+ICsJCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpIHsKPiA+ID4g IAkJCXBtX2llciA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VOOF9HVF9JRVIoMikpOwo+ ID4gPiAgCQkJcG1faW1yID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X0dUX0lNUigy KSk7Cj4gPiA+ICAJCQlwbV9pc3IgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjhfR1Rf SVNSKDIpKTsKPiA+ID4gQEAgLTM4NiwxNCArMzg2LDE0IEBAIHN0YXRpYyBpbnQgZnJlcXVlbmN5 X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gPiA+IAo+ID4gPiAgCQlz ZXFfcHJpbnRmKG0sICJQTSBJRVI9MHglMDh4IElNUj0weCUwOHgsIE1BU0s9MHglMDh4XG4iLAo+ ID4gPiAgCQkJICAgcG1faWVyLCBwbV9pbXIsIHBtX21hc2spOwo+ID4gPiAtCQlpZiAoSU5URUxf R0VOKGk5MTUpIDw9IDEwKQo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDw9IDEwKQo+ ID4gPiAgCQkJc2VxX3ByaW50ZihtLCAiUE0gSVNSPTB4JTA4eCBJSVI9MHglMDh4XG4iLAo+ID4g PiAgCQkJCSAgIHBtX2lzciwgcG1faWlyKTsKPiA+ID4gIAkJc2VxX3ByaW50ZihtLCAicG1faW50 cm1za19tYno6IDB4JTA4eFxuIiwKPiA+ID4gIAkJCSAgIHJwcy0+cG1faW50cm1za19tYnopOwo+ ID4gPiAgCQlzZXFfcHJpbnRmKG0sICJHVF9QRVJGX1NUQVRVUzogMHglMDh4XG4iLCBndF9wZXJm X3N0YXR1cyk7Cj4gPiA+ICAJCXNlcV9wcmludGYobSwgIlJlbmRlciBwLXN0YXRlIHJhdGlvOiAl ZFxuIiwKPiA+ID4gLQkJCSAgIChndF9wZXJmX3N0YXR1cyAmIChJTlRFTF9HRU4oaTkxNSkgPj0g OSA/IDB4MWZmMDAgOiAweGZmMDApKSA+PiA4KTsKPiA+ID4gKwkJCSAgIChndF9wZXJmX3N0YXR1 cyAmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSA/IDB4MWZmMDAgOiAweGZmMDApKSA+PiA4KTsK PiA+ID4gIAkJc2VxX3ByaW50ZihtLCAiUmVuZGVyIHAtc3RhdGUgVklEOiAlZFxuIiwKPiA+ID4g IAkJCSAgIGd0X3BlcmZfc3RhdHVzICYgMHhmZik7Cj4gPiA+ICAJCXNlcV9wcmludGYobSwgIlJl bmRlciBwLXN0YXRlIGxpbWl0OiAlZFxuIiwKPiA+ID4gQEAgLTQzNywyMCArNDM3LDIwIEBAIHN0 YXRpYyBpbnQgZnJlcXVlbmN5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQp Cj4gPiA+ICAJCW1heF9mcmVxID0gKElTX0dFTjlfTFAoaTkxNSkgPyBycF9zdGF0ZV9jYXAgPj4g MCA6Cj4gPiA+ICAJCQkgICAgcnBfc3RhdGVfY2FwID4+IDE2KSAmIDB4ZmY7Cj4gPiA+ICAJCW1h eF9mcmVxICo9IChJU19HRU45X0JDKGk5MTUpIHx8Cj4gPiA+IC0JCQkgICAgIElOVEVMX0dFTihp OTE1KSA+PSAxMCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKTsKPiA+ID4gKwkJCSAgICAgR1JBUEhJ Q1NfVkVSKGk5MTUpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpOwo+ID4gPiAgCQlzZXFf cHJpbnRmKG0sICJMb3dlc3QgKFJQTikgZnJlcXVlbmN5OiAlZE1IelxuIiwKPiA+ID4gIAkJCSAg IGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKPiA+ID4gCj4gPiA+ICAJCW1heF9mcmVx ID0gKHJwX3N0YXRlX2NhcCAmIDB4ZmYwMCkgPj4gODsKPiA+ID4gIAkJbWF4X2ZyZXEgKj0gKElT X0dFTjlfQkMoaTkxNSkgfHwKPiA+ID4gLQkJCSAgICAgSU5URUxfR0VOKGk5MTUpID49IDEwID8g R0VOOV9GUkVRX1NDQUxFUiA6IDEpOwo+ID4gPiArCQkJICAgICBHUkFQSElDU19WRVIoaTkxNSkg Pj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7Cj4gPiA+ICAJCXNlcV9wcmludGYobSwgIk5v bWluYWwgKFJQMSkgZnJlcXVlbmN5OiAlZE1IelxuIiwKPiA+ID4gIAkJCSAgIGludGVsX2dwdV9m cmVxKHJwcywgbWF4X2ZyZXEpKTsKPiA+ID4gCj4gPiA+ICAJCW1heF9mcmVxID0gKElTX0dFTjlf TFAoaTkxNSkgPyBycF9zdGF0ZV9jYXAgPj4gMTYgOgo+ID4gPiAgCQkJICAgIHJwX3N0YXRlX2Nh cCA+PiAwKSAmIDB4ZmY7Cj4gPiA+ICAJCW1heF9mcmVxICo9IChJU19HRU45X0JDKGk5MTUpIHx8 Cj4gPiA+IC0JCQkgICAgIElOVEVMX0dFTihpOTE1KSA+PSAxMCA/IEdFTjlfRlJFUV9TQ0FMRVIg OiAxKTsKPiA+ID4gKwkJCSAgICAgR1JBUEhJQ1NfVkVSKGk5MTUpID49IDEwID8gR0VOOV9GUkVR X1NDQUxFUiA6IDEpOwo+ID4gPiAgCQlzZXFfcHJpbnRmKG0sICJNYXggbm9uLW92ZXJjbG9ja2Vk IChSUDApIGZyZXF1ZW5jeTogJWRNSHpcbiIsCj4gPiA+ICAJCQkgICBpbnRlbF9ncHVfZnJlcShy cHMsIG1heF9mcmVxKSk7Cj4gPiA+ICAJCXNlcV9wcmludGYobSwgIk1heCBvdmVyY2xvY2tlZCBm cmVxdWVuY3k6ICVkTUh6XG4iLAo+ID4gPiBAQCAtNDg4LDcgKzQ4OCw3IEBAIHN0YXRpYyBpbnQg bGxjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ID4gPiAgewo+ID4gPiAg CXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBtLT5wcml2YXRlOwo+ID4gPiAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7Cj4gPiA+IC0JY29uc3QgYm9vbCBlZHJhbSA9IElO VEVMX0dFTihpOTE1KSA+IDg7Cj4gPiA+ICsJY29uc3QgYm9vbCBlZHJhbSA9IEdSQVBISUNTX1ZF UihpOTE1KSA+IDg7Cj4gPiA+ICAJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmd0LT5ycHM7Cj4g PiA+ICAJdW5zaWduZWQgaW50IG1heF9ncHVfZnJlcSwgbWluX2dwdV9mcmVxOwo+ID4gPiAgCWlu dGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ID4gPiBAQCAtNTAwLDcgKzUwMCw3IEBAIHN0YXRpYyBp bnQgbGxjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ID4gPiAKPiA+ID4g IAltaW5fZ3B1X2ZyZXEgPSBycHMtPm1pbl9mcmVxOwo+ID4gPiAgCW1heF9ncHVfZnJlcSA9IHJw cy0+bWF4X2ZyZXE7Cj4gPiA+IC0JaWYgKElTX0dFTjlfQkMoaTkxNSkgfHwgSU5URUxfR0VOKGk5 MTUpID49IDEwKSB7Cj4gPiA+ICsJaWYgKElTX0dFTjlfQkMoaTkxNSkgfHwgR1JBUEhJQ1NfVkVS KGk5MTUpID49IDEwKSB7Cj4gPiA+ICAJCS8qIENvbnZlcnQgR1QgZnJlcXVlbmN5IHRvIDUwIEha IHVuaXRzICovCj4gPiA+ICAJCW1pbl9ncHVfZnJlcSAvPSBHRU45X0ZSRVFfU0NBTEVSOwo+ID4g PiAgCQltYXhfZ3B1X2ZyZXEgLz0gR0VOOV9GUkVRX1NDQUxFUjsKPiA+ID4gQEAgLTUxOCw3ICs1 MTgsNyBAQCBzdGF0aWMgaW50IGxsY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0 YSkKPiA+ID4gIAkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywKPiA+ID4gIAkJCQkJICAoZ3B1X2Zy ZXEgKgo+ID4gPiAgCQkJCQkgICAoSVNfR0VOOV9CQyhpOTE1KSB8fAo+ID4gPiAtCQkJCQkgICAg SU5URUxfR0VOKGk5MTUpID49IDEwID8KPiA+ID4gKwkJCQkJICAgIEdSQVBISUNTX1ZFUihpOTE1 KSA+PSAxMCA/Cj4gPiA+ICAJCQkJCSAgICBHRU45X0ZSRVFfU0NBTEVSIDogMSkpKSwKPiA+ID4g IAkJCSAgICgoaWFfZnJlcSA+PiAwKSAmIDB4ZmYpICogMTAwLAo+ID4gPiAgCQkJICAgKChpYV9m cmVxID4+IDgpICYgMHhmZikgKiAxMDApOwo+ID4gPiBAQCAtNTgwLDcgKzU4MCw3IEBAIHN0YXRp YyBpbnQgcnBzX2Jvb3N0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ID4g PiAKPiA+ID4gIAlzZXFfcHJpbnRmKG0sICJXYWl0IGJvb3N0czogJWRcbiIsIFJFQURfT05DRShy cHMtPmJvb3N0cykpOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYgJiYg aW50ZWxfcnBzX2lzX2FjdGl2ZShycHMpKSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA+PSA2ICYmIGludGVsX3Jwc19pc19hY3RpdmUocnBzKSkgewo+ID4gPiAgCQlzdHJ1Y3QgaW50 ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwo+ID4gPiAgCQl1MzIgcnB1cCwgcnB1cGVp Owo+ID4gPiAgCQl1MzIgcnBkb3duLCBycGRvd25laTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9nZW4yX2VuZ2luZV9jcy5jCj4gPiA+IGluZGV4IDk2NDYyMDBkMjc5Mi4uNjEzODM4MzA1 MDVlIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4yX2VuZ2lu ZV9jcy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2Nz LmMKPiA+ID4gQEAgLTc0LDcgKzc0LDcgQEAgaW50IGdlbjRfZW1pdF9mbHVzaF9yY3Moc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQo+ID4gPiAgCWNtZCA9IE1JX0ZMVVNIOwo+ID4g PiAgCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7Cj4gPiA+ICAJCWNtZCB8PSBNSV9FWEVf RkxVU0g7Cj4gPiA+IC0JCWlmIChJU19HNFgocnEtPmVuZ2luZS0+aTkxNSkgfHwgSVNfR0VOKHJx LT5lbmdpbmUtPmk5MTUsIDUpKQo+ID4gPiArCQlpZiAoSVNfRzRYKHJxLT5lbmdpbmUtPmk5MTUp IHx8IEdSQVBISUNTX1ZFUihycS0+ZW5naW5lLT5pOTE1KSA9PSA1KQo+ID4gPiAgCQkJY21kIHw9 IE1JX0lOVkFMSURBVEVfSVNQOwo+ID4gPiAgCX0KPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYwo+ID4gPiBpbmRleCA3MzJjMmVkMWQ5MzMuLjk0ZTBh NTY2OWY5MCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9l bmdpbmVfY3MuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2lu ZV9jcy5jCj4gPiA+IEBAIC0zOCw3ICszOCw3IEBAIGludCBnZW44X2VtaXRfZmx1c2hfcmNzKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKPiA+ID4gIAkJICogT24gR0VOOTogYmVm b3JlIFZGX0NBQ0hFX0lOVkFMSURBVEUgd2UgbmVlZCB0byBlbWl0IGEgTlVMTAo+ID4gPiAgCQkg KiBwaXBlIGNvbnRyb2wuCj4gPiA+ICAJCSAqLwo+ID4gPiAtCQlpZiAoSVNfR0VOKHJxLT5lbmdp bmUtPmk5MTUsIDkpKQo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKHJxLT5lbmdpbmUtPmk5MTUp ID09IDkpCj4gPiA+ICAJCQl2Zl9mbHVzaF93YSA9IHRydWU7Cj4gPiA+IAo+ID4gPiAgCQkvKiBX YUZvckdBTUhhbmc6a2JsICovCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9nZW44X3BwZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X3BwZ3R0LmMK PiA+ID4gaW5kZXggZTNhODkyNGQyMjg2Li4yMWM4YjczNTBiN2EgMTAwNjQ0Cj4gPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjhfcHBndHQuYwo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9nZW44X3BwZ3R0LmMKPiA+ID4gQEAgLTcwOSw3ICs3MDksNyBAQCBz dHJ1Y3QgaTkxNV9wcGd0dCAqZ2VuOF9wcGd0dF9jcmVhdGUoc3RydWN0IGludGVsX2d0ICpndCkK PiA+ID4gIAkgKgo+ID4gPiAgCSAqIEdlbjEyIGhhcyBpbmhlcml0ZWQgdGhlIHNhbWUgcmVhZC1v bmx5IGZhdWx0IGlzc3VlIGZyb20gZ2VuMTEuCj4gPiA+ICAJICovCj4gPiA+IC0JcHBndHQtPnZt Lmhhc19yZWFkX29ubHkgPSAhSVNfR0VOX1JBTkdFKGd0LT5pOTE1LCAxMSwgMTIpOwo+ID4gPiAr CXBwZ3R0LT52bS5oYXNfcmVhZF9vbmx5ID0gIUlTX0dSQVBISUNTX1ZFUihndC0+aTkxNSwgMTEs IDEyKTsKPiA+ID4gCj4gPiA+ICAJaWYgKEhBU19MTUVNKGd0LT5pOTE1KSkKPiA+ID4gIAkJcHBn dHQtPnZtLmFsbG9jX3B0X2RtYSA9IGFsbG9jX3B0X2xtZW07Cj4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3NzZXUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfc3NldS5jCj4gPiA+IGluZGV4IDhkZmQ4ZjY1NmFh YS4uZTg2ZDgyNTVmZWVjIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9jb250ZXh0X3NzZXUuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9jb250ZXh0X3NzZXUuYwo+ID4gPiBAQCAtNzYsNyArNzYsNyBAQCBpbnRlbF9jb250 ZXh0X3JlY29uZmlndXJlX3NzZXUoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ID4gPiAgewo+ ID4gPiAgCWludCByZXQ7Cj4gPiA+IAo+ID4gPiAtCUdFTV9CVUdfT04oSU5URUxfR0VOKGNlLT5l bmdpbmUtPmk5MTUpIDwgOCk7Cj4gPiA+ICsJR0VNX0JVR19PTihHUkFQSElDU19WRVIoY2UtPmVu Z2luZS0+aTkxNSkgPCA4KTsKPiA+ID4gCj4gPiA+ICAJcmV0ID0gaW50ZWxfY29udGV4dF9sb2Nr X3Bpbm5lZChjZSk7Cj4gPiA+ICAJaWYgKHJldCkKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZW5naW5lX2NzLmMKPiA+ID4gaW5kZXggM2Y5YTgxMWViMDJiLi41NGJhZjE3Yjgx YjYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2lu ZV9jcy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9j cy5jCj4gPiA+IEBAIC0yNDAsMTAgKzI0MCwxMCBAQCB2b2lkIGludGVsX2VuZ2luZV9zZXRfaHdz cF93cml0ZW1hc2soc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgbWFzaykKPiA+ ID4gIAkgKiBUaG91Z2ggdGhleSBhZGRlZCBtb3JlIHJpbmdzIG9uIGc0eC9pbGssIHRoZXkgZGlk IG5vdCBhZGQKPiA+ID4gIAkgKiBwZXItZW5naW5lIEhXU1RBTSB1bnRpbCBnZW42Lgo+ID4gPiAg CSAqLwo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDYgJiYgZW5naW5lLT5j bGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5 MTUpIDwgNiAmJiBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPiA+ID4gIAkJcmV0dXJu Owo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMykKPiA+ID4g KwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMykKPiA+ID4gIAkJRU5HSU5FX1dS SVRFKGVuZ2luZSwgUklOR19IV1NUQU0sIG1hc2spOwo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJRU5H SU5FX1dSSVRFMTYoZW5naW5lLCBSSU5HX0hXU1RBTSwgbWFzayk7Cj4gPiA+IEBAIC0zMTUsNyAr MzE1LDcgQEAgc3RhdGljIGludCBpbnRlbF9lbmdpbmVfc2V0dXAoc3RydWN0IGludGVsX2d0ICpn dCwgZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQpCj4gPiA+ICAJCUNPTkZJR19EUk1fSTkxNV9USU1F U0xJQ0VfRFVSQVRJT047Cj4gPiA+IAo+ID4gPiAgCS8qIE92ZXJyaWRlIHRvIHVuaW50ZXJydXB0 aWJsZSBmb3IgT3BlbkNMIHdvcmtsb2Fkcy4gKi8KPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUp ID09IDEyICYmIGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQo+ID4gPiArCWlmIChHUkFQ SElDU19WRVIoaTkxNSkgPT0gMTIgJiYgZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCj4g PiA+ICAJCWVuZ2luZS0+cHJvcHMucHJlZW1wdF90aW1lb3V0X21zID0gMDsKPiA+ID4gCj4gPiA+ ICAJZW5naW5lLT5kZWZhdWx0cyA9IGVuZ2luZS0+cHJvcHM7IC8qIG5ldmVyIHRvIGNoYW5nZSBh Z2FpbiAqLwo+ID4gPiBAQCAtMzUyLDggKzM1Miw4IEBAIHN0YXRpYyB2b2lkIF9fc2V0dXBfZW5n aW5lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJ CSAqIEhFVkMgc3VwcG9ydCBpcyBwcmVzZW50IG9uIGZpcnN0IGVuZ2luZSBpbnN0YW5jZQo+ID4g PiAgCQkgKiBiZWZvcmUgR2VuMTEgYW5kIG9uIGFsbCBpbnN0YW5jZXMgYWZ0ZXJ3YXJkcy4KPiA+ ID4gIAkJICovCj4gPiA+IC0JCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEgfHwKPiA+ID4gLQkJ ICAgIChJTlRFTF9HRU4oaTkxNSkgPj0gOSAmJiBlbmdpbmUtPmluc3RhbmNlID09IDApKQo+ID4g PiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExIHx8Cj4gPiA+ICsJCSAgICAoR1JBUEhJ Q1NfVkVSKGk5MTUpID49IDkgJiYgZW5naW5lLT5pbnN0YW5jZSA9PSAwKSkKPiA+ID4gIAkJCWVu Z2luZS0+dWFiaV9jYXBhYmlsaXRpZXMgfD0KPiA+ID4gIAkJCQlJOTE1X1ZJREVPX0NMQVNTX0NB UEFCSUxJVFlfSEVWQzsKPiA+ID4gCj4gPiA+IEBAIC0zNjEsMTQgKzM2MSwxNCBAQCBzdGF0aWMg dm9pZCBfX3NldHVwX2VuZ2luZV9jYXBhYmlsaXRpZXMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ID4gPiAgCQkgKiBTRkMgYmxvY2sgaXMgcHJlc2VudCBvbmx5IG9uIGV2ZW4gbG9n aWNhbCBlbmdpbmUKPiA+ID4gIAkJICogaW5zdGFuY2VzLgo+ID4gPiAgCQkgKi8KPiA+ID4gLQkJ aWYgKChJTlRFTF9HRU4oaTkxNSkgPj0gMTEgJiYKPiA+ID4gKwkJaWYgKChHUkFQSElDU19WRVIo aTkxNSkgPj0gMTEgJiYKPiA+ID4gIAkJICAgICAoZW5naW5lLT5ndC0+aW5mby52ZGJveF9zZmNf YWNjZXNzICYKPiA+ID4gIAkJICAgICAgQklUKGVuZ2luZS0+aW5zdGFuY2UpKSkgfHwKPiA+ID4g LQkJICAgIChJTlRFTF9HRU4oaTkxNSkgPj0gOSAmJiBlbmdpbmUtPmluc3RhbmNlID09IDApKQo+ ID4gPiArCQkgICAgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5ICYmIGVuZ2luZS0+aW5zdGFuY2Ug PT0gMCkpCj4gPiA+ICAJCQllbmdpbmUtPnVhYmlfY2FwYWJpbGl0aWVzIHw9Cj4gPiA+ICAJCQkJ STkxNV9WSURFT19BTkRfRU5IQU5DRV9DTEFTU19DQVBBQklMSVRZX1NGQzsKPiA+ID4gIAl9IGVs c2UgaWYgKGVuZ2luZS0+Y2xhc3MgPT0gVklERU9fRU5IQU5DRU1FTlRfQ0xBU1MpIHsKPiA+ID4g LQkJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5 MTUpID49IDkpCj4gPiA+ICAJCQllbmdpbmUtPnVhYmlfY2FwYWJpbGl0aWVzIHw9Cj4gPiA+ICAJ CQkJSTkxNV9WSURFT19BTkRfRU5IQU5DRV9DTEFTU19DQVBBQklMSVRZX1NGQzsKPiA+ID4gIAl9 Cj4gPiA+IEBAIC00NjYsNyArNDY2LDcgQEAgc3RhdGljIGludGVsX2VuZ2luZV9tYXNrX3QgaW5p dF9lbmdpbmVfbWFzayhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ID4gPiAKPiA+ID4gIAlpbmZvLT5l bmdpbmVfbWFzayA9IElOVEVMX0lORk8oaTkxNSktPnBsYXRmb3JtX2VuZ2luZV9tYXNrOwo+ID4g PiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEpCj4gPiA+ICsJaWYgKEdSQVBISUNT X1ZFUihpOTE1KSA8IDExKQo+ID4gPiAgCQlyZXR1cm4gaW5mby0+ZW5naW5lX21hc2s7Cj4gPiA+ IAo+ID4gPiAgCW1lZGlhX2Z1c2UgPSB+aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU4xMV9H VF9WRUJPWF9WREJPWF9ESVNBQkxFKTsKPiA+ID4gQEAgLTQ5Miw3ICs0OTIsNyBAQCBzdGF0aWMg aW50ZWxfZW5naW5lX21hc2tfdCBpbml0X2VuZ2luZV9tYXNrKHN0cnVjdCBpbnRlbF9ndCAqZ3Qp Cj4gPiA+ICAJCSAqIGhvb2tlZCB1cCB0byBhbiBTRkMgKFNjYWxlciAmIEZvcm1hdCBDb252ZXJ0 ZXIpIHVuaXQuCj4gPiA+ICAJCSAqIEluIFRHTCBlYWNoIFZEQk9YIGhhcyBhY2Nlc3MgdG8gYW4g U0ZDLgo+ID4gPiAgCQkgKi8KPiA+ID4gLQkJaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMiB8fCBs b2dpY2FsX3ZkYm94KysgJSAyID09IDApCj4gPiA+ICsJCWlmIChHUkFQSElDU19WRVIoaTkxNSkg Pj0gMTIgfHwgbG9naWNhbF92ZGJveCsrICUgMiA9PSAwKQo+ID4gPiAgCQkJZ3QtPmluZm8udmRi b3hfc2ZjX2FjY2VzcyB8PSBCSVQoaSk7Cj4gPiA+ICAJfQo+ID4gPiAgCWRybV9kYmcoJmk5MTUt PmRybSwgInZkYm94IGVuYWJsZTogJTA0eCwgaW5zdGFuY2VzOiAlMDRseFxuIiwKPiA+ID4gQEAg LTcyOSw3ICs3MjksNyBAQCBzdGF0aWMgaW50IGVuZ2luZV9zZXR1cF9jb21tb24oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgCWludGVsX2VuZ2luZV9pbml0X3doaXRlbGlz dChlbmdpbmUpOwo+ID4gPiAgCWludGVsX2VuZ2luZV9pbml0X2N0eF93YShlbmdpbmUpOwo+ID4g PiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gPiA+ICsJaWYg KEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDEyKQo+ID4gPiAgCQllbmdpbmUtPmZsYWdz IHw9IEk5MTVfRU5HSU5FX0hBU19SRUxBVElWRV9NTUlPOwo+ID4gPiAKPiA+ID4gIAlyZXR1cm4g MDsKPiA+ID4gQEAgLTk5Nyw5ICs5OTcsOSBAQCB1NjQgaW50ZWxfZW5naW5lX2dldF9hY3RpdmVf aGVhZChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+IAo+ID4gPiAg CXU2NCBhY3RoZDsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQo+ID4g PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkKPiA+ID4gIAkJYWN0aGQgPSBFTkdJTkVf UkVBRDY0KGVuZ2luZSwgUklOR19BQ1RIRCwgUklOR19BQ1RIRF9VRFcpOwo+ID4gPiAtCWVsc2Ug aWYgKElOVEVMX0dFTihpOTE1KSA+PSA0KQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA0KQo+ID4gPiAgCQlhY3RoZCA9IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19BQ1RI RCk7Cj4gPiA+ICAJZWxzZQo+ID4gPiAgCQlhY3RoZCA9IEVOR0lORV9SRUFEKGVuZ2luZSwgQUNU SEQpOwo+ID4gPiBAQCAtMTAxMSw3ICsxMDExLDcgQEAgdTY0IGludGVsX2VuZ2luZV9nZXRfbGFz dF9iYXRjaF9oZWFkKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4g IHsKPiA+ID4gIAl1NjQgYmJhZGRyOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGVuZ2lu ZS0+aTkxNSkgPj0gOCkKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0g OCkKPiA+ID4gIAkJYmJhZGRyID0gRU5HSU5FX1JFQUQ2NChlbmdpbmUsIFJJTkdfQkJBRERSLCBS SU5HX0JCQUREUl9VRFcpOwo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJYmJhZGRyID0gRU5HSU5FX1JF QUQoZW5naW5lLCBSSU5HX0JCQUREUik7Cj4gPiA+IEBAIC0xMDU4LDcgKzEwNTgsNyBAQCBpbnQg aW50ZWxfZW5naW5lX3N0b3BfY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4g PiAgewo+ID4gPiAgCWludCBlcnIgPSAwOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGVu Z2luZS0+aTkxNSkgPCAzKQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA8 IDMpCj4gPiA+ICAJCXJldHVybiAtRU5PREVWOwo+ID4gPiAKPiA+ID4gIAlFTkdJTkVfVFJBQ0Uo ZW5naW5lLCAiXG4iKTsKPiA+ID4gQEAgLTExMDgsNyArMTEwOCw3IEBAIHJlYWRfc3Vic2xpY2Vf cmVnKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiA+ID4gIAl1MzIgbWNy X21hc2ssIG1jcl9zcywgbWNyLCBvbGRfbWNyLCB2YWw7Cj4gPiA+ICAJZW51bSBmb3JjZXdha2Vf ZG9tYWlucyBmd19kb21haW5zOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49 IDExKSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+ID4gPiAgCQlt Y3JfbWFzayA9IEdFTjExX01DUl9TTElDRV9NQVNLIHwgR0VOMTFfTUNSX1NVQlNMSUNFX01BU0s7 Cj4gPiA+ICAJCW1jcl9zcyA9IEdFTjExX01DUl9TTElDRShzbGljZSkgfCBHRU4xMV9NQ1JfU1VC U0xJQ0Uoc3Vic2xpY2UpOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+IEBAIC0xMTU3LDcgKzExNTcs NyBAQCB2b2lkIGludGVsX2VuZ2luZV9nZXRfaW5zdGRvbmUoY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ID4gPiAKPiA+ID4gIAltZW1zZXQoaW5zdGRvbmUsIDAsIHNpemVv ZigqaW5zdGRvbmUpKTsKPiA+ID4gCj4gPiA+IC0Jc3dpdGNoIChJTlRFTF9HRU4oaTkxNSkpIHsK PiA+ID4gKwlzd2l0Y2ggKEdSQVBISUNTX1ZFUihpOTE1KSkgewo+ID4gPiAgCWRlZmF1bHQ6Cj4g PiA+ICAJCWluc3Rkb25lLT5pbnN0ZG9uZSA9Cj4gPiA+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIFJJTkdfSU5TVERPTkUobW1pb19iYXNlKSk7Cj4gPiA+IEBAIC0xMTY3LDcgKzExNjcs NyBAQCB2b2lkIGludGVsX2VuZ2luZV9nZXRfaW5zdGRvbmUoY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ID4gPiAKPiA+ID4gIAkJaW5zdGRvbmUtPnNsaWNlX2NvbW1vbiA9 Cj4gPiA+ICAJCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjdfU0NfSU5TVERPTkUpOwo+ ID4gPiAtCQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKSB7Cj4gPiA+ICsJCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPj0gMTIpIHsKPiA+ID4gIAkJCWluc3Rkb25lLT5zbGljZV9jb21tb25fZXh0 cmFbMF0gPQo+ID4gPiAgCQkJCWludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VOMTJfU0NfSU5T VERPTkVfRVhUUkEpOwo+ID4gPiAgCQkJaW5zdGRvbmUtPnNsaWNlX2NvbW1vbl9leHRyYVsxXSA9 Cj4gPiA+IEBAIC0xMjMwLDcgKzEyMzAsNyBAQCBzdGF0aWMgYm9vbCByaW5nX2lzX2lkbGUoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgCQlpZGxlID0gZmFsc2U7Cj4gPiA+ IAo+ID4gPiAgCS8qIE5vIGJpdCBmb3IgZ2VuMiwgc28gYXNzdW1lIHRoZSBDUyBwYXJzZXIgaXMg aWRsZSAqLwo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+IDIgJiYKPiA+ID4g KwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPiAyICYmCj4gPiA+ICAJICAgICEoRU5H SU5FX1JFQUQoZW5naW5lLCBSSU5HX01JX01PREUpICYgTU9ERV9JRExFKSkKPiA+ID4gIAkJaWRs ZSA9IGZhbHNlOwo+ID4gPiAKPiA+ID4gQEAgLTEzMjcsNyArMTMyNyw3IEBAIHZvaWQgaW50ZWxf ZW5naW5lc19yZXNldF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGludGVsX2d0ICpndCkKPiA+ ID4gCj4gPiA+ICBib29sIGludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgewo+ID4gPiAtCXN3aXRjaCAoSU5URUxfR0VOKGVu Z2luZS0+aTkxNSkpIHsKPiA+ID4gKwlzd2l0Y2ggKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp KSB7Cj4gPiA+ICAJY2FzZSAyOgo+ID4gPiAgCQlyZXR1cm4gZmFsc2U7IC8qIHVzZXMgcGh5c2lj YWwgbm90IHZpcnR1YWwgYWRkcmVzc2VzICovCj4gPiA+ICAJY2FzZSAzOgo+ID4gPiBAQCAtMTQz Miw3ICsxNDMyLDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZW5naW5lX3ByaW50X3JlZ2lzdGVycyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gPiA+ICAJc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4gPiA+ ICAJdTY0IGFkZHI7Cj4gPiA+IAo+ID4gPiAtCWlmIChlbmdpbmUtPmlkID09IFJFTkRFUl9DTEFT UyAmJiBJU19HRU5fUkFOR0UoZGV2X3ByaXYsIDQsIDcpKQo+ID4gPiArCWlmIChlbmdpbmUtPmlk ID09IFJFTkRFUl9DTEFTUyAmJiBJU19HUkFQSElDU19WRVIoZGV2X3ByaXYsIDQsIDcpKQo+ID4g PiAgCQlkcm1fcHJpbnRmKG0sICJcdENDSUQ6IDB4JTA4eFxuIiwgRU5HSU5FX1JFQUQoZW5naW5l LCBDQ0lEKSk7Cj4gPiA+ICAJaWYgKEhBU19FWEVDTElTVFMoZGV2X3ByaXYpKSB7Cj4gPiA+ICAJ CWRybV9wcmludGYobSwgIlx0RUxfU1RBVF9ISTogMHglMDh4XG4iLAo+ID4gPiBAQCAtMTQ0OSwx MyArMTQ0OSwxMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfcHJpbnRfcmVnaXN0ZXJzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiA+ID4gIAlkcm1fcHJpbnRmKG0sICJcdFJJ TkdfQ1RMOiAgIDB4JTA4eCVzXG4iLAo+ID4gPiAgCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJ TkdfQ1RMKSwKPiA+ID4gIAkJICAgRU5HSU5FX1JFQUQoZW5naW5lLCBSSU5HX0NUTCkgJiAoUklO R19XQUlUIHwgUklOR19XQUlUX1NFTUFQSE9SRSkgPyAiIFt3YWl0aW5nXSIgOiAiIik7Cj4gPiA+ IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID4gMikgewo+ID4gPiArCWlmIChHUkFQSElD U19WRVIoZW5naW5lLT5pOTE1KSA+IDIpIHsKPiA+ID4gIAkJZHJtX3ByaW50ZihtLCAiXHRSSU5H X01PREU6ICAweCUwOHglc1xuIiwKPiA+ID4gIAkJCSAgIEVOR0lORV9SRUFEKGVuZ2luZSwgUklO R19NSV9NT0RFKSwKPiA+ID4gIAkJCSAgIEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19NSV9NT0RF KSAmIChNT0RFX0lETEUpID8gIiBbaWRsZV0iIDogIiIpOwo+ID4gPiAgCX0KPiA+ID4gCj4gPiA+ IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikgewo+ID4gPiArCWlmIChHUkFQSElDU19W RVIoZGV2X3ByaXYpID49IDYpIHsKPiA+ID4gIAkJZHJtX3ByaW50ZihtLCAiXHRSSU5HX0lNUjog ICAweCUwOHhcbiIsCj4gPiA+ICAJCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdfSU1SKSk7 Cj4gPiA+ICAJCWRybV9wcmludGYobSwgIlx0UklOR19FU1I6ICAgMHglMDh4XG4iLAo+ID4gPiBA QCAtMTQ3MiwxNSArMTQ3MiwxNSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfcHJpbnRfcmVn aXN0ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiA+ID4gIAlhZGRyID0gaW50 ZWxfZW5naW5lX2dldF9sYXN0X2JhdGNoX2hlYWQoZW5naW5lKTsKPiA+ID4gIAlkcm1fcHJpbnRm KG0sICJcdEJCQUREUjogMHglMDh4XyUwOHhcbiIsCj4gPiA+ICAJCSAgIHVwcGVyXzMyX2JpdHMo YWRkciksIGxvd2VyXzMyX2JpdHMoYWRkcikpOwo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDgpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihkZXZfcHJpdikgPj0gOCkKPiA+ID4g IAkJYWRkciA9IEVOR0lORV9SRUFENjQoZW5naW5lLCBSSU5HX0RNQV9GQURELCBSSU5HX0RNQV9G QUREX1VEVyk7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQo+ID4g PiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihkZXZfcHJpdikgPj0gNCkKPiA+ID4gIAkJYWRkciA9 IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19ETUFfRkFERCk7Cj4gPiA+ICAJZWxzZQo+ID4gPiAg CQlhZGRyID0gRU5HSU5FX1JFQUQoZW5naW5lLCBETUFfRkFERF9JOFhYKTsKPiA+ID4gIAlkcm1f cHJpbnRmKG0sICJcdERNQV9GQUREUjogMHglMDh4XyUwOHhcbiIsCj4gPiA+ICAJCSAgIHVwcGVy XzMyX2JpdHMoYWRkciksIGxvd2VyXzMyX2JpdHMoYWRkcikpOwo+ID4gPiAtCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDQpIHsKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGRldl9wcml2KSA+ PSA0KSB7Cj4gPiA+ICAJCWRybV9wcmludGYobSwgIlx0SVBFSVI6IDB4JTA4eFxuIiwKPiA+ID4g IAkJCSAgIEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19JUEVJUikpOwo+ID4gPiAgCQlkcm1fcHJp bnRmKG0sICJcdElQRUhSOiAweCUwOHhcbiIsCj4gPiA+IEBAIC0xNTU5LDcgKzE1NTksNyBAQCBz dGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfcHJpbnRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiA+ID4gIAkJfQo+ID4gPiAgCQlyY3VfcmVhZF91bmxvY2soKTsKPiA+ ID4gIAkJZXhlY2xpc3RzX2FjdGl2ZV91bmxvY2tfYmgoZXhlY2xpc3RzKTsKPiA+ID4gLQl9IGVs c2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPiA2KSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQ SElDU19WRVIoZGV2X3ByaXYpID4gNikgewo+ID4gPiAgCQlkcm1fcHJpbnRmKG0sICJcdFBQX0RJ Ul9CQVNFOiAweCUwOHhcbiIsCj4gPiA+ICAJCQkgICBFTkdJTkVfUkVBRChlbmdpbmUsIFJJTkdf UFBfRElSX0JBU0UpKTsKPiA+ID4gIAkJZHJtX3ByaW50ZihtLCAiXHRQUF9ESVJfQkFTRV9SRUFE OiAweCUwOHhcbiIsCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+ID4gPiBpbmRleCA4ZGIyMDA0MjI5NTAuLmZjNzc1 OTJkODhhOSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jCj4gPiA+IEBAIC0xODQ3LDcgKzE4NDcsNyBA QCBwcm9jZXNzX2NzYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1 X3JlcXVlc3QgKippbmFjdGl2ZSkKPiA+ID4gIAkJRU5HSU5FX1RSQUNFKGVuZ2luZSwgImNzYlsl ZF06IHN0YXR1cz0weCUwOHg6MHglMDh4XG4iLAo+ID4gPiAgCQkJICAgICBoZWFkLCB1cHBlcl8z Ml9iaXRzKGNzYiksIGxvd2VyXzMyX2JpdHMoY3NiKSk7Cj4gPiA+IAo+ID4gPiAtCQlpZiAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gPiA+ICsJCWlmIChHUkFQSElDU19WRVIoZW5n aW5lLT5pOTE1KSA+PSAxMikKPiA+ID4gIAkJCXByb21vdGUgPSBnZW4xMl9jc2JfcGFyc2UoY3Ni KTsKPiA+ID4gIAkJZWxzZQo+ID4gPiAgCQkJcHJvbW90ZSA9IGdlbjhfY3NiX3BhcnNlKGNzYik7 Cj4gPiA+IEBAIC0yNzcyLDcgKzI3NzIsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfZXhlY2xpc3Rz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gCj4gPiA+ICAJaW50ZWxfZW5n aW5lX3NldF9od3NwX3dyaXRlbWFzayhlbmdpbmUsIH4wdSk7IC8qIEhXU1RBTSAqLwo+ID4gPiAK PiA+ID4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4gPiA+ICsJaWYgKEdS QVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDExKQo+ID4gPiAgCQltb2RlID0gX01BU0tFRF9C SVRfRU5BQkxFKEdFTjExX0dGWF9ESVNBQkxFX0xFR0FDWV9NT0RFKTsKPiA+ID4gIAllbHNlCj4g PiA+ICAJCW1vZGUgPSBfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1JVTl9MSVNUX0VOQUJMRSk7Cj4g PiA+IEBAIC0zMTAzLDcgKzMxMDMsNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfcGFyayhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+IAo+ID4gPiAgc3RhdGljIGJvb2wgY2Fu X3ByZWVtcHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgewo+ID4gPiAt CWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+IDgpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZF UihlbmdpbmUtPmk5MTUpID4gOCkKPiA+ID4gIAkJcmV0dXJuIHRydWU7Cj4gPiA+IAo+ID4gPiAg CS8qIEdQR1BVIG9uIGJkdyByZXF1aXJlcyBleHRyYSB3L2E7IG5vdCBpbXBsZW1lbnRlZCAqLwo+ ID4gPiBAQCAtMzE1NiwxMyArMzE1NiwxMyBAQCBsb2dpY2FsX3JpbmdfZGVmYXVsdF92ZnVuY3Mo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgCWVuZ2luZS0+ZW1pdF9mbHVz aCA9IGdlbjhfZW1pdF9mbHVzaF94Y3M7Cj4gPiA+ICAJZW5naW5lLT5lbWl0X2luaXRfYnJlYWRj cnVtYiA9IGdlbjhfZW1pdF9pbml0X2JyZWFkY3J1bWI7Cj4gPiA+ICAJZW5naW5lLT5lbWl0X2Zp bmlfYnJlYWRjcnVtYiA9IGdlbjhfZW1pdF9maW5pX2JyZWFkY3J1bWJfeGNzOwo+ID4gPiAtCWlm IChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikgewo+ID4gPiArCWlmIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSA+PSAxMikgewo+ID4gPiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVh ZGNydW1iID0gZ2VuMTJfZW1pdF9maW5pX2JyZWFkY3J1bWJfeGNzOwo+ID4gPiAgCQllbmdpbmUt PmVtaXRfZmx1c2ggPSBnZW4xMl9lbWl0X2ZsdXNoX3hjczsKPiA+ID4gIAl9Cj4gPiA+ICAJZW5n aW5lLT5zZXRfZGVmYXVsdF9zdWJtaXNzaW9uID0gZXhlY2xpc3RzX3NldF9kZWZhdWx0X3N1Ym1p c3Npb247Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDExKSB7 Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpIDwgMTEpIHsKPiA+ID4gIAkJ ZW5naW5lLT5pcnFfZW5hYmxlID0gZ2VuOF9sb2dpY2FsX3JpbmdfZW5hYmxlX2lycTsKPiA+ID4g IAkJZW5naW5lLT5pcnFfZGlzYWJsZSA9IGdlbjhfbG9naWNhbF9yaW5nX2Rpc2FibGVfaXJxOwo+ ID4gPiAgCX0gZWxzZSB7Cj4gPiA+IEBAIC0zMTk1LDcgKzMxOTUsNyBAQCBzdGF0aWMgdm9pZCBs b2dpY2FsX3JpbmdfZGVmYXVsdF9pcnFzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiA+ID4gIHsKPiA+ID4gIAl1bnNpZ25lZCBpbnQgc2hpZnQgPSAwOwo+ID4gPiAKPiA+ID4gLQlp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCAxMSkgewo+ID4gPiArCWlmIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSA8IDExKSB7Cj4gPiA+ICAJCWNvbnN0IHU4IGlycV9zaGlmdHNbXSA9 IHsKPiA+ID4gIAkJCVtSQ1MwXSAgPSBHRU44X1JDU19JUlFfU0hJRlQsCj4gPiA+ICAJCQlbQkNT MF0gID0gR0VOOF9CQ1NfSVJRX1NISUZULAo+ID4gPiBAQCAtMzIxNSw3ICszMjE1LDcgQEAgc3Rh dGljIHZvaWQgbG9naWNhbF9yaW5nX2RlZmF1bHRfaXJxcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gPiA+IAo+ID4gPiAgc3RhdGljIHZvaWQgcmNzX3N1Ym1pc3Npb25fb3ZlcnJp ZGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgewo+ID4gPiAtCXN3aXRj aCAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKPiA+ID4gKwlzd2l0Y2ggKEdSQVBISUNTX1ZF UihlbmdpbmUtPmk5MTUpKSB7Cj4gPiA+ICAJY2FzZSAxMjoKPiA+ID4gIAkJZW5naW5lLT5lbWl0 X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF9yY3M7Cj4gPiA+ICAJCWVuZ2luZS0+ZW1pdF9maW5p X2JyZWFkY3J1bWIgPSBnZW4xMl9lbWl0X2ZpbmlfYnJlYWRjcnVtYl9yY3M7Cj4gPiA+IEBAIC0z MjY2LDEzICszMjY2LDEzIEBAIGludCBpbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbl9zZXR1cChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJZXhlY2xpc3RzLT5jc2Jfd3Jp dGUgPQo+ID4gPiAgCQkmZW5naW5lLT5zdGF0dXNfcGFnZS5hZGRyW2ludGVsX2h3c19jc2Jfd3Jp dGVfaW5kZXgoaTkxNSldOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgMTEp Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDExKQo+ID4gPiAgCQlleGVjbGlzdHMt PmNzYl9zaXplID0gR0VOOF9DU0JfRU5UUklFUzsKPiA+ID4gIAllbHNlCj4gPiA+ICAJCWV4ZWNs aXN0cy0+Y3NiX3NpemUgPSBHRU4xMV9DU0JfRU5UUklFUzsKPiA+ID4gCj4gPiA+ICAJZW5naW5l LT5jb250ZXh0X3RhZyA9IEdFTk1BU0soQklUU19QRVJfTE9ORyAtIDIsIDApOwo+ID4gPiAtCWlm IChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMSkgewo+ID4gPiArCWlmIChHUkFQSElDU19W RVIoZW5naW5lLT5pOTE1KSA+PSAxMSkgewo+ID4gPiAgCQlleGVjbGlzdHMtPmNjaWQgfD0gZW5n aW5lLT5pbnN0YW5jZSA8PCAoR0VOMTFfRU5HSU5FX0lOU1RBTkNFX1NISUZUIC0gMzIpOwo+ID4g PiAgCQlleGVjbGlzdHMtPmNjaWQgfD0gZW5naW5lLT5jbGFzcyA8PCAoR0VOMTFfRU5HSU5FX0NM QVNTX1NISUZUIC0gMzIpOwo+ID4gPiAgCX0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2dndHQuYwo+ID4gPiBpbmRleCAzNTA2OWNhNWQ3ZGUuLjE5YmQ4ODU2Y2U4NCAxMDA2NDQKPiA+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dC5jCj4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dndHQuYwo+ID4gPiBAQCAtMTA3LDEwICsx MDcsMTAgQEAgc3RhdGljIGJvb2wgbmVlZHNfaWRsZV9tYXBzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQo+ID4gPiAgCWlmICghaW50ZWxfdnRkX2FjdGl2ZSgpKQo+ID4gPiAgCQlyZXR1 cm4gZmFsc2U7Cj4gPiA+IAo+ID4gPiAtCWlmIChJU19HRU4oaTkxNSwgNSkgJiYgSVNfTU9CSUxF KGk5MTUpKQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNSAmJiBJU19NT0JJTEUo aTkxNSkpCj4gPiA+ICAJCXJldHVybiB0cnVlOwo+ID4gPiAKPiA+ID4gLQlpZiAoSVNfR0VOKGk5 MTUsIDEyKSkKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDEyKQo+ID4gPiAgCQly ZXR1cm4gdHJ1ZTsgLyogWFhYIERNQVIgZmF1bHQgcmVhc29uIDcgKi8KPiA+ID4gCj4gPiA+ICAJ cmV0dXJuIGZhbHNlOwo+ID4gPiBAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGd1Y19n Z3R0X2ludmFsaWRhdGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiA+ID4gCj4gPiA+ICAJZ2Vu OF9nZ3R0X2ludmFsaWRhdGUoZ2d0dCk7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oaTkx NSkgPj0gMTIpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKPiA+ID4gIAkJ aW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VOMTJfR1VDX1RMQl9JTlZfQ1IsCj4gPiA+ ICAJCQkJICAgICAgR0VOMTJfR1VDX1RMQl9JTlZfQ1JfSU5WQUxJREFURSk7Cj4gPiA+ICAJZWxz ZQo+ID4gPiBAQCAtODIwLDcgKzgyMCw3IEBAIHN0YXRpYyBpbnQgZ2d0dF9wcm9iZV9jb21tb24o c3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwgdTY0IHNpemUpCj4gPiA+ICAJICogcmVzb3J0IHRvIGFu IHVuY2FjaGVkIG1hcHBpbmcuIFRoZSBXQyBpc3N1ZSBpcyBlYXNpbHkgY2F1Z2h0IGJ5IHRoZQo+ ID4gPiAgCSAqIHJlYWRiYWNrIGNoZWNrIHdoZW4gd3JpdGluZyBHVFQgUFRFIGVudHJpZXMuCj4g PiA+ICAJICovCj4gPiA+IC0JaWYgKElTX0dFTjlfTFAoaTkxNSkgfHwgSU5URUxfR0VOKGk5MTUp ID49IDEwKQo+ID4gPiArCWlmIChJU19HRU45X0xQKGk5MTUpIHx8IEdSQVBISUNTX1ZFUihpOTE1 KSA+PSAxMCkKPiA+ID4gIAkJZ2d0dC0+Z3NtID0gaW9yZW1hcChwaHlzX2FkZHIsIHNpemUpOwo+ ID4gPiAgCWVsc2UKPiA+ID4gIAkJZ2d0dC0+Z3NtID0gaW9yZW1hcF93YyhwaHlzX2FkZHIsIHNp emUpOwo+ID4gPiBAQCAtMTA2NSw3ICsxMDY1LDcgQEAgc3RhdGljIGludCBnZW42X2dtY2hfcHJv YmUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiA+ID4gIAkJZ2d0dC0+dm0ucHRlX2VuY29kZSA9 IGhzd19wdGVfZW5jb2RlOwo+ID4gPiAgCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4g PiA+ICAJCWdndHQtPnZtLnB0ZV9lbmNvZGUgPSBieXRfcHRlX2VuY29kZTsKPiA+ID4gLQllbHNl IGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNykKPiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19WRVIo aTkxNSkgPj0gNykKPiA+ID4gIAkJZ2d0dC0+dm0ucHRlX2VuY29kZSA9IGl2Yl9wdGVfZW5jb2Rl Owo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJZ2d0dC0+dm0ucHRlX2VuY29kZSA9IHNuYl9wdGVfZW5j b2RlOwo+ID4gPiBAQCAtMTEzNyw5ICsxMTM3LDkgQEAgc3RhdGljIGludCBnZ3R0X3Byb2JlX2h3 KHN0cnVjdCBpOTE1X2dndHQgKmdndHQsIHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gPiA+ICAJZ2d0 dC0+dm0uZG1hID0gaTkxNS0+ZHJtLmRldjsKPiA+ID4gIAlkbWFfcmVzdl9pbml0KCZnZ3R0LT52 bS5yZXN2KTsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8PSA1KQo+ID4gPiAr CWlmIChHUkFQSElDU19WRVIoaTkxNSkgPD0gNSkKPiA+ID4gIAkJcmV0ID0gaTkxNV9nbWNoX3By b2JlKGdndHQpOwo+ID4gPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA8IDgpCj4gPiA+ICsJ ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgOCkKPiA+ID4gIAkJcmV0ID0gZ2VuNl9nbWNo X3Byb2JlKGdndHQpOwo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJcmV0ID0gZ2VuOF9nbWNoX3Byb2Jl KGdndHQpOwo+ID4gPiBAQCAtMTE5Niw3ICsxMTk2LDcgQEAgaW50IGk5MTVfZ2d0dF9wcm9iZV9o dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiA+ID4gCj4gPiA+ICBpbnQgaTkxNV9n Z3R0X2VuYWJsZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiA+ID4gIHsKPiA+ ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNiAmJiAhaW50ZWxfZW5hYmxlX2d0dCgpKQo+ID4g PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPCA2ICYmICFpbnRlbF9lbmFibGVfZ3R0KCkpCj4g PiA+ICAJCXJldHVybiAtRUlPOwo+ID4gPiAKPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gQEAgLTEy NjEsNyArMTI2MSw3IEBAIHZvaWQgaTkxNV9nZ3R0X3Jlc3VtZShzdHJ1Y3QgaTkxNV9nZ3R0ICpn Z3R0KQo+ID4gPiAgCWlmIChmbHVzaCkKPiA+ID4gIAkJd2JpbnZkX29uX2FsbF9jcHVzKCk7Cj4g PiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZ2d0dC0+dm0uaTkxNSkgPj0gOCkKPiA+ID4gKwlp ZiAoR1JBUEhJQ1NfVkVSKGdndHQtPnZtLmk5MTUpID49IDgpCj4gPiA+ICAJCXNldHVwX3ByaXZh dGVfcGF0KGdndHQtPnZtLmd0LT51bmNvcmUpOwo+ID4gPiAKPiA+ID4gIAlpbnRlbF9nZ3R0X3Jl c3RvcmVfZmVuY2VzKGdndHQpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ2d0dF9mZW5jaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9nZ3R0X2ZlbmNpbmcuYwo+ID4gPiBpbmRleCA3YmY4NGNkMjE1NDMuLmNhYzdmM2Y0NDY0MiAx MDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dF9mZW5j aW5nLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ2d0dF9mZW5j aW5nLmMKPiA+ID4gQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgaTk2NV93cml0ZV9mZW5j ZV9yZWcoc3RydWN0IGk5MTVfZmVuY2VfcmVnICpmZW5jZSkKPiA+ID4gIAlpbnQgZmVuY2VfcGl0 Y2hfc2hpZnQ7Cj4gPiA+ICAJdTY0IHZhbDsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihm ZW5jZV90b19pOTE1KGZlbmNlKSkgPj0gNikgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZmVu Y2VfdG9faTkxNShmZW5jZSkpID49IDYpIHsKPiA+ID4gIAkJZmVuY2VfcmVnX2xvID0gRkVOQ0Vf UkVHX0dFTjZfTE8oZmVuY2UtPmlkKTsKPiA+ID4gIAkJZmVuY2VfcmVnX2hpID0gRkVOQ0VfUkVH X0dFTjZfSEkoZmVuY2UtPmlkKTsKPiA+ID4gIAkJZmVuY2VfcGl0Y2hfc2hpZnQgPSBHRU42X0ZF TkNFX1BJVENIX1NISUZUOwo+ID4gPiBAQCAtMTczLDkgKzE3Myw5IEBAIHN0YXRpYyB2b2lkIGZl bmNlX3dyaXRlKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UpCj4gPiA+ICAJICogYW5kIGV4 cGxpY2l0bHkgbWFuYWdlZCBmb3IgaW50ZXJuYWwgdXNlcnMuCj4gPiA+ICAJICovCj4gPiA+IAo+ ID4gPiAtCWlmIChJU19HRU4oaTkxNSwgMikpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA9PSAyKQo+ID4gPiAgCQlpODMwX3dyaXRlX2ZlbmNlX3JlZyhmZW5jZSk7Cj4gPiA+IC0JZWxz ZSBpZiAoSVNfR0VOKGk5MTUsIDMpKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA9PSAzKQo+ID4gPiAgCQlpOTE1X3dyaXRlX2ZlbmNlX3JlZyhmZW5jZSk7Cj4gPiA+ICAJZWxz ZQo+ID4gPiAgCQlpOTY1X3dyaXRlX2ZlbmNlX3JlZyhmZW5jZSk7Cj4gPiA+IEBAIC0xODgsNyAr MTg4LDcgQEAgc3RhdGljIHZvaWQgZmVuY2Vfd3JpdGUoc3RydWN0IGk5MTVfZmVuY2VfcmVnICpm ZW5jZSkKPiA+ID4gCj4gPiA+ICBzdGF0aWMgYm9vbCBncHVfdXNlc19mZW5jZV9yZWdpc3RlcnMo c3RydWN0IGk5MTVfZmVuY2VfcmVnICpmZW5jZSkKPiA+ID4gIHsKPiA+ID4gLQlyZXR1cm4gSU5U RUxfR0VOKGZlbmNlX3RvX2k5MTUoZmVuY2UpKSA8IDQ7Cj4gPiA+ICsJcmV0dXJuIEdSQVBISUNT X1ZFUihmZW5jZV90b19pOTE1KGZlbmNlKSkgPCA0Owo+ID4gPiAgfQo+ID4gPiAKPiA+ID4gIHN0 YXRpYyBpbnQgZmVuY2VfdXBkYXRlKHN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2UsCj4gPiA+ IEBAIC01NjksNyArNTY5LDcgQEAgc3RhdGljIHZvaWQgZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3Ry dWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiA+ID4gIAl1MzIgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9T V0laWkxFX1VOS05PV047Cj4gPiA+ICAJdTMyIHN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpM RV9VTktOT1dOOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDggfHwgSVNf VkFMTEVZVklFVyhpOTE1KSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCB8 fCBJU19WQUxMRVlWSUVXKGk5MTUpKSB7Cj4gPiA+ICAJCS8qCj4gPiA+ICAJCSAqIE9uIEJEVyss IHN3aXp6bGluZyBpcyBub3QgdXNlZC4gV2UgbGVhdmUgdGhlIENQVSBtZW1vcnkKPiA+ID4gIAkJ ICogY29udHJvbGxlciBpbiBjaGFyZ2Ugb2Ygb3B0aW1pemluZyBtZW1vcnkgYWNjZXNzZXMgd2l0 aG91dAo+ID4gPiBAQCAtNTc5LDcgKzU3OSw3IEBAIHN0YXRpYyB2b2lkIGRldGVjdF9iaXRfNl9z d2l6emxlKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gPiA+ICAJCSAqLwo+ID4gPiAgCQlzd2l6 emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKPiA+ID4gIAkJc3dpenpsZV95ID0gSTkx NV9CSVRfNl9TV0laWkxFX05PTkU7Cj4gPiA+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gNikgewo+ID4gPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKPiA+ ID4gIAkJaWYgKGk5MTUtPnByZXNlcnZlX2Jpb3Nfc3dpenpsZSkgewo+ID4gPiAgCQkJaWYgKGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRElTUF9BUkJfQ1RMKSAmCj4gPiA+ICAJCQkgICAgRElT UF9USUxFX1NVUkZBQ0VfU1dJWlpMSU5HKSB7Cj4gPiA+IEBAIC02MTEsMTQgKzYxMSwxNCBAQCBz dGF0aWMgdm9pZCBkZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ ID4gPiAgCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwo+ID4gPiAgCQkJ fQo+ID4gPiAgCQl9Cj4gPiA+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgNSkpIHsKPiA+ID4g Kwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA1KSB7Cj4gPiA+ICAJCS8qCj4gPiA+ ICAJCSAqIE9uIElyb25sYWtlIHdoYXRldmVyIERSQU0gY29uZmlnLCBHUFUgYWx3YXlzIGRvCj4g PiA+ICAJCSAqIHNhbWUgc3dpenpsaW5nIHNldHVwLgo+ID4gPiAgCQkgKi8KPiA+ID4gIAkJc3dp enpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTA7Cj4gPiA+ICAJCXN3aXp6bGVfeSA9IEk5 MTVfQklUXzZfU1dJWlpMRV85Owo+ID4gPiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDIpKSB7 Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gMikgewo+ID4gPiAgCQkv Kgo+ID4gPiAgCQkgKiBBcyBmYXIgYXMgd2Uga25vdywgdGhlIDg2NSBkb2Vzbid0IGhhdmUgdGhl c2UgYml0IDYKPiA+ID4gIAkJICogc3dpenpsaW5nIGlzc3Vlcy4KPiA+ID4gQEAgLTY5Nyw3ICs2 OTcsNyBAQCBzdGF0aWMgdm9pZCBkZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgaTkxNV9nZ3R0 ICpnZ3R0KQo+ID4gPiAgCQl9Cj4gPiA+IAo+ID4gPiAgCQkvKiBjaGVjayBmb3IgTC1zaGFwZWQg bWVtb3J5IGFrYSBtb2RpZmllZCBlbmhhbmNlZCBhZGRyZXNzaW5nICovCj4gPiA+IC0JCWlmIChJ U19HRU4oaTkxNSwgNCkgJiYKPiA+ID4gKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA0ICYm Cj4gPiA+ICAJCSAgICAhKGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRENDMikgJiBEQ0MyX01P RElGSUVEX0VOSEFOQ0VEX0RJU0FCTEUpKSB7Cj4gPiA+ICAJCQlzd2l6emxlX3ggPSBJOTE1X0JJ VF82X1NXSVpaTEVfVU5LTk9XTjsKPiA+ID4gIAkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJ WlpMRV9VTktOT1dOOwo+ID4gPiBAQCAtODQ0LDEwICs4NDQsMTAgQEAgdm9pZCBpbnRlbF9nZ3R0 X2luaXRfZmVuY2VzKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gPiA+IAo+ID4gPiAgCWlmICgh aTkxNV9nZ3R0X2hhc19hcGVydHVyZShnZ3R0KSkKPiA+ID4gIAkJbnVtX2ZlbmNlcyA9IDA7Cj4g PiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDcgJiYKPiA+ID4gKwllbHNlIGlmIChH UkFQSElDU19WRVIoaTkxNSkgPj0gNyAmJgo+ID4gPiAgCQkgIShJU19WQUxMRVlWSUVXKGk5MTUp IHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpKQo+ID4gPiAgCQludW1fZmVuY2VzID0gMzI7Cj4gPiA+ IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDQgfHwKPiA+ID4gKwllbHNlIGlmIChHUkFQ SElDU19WRVIoaTkxNSkgPj0gNCB8fAo+ID4gPiAgCQkgSVNfSTk0NUcoaTkxNSkgfHwgSVNfSTk0 NUdNKGk5MTUpIHx8Cj4gPiA+ICAJCSBJU19HMzMoaTkxNSkgfHwgSVNfUElORVZJRVcoaTkxNSkp Cj4gPiA+ICAJCW51bV9mZW5jZXMgPSAxNjsKPiA+ID4gQEAgLTg5NSwyOSArODk1LDI5IEBAIHZv aWQgaW50ZWxfZ3RfaW5pdF9zd2l6emxpbmcoc3RydWN0IGludGVsX2d0ICpndCkKPiA+ID4gIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1Owo+ID4gPiAgCXN0cnVjdCBp bnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRF TF9HRU4oaTkxNSkgPCA1IHx8Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDUgfHwK PiA+ID4gIAkgICAgaTkxNS0+Z2d0dC5iaXRfNl9zd2l6emxlX3ggPT0gSTkxNV9CSVRfNl9TV0la WkxFX05PTkUpCj4gPiA+ICAJCXJldHVybjsKPiA+ID4gCj4gPiA+ICAJaW50ZWxfdW5jb3JlX3Jt dyh1bmNvcmUsIERJU1BfQVJCX0NUTCwgMCwgRElTUF9USUxFX1NVUkZBQ0VfU1dJWlpMSU5HKTsK PiA+ID4gCj4gPiA+IC0JaWYgKElTX0dFTihpOTE1LCA1KSkKPiA+ID4gKwlpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID09IDUpCj4gPiA+ICAJCXJldHVybjsKPiA+ID4gCj4gPiA+ICAJaW50ZWxfdW5j b3JlX3Jtdyh1bmNvcmUsIFRJTEVDVEwsIDAsIFRJTEVDVExfU1daQ1RMKTsKPiA+ID4gCj4gPiA+ IC0JaWYgKElTX0dFTihpOTE1LCA2KSkKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09 IDYpCj4gPiA+ICAJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCj4gPiA+ICAJCQkJICAgQVJC X01PREUsCj4gPiA+ICAJCQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKEFSQl9NT0RFX1NXSVpaTEVf U05CKSk7Cj4gPiA+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDcpKQo+ID4gPiArCWVsc2UgaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA9PSA3KQo+ID4gPiAgCQlpbnRlbF91bmNvcmVfd3JpdGUodW5j b3JlLAo+ID4gPiAgCQkJCSAgIEFSQl9NT0RFLAo+ID4gPiAgCQkJCSAgIF9NQVNLRURfQklUX0VO QUJMRShBUkJfTU9ERV9TV0laWkxFX0lWQikpOwo+ID4gPiAtCWVsc2UgaWYgKElTX0dFTihpOTE1 LCA4KSkKPiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOCkKPiA+ID4gIAkJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKPiA+ID4gIAkJCQkgICBHQU1UQVJCTU9ERSwKPiA+ ID4gIAkJCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoQVJCX01PREVfU1dJWlpMRV9CRFcpKTsKPiA+ ID4gIAllbHNlCj4gPiA+IC0JCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oaTkxNSkpOwo+ID4gPiAr CQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVSKGk5MTUpKTsKPiA+ID4gIH0KPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4gPiA+IGluZGV4IDhkNzdkY2JhZDA1OS4uN2YyNDMwMWNl ZjE4IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5j Cj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKPiA+ID4gQEAg LTExNSwxMCArMTE1LDEwIEBAIHN0YXRpYyB2b2lkIGluaXRfdW51c2VkX3JpbmdzKHN0cnVjdCBp bnRlbF9ndCAqZ3QpCj4gPiA+ICAJCWluaXRfdW51c2VkX3JpbmcoZ3QsIFNSQjFfQkFTRSk7Cj4g PiA+ICAJCWluaXRfdW51c2VkX3JpbmcoZ3QsIFNSQjJfQkFTRSk7Cj4gPiA+ICAJCWluaXRfdW51 c2VkX3JpbmcoZ3QsIFNSQjNfQkFTRSk7Cj4gPiA+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwg MikpIHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAyKSB7Cj4gPiA+ ICAJCWluaXRfdW51c2VkX3JpbmcoZ3QsIFNSQjBfQkFTRSk7Cj4gPiA+ICAJCWluaXRfdW51c2Vk X3JpbmcoZ3QsIFNSQjFfQkFTRSk7Cj4gPiA+IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgMykp IHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSAzKSB7Cj4gPiA+ICAJ CWluaXRfdW51c2VkX3JpbmcoZ3QsIFBSQjFfQkFTRSk7Cj4gPiA+ICAJCWluaXRfdW51c2VkX3Jp bmcoZ3QsIFBSQjJfQkFTRSk7Cj4gPiA+ICAJfQo+ID4gPiBAQCAtMTM1LDcgKzEzNSw3IEBAIGlu dCBpbnRlbF9ndF9pbml0X2h3KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gPiA+ICAJLyogRG91Ymxl IGxheWVyIHNlY3VyaXR5IGJsYW5rZXQsIHNlZSBpOTE1X2dlbV9pbml0KCkgKi8KPiA+ID4gIAlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ID4gPiAK PiA+ID4gLQlpZiAoSEFTX0VEUkFNKGk5MTUpICYmIElOVEVMX0dFTihpOTE1KSA8IDkpCj4gPiA+ ICsJaWYgKEhBU19FRFJBTShpOTE1KSAmJiBHUkFQSElDU19WRVIoaTkxNSkgPCA5KQo+ID4gPiAg CQlpbnRlbF91bmNvcmVfcm13KHVuY29yZSwgSFNXX0lESUNSLCAwLCBJRElIQVNITVNLKDB4Zikp Owo+ID4gPiAKPiA+ID4gIAlpZiAoSVNfSEFTV0VMTChpOTE1KSkKPiA+ID4gQEAgLTIwOCwxMCAr MjA4LDEwIEBAIGludGVsX2d0X2NsZWFyX2Vycm9yX3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0LAo+ID4gPiAgCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7Cj4g PiA+ICAJdTMyIGVpcjsKPiA+ID4gCj4gPiA+IC0JaWYgKCFJU19HRU4oaTkxNSwgMikpCj4gPiA+ ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSAhPSAyKQo+ID4gPiAgCQljbGVhcl9yZWdpc3Rlcih1 bmNvcmUsIFBHVEJMX0VSKTsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA8IDQp Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8IDQpCj4gPiA+ICAJCWNsZWFyX3JlZ2lz dGVyKHVuY29yZSwgSVBFSVIoUkVOREVSX1JJTkdfQkFTRSkpOwo+ID4gPiAgCWVsc2UKPiA+ID4g IAkJY2xlYXJfcmVnaXN0ZXIodW5jb3JlLCBJUEVJUl9JOTY1KTsKPiA+ID4gQEAgLTIyOSwxMyAr MjI5LDEzIEBAIGludGVsX2d0X2NsZWFyX2Vycm9yX3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0LAo+ID4gPiAgCQkJCSAgIEk5MTVfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVCk7Cj4gPiA+ICAJ fQo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKSB7Cj4gPiA+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikgewo+ID4gPiAgCQlybXdfY2xlYXIodW5jb3JlLCBH RU4xMl9SSU5HX0ZBVUxUX1JFRywgUklOR19GQVVMVF9WQUxJRCk7Cj4gPiA+ICAJCWludGVsX3Vu Y29yZV9wb3N0aW5nX3JlYWQodW5jb3JlLCBHRU4xMl9SSU5HX0ZBVUxUX1JFRyk7Cj4gPiA+IC0J fSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgewo+ID4gPiArCX0gZWxzZSBpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID49IDgpIHsKPiA+ID4gIAkJcm13X2NsZWFyKHVuY29yZSwgR0VOOF9S SU5HX0ZBVUxUX1JFRywgUklOR19GQVVMVF9WQUxJRCk7Cj4gPiA+ICAJCWludGVsX3VuY29yZV9w b3N0aW5nX3JlYWQodW5jb3JlLCBHRU44X1JJTkdfRkFVTFRfUkVHKTsKPiA+ID4gLQl9IGVsc2Ug aWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQSElDU19W RVIoaTkxNSkgPj0gNikgewo+ID4gPiAgCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7 Cj4gPiA+ICAJCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ID4gPiAKPiA+ID4gQEAgLTI3Myw3 ICsyNzMsNyBAQCBzdGF0aWMgdm9pZCBnZW44X2NoZWNrX2ZhdWx0cyhzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQo+ID4gPiAgCWk5MTVfcmVnX3QgZmF1bHRfcmVnLCBmYXVsdF9kYXRhMF9yZWcsIGZhdWx0 X2RhdGExX3JlZzsKPiA+ID4gIAl1MzIgZmF1bHQ7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9H RU4oZ3QtPmk5MTUpID49IDEyKSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkg Pj0gMTIpIHsKPiA+ID4gIAkJZmF1bHRfcmVnID0gR0VOMTJfUklOR19GQVVMVF9SRUc7Cj4gPiA+ ICAJCWZhdWx0X2RhdGEwX3JlZyA9IEdFTjEyX0ZBVUxUX1RMQl9EQVRBMDsKPiA+ID4gIAkJZmF1 bHRfZGF0YTFfcmVnID0gR0VOMTJfRkFVTFRfVExCX0RBVEExOwo+ID4gPiBAQCAtMzEzLDkgKzMx Myw5IEBAIHZvaWQgaW50ZWxfZ3RfY2hlY2tfYW5kX2NsZWFyX2ZhdWx0cyhzdHJ1Y3QgaW50ZWxf Z3QgKmd0KQo+ID4gPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7 Cj4gPiA+IAo+ID4gPiAgCS8qIEZyb20gR0VOOCBvbndhcmRzIHdlIG9ubHkgaGF2ZSBvbmUgJ0Fs bCBFbmdpbmUgRmF1bHQgUmVnaXN0ZXInICovCj4gPiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+ PSA4KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOCkKPiA+ID4gIAkJZ2VuOF9j aGVja19mYXVsdHMoZ3QpOwo+ID4gPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+ ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+ID4gPiAgCQlnZW42X2No ZWNrX2ZhdWx0cyhndCk7Cj4gPiA+ICAJZWxzZQo+ID4gPiAgCQlyZXR1cm47Cj4gPiA+IEBAIC0z NjcsNyArMzY3LDcgQEAgdm9pZCBpbnRlbF9ndF9mbHVzaF9nZ3R0X3dyaXRlcyhzdHJ1Y3QgaW50 ZWxfZ3QgKmd0KQo+ID4gPiAgdm9pZCBpbnRlbF9ndF9jaGlwc2V0X2ZsdXNoKHN0cnVjdCBpbnRl bF9ndCAqZ3QpCj4gPiA+ICB7Cj4gPiA+ICAJd21iKCk7Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihn dC0+aTkxNSkgPCA2KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgNikKPiA+ ID4gIAkJaW50ZWxfZ3R0X2NoaXBzZXRfZmx1c2goKTsKPiA+ID4gIH0KPiA+ID4gCj4gPiA+IEBA IC01OTEsNyArNTkxLDggQEAgaW50IGludGVsX2d0X2luaXQoc3RydWN0IGludGVsX2d0ICpndCkK PiA+ID4gIAkgKi8KPiA+ID4gIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChndC0+dW5jb3Jl LCBGT1JDRVdBS0VfQUxMKTsKPiA+ID4gCj4gPiA+IC0JZXJyID0gaW50ZWxfZ3RfaW5pdF9zY3Jh dGNoKGd0LCBJU19HRU4oZ3QtPmk5MTUsIDIpID8gU1pfMjU2SyA6IFNaXzRLKTsKPiA+ID4gKwll cnIgPSBpbnRlbF9ndF9pbml0X3NjcmF0Y2goZ3QsCj4gPiA+ICsJCQkJICAgIEdSQVBISUNTX1ZF UihndC0+aTkxNSkgPT0gMiA/IFNaXzI1NksgOiBTWl80Syk7Cj4gPiA+ICAJaWYgKGVycikKPiA+ ID4gIAkJZ290byBvdXRfZnc7Cj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfY2xvY2tfdXRpbHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2d0X2Nsb2NrX3V0aWxzLmMKPiA+ID4gaW5kZXggNTgyZmNhZWUxMWFhLi45ZjBl NzI5ZDJkMTUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X2Nsb2NrX3V0aWxzLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3RfY2xvY2tfdXRpbHMuYwo+ID4gPiBAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgdTMyIHJl YWRfY2xvY2tfZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPiA+ID4gIAl1 MzIgZjE5XzJfbWh6ID0gMTkyMDAwMDA7Cj4gPiA+ICAJdTMyIGYyNF9taHogPSAyNDAwMDAwMDsK PiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTih1bmNvcmUtPmk5MTUpIDw9IDQpIHsKPiA+ID4g KwlpZiAoR1JBUEhJQ1NfVkVSKHVuY29yZS0+aTkxNSkgPD0gNCkgewo+ID4gPiAgCQkvKgo+ID4g PiAgCQkgKiBQUk1zIHNheToKPiA+ID4gIAkJICoKPiA+ID4gQEAgLTg1LDcgKzg1LDcgQEAgc3Rh dGljIHUzMiByZWFkX2Nsb2NrX2ZyZXF1ZW5jeShzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUp Cj4gPiA+ICAJCSAqICAgICAgKOKAnENMS0NGR+KAnSkgTUNIQkFSIHJlZ2lzdGVyKQo+ID4gPiAg CQkgKi8KPiA+ID4gIAkJcmV0dXJuIFJVTlRJTUVfSU5GTyh1bmNvcmUtPmk5MTUpLT5yYXdjbGtf ZnJlcSAqIDEwMDAgLyAxNjsKPiA+ID4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTih1bmNvcmUtPmk5 MTUpIDw9IDgpIHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUih1bmNvcmUtPmk5MTUp IDw9IDgpIHsKPiA+ID4gIAkJLyoKPiA+ID4gIAkJICogUFJNcyBzYXk6Cj4gPiA+ICAJCSAqCj4g PiA+IEBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyB1MzIgcmVhZF9jbG9ja19mcmVxdWVuY3koc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQo+ID4gPiAgCQkgKiAgICAgIHJvbGxpbmcgb3ZlciBl dmVyeSAxLjUgaG91cnMpLgo+ID4gPiAgCQkgKi8KPiA+ID4gIAkJcmV0dXJuIGYxMl81X21oejsK PiA+ID4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTih1bmNvcmUtPmk5MTUpIDw9IDkpIHsKPiA+ID4g Kwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUih1bmNvcmUtPmk5MTUpIDw9IDkpIHsKPiA+ID4gIAkJ dTMyIGN0Y19yZWcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIENUQ19NT0RFKTsKPiA+ID4g IAkJdTMyIGZyZXEgPSAwOwo+ID4gPiAKPiA+ID4gQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMg dTMyIHJlYWRfY2xvY2tfZnJlcXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPiA+ ID4gIAkJfQo+ID4gPiAKPiA+ID4gIAkJcmV0dXJuIGZyZXE7Cj4gPiA+IC0JfSBlbHNlIGlmIChJ TlRFTF9HRU4odW5jb3JlLT5pOTE1KSA8PSAxMikgewo+ID4gPiArCX0gZWxzZSBpZiAoR1JBUEhJ Q1NfVkVSKHVuY29yZS0+aTkxNSkgPD0gMTIpIHsKPiA+ID4gIAkJdTMyIGN0Y19yZWcgPSBpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIENUQ19NT0RFKTsKPiA+ID4gIAkJdTMyIGZyZXEgPSAwOwo+ ID4gPiAKPiA+ID4gQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgdTMyIHJlYWRfY2xvY2tfZnJl cXVlbmN5KHN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSkKPiA+ID4gIAkJfSBlbHNlIHsKPiA+ ID4gIAkJCXUzMiBjMCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUlBNX0NPTkZJRzApOwo+ ID4gPiAKPiA+ID4gLQkJCWlmIChJTlRFTF9HRU4odW5jb3JlLT5pOTE1KSA8PSAxMCkKPiA+ID4g KwkJCWlmIChHUkFQSElDU19WRVIodW5jb3JlLT5pOTE1KSA8PSAxMCkKPiA+ID4gIAkJCQlmcmVx ID0gZ2VuMTBfZ2V0X2NyeXN0YWxfY2xvY2tfZnJlcSh1bmNvcmUsIGMwKTsKPiA+ID4gIAkJCWVs c2UKPiA+ID4gIAkJCQlmcmVxID0gZ2VuMTFfZ2V0X2NyeXN0YWxfY2xvY2tfZnJlcSh1bmNvcmUs IGMwKTsKPiA+ID4gQEAgLTIxMSw3ICsyMTEsNyBAQCB1NjQgaW50ZWxfZ3RfbnNfdG9fcG1faW50 ZXJ2YWwoY29uc3Qgc3RydWN0IGludGVsX2d0ICpndCwgdTY0IG5zKQo+ID4gPiAgCSAqIGZyb3pl biBtYWNoaW5lLgo+ID4gPiAgCSAqLwo+ID4gPiAgCXZhbCA9IGRpdl91NjRfcm91bmR1cChpbnRl bF9ndF9uc190b19jbG9ja19pbnRlcnZhbChndCwgbnMpLCAxNik7Cj4gPiA+IC0JaWYgKElTX0dF TihndC0+aTkxNSwgNikpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNikK PiA+ID4gIAkJdmFsID0gZGl2X3U2NF9yb3VuZHVwKHZhbCwgMjUpICogMjU7Cj4gPiA+IAo+ID4g PiAgCXJldHVybiB2YWw7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9ndF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5j Cj4gPiA+IGluZGV4IGQyOTEyNmM0NThiYS4uMWVjNjNjY2VhYmY2IDEwMDY0NAo+ID4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwo+ID4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwo+ID4gPiBAQCAtMzk1LDcgKzM5NSw3 IEBAIHZvaWQgZ2VuNV9ndF9pcnFfcmVzZXQoc3RydWN0IGludGVsX2d0ICpndCkKPiA+ID4gIAlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwo+ID4gPiAKPiA+ID4gIAlH RU4zX0lSUV9SRVNFVCh1bmNvcmUsIEdUKTsKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1 KSA+PSA2KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDYpCj4gPiA+ICAJ CUdFTjNfSVJRX1JFU0VUKHVuY29yZSwgR0VONl9QTSk7Cj4gPiA+ICB9Cj4gPiA+IAo+ID4gPiBA QCAtNDEzLDE0ICs0MTMsMTQgQEAgdm9pZCBnZW41X2d0X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3Qg aW50ZWxfZ3QgKmd0KQo+ID4gPiAgCX0KPiA+ID4gCj4gPiA+ICAJZ3RfaXJxcyB8PSBHVF9SRU5E RVJfVVNFUl9JTlRFUlJVUFQ7Cj4gPiA+IC0JaWYgKElTX0dFTihndC0+aTkxNSwgNSkpCj4gPiA+ ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNSkKPiA+ID4gIAkJZ3RfaXJxcyB8PSBJ TEtfQlNEX1VTRVJfSU5URVJSVVBUOwo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJZ3RfaXJxcyB8PSBH VF9CTFRfVVNFUl9JTlRFUlJVUFQgfCBHVF9CU0RfVVNFUl9JTlRFUlJVUFQ7Cj4gPiA+IAo+ID4g PiAgCUdFTjNfSVJRX0lOSVQodW5jb3JlLCBHVCwgZ3QtPmd0X2ltciwgZ3RfaXJxcyk7Cj4gPiA+ IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDYpIHsKPiA+ID4gKwlpZiAoR1JB UEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSA2KSB7Cj4gPiA+ICAJCS8qCj4gPiA+ICAJCSAqIFJQUyBp bnRlcnJ1cHRzIHdpbGwgZ2V0IGVuYWJsZWQvZGlzYWJsZWQgb24gZGVtYW5kIHdoZW4gUlBTCj4g PiA+ICAJCSAqIGl0c2VsZiBpcyBlbmFibGVkL2Rpc2FibGVkLgo+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG1faXJxLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndF9wbV9pcnEuYwo+ID4gPiBpbmRleCA4MTFhMTFlZDE4MWMuLmZl NTFmODk0YjA3MyAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3RfcG1faXJxLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf Z3RfcG1faXJxLmMKPiA+ID4gQEAgLTE2LDEwICsxNiwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9w bV9pbXIoc3RydWN0IGludGVsX2d0ICpndCkKPiA+ID4gIAl1MzIgbWFzayA9IGd0LT5wbV9pbXI7 Cj4gPiA+ICAJaTkxNV9yZWdfdCByZWc7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oaTkx NSkgPj0gMTEpIHsKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKSB7Cj4gPiA+ ICAJCXJlZyA9IEdFTjExX0dQTV9XR0JPWFBFUkZfSU5UUl9NQVNLOwo+ID4gPiAgCQltYXNrIDw8 PSAxNjsgLyogcG0gaXMgaW4gdXBwZXIgaGFsZiAqLwo+ID4gPiAtCX0gZWxzZSBpZiAoSU5URUxf R0VOKGk5MTUpID49IDgpIHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+ PSA4KSB7Cj4gPiA+ICAJCXJlZyA9IEdFTjhfR1RfSU1SKDIpOwo+ID4gPiAgCX0gZWxzZSB7Cj4g PiA+ICAJCXJlZyA9IEdFTjZfUE1JTVI7Cj4gPiA+IEBAIC02MSw3ICs2MSw3IEBAIHZvaWQgZ2Vu Nl9ndF9wbV9tYXNrX2lycShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFzaykKPiA+ID4gIHZv aWQgZ2VuNl9ndF9wbV9yZXNldF9paXIoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIHJlc2V0X21h c2spCj4gPiA+ICB7Cj4gPiA+ICAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVu Y29yZTsKPiA+ID4gLQlpOTE1X3JlZ190IHJlZyA9IElOVEVMX0dFTihndC0+aTkxNSkgPj0gOCA/ IEdFTjhfR1RfSUlSKDIpIDogR0VONl9QTUlJUjsKPiA+ID4gKwlpOTE1X3JlZ190IHJlZyA9IEdS QVBISUNTX1ZFUihndC0+aTkxNSkgPj0gOCA/IEdFTjhfR1RfSUlSKDIpIDogR0VONl9QTUlJUjsK PiA+ID4gCj4gPiA+ICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ3QtPmlycV9sb2NrKTsKPiA+ID4g Cj4gPiA+IEBAIC03NywxMCArNzcsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVfcG1faWVyKHN0cnVj dCBpbnRlbF9ndCAqZ3QpCj4gPiA+ICAJdTMyIG1hc2sgPSBndC0+cG1faWVyOwo+ID4gPiAgCWk5 MTVfcmVnX3QgcmVnOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7 Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+ID4gPiAgCQlyZWcgPSBH RU4xMV9HUE1fV0dCT1hQRVJGX0lOVFJfRU5BQkxFOwo+ID4gPiAgCQltYXNrIDw8PSAxNjsgLyog cG0gaXMgaW4gdXBwZXIgaGFsZiAqLwo+ID4gPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUp ID49IDgpIHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KSB7Cj4g PiA+ICAJCXJlZyA9IEdFTjhfR1RfSUVSKDIpOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ICAJCXJl ZyA9IEdFTjZfUE1JRVI7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0dC5jCj4gPiA+ IGluZGV4IDliOThmOWQ5ZmFhMy4uYjljOTk5MzU3M2VjIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndHQuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndHQuYwo+ID4gPiBAQCAtMzI3LDcgKzMyNyw3IEBAIHZvaWQgZ3R0 X3dyaXRlX3dvcmthcm91bmRzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gPiA+ICAJCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsCj4gPiA+ICAJCQkJICAgR0VOOF9MM19MUkFfMV9HUEdQVSwKPiA+ ID4gIAkJCQkgICBHRU45X0wzX0xSQV8xX0dQR1BVX0RFRkFVTFRfVkFMVUVfQlhUKTsKPiA+ID4g LQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSAmJiBJTlRFTF9HRU4oaTkxNSkgPD0gMTEp Cj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkgJiYgR1JBUEhJQ1NfVkVS KGk5MTUpIDw9IDExKQo+ID4gPiAgCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAo+ID4gPiAg CQkJCSAgIEdFTjhfTDNfTFJBXzFfR1BHUFUsCj4gPiA+ICAJCQkJICAgR0VOOV9MM19MUkFfMV9H UEdQVV9ERUZBVUxUX1ZBTFVFX1NLTCk7Cj4gPiA+IEBAIC0zNDQsMTMgKzM0NCwxMyBAQCB2b2lk IGd0dF93cml0ZV93b3JrYXJvdW5kcyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ID4gPiAgCSAqIGRy aXZlci4KPiA+ID4gIAkgKi8KPiA+ID4gIAlpZiAoSEFTX1BBR0VfU0laRVMoaTkxNSwgSTkxNV9H VFRfUEFHRV9TSVpFXzY0SykgJiYKPiA+ID4gLQkgICAgSU5URUxfR0VOKGk5MTUpIDw9IDEwKQo+ ID4gPiArCSAgICBHUkFQSElDU19WRVIoaTkxNSkgPD0gMTApCj4gPiA+ICAJCWludGVsX3VuY29y ZV9ybXcodW5jb3JlLAo+ID4gPiAgCQkJCSBHRU44X0dBTVdfRUNPX0RFVl9SV19JQSwKPiA+ID4g IAkJCQkgMCwKPiA+ID4gIAkJCQkgR0FNV19FQ09fRU5BQkxFXzY0S19JUFNfRklFTEQpOwo+ID4g PiAKPiA+ID4gLQlpZiAoSVNfR0VOX1JBTkdFKGk5MTUsIDgsIDExKSkgewo+ID4gPiArCWlmIChJ U19HUkFQSElDU19WRVIoaTkxNSwgOCwgMTEpKSB7Cj4gPiA+ICAJCWJvb2wgY2FuX3VzZV9ndHRf Y2FjaGUgPSB0cnVlOwo+ID4gPiAKPiA+ID4gIAkJLyoKPiA+ID4gQEAgLTQzMiw3ICs0MzIsNyBA QCBzdGF0aWMgdm9pZCBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF91bmNvcmUg KnVuY29yZSkKPiA+ID4gIAkgICAgICBHRU44X1BQQVQoNywgR0VOOF9QUEFUX1dCIHwgR0VOOF9Q UEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMpKTsKPiA+ID4gCj4gPiA+ICAJLyogZm9yIHNj YW5vdXQgd2l0aCBlTExDICovCj4gPiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQo+ID4g PiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkKPiA+ID4gIAkJcGF0IHw9IEdFTjhfUFBB VCgyLCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfRUxMQ19PVkVSUklERSk7Cj4gPiA+ICAJZWxz ZQo+ID4gPiAgCQlwYXQgfD0gR0VOOF9QUEFUKDIsIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBBVF9M TENFTExDKTsKPiA+ID4gQEAgLTQ4MSwxMSArNDgxLDExIEBAIHZvaWQgc2V0dXBfcHJpdmF0ZV9w YXQoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdW5jb3JlLT5pOTE1Owo+ID4gPiAKPiA+ID4gLQlHRU1f QlVHX09OKElOVEVMX0dFTihpOTE1KSA8IDgpOwo+ID4gPiArCUdFTV9CVUdfT04oR1JBUEhJQ1Nf VkVSKGk5MTUpIDwgOCk7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIp Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKPiA+ID4gIAkJdGdsX3NldHVw X3ByaXZhdGVfcHBhdCh1bmNvcmUpOwo+ID4gPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+ PSAxMCkKPiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTApCj4gPiA+ICAJ CWNubF9zZXR1cF9wcml2YXRlX3BwYXQodW5jb3JlKTsKPiA+ID4gIAllbHNlIGlmIChJU19DSEVS UllWSUVXKGk5MTUpIHx8IElTX0dFTjlfTFAoaTkxNSkpCj4gPiA+ICAJCWNodl9zZXR1cF9wcml2 YXRlX3BwYXQodW5jb3JlKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2xsYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMKPiA+ ID4gaW5kZXggMDc1ZDc0MTY0NGFlLi5lYjFhMTVkZWVkMjIgMTAwNjQ0Cj4gPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xsYy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2xsYy5jCj4gPiA+IEBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBi b29sIGdldF9pYV9jb25zdGFudHMoc3RydWN0IGludGVsX2xsYyAqbGxjLAo+ID4gPiAKPiA+ID4g IAljb25zdHMtPm1pbl9ncHVfZnJlcSA9IHJwcy0+bWluX2ZyZXE7Cj4gPiA+ICAJY29uc3RzLT5t YXhfZ3B1X2ZyZXEgPSBycHMtPm1heF9mcmVxOwo+ID4gPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gOSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkgewo+ID4gPiAgCQkv KiBDb252ZXJ0IEdUIGZyZXF1ZW5jeSB0byA1MCBIWiB1bml0cyAqLwo+ID4gPiAgCQljb25zdHMt Pm1pbl9ncHVfZnJlcSAvPSBHRU45X0ZSRVFfU0NBTEVSOwo+ID4gPiAgCQljb25zdHMtPm1heF9n cHVfZnJlcSAvPSBHRU45X0ZSRVFfU0NBTEVSOwo+ID4gPiBAQCAtODMsMTMgKzgzLDEzIEBAIHN0 YXRpYyB2b2lkIGNhbGNfaWFfZnJlcShzdHJ1Y3QgaW50ZWxfbGxjICpsbGMsCj4gPiA+ICAJY29u c3QgaW50IGRpZmYgPSBjb25zdHMtPm1heF9ncHVfZnJlcSAtIGdwdV9mcmVxOwo+ID4gPiAgCXVu c2lnbmVkIGludCBpYV9mcmVxID0gMCwgcmluZ19mcmVxID0gMDsKPiA+ID4gCj4gPiA+IC0JaWYg KElOVEVMX0dFTihpOTE1KSA+PSA5KSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+ PSA5KSB7Cj4gPiA+ICAJCS8qCj4gPiA+ICAJCSAqIHJpbmdfZnJlcSA9IDIgKiBHVC4gcmluZ19m cmVxIGlzIGluIDEwME1IeiB1bml0cwo+ID4gPiAgCQkgKiBObyBmbG9vciByZXF1aXJlZCBmb3Ig cmluZyBmcmVxdWVuY3kgb24gU0tMLgo+ID4gPiAgCQkgKi8KPiA+ID4gIAkJcmluZ19mcmVxID0g Z3B1X2ZyZXE7Cj4gPiA+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgewo+ID4g PiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpIHsKPiA+ID4gIAkJLyogbWF4 KDIgKiBHVCwgRERSKS4gTkI6IEdUIGlzIDUwTUh6IHVuaXRzICovCj4gPiA+ICAJCXJpbmdfZnJl cSA9IG1heChjb25zdHMtPm1pbl9yaW5nX2ZyZXEsIGdwdV9mcmVxKTsKPiA+ID4gIAl9IGVsc2Ug aWYgKElTX0hBU1dFTEwoaTkxNSkpIHsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJj LmMKPiA+ID4gaW5kZXggYWFmZTJhNGRmNDk2Li5hMjdiYWMwYTRiZmIgMTAwNjQ0Cj4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gPiA+IEBAIC00Nyw3ICs0Nyw3IEBAIHN0 YXRpYyB2b2lkIHNldF9vZmZzZXRzKHUzMiAqcmVncywKPiA+ID4gIAkJKnJlZ3MgPSBNSV9MT0FE X1JFR0lTVEVSX0lNTShjb3VudCk7Cj4gPiA+ICAJCWlmIChmbGFncyAmIFBPU1RFRCkKPiA+ID4g IAkJCSpyZWdzIHw9IE1JX0xSSV9GT1JDRV9QT1NURUQ7Cj4gPiA+IC0JCWlmIChJTlRFTF9HRU4o ZW5naW5lLT5pOTE1KSA+PSAxMSkKPiA+ID4gKwkJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5 MTUpID49IDExKQo+ID4gPiAgCQkJKnJlZ3MgfD0gTUlfTFJJX0xSTV9DU19NTUlPOwo+ID4gPiAg CQlyZWdzKys7Cj4gPiA+IAo+ID4gPiBAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdm9pZCBzZXRf b2Zmc2V0cyh1MzIgKnJlZ3MsCj4gPiA+ICAJaWYgKGNsb3NlKSB7Cj4gPiA+ICAJCS8qIENsb3Nl IHRoZSBiYXRjaDsgdXNlZCBtYWlubHkgYnkgbGl2ZV9scmNfbGF5b3V0KCkgKi8KPiA+ID4gIAkJ KnJlZ3MgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ID4gPiAtCQlpZiAoSU5URUxfR0VOKGVuZ2lu ZS0+aTkxNSkgPj0gMTApCj4gPiA+ICsJCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+ PSAxMCkKPiA+ID4gIAkJCSpyZWdzIHw9IEJJVCgwKTsKPiA+ID4gIAl9Cj4gPiA+ICB9Cj4gPiA+ IEBAIC00OTgsMjIgKzQ5OCwyMiBAQCBzdGF0aWMgY29uc3QgdTggKnJlZ19vZmZzZXRzKGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIAkgKiBhZGRyZXNzaW5nIHRv IGF1dG9tYXRpYyBmaXh1cCB0aGUgcmVnaXN0ZXIgc3RhdGUgYmV0d2VlbiB0aGUKPiA+ID4gIAkg KiBwaHlzaWNhbCBlbmdpbmVzIGZvciB2aXJ0dWFsIGVuZ2luZS4KPiA+ID4gIAkgKi8KPiA+ID4g LQlHRU1fQlVHX09OKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyICYmCj4gPiA+ICsJR0VN X0JVR19PTihHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMiAmJgo+ID4gPiAgCQkgICAh aW50ZWxfZW5naW5lX2hhc19yZWxhdGl2ZV9tbWlvKGVuZ2luZSkpOwo+ID4gPiAKPiA+ID4gIAlp ZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpIHsKPiA+ID4gLQkJaWYgKElOVEVMX0dF TihlbmdpbmUtPmk5MTUpID49IDEyKQo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkgPj0gMTIpCj4gPiA+ICAJCQlyZXR1cm4gZ2VuMTJfcmNzX29mZnNldHM7Cj4gPiA+IC0J CWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDExKQo+ID4gPiArCQllbHNlIGlm IChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMSkKPiA+ID4gIAkJCXJldHVybiBnZW4x MV9yY3Nfb2Zmc2V0czsKPiA+ID4gLQkJZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkg Pj0gOSkKPiA+ID4gKwkJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gOSkK PiA+ID4gIAkJCXJldHVybiBnZW45X3Jjc19vZmZzZXRzOwo+ID4gPiAgCQllbHNlCj4gPiA+ICAJ CQlyZXR1cm4gZ2VuOF9yY3Nfb2Zmc2V0czsKPiA+ID4gIAl9IGVsc2Ugewo+ID4gPiAtCQlpZiAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gPiA+ICsJCWlmIChHUkFQSElDU19WRVIo ZW5naW5lLT5pOTE1KSA+PSAxMikKPiA+ID4gIAkJCXJldHVybiBnZW4xMl94Y3Nfb2Zmc2V0czsK PiA+ID4gLQkJZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOSkKPiA+ID4gKwkJ ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gOSkKPiA+ID4gIAkJCXJldHVy biBnZW45X3hjc19vZmZzZXRzOwo+ID4gPiAgCQllbHNlCj4gPiA+ICAJCQlyZXR1cm4gZ2VuOF94 Y3Nfb2Zmc2V0czsKPiA+ID4gQEAgLTUyMiw5ICs1MjIsOSBAQCBzdGF0aWMgY29uc3QgdTggKnJl Z19vZmZzZXRzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gCj4g PiA+ICBzdGF0aWMgaW50IGxyY19yaW5nX21pX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+ID4gPiAgewo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1 KSA+PSAxMikKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4g PiA+ICAJCXJldHVybiAweDYwOwo+ID4gPiAtCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5 MTUpID49IDkpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0g OSkKPiA+ID4gIAkJcmV0dXJuIDB4NTQ7Cj4gPiA+ICAJZWxzZSBpZiAoZW5naW5lLT5jbGFzcyA9 PSBSRU5ERVJfQ0xBU1MpCj4gPiA+ICAJCXJldHVybiAweDU4Owo+ID4gPiBAQCAtNTM0LDkgKzUz NCw5IEBAIHN0YXRpYyBpbnQgbHJjX3JpbmdfbWlfbW9kZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gPiA+IAo+ID4gPiAgc3RhdGljIGludCBscmNfcmluZ19ncHIwKGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIHsKPiA+ID4gLQlpZiAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihl bmdpbmUtPmk5MTUpID49IDEyKQo+ID4gPiAgCQlyZXR1cm4gMHg3NDsKPiA+ID4gLQllbHNlIGlm IChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5KQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNT X1ZFUihlbmdpbmUtPmk5MTUpID49IDkpCj4gPiA+ICAJCXJldHVybiAweDY4Owo+ID4gPiAgCWVs c2UgaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQo+ID4gPiAgCQlyZXR1cm4gMHhk ODsKPiA+ID4gQEAgLTU0Niw5ICs1NDYsOSBAQCBzdGF0aWMgaW50IGxyY19yaW5nX2dwcjAoY29u c3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAKPiA+ID4gIHN0YXRpYyBp bnQgbHJjX3Jpbmdfd2FfYmJfcGVyX2N0eChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gPiA+ICB7Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEy KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSAxMikKPiA+ID4gIAkJ cmV0dXJuIDB4MTI7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0g OSB8fCBlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykKPiA+ID4gKwllbHNlIGlmIChHUkFQ SElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA5IHx8IGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NM QVNTKQo+ID4gPiAgCQlyZXR1cm4gMHgxODsKPiA+ID4gIAllbHNlCj4gPiA+ICAJCXJldHVybiAt MTsKPiA+ID4gQEAgLTU4MSw5ICs1ODEsOSBAQCBzdGF0aWMgaW50IGxyY19yaW5nX2NtZF9idWZf Y2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJaWYgKGVu Z2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQo+ID4gPiAgCQlyZXR1cm4gLTE7Cj4gPiA+IAo+ ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPiA+ID4gKwlpZiAoR1JB UEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gPiA+ICAJCXJldHVybiAweGI2Owo+ID4g PiAtCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDExKQo+ID4gPiArCWVsc2Ug aWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDExKQo+ID4gPiAgCQlyZXR1cm4gMHhh YTsKPiA+ID4gIAllbHNlCj4gPiA+ICAJCXJldHVybiAtMTsKPiA+ID4gQEAgLTU5Miw5ICs1OTIs OSBAQCBzdGF0aWMgaW50IGxyY19yaW5nX2NtZF9idWZfY2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICBzdGF0aWMgdTMyCj4gPiA+ICBscmNfcmluZ19pbmRp cmVjdF9vZmZzZXRfZGVmYXVsdChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gPiA+ICB7Cj4gPiA+IC0Jc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewo+ID4g PiArCXN3aXRjaCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpIHsKPiA+ID4gIAlkZWZhdWx0 Ogo+ID4gPiAtCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpOwo+ID4gPiAr CQlNSVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpOwo+ID4gPiAgCQlmYWxs dGhyb3VnaDsKPiA+ID4gIAljYXNlIDEyOgo+ID4gPiAgCQlyZXR1cm4gR0VOMTJfQ1RYX1JDU19J TkRJUkVDVF9DVFhfT0ZGU0VUX0RFRkFVTFQ7Cj4gPiA+IEBAIC02MzcsNyArNjM3LDcgQEAgc3Rh dGljIHZvaWQgaW5pdF9jb21tb25fcmVncyh1MzIgKiBjb25zdCByZWdzLAo+ID4gPiAgCWN0bCB8 PSBfTUFTS0VEX0JJVF9ESVNBQkxFKENUWF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklU KTsKPiA+ID4gIAlpZiAoaW5oaWJpdCkKPiA+ID4gIAkJY3RsIHw9IENUWF9DVFJMX0VOR0lORV9D VFhfUkVTVE9SRV9JTkhJQklUOwo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8 IDExKQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA8IDExKQo+ID4gPiAg CQljdGwgfD0gX01BU0tFRF9CSVRfRElTQUJMRShDVFhfQ1RSTF9FTkdJTkVfQ1RYX1NBVkVfSU5I SUJJVCB8Cj4gPiA+ICAJCQkJCSAgIENUWF9DVFJMX1JTX0NUWF9FTkFCTEUpOwo+ID4gPiAgCXJl Z3NbQ1RYX0NPTlRFWFRfQ09OVFJPTF0gPSBjdGw7Cj4gPiA+IEBAIC04MDUsNyArODA1LDcgQEAg X19scmNfYWxsb2Nfc3RhdGUoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X0RFQlVHX0dFTSkpCj4gPiA+ICAJCWNvbnRleHRfc2l6ZSArPSBJOTE1X0dUVF9QQUdFX1NJWkU7 IC8qIGZvciByZWR6b25lICovCj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5p OTE1KSA9PSAxMikgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSAx Mikgewo+ID4gPiAgCQljZS0+d2FfYmJfcGFnZSA9IGNvbnRleHRfc2l6ZSAvIFBBR0VfU0laRTsK PiA+ID4gIAkJY29udGV4dF9zaXplICs9IFBBR0VfU0laRTsKPiA+ID4gIAl9Cj4gPiA+IEBAIC0x MTE0LDcgKzExMTQsNyBAQCBzdGF0aWMgdTMyIGxyY19kZXNjcmlwdG9yKGNvbnN0IHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSkKPiA+ID4gIAlkZXNjIDw8PSBHRU44X0NUWF9BRERSRVNTSU5HX01P REVfU0hJRlQ7Cj4gPiA+IAo+ID4gPiAgCWRlc2MgfD0gR0VOOF9DVFhfVkFMSUQgfCBHRU44X0NU WF9QUklWSUxFR0U7Cj4gPiA+IC0JaWYgKElTX0dFTihjZS0+dm0tPmk5MTUsIDgpKQo+ID4gPiAr CWlmIChHUkFQSElDU19WRVIoY2UtPnZtLT5pOTE1KSA9PSA4KQo+ID4gPiAgCQlkZXNjIHw9IEdF TjhfQ1RYX0wzTExDX0NPSEVSRU5UOwo+ID4gPiAKPiA+ID4gIAlyZXR1cm4gaTkxNV9nZ3R0X29m ZnNldChjZS0+c3RhdGUpIHwgZGVzYzsKPiA+ID4gQEAgLTE0NjksNyArMTQ2OSw3IEBAIHZvaWQg bHJjX2luaXRfd2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIAlp ZiAoZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gPiA+ICAJCXJldHVybjsKPiA+ID4g Cj4gPiA+IC0Jc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewo+ID4gPiArCXN3aXRj aCAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpIHsKPiA+ID4gIAljYXNlIDEyOgo+ID4gPiAg CWNhc2UgMTE6Cj4gPiA+ICAJCXJldHVybjsKPiA+ID4gQEAgLTE0ODYsNyArMTQ4Niw3IEBAIHZv aWQgbHJjX2luaXRfd2FfY3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4g IAkJd2FfYmJfZm5bMV0gPSBOVUxMOwo+ID4gPiAgCQlicmVhazsKPiA+ID4gIAlkZWZhdWx0Ogo+ ID4gPiAtCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpOwo+ID4gPiArCQlN SVNTSU5HX0NBU0UoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkpOwo+ID4gPiAgCQlyZXR1cm47 Cj4gPiA+ICAJfQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX21vY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX21vY3MuYwo+ ID4gPiBpbmRleCBiMTQxMzhmZDUwNWMuLjE3ODQ4ODA3ZjExMSAxMDA2NDQKPiA+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbW9jcy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX21vY3MuYwo+ID4gPiBAQCAtMzQ0LDExICszNDQsMTEgQEAg c3RhdGljIHVuc2lnbmVkIGludCBnZXRfbW9jc19zZXR0aW5ncyhjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwKPiA+ID4gIAkJdGFibGUtPnNpemUgPSBBUlJBWV9TSVpFKGRnMV9t b2NzX3RhYmxlKTsKPiA+ID4gIAkJdGFibGUtPnRhYmxlID0gZGcxX21vY3NfdGFibGU7Cj4gPiA+ ICAJCXRhYmxlLT5uX2VudHJpZXMgPSBHRU45X05VTV9NT0NTX0VOVFJJRVM7Cj4gPiA+IC0JfSBl bHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIpIHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSAxMikgewo+ID4gPiAgCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpF KHRnbF9tb2NzX3RhYmxlKTsKPiA+ID4gIAkJdGFibGUtPnRhYmxlID0gdGdsX21vY3NfdGFibGU7 Cj4gPiA+ICAJCXRhYmxlLT5uX2VudHJpZXMgPSBHRU45X05VTV9NT0NTX0VOVFJJRVM7Cj4gPiA+ IC0JfSBlbHNlIGlmIChJU19HRU4oaTkxNSwgMTEpKSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQ SElDU19WRVIoaTkxNSkgPT0gMTEpIHsKPiA+ID4gIAkJdGFibGUtPnNpemUgID0gQVJSQVlfU0la RShpY2xfbW9jc190YWJsZSk7Cj4gPiA+ICAJCXRhYmxlLT50YWJsZSA9IGljbF9tb2NzX3RhYmxl Owo+ID4gPiAgCQl0YWJsZS0+bl9lbnRyaWVzID0gR0VOOV9OVU1fTU9DU19FTlRSSUVTOwo+ID4g PiBAQCAtMzYxLDcgKzM2MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X21vY3Nfc2V0dGlu Z3MoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gPiA+ICAJCXRhYmxlLT5u X2VudHJpZXMgPSBHRU45X05VTV9NT0NTX0VOVFJJRVM7Cj4gPiA+ICAJCXRhYmxlLT50YWJsZSA9 IGJyb3h0b25fbW9jc190YWJsZTsKPiA+ID4gIAl9IGVsc2Ugewo+ID4gPiAtCQlkcm1fV0FSTl9P TkNFKCZpOTE1LT5kcm0sIElOVEVMX0dFTihpOTE1KSA+PSA5LAo+ID4gPiArCQlkcm1fV0FSTl9P TkNFKCZpOTE1LT5kcm0sIEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5LAo+ID4gPiAgCQkJICAgICAg IlBsYXRmb3JtIHRoYXQgc2hvdWxkIGhhdmUgYSBNT0NTIHRhYmxlIGRvZXMgbm90LlxuIik7Cj4g PiA+ICAJCXJldHVybiAwOwo+ID4gPiAgCX0KPiA+ID4gQEAgLTM3MCw3ICszNzAsNyBAQCBzdGF0 aWMgdW5zaWduZWQgaW50IGdldF9tb2NzX3NldHRpbmdzKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LAo+ID4gPiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJLyogV2FEaXNh YmxlU2tpcENhY2hpbmc6c2tsLGJ4dCxrYmwsZ2xrICovCj4gPiA+IC0JaWYgKElTX0dFTihpOTE1 LCA5KSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOSkgewo+ID4gPiAgCQlp bnQgaTsKPiA+ID4gCj4gPiA+ICAJCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+c2l6ZTsgaSsrKQo+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcHBndHQuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3BwZ3R0LmMKPiA+ID4gaW5kZXggNGUzZDgw YzIyOTVjLi4zODkxYzA3ODkwNmUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3BwZ3R0LmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfcHBndHQuYwo+ID4gPiBAQCAtMTQ2LDkgKzE0Niw5IEBAIGludCBpOTE1X3BwZ3R0X2lu aXRfaHcoc3RydWN0IGludGVsX2d0ICpndCkKPiA+ID4gCj4gPiA+ICAJZ3R0X3dyaXRlX3dvcmth cm91bmRzKGd0KTsKPiA+ID4gCj4gPiA+IC0JaWYgKElTX0dFTihpOTE1LCA2KSkKPiA+ID4gKwlp ZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDYpCj4gPiA+ICAJCWdlbjZfcHBndHRfZW5hYmxlKGd0 KTsKPiA+ID4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgNykpCj4gPiA+ICsJZWxzZSBpZiAoR1JB UEhJQ1NfVkVSKGk5MTUpID09IDcpCj4gPiA+ICAJCWdlbjdfcHBndHRfZW5hYmxlKGd0KTsKPiA+ ID4gCj4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+IEBAIC0xNTcsNyArMTU3LDcgQEAgaW50IGk5MTVf cHBndHRfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ID4gPiAgc3RhdGljIHN0cnVjdCBp OTE1X3BwZ3R0ICoKPiA+ID4gIF9fcHBndHRfY3JlYXRlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4g PiA+ICB7Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KQo+ID4gPiArCWlmIChH UkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOCkKPiA+ID4gIAkJcmV0dXJuIGdlbjZfcHBndHRfY3Jl YXRlKGd0KTsKPiA+ID4gIAllbHNlCj4gPiA+ICAJCXJldHVybiBnZW44X3BwZ3R0X2NyZWF0ZShn dCk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yYzYu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JjNi5jCj4gPiA+IGluZGV4IDNiN2U2 MmRlYmU3ZS4uMjU5ZDdlYjRlMTY1IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9yYzYuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9yYzYuYwo+ID4gPiBAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyB2b2lkIGdlbjExX3Jj Nl9lbmFibGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQo+ID4gPiAgCQlHRU45X01FRElBX1BHX0VO QUJMRSB8Cj4gPiA+ICAJCUdFTjExX01FRElBX1NBTVBMRVJfUEdfRU5BQkxFOwo+ID4gPiAKPiA+ ID4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMikgewo+ID4gPiArCWlmIChHUkFQSElD U19WRVIoZ3QtPmk5MTUpID49IDEyKSB7Cj4gPiA+ICAJCWZvciAoaSA9IDA7IGkgPCBJOTE1X01B WF9WQ1M7IGkrKykKPiA+ID4gIAkJCWlmIChIQVNfRU5HSU5FKGd0LCBfVkNTKGkpKSkKPiA+ID4g IAkJCQlwZ19lbmFibGUgfD0gKFZETl9IQ1BfUE9XRVJHQVRFX0VOQUJMRShpKSB8Cj4gPiA+IEBA IC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIHZvaWQgZ2VuOV9yYzZfZW5hYmxlKHN0cnVjdCBpbnRl bF9yYzYgKnJjNikKPiA+ID4gIAllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiA+ID4gCj4gPiA+ ICAJLyogMmI6IFByb2dyYW0gUkM2IHRocmVzaG9sZHMuKi8KPiA+ID4gLQlpZiAoSU5URUxfR0VO KHJjNl90b19pOTE1KHJjNikpID49IDEwKSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihyYzZf dG9faTkxNShyYzYpKSA+PSAxMCkgewo+ID4gPiAgCQlzZXQodW5jb3JlLCBHRU42X1JDNl9XQUtF X1JBVEVfTElNSVQsIDU0IDw8IDE2IHwgODUpOwo+ID4gPiAgCQlzZXQodW5jb3JlLCBHRU4xMF9N RURJQV9XQUtFX1JBVEVfTElNSVQsIDE1MCk7Cj4gPiA+ICAJfSBlbHNlIGlmIChJU19TS1lMQUtF KHJjNl90b19pOTE1KHJjNikpKSB7Cj4gPiA+IEBAIC0yNDksOSArMjQ5LDkgQEAgc3RhdGljIHZv aWQgZ2VuNl9yYzZfZW5hYmxlKHN0cnVjdCBpbnRlbF9yYzYgKnJjNikKPiA+ID4gIAlyYzZ2aWRz ID0gMDsKPiA+ID4gIAlyZXQgPSBzYW5keWJyaWRnZV9wY29kZV9yZWFkKGk5MTUsIEdFTjZfUENP REVfUkVBRF9SQzZWSURTLAo+ID4gPiAgCQkJCSAgICAgJnJjNnZpZHMsIE5VTEwpOwo+ID4gPiAt CWlmIChJU19HRU4oaTkxNSwgNikgJiYgcmV0KSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA9PSA2ICYmIHJldCkgewo+ID4gPiAgCQlkcm1fZGJnKCZpOTE1LT5kcm0sICJDb3VsZG4n dCBjaGVjayBmb3IgQklPUyB3b3JrYXJvdW5kXG4iKTsKPiA+ID4gLQl9IGVsc2UgaWYgKElTX0dF TihpOTE1LCA2KSAmJgo+ID4gPiArCX0gZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDYg JiYKPiA+ID4gIAkJICAgKEdFTjZfREVDT0RFX1JDNl9WSUQocmM2dmlkcyAmIDB4ZmYpIDwgNDUw KSkgewo+ID4gPiAgCQlkcm1fZGJnKCZpOTE1LT5kcm0sCj4gPiA+ICAJCQkiWW91IHNob3VsZCB1 cGRhdGUgeW91ciBCSU9TLiBDb3JyZWN0aW5nIG1pbmltdW0gcmM2IHZvbHRhZ2UgKCVkbVYtPiVk bVYpXG4iLAo+ID4gPiBAQCAtNTE1LDcgKzUxNSw3IEBAIHN0YXRpYyB2b2lkIF9faW50ZWxfcmM2 X2Rpc2FibGUoc3RydWN0IGludGVsX3JjNiAqcmM2KQo+ID4gPiAgCXN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9IHJjNl90b191bmNvcmUocmM2KTsKPiA+ID4gCj4gPiA+ICAJaW50ZWxfdW5j b3JlX2ZvcmNld2FrZV9nZXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiA+ID4gLQlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDkpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQo+ ID4gPiAgCQlzZXQodW5jb3JlLCBHRU45X1BHX0VOQUJMRSwgMCk7Cj4gPiA+ICAJc2V0KHVuY29y ZSwgR0VONl9SQ19DT05UUk9MLCAwKTsKPiA+ID4gIAlzZXQodW5jb3JlLCBHRU42X1JDX1NUQVRF LCAwKTsKPiA+ID4gQEAgLTU3NSwxMyArNTc1LDEzIEBAIHZvaWQgaW50ZWxfcmM2X2VuYWJsZShz dHJ1Y3QgaW50ZWxfcmM2ICpyYzYpCj4gPiA+ICAJCWNodl9yYzZfZW5hYmxlKHJjNik7Cj4gPiA+ ICAJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKPiA+ID4gIAkJdmx2X3JjNl9lbmFibGUo cmM2KTsKPiA+ID4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpCj4gPiA+ICsJZWxz ZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKQo+ID4gPiAgCQlnZW4xMV9yYzZfZW5hYmxl KHJjNik7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4gPiA+ICsJZWxz ZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDkpCj4gPiA+ICAJCWdlbjlfcmM2X2VuYWJsZShy YzYpOwo+ID4gPiAgCWVsc2UgaWYgKElTX0JST0FEV0VMTChpOTE1KSkKPiA+ID4gIAkJZ2VuOF9y YzZfZW5hYmxlKHJjNik7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4g PiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4gPiA+ICAJCWdlbjZfcmM2 X2VuYWJsZShyYzYpOwo+ID4gPiAKPiA+ID4gIAlyYzYtPm1hbnVhbCA9IHJjNi0+Y3RsX2VuYWJs ZSAmIEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEU7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9yZW5kZXJzdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfcmVuZGVyc3RhdGUuYwo+ID4gPiBpbmRleCBiMDNlMTk3YjFkOTkuLmI1NzVjZDZl MGI3YSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVu ZGVyc3RhdGUuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZW5k ZXJzdGF0ZS5jCj4gPiA+IEBAIC0xNSw3ICsxNSw3IEBAIHJlbmRlcl9zdGF0ZV9nZXRfcm9kYXRh KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIAlpZiAoZW5naW5l LT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gPiA+ICAJCXJldHVybiBOVUxMOwo+ID4gPiAKPiA+ ID4gLQlzd2l0Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7Cj4gPiA+ICsJc3dpdGNoIChH UkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSkgewo+ID4gPiAgCWNhc2UgNjoKPiA+ID4gIAkJcmV0 dXJuICZnZW42X251bGxfc3RhdGU7Cj4gPiA+ICAJY2FzZSA3Ogo+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3Jlc2V0LmMKPiA+ID4gaW5kZXggZDUwOTRiZTZkOTBmLi4yNzMxNWQ3Zjg5 MzUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jlc2V0 LmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYwo+ID4g PiBAQCAtNTY1LDcgKzU2NSw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9yZXNldF9lbmdpbmVzKHN0cnVj dCBpbnRlbF9ndCAqZ3QsCj4gPiA+ICAJCSAqLwo+ID4gPiAgCX0KPiA+ID4gCj4gPiA+IC0JaWYg KElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+ aTkxNSkgPj0gMTEpCj4gPiA+ICAJCXJldCA9IGdlbjExX3Jlc2V0X2VuZ2luZXMoZ3QsIGVuZ2lu ZV9tYXNrLCByZXRyeSk7Cj4gPiA+ICAJZWxzZQo+ID4gPiAgCQlyZXQgPSBnZW42X3Jlc2V0X2Vu Z2luZXMoZ3QsIGVuZ2luZV9tYXNrLCByZXRyeSk7Cj4gPiA+IEBAIC01OTQsMTcgKzU5NCwxNyBA QCBzdGF0aWMgcmVzZXRfZnVuYyBpbnRlbF9nZXRfZ3B1X3Jlc2V0KGNvbnN0IHN0cnVjdCBpbnRl bF9ndCAqZ3QpCj4gPiA+IAo+ID4gPiAgCWlmIChpc19tb2NrX2d0KGd0KSkKPiA+ID4gIAkJcmV0 dXJuIG1vY2tfcmVzZXQ7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpCj4g PiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpCj4gPiA+ICAJCXJldHVybiBn ZW44X3Jlc2V0X2VuZ2luZXM7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYp Cj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4gPiA+ICAJCXJldHVy biBnZW42X3Jlc2V0X2VuZ2luZXM7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49 IDUpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDUpCj4gPiA+ICAJCXJl dHVybiBpbGtfZG9fcmVzZXQ7Cj4gPiA+ICAJZWxzZSBpZiAoSVNfRzRYKGk5MTUpKQo+ID4gPiAg CQlyZXR1cm4gZzR4X2RvX3Jlc2V0Owo+ID4gPiAgCWVsc2UgaWYgKElTX0czMyhpOTE1KSB8fCBJ U19QSU5FVklFVyhpOTE1KSkKPiA+ID4gIAkJcmV0dXJuIGczM19kb19yZXNldDsKPiA+ID4gLQll bHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMykKPiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19W RVIoaTkxNSkgPj0gMykKPiA+ID4gIAkJcmV0dXJuIGk5MTVfZG9fcmVzZXQ7Cj4gPiA+ICAJZWxz ZQo+ID4gPiAgCQlyZXR1cm4gTlVMTDsKPiA+ID4gQEAgLTY1Niw3ICs2NTYsNyBAQCBib29sIGlu dGVsX2hhc19yZXNldF9lbmdpbmUoY29uc3Qgc3RydWN0IGludGVsX2d0ICpndCkKPiA+ID4gIGlu dCBpbnRlbF9yZXNldF9ndWMoc3RydWN0IGludGVsX2d0ICpndCkKPiA+ID4gIHsKPiA+ID4gIAl1 MzIgZ3VjX2RvbWFpbiA9Cj4gPiA+IC0JCUlOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEgPyBHRU4x MV9HUkRPTV9HVUMgOiBHRU45X0dSRE9NX0dVQzsKPiA+ID4gKwkJR1JBUEhJQ1NfVkVSKGd0LT5p OTE1KSA+PSAxMSA/IEdFTjExX0dSRE9NX0dVQyA6IEdFTjlfR1JET01fR1VDOwo+ID4gPiAgCWlu dCByZXQ7Cj4gPiA+IAo+ID4gPiAgCUdFTV9CVUdfT04oIUhBU19HVF9VQyhndC0+aTkxNSkpOwo+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJt aXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24u Ywo+ID4gPiBpbmRleCAyYjZkZmZjYzIyNjIuLjBjNDIzZjA5NmUyYiAxMDA2NDQKPiA+ID4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMKPiA+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMKPiA+ ID4gQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIHZvaWQgc2V0X2h3c3RhbShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsIHUzMiBtYXNrKQo+ID4gPiAgCSAqIGxvc3QgaW50ZXJydXB0cyBm b2xsb3dpbmcgYSByZXNldC4KPiA+ID4gIAkgKi8KPiA+ID4gIAlpZiAoZW5naW5lLT5jbGFzcyA9 PSBSRU5ERVJfQ0xBU1MpIHsKPiA+ID4gLQkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49 IDYpCj4gPiA+ICsJCWlmIChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA2KQo+ID4gPiAg CQkJbWFzayAmPSB+QklUKDApOwo+ID4gPiAgCQllbHNlCj4gPiA+ICAJCQltYXNrICY9IH5JOTE1 X1VTRVJfSU5URVJSVVBUOwo+ID4gPiBAQCAtNDMsNyArNDMsNyBAQCBzdGF0aWMgdm9pZCBzZXRf aHdzX3BnYShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHBoeXNfYWRkcl90IHBoeXMp Cj4gPiA+ICAJdTMyIGFkZHI7Cj4gPiA+IAo+ID4gPiAgCWFkZHIgPSBsb3dlcl8zMl9iaXRzKHBo eXMpOwo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA0KQo+ID4gPiArCWlm IChHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA+PSA0KQo+ID4gPiAgCQlhZGRyIHw9IChwaHlz ID4+IDI4KSAmIDB4ZjA7Cj4gPiA+IAo+ID4gPiAgCWludGVsX3VuY29yZV93cml0ZShlbmdpbmUt PnVuY29yZSwgSFdTX1BHQSwgYWRkcik7Cj4gPiA+IEBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB2 b2lkIHNldF9od3NwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIG9mZnNldCkK PiA+ID4gIAkgKiBUaGUgcmluZyBzdGF0dXMgcGFnZSBhZGRyZXNzZXMgYXJlIG5vIGxvbmdlciBu ZXh0IHRvIHRoZSByZXN0IG9mCj4gPiA+ICAJICogdGhlIHJpbmcgcmVnaXN0ZXJzIGFzIG9mIGdl bjcuCj4gPiA+ICAJICovCj4gPiA+IC0JaWYgKElTX0dFTihlbmdpbmUtPmk5MTUsIDcpKSB7Cj4g PiA+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID09IDcpIHsKPiA+ID4gIAkJc3dp dGNoIChlbmdpbmUtPmlkKSB7Cj4gPiA+ICAJCS8qCj4gPiA+ICAJCSAqIE5vIG1vcmUgcmluZ3Mg ZXhpc3Qgb24gR2VuNy4gRGVmYXVsdCBjYXNlIGlzIG9ubHkgdG8gc2h1dCB1cAo+ID4gPiBAQCAt OTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRfaHdzcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIHUzMiBvZmZzZXQpCj4gPiA+ICAJCQlod3NwID0gVkVCT1hfSFdTX1BHQV9HRU43 Owo+ID4gPiAgCQkJYnJlYWs7Cj4gPiA+ICAJCX0KPiA+ID4gLQl9IGVsc2UgaWYgKElTX0dFTihl bmdpbmUtPmk5MTUsIDYpKSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoZW5naW5l LT5pOTE1KSA9PSA2KSB7Cj4gPiA+ICAJCWh3c3AgPSBSSU5HX0hXU19QR0FfR0VONihlbmdpbmUt Pm1taW9fYmFzZSk7Cj4gPiA+ICAJfSBlbHNlIHsKPiA+ID4gIAkJaHdzcCA9IFJJTkdfSFdTX1BH QShlbmdpbmUtPm1taW9fYmFzZSk7Cj4gPiA+IEBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIHZv aWQgc2V0X2h3c3Aoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgb2Zmc2V0KQo+ ID4gPiAKPiA+ID4gIHN0YXRpYyB2b2lkIGZsdXNoX2NzX3RsYihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gPiA+ICB7Cj4gPiA+IC0JaWYgKCFJU19HRU5fUkFOR0UoZW5naW5lLT5p OTE1LCA2LCA3KSkKPiA+ID4gKwlpZiAoIUlTX0dSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUsIDYs IDcpKQo+ID4gPiAgCQlyZXR1cm47Cj4gPiA+IAo+ID4gPiAgCS8qIHJpbmcgc2hvdWxkIGJlIGlk bGUgYmVmb3JlIGlzc3VpbmcgYSBzeW5jIGZsdXNoKi8KPiA+ID4gQEAgLTE1Myw3ICsxNTMsNyBA QCBzdGF0aWMgdm9pZCBzZXRfcHBfZGlyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiA+ID4gIAlFTkdJTkVfV1JJVEVfRlcoZW5naW5lLCBSSU5HX1BQX0RJUl9EQ0xWLCBQUF9ESVJf RENMVl8yRyk7Cj4gPiA+ICAJRU5HSU5FX1dSSVRFX0ZXKGVuZ2luZSwgUklOR19QUF9ESVJfQkFT RSwgcHBfZGlyKHZtKSk7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1 KSA+PSA3KSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDcpIHsK PiA+ID4gIAkJRU5HSU5FX1dSSVRFX0ZXKGVuZ2luZSwKPiA+ID4gIAkJCQlSSU5HX01PREVfR0VO NywKPiA+ID4gIAkJCQlfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX1BQR1RUX0VOQUJMRSkpOwo+ID4g PiBAQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyBpbnQgeGNzX3Jlc3VtZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJCQkJCSA1MDAwLCAwLCBOVUxMKSkKPiA+ID4gIAkJ Z290byBlcnI7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+IDIp Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID4gMikKPiA+ID4gIAkJRU5H SU5FX1dSSVRFX0ZXKGVuZ2luZSwKPiA+ID4gIAkJCQlSSU5HX01JX01PREUsIF9NQVNLRURfQklU X0RJU0FCTEUoU1RPUF9SSU5HKSk7Cj4gPiA+IAo+ID4gPiBAQCAtNjQ2LDkgKzY0Niw5IEBAIHN0 YXRpYyBpbnQgbWlfc2V0X2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gPiA+ICAJ dTMyICpjczsKPiA+ID4gCj4gPiA+ICAJbGVuID0gNDsKPiA+ID4gLQlpZiAoSVNfR0VOKGk5MTUs IDcpKQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykKPiA+ID4gIAkJbGVuICs9 IDIgKyAobnVtX2VuZ2luZXMgPyA0ICogbnVtX2VuZ2luZXMgKyA2IDogMCk7Cj4gPiA+IC0JZWxz ZSBpZiAoSVNfR0VOKGk5MTUsIDUpKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1 KSA9PSA1KQo+ID4gPiAgCQlsZW4gKz0gMjsKPiA+ID4gIAlpZiAoZmxhZ3MgJiBNSV9GT1JDRV9S RVNUT1JFKSB7Cj4gPiA+ICAJCUdFTV9CVUdfT04oZmxhZ3MgJiBNSV9SRVNUT1JFX0lOSElCSVQp Owo+ID4gPiBAQCAtNjYyLDcgKzY2Miw3IEBAIHN0YXRpYyBpbnQgbWlfc2V0X2NvbnRleHQoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gPiA+ICAJCXJldHVybiBQVFJfRVJSKGNzKTsKPiA+ID4g Cj4gPiA+ICAJLyogV2FQcm9ncmFtTWlBcmJPbk9mZkFyb3VuZE1pU2V0Q29udGV4dDppdmIsdmx2 LGhzdyxiZHcsY2h2ICovCj4gPiA+IC0JaWYgKElTX0dFTihpOTE1LCA3KSkgewo+ID4gPiArCWlm IChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykgewo+ID4gPiAgCQkqY3MrKyA9IE1JX0FSQl9PTl9P RkYgfCBNSV9BUkJfRElTQUJMRTsKPiA+ID4gIAkJaWYgKG51bV9lbmdpbmVzKSB7Cj4gPiA+ICAJ CQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWduYWxsZXI7Cj4gPiA+IEBAIC02NzgsNyArNjc4 LDcgQEAgc3RhdGljIGludCBtaV9zZXRfY29udGV4dChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwK PiA+ID4gIAkJCQkJCUdFTjZfUFNNSV9TTEVFUF9NU0dfRElTQUJMRSk7Cj4gPiA+ICAJCQl9Cj4g PiA+ICAJCX0KPiA+ID4gLQl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCA1KSkgewo+ID4gPiArCX0g ZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpIHsKPiA+ID4gIAkJLyoKPiA+ID4gIAkJ ICogVGhpcyB3L2EgaXMgb25seSBsaXN0ZWQgZm9yIHByZS1wcm9kdWN0aW9uIGlsayBhL2Igc3Rl cHBpbmdzLAo+ID4gPiAgCQkgKiBidXQgaXMgYWxzbyBtZW50aW9uZWQgZm9yIHByb2dyYW1taW5n IHRoZSBwb3dlcmN0eC4gVG8gYmUKPiA+ID4gQEAgLTcxNiw3ICs3MTYsNyBAQCBzdGF0aWMgaW50 IG1pX3NldF9jb250ZXh0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ID4gPiAgCSAqLwo+ID4g PiAgCSpjcysrID0gTUlfTk9PUDsKPiA+ID4gCj4gPiA+IC0JaWYgKElTX0dFTihpOTE1LCA3KSkg ewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykgewo+ID4gPiAgCQlpZiAobnVt X2VuZ2luZXMpIHsKPiA+ID4gIAkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpZ25hbGxlcjsK PiA+ID4gIAkJCWk5MTVfcmVnX3QgbGFzdF9yZWcgPSB7fTsgLyoga2VlcCBnY2MgcXVpZXQgKi8K PiA+ID4gQEAgLTc0MCw3ICs3NDAsNyBAQCBzdGF0aWMgaW50IG1pX3NldF9jb250ZXh0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLAo+ID4gPiAgCQkJKmNzKysgPSBNSV9OT09QOwo+ID4gPiAgCQl9 Cj4gPiA+ICAJCSpjcysrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFCTEU7Cj4gPiA+IC0J fSBlbHNlIGlmIChJU19HRU4oaTkxNSwgNSkpIHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNT X1ZFUihpOTE1KSA9PSA1KSB7Cj4gPiA+ICAJCSpjcysrID0gTUlfU1VTUEVORF9GTFVTSDsKPiA+ ID4gIAl9Cj4gPiA+IAo+ID4gPiBAQCAtMTAwMSw3ICsxMDAxLDcgQEAgc3RhdGljIHZvaWQgcmlu Z19yZWxlYXNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIHsKPiA+ID4g IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gPiA+ IAo+ID4gPiAtCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBJTlRFTF9HRU4oZGV2X3ByaXYp ID4gMiAmJgo+ID4gPiArCWRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCBHUkFQSElDU19WRVIo ZGV2X3ByaXYpID4gMiAmJgo+ID4gPiAgCQkgICAgKEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19N SV9NT0RFKSAmIE1PREVfSURMRSkgPT0gMCk7Cj4gPiA+IAo+ID4gPiAgCWludGVsX2VuZ2luZV9j bGVhbnVwX2NvbW1vbihlbmdpbmUpOwo+ID4gPiBAQCAtMTAyOSwxMyArMTAyOSwxMyBAQCBzdGF0 aWMgdm9pZCBzZXR1cF9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAK PiA+ID4gIAlpbnRlbF9lbmdpbmVfc2V0X2lycV9oYW5kbGVyKGVuZ2luZSwgaXJxX2hhbmRsZXIp Owo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpIHsKPiA+ID4gKwlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpIHsKPiA+ID4gIAkJZW5naW5lLT5pcnFfZW5hYmxlID0g Z2VuNl9pcnFfZW5hYmxlOwo+ID4gPiAgCQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuNl9pcnFf ZGlzYWJsZTsKPiA+ID4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA1KSB7Cj4gPiA+ ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNSkgewo+ID4gPiAgCQllbmdpbmUt PmlycV9lbmFibGUgPSBnZW41X2lycV9lbmFibGU7Cj4gPiA+ICAJCWVuZ2luZS0+aXJxX2Rpc2Fi bGUgPSBnZW41X2lycV9kaXNhYmxlOwo+ID4gPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUp ID49IDMpIHsKPiA+ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAzKSB7Cj4g PiA+ICAJCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGdlbjNfaXJxX2VuYWJsZTsKPiA+ID4gIAkJZW5n aW5lLT5pcnFfZGlzYWJsZSA9IGdlbjNfaXJxX2Rpc2FibGU7Cj4gPiA+ICAJfSBlbHNlIHsKPiA+ ID4gQEAgLTEwNDksNyArMTA0OSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSBlbmdpbmUtPmk5MTU7Cj4gPiA+IAo+ID4gPiAgCS8qIGdlbjgrIGFyZSBvbmx5IHN1 cHBvcnRlZCB3aXRoIGV4ZWNsaXN0cyAqLwo+ID4gPiAtCUdFTV9CVUdfT04oSU5URUxfR0VOKGk5 MTUpID49IDgpOwo+ID4gPiArCUdFTV9CVUdfT04oR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpOwo+ ID4gPiAKPiA+ID4gIAlzZXR1cF9pcnEoZW5naW5lKTsKPiA+ID4gCj4gPiA+IEBAIC0xMDcwLDE0 ICsxMDcwLDE0IEBAIHN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gPiA+ICAJICogZW5naW5lLT5lbWl0X2luaXRfYnJlYWRjcnVtYigpLgo+ ID4gPiAgCSAqLwo+ID4gPiAgCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW4zX2Vt aXRfYnJlYWRjcnVtYjsKPiA+ID4gLQlpZiAoSVNfR0VOKGk5MTUsIDUpKQo+ID4gPiArCWlmIChH UkFQSElDU19WRVIoaTkxNSkgPT0gNSkKPiA+ID4gIAkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRj cnVtYiA9IGdlbjVfZW1pdF9icmVhZGNydW1iOwo+ID4gPiAKPiA+ID4gIAllbmdpbmUtPnNldF9k ZWZhdWx0X3N1Ym1pc3Npb24gPSBpOXh4X3NldF9kZWZhdWx0X3N1Ym1pc3Npb247Cj4gPiA+IAo+ ID4gPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVS KGk5MTUpID49IDYpCj4gPiA+ICAJCWVuZ2luZS0+ZW1pdF9iYl9zdGFydCA9IGdlbjZfZW1pdF9i Yl9zdGFydDsKPiA+ID4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNCkKPiA+ID4gKwll bHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNCkKPiA+ID4gIAkJZW5naW5lLT5lbWl0X2Ji X3N0YXJ0ID0gZ2VuNF9lbWl0X2JiX3N0YXJ0Owo+ID4gPiAgCWVsc2UgaWYgKElTX0k4MzAoaTkx NSkgfHwgSVNfSTg0NUcoaTkxNSkpCj4gPiA+ICAJCWVuZ2luZS0+ZW1pdF9iYl9zdGFydCA9IGk4 MzBfZW1pdF9iYl9zdGFydDsKPiA+ID4gQEAgLTEwOTQsMTYgKzEwOTQsMTYgQEAgc3RhdGljIHZv aWQgc2V0dXBfcmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gCj4gPiA+ ICAJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQ7Cj4g PiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNykgewo+ID4gPiArCWlmIChHUkFQ SElDU19WRVIoaTkxNSkgPj0gNykgewo+ID4gPiAgCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW43 X2VtaXRfZmx1c2hfcmNzOwo+ID4gPiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0g Z2VuN19lbWl0X2JyZWFkY3J1bWJfcmNzOwo+ID4gPiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUs IDYpKSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNikgewo+ID4g PiAgCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2VtaXRfZmx1c2hfcmNzOwo+ID4gPiAgCQll bmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuNl9lbWl0X2JyZWFkY3J1bWJfcmNzOwo+ ID4gPiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDUpKSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChH UkFQSElDU19WRVIoaTkxNSkgPT0gNSkgewo+ID4gPiAgCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBn ZW40X2VtaXRfZmx1c2hfcmNzOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+IC0JCWlmIChJTlRFTF9H RU4oaTkxNSkgPCA0KQo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgNCkKPiA+ID4g IAkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjJfZW1pdF9mbHVzaDsKPiA+ID4gIAkJZWxzZQo+ ID4gPiAgCQkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuNF9lbWl0X2ZsdXNoX3JjczsKPiA+ID4g QEAgLTExMTgsMjAgKzExMTgsMjAgQEAgc3RhdGljIHZvaWQgc2V0dXBfdmNzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihp OTE1KSA+PSA2KSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KSB7Cj4gPiA+ ICAJCS8qIGdlbjYgYnNkIG5lZWRzIGEgc3BlY2lhbCB3YSBmb3IgdGFpbCB1cGRhdGVzICovCj4g PiA+IC0JCWlmIChJU19HRU4oaTkxNSwgNikpCj4gPiA+ICsJCWlmIChHUkFQSElDU19WRVIoaTkx NSkgPT0gNikKPiA+ID4gIAkJCWVuZ2luZS0+c2V0X2RlZmF1bHRfc3VibWlzc2lvbiA9IGdlbjZf YnNkX3NldF9kZWZhdWx0X3N1Ym1pc3Npb247Cj4gPiA+ICAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9 IGdlbjZfZW1pdF9mbHVzaF92Y3M7Cj4gPiA+ICAJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0g R1RfQlNEX1VTRVJfSU5URVJSVVBUOwo+ID4gPiAKPiA+ID4gLQkJaWYgKElTX0dFTihpOTE1LCA2 KSkKPiA+ID4gKwkJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+ID4gPiAgCQkJZW5naW5l LT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjZfZW1pdF9icmVhZGNydW1iX3hjczsKPiA+ID4g IAkJZWxzZQo+ID4gPiAgCQkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjdfZW1p dF9icmVhZGNydW1iX3hjczsKPiA+ID4gIAl9IGVsc2Ugewo+ID4gPiAgCQllbmdpbmUtPmVtaXRf Zmx1c2ggPSBnZW40X2VtaXRfZmx1c2hfdmNzOwo+ID4gPiAtCQlpZiAoSVNfR0VOKGk5MTUsIDUp KQo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDUpCj4gPiA+ICAJCQllbmdpbmUt PmlycV9lbmFibGVfbWFzayA9IElMS19CU0RfVVNFUl9JTlRFUlJVUFQ7Cj4gPiA+ICAJCWVsc2UK PiA+ID4gIAkJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gSTkxNV9CU0RfVVNFUl9JTlRFUlJV UFQ7Cj4gPiA+IEBAIC0xMTQ1LDcgKzExNDUsNyBAQCBzdGF0aWMgdm9pZCBzZXR1cF9iY3Moc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgCWVuZ2luZS0+ZW1pdF9mbHVzaCA9 IGdlbjZfZW1pdF9mbHVzaF94Y3M7Cj4gPiA+ICAJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBH VF9CTFRfVVNFUl9JTlRFUlJVUFQ7Cj4gPiA+IAo+ID4gPiAtCWlmIChJU19HRU4oaTkxNSwgNikp Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA2KQo+ID4gPiAgCQllbmdpbmUtPmVt aXRfZmluaV9icmVhZGNydW1iID0gZ2VuNl9lbWl0X2JyZWFkY3J1bWJfeGNzOwo+ID4gPiAgCWVs c2UKPiA+ID4gIAkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjdfZW1pdF9icmVh ZGNydW1iX3hjczsKPiA+ID4gQEAgLTExNTUsNyArMTE1NSw3IEBAIHN0YXRpYyB2b2lkIHNldHVw X3ZlY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAgewo+ID4gPiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1Owo+ID4gPiAKPiA+ID4g LQlHRU1fQlVHX09OKElOVEVMX0dFTihpOTE1KSA8IDcpOwo+ID4gPiArCUdFTV9CVUdfT04oR1JB UEhJQ1NfVkVSKGk5MTUpIDwgNyk7Cj4gPiA+IAo+ID4gPiAgCWVuZ2luZS0+ZW1pdF9mbHVzaCA9 IGdlbjZfZW1pdF9mbHVzaF94Y3M7Cj4gPiA+ICAJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBQ TV9WRUJPWF9VU0VSX0lOVEVSUlVQVDsKPiA+ID4gQEAgLTEyMDMsNyArMTIwMyw3IEBAIHN0YXRp YyBzdHJ1Y3QgaTkxNV92bWEgKmdlbjdfY3R4X3ZtYShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gPiA+ICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gPiA+ICAJaW50IHNpemUsIGVy cjsKPiA+ID4gCj4gPiA+IC0JaWYgKCFJU19HRU4oZW5naW5lLT5pOTE1LCA3KSB8fCBlbmdpbmUt PmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+ aTkxNSkgIT0gNyB8fCBlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPiA+ID4gIAkJcmV0 dXJuIDA7Cj4gPiA+IAo+ID4gPiAgCWVyciA9IGdlbjdfY3R4X3N3aXRjaF9iYl9zZXR1cChlbmdp bmUsIE5VTEwgLyogcHJvYmUgc2l6ZSAqLyk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3Jwcy5jCj4gPiA+IGluZGV4IDk3Y2FiMWI5OTg3MS4uMDZlOWE4ZWQ0ZTAzIDEwMDY0NAo+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYwo+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYwo+ID4gPiBAQCAtMTk2LDcgKzE5Niw3 IEBAIHN0YXRpYyB2b2lkIHJwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJw cykKPiA+ID4gIAlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7Cj4gPiA+IAo+ ID4gPiAgCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gPiA+IC0JaWYgKElOVEVMX0dF TihndC0+aTkxNSkgPj0gMTEpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0g MTEpCj4gPiA+ICAJCWdlbjExX3Jwc19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7Cj4gPiA+ICAJZWxz ZQo+ID4gPiAgCQlnZW42X3Jwc19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7Cj4gPiA+IEBAIC02MzAs NyArNjMwLDcgQEAgc3RhdGljIHUzMiBycHNfbGltaXRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywg dTggdmFsKQo+ID4gPiAgCSAqIGZyZXF1ZW5jeSwgaWYgdGhlIGRvd24gdGhyZXNob2xkIGV4cGly ZXMgaW4gdGhhdCB3aW5kb3cgd2Ugd2lsbCBub3QKPiA+ID4gIAkgKiByZWNlaXZlIGEgZG93biBp bnRlcnJ1cHQuCj4gPiA+ICAJICovCj4gPiA+IC0JaWYgKElOVEVMX0dFTihycHNfdG9faTkxNShy cHMpKSA+PSA5KSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihycHNfdG9faTkxNShycHMpKSA+ PSA5KSB7Cj4gPiA+ICAJCWxpbWl0cyA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0IDw8IDIzOwo+ ID4gPiAgCQlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ID4gPiAgCQkJbGlt aXRzIHw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0IDw8IDE0Owo+ID4gPiBAQCAtNjk3LDcgKzY5 Nyw3IEBAIHN0YXRpYyB2b2lkIHJwc19zZXRfcG93ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCBp bnQgbmV3X3Bvd2VyKQo+ID4gPiAgCSAgICBpbnRlbF9ndF9uc190b19wbV9pbnRlcnZhbChndCwg ZWlfZG93biAqIHRocmVzaG9sZF9kb3duICogMTApKTsKPiA+ID4gCj4gPiA+ICAJc2V0KHVuY29y ZSwgR0VONl9SUF9DT05UUk9MLAo+ID4gPiAtCSAgICAoSU5URUxfR0VOKGd0LT5pOTE1KSA+IDkg PyAwIDogR0VONl9SUF9NRURJQV9UVVJCTykgfAo+ID4gPiArCSAgICAoR1JBUEhJQ1NfVkVSKGd0 LT5pOTE1KSA+IDkgPyAwIDogR0VONl9SUF9NRURJQV9UVVJCTykgfAo+ID4gPiAgCSAgICBHRU42 X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKPiA+ID4gIAkgICAgR0VONl9SUF9NRURJQV9JU19H RlggfAo+ID4gPiAgCSAgICBHRU42X1JQX0VOQUJMRSB8Cj4gPiA+IEBAIC03NzEsNyArNzcxLDcg QEAgc3RhdGljIGludCBnZW42X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwp Cj4gPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMp Owo+ID4gPiAgCXUzMiBzd3JlcTsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+ PSA5KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkKPiA+ID4gIAkJc3dyZXEg PSBHRU45X0ZSRVFVRU5DWSh2YWwpOwo+ID4gPiAgCWVsc2UgaWYgKElTX0hBU1dFTEwoaTkxNSkg fHwgSVNfQlJPQURXRUxMKGk5MTUpKQo+ID4gPiAgCQlzd3JlcSA9IEhTV19GUkVRVUVOQ1kodmFs KTsKPiA+ID4gQEAgLTgxMiwxNCArODEyLDE0IEBAIHN0YXRpYyBpbnQgcnBzX3NldChzdHJ1Y3Qg aW50ZWxfcnBzICpycHMsIHU4IHZhbCwgYm9vbCB1cGRhdGUpCj4gPiA+IAo+ID4gPiAgCWlmIChJ U19WQUxMRVlWSUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpCj4gPiA+ICAJCWVyciA9 IHZsdl9ycHNfc2V0KHJwcywgdmFsKTsKPiA+ID4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gNikKPiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKPiA+ID4gIAkJ ZXJyID0gZ2VuNl9ycHNfc2V0KHJwcywgdmFsKTsKPiA+ID4gIAllbHNlCj4gPiA+ICAJCWVyciA9 IGdlbjVfcnBzX3NldChycHMsIHZhbCk7Cj4gPiA+ICAJaWYgKGVycikKPiA+ID4gIAkJcmV0dXJu IGVycjsKPiA+ID4gCj4gPiA+IC0JaWYgKHVwZGF0ZSAmJiBJTlRFTF9HRU4oaTkxNSkgPj0gNikK PiA+ID4gKwlpZiAodXBkYXRlICYmIEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+ID4gPiAgCQln ZW42X3Jwc19zZXRfdGhyZXNob2xkcyhycHMsIHZhbCk7Cj4gPiA+ICAJcnBzLT5sYXN0X2ZyZXEg PSB2YWw7Cj4gPiA+IAo+ID4gPiBAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgaW50ZWxfcnBzX3Vu cGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gPiA+ICAJaWYgKGludGVsX3Jwc191c2VzX3Rp bWVyKHJwcykpCj4gPiA+ICAJCXJwc19zdGFydF90aW1lcihycHMpOwo+ID4gPiAKPiA+ID4gLQlp ZiAoSVNfR0VOKHJwc190b19pOTE1KHJwcyksIDUpKQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIo cnBzX3RvX2k5MTUocnBzKSkgPT0gNSkKPiA+ID4gIAkJZ2VuNV9ycHNfdXBkYXRlKHJwcyk7Cj4g PiA+ICB9Cj4gPiA+IAo+ID4gPiBAQCAtOTk5LDcgKzk5OSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZf cnBzX2luaXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ID4gPiAKPiA+ID4gIAlycHMtPmVmZmlj aWVudF9mcmVxID0gcnBzLT5ycDFfZnJlcTsKPiA+ID4gIAlpZiAoSVNfSEFTV0VMTChpOTE1KSB8 fCBJU19CUk9BRFdFTEwoaTkxNSkgfHwKPiA+ID4gLQkgICAgSVNfR0VOOV9CQyhpOTE1KSB8fCBJ TlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKPiA+ID4gKwkgICAgSVNfR0VOOV9CQyhpOTE1KSB8fCBH UkFQSElDU19WRVIoaTkxNSkgPj0gMTApIHsKPiA+ID4gIAkJdTMyIGRkY2Nfc3RhdHVzID0gMDsK PiA+ID4gCj4gPiA+ICAJCWlmIChzYW5keWJyaWRnZV9wY29kZV9yZWFkKGk5MTUsCj4gPiA+IEBA IC0xMDEyLDcgKzEwMTIsNyBAQCBzdGF0aWMgdm9pZCBnZW42X3Jwc19pbml0KHN0cnVjdCBpbnRl bF9ycHMgKnJwcykKPiA+ID4gIAkJCQkJcnBzLT5tYXhfZnJlcSk7Cj4gPiA+ICAJfQo+ID4gPiAK PiA+ID4gLQlpZiAoSVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsK PiA+ID4gKwlpZiAoSVNfR0VOOV9CQyhpOTE1KSB8fCBHUkFQSElDU19WRVIoaTkxNSkgPj0gMTAp IHsKPiA+ID4gIAkJLyogU3RvcmUgdGhlIGZyZXF1ZW5jeSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVu aXRzLCB3aGljaCBpcwo+ID4gPiAgCQkgKiB0aGUgbmF0dXJhbCBoYXJkd2FyZSB1bml0IGZvciBT S0wKPiA+ID4gIAkJICovCj4gPiA+IEBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBzdGF0aWMgYm9vbCBn ZW45X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ID4gPiAgCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9IGd0LT51bmNvcmU7Cj4gPiA+IAo+ID4gPiAgCS8qIFByb2dyYW0g ZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyAqLwo+ID4gPiAtCWlmIChJU19HRU4oZ3Qt Pmk5MTUsIDkpKQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID09IDkpCj4gPiA+ ICAJCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUkNfVklERU9fRlJFUSwKPiA+ ID4gIAkJCQkgICAgICBHRU45X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Cj4gPiA+IAo+ID4g PiBAQCAtMTM2NSwxNiArMTM2NSwxNiBAQCB2b2lkIGludGVsX3Jwc19lbmFibGUoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQo+ID4gPiAgCQllbmFibGVkID0gY2h2X3Jwc19lbmFibGUocnBzKTsKPiA+ ID4gIAllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5MTUpKQo+ID4gPiAgCQllbmFibGVkID0gdmx2 X3Jwc19lbmFibGUocnBzKTsKPiA+ID4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkK PiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gOSkKPiA+ID4gIAkJZW5hYmxl ZCA9IGdlbjlfcnBzX2VuYWJsZShycHMpOwo+ID4gPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA4KQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4KQo+ID4gPiAg CQllbmFibGVkID0gZ2VuOF9ycHNfZW5hYmxlKHJwcyk7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxf R0VOKGk5MTUpID49IDYpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYp Cj4gPiA+ICAJCWVuYWJsZWQgPSBnZW42X3Jwc19lbmFibGUocnBzKTsKPiA+ID4gIAllbHNlIGlm IChJU19JUk9OTEFLRV9NKGk5MTUpKQo+ID4gPiAgCQllbmFibGVkID0gZ2VuNV9ycHNfZW5hYmxl KHJwcyk7Cj4gPiA+ICAJZWxzZQo+ID4gPiAtCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGk5MTUp KTsKPiA+ID4gKwkJTUlTU0lOR19DQVNFKEdSQVBISUNTX1ZFUihpOTE1KSk7Cj4gPiA+ICAJaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiA+ID4gIAlp ZiAoIWVuYWJsZWQpCj4gPiA+ICAJCXJldHVybjsKPiA+ID4gQEAgLTEzOTMsNyArMTM5Myw3IEBA IHZvaWQgaW50ZWxfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gPiA+IAo+ID4g PiAgCWlmIChoYXNfYnVzeV9zdGF0cyhycHMpKQo+ID4gPiAgCQlpbnRlbF9ycHNfc2V0X3RpbWVy KHJwcyk7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4gPiA+ICsJZWxz ZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4gPiA+ICAJCWludGVsX3Jwc19zZXRfaW50 ZXJydXB0cyhycHMpOwo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJLyogSXJvbmxha2UgY3VycmVudGx5 IHVzZXMgaW50ZWxfaXBzLmtvICovIHt9Cj4gPiA+IEBAIC0xNDE0LDcgKzE0MTQsNyBAQCB2b2lk IGludGVsX3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiA+ID4gIAlpbnRlbF9y cHNfY2xlYXJfaW50ZXJydXB0cyhycHMpOwo+ID4gPiAgCWludGVsX3Jwc19jbGVhcl90aW1lcihy cHMpOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4gPiA+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA+PSA2KQo+ID4gPiAgCQlnZW42X3Jwc19kaXNhYmxlKHJwcyk7 Cj4gPiA+ICAJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKPiA+ID4gIAkJZ2VuNV9ycHNf ZGlzYWJsZShycHMpOwo+ID4gPiBAQCAtMTQ1MywxNCArMTQ1MywxNCBAQCBpbnQgaW50ZWxfZ3B1 X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQo+ID4gPiAgewo+ID4gPiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKPiA+ID4gCj4g PiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIo aTkxNSkgPj0gOSkKPiA+ID4gIAkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdUX0ZS RVFVRU5DWV9NVUxUSVBMSUVSLAo+ID4gPiAgCQkJCQkgR0VOOV9GUkVRX1NDQUxFUik7Cj4gPiA+ ICAJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhpOTE1KSkKPiA+ID4gIAkJcmV0dXJuIGNodl9ncHVf ZnJlcShycHMsIHZhbCk7Cj4gPiA+ICAJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKPiA+ ID4gIAkJcmV0dXJuIGJ5dF9ncHVfZnJlcShycHMsIHZhbCk7Cj4gPiA+IC0JZWxzZSBpZiAoSU5U RUxfR0VOKGk5MTUpID49IDYpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49 IDYpCj4gPiA+ICAJCXJldHVybiB2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUjsKPiA+ID4g IAllbHNlCj4gPiA+ICAJCXJldHVybiB2YWw7Cj4gPiA+IEBAIC0xNDcwLDE0ICsxNDcwLDE0IEBA IGludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpCj4g PiA+ICB7Cj4gPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4gPiA+ICsJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5KQo+ID4gPiAgCQlyZXR1cm4gRElWX1JPVU5EX0NM T1NFU1QodmFsICogR0VOOV9GUkVRX1NDQUxFUiwKPiA+ID4gIAkJCQkJIEdUX0ZSRVFVRU5DWV9N VUxUSVBMSUVSKTsKPiA+ID4gIAllbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpKQo+ID4gPiAg CQlyZXR1cm4gY2h2X2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPiA+ID4gIAllbHNlIGlmIChJU19W QUxMRVlWSUVXKGk5MTUpKQo+ID4gPiAgCQlyZXR1cm4gYnl0X2ZyZXFfb3Bjb2RlKHJwcywgdmFs KTsKPiA+ID4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKPiA+ID4gKwllbHNlIGlm IChHUkFQSElDU19WRVIoaTkxNSkgPj0gNikKPiA+ID4gIAkJcmV0dXJuIERJVl9ST1VORF9DTE9T RVNUKHZhbCwgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJ cmV0dXJuIHZhbDsKPiA+ID4gQEAgLTE3NzAsNyArMTc3MCw3IEBAIHZvaWQgZ2VuNl9ycHNfaXJx X2hhbmRsZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKQo+ID4gPiAgCQlzcGlu X3VubG9jaygmZ3QtPmlycV9sb2NrKTsKPiA+ID4gIAl9Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRF TF9HRU4oZ3QtPmk5MTUpID49IDgpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkg Pj0gOCkKPiA+ID4gIAkJcmV0dXJuOwo+ID4gPiAKPiA+ID4gIAlpZiAocG1faWlyICYgUE1fVkVC T1hfVVNFUl9JTlRFUlJVUFQpCj4gPiA+IEBAIC0xODMzLDcgKzE4MzMsNyBAQCB2b2lkIGludGVs X3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiA+ID4gIAkJY2h2X3Jwc19pbml0KHJw cyk7Cj4gPiA+ICAJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKPiA+ID4gIAkJdmx2X3Jw c19pbml0KHJwcyk7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDYpCj4gPiA+ ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4gPiA+ICAJCWdlbjZfcnBzX2lu aXQocnBzKTsKPiA+ID4gIAllbHNlIGlmIChJU19JUk9OTEFLRV9NKGk5MTUpKQo+ID4gPiAgCQln ZW41X3Jwc19pbml0KHJwcyk7Cj4gPiA+IEBAIC0xODQzLDcgKzE4NDMsNyBAQCB2b2lkIGludGVs X3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiA+ID4gIAlycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7Cj4gPiA+IAo+ID4gPiAgCS8qIEFmdGVyIHNldHRpbmcg bWF4LXNvZnRsaW1pdCwgZmluZCB0aGUgb3ZlcmNsb2NrIG1heCBmcmVxICovCj4gPiA+IC0JaWYg KElTX0dFTihpOTE1LCA2KSB8fCBJU19JVllCUklER0UoaTkxNSkgfHwgSVNfSEFTV0VMTChpOTE1 KSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNiB8fCBJU19JVllCUklER0Uo aTkxNSkgfHwgSVNfSEFTV0VMTChpOTE1KSkgewo+ID4gPiAgCQl1MzIgcGFyYW1zID0gMDsKPiA+ ID4gCj4gPiA+ICAJCXNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoaTkxNSwgR0VONl9SRUFEX09DX1BB UkFNUywKPiA+ID4gQEAgLTE4NzIsMTYgKzE4NzIsMTYgQEAgdm9pZCBpbnRlbF9ycHNfaW5pdChz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gPiA+ICAJICoKPiA+ID4gIAkgKiBUT0RPOiB2ZXJpZnkg aWYgdGhpcyBjYW4gYmUgcmVwcm9kdWNlZCBvbiBWTFYsQ0hWLgo+ID4gPiAgCSAqLwo+ID4gPiAt CWlmIChJTlRFTF9HRU4oaTkxNSkgPD0gNykKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUp IDw9IDcpCj4gPiA+ICAJCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VONl9QTV9SUF9VUF9FSV9F WFBJUkVEOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5MTUpID49IDggJiYgSU5URUxf R0VOKGk5MTUpIDwgMTEpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4ICYmIEdS QVBISUNTX1ZFUihpOTE1KSA8IDExKQo+ID4gPiAgCQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdF TjhfUE1JTlRSX0RJU0FCTEVfUkVESVJFQ1RfVE9fR1VDOwo+ID4gPiAgfQo+ID4gPiAKPiA+ID4g IHZvaWQgaW50ZWxfcnBzX3Nhbml0aXplKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiA+ID4gIHsK PiA+ID4gLQlpZiAoSU5URUxfR0VOKHJwc190b19pOTE1KHJwcykpID49IDYpCj4gPiA+ICsJaWYg KEdSQVBISUNTX1ZFUihycHNfdG9faTkxNShycHMpKSA+PSA2KQo+ID4gPiAgCQlycHNfZGlzYWJs ZV9pbnRlcnJ1cHRzKHJwcyk7Cj4gPiA+ICB9Cj4gPiA+IAo+ID4gPiBAQCAtMTg5MiwxMSArMTg5 MiwxMSBAQCB1MzIgaW50ZWxfcnBzX2dldF9jYWdmKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMy IHJwc3RhdCkKPiA+ID4gCj4gPiA+ICAJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkgfHwgSVNfQ0hF UlJZVklFVyhpOTE1KSkKPiA+ID4gIAkJY2FnZiA9IChycHN0YXQgPj4gOCkgJiAweGZmOwo+ID4g PiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQo+ID4gPiArCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSA5KQo+ID4gPiAgCQljYWdmID0gKHJwc3RhdCAmIEdFTjlfQ0FHRl9N QVNLKSA+PiBHRU45X0NBR0ZfU0hJRlQ7Cj4gPiA+ICAJZWxzZSBpZiAoSVNfSEFTV0VMTChpOTE1 KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkpCj4gPiA+ICAJCWNhZ2YgPSAocnBzdGF0ICYgSFNXX0NB R0ZfTUFTSykgPj4gSFNXX0NBR0ZfU0hJRlQ7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDYpCj4gPiA+ ICAJCWNhZ2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01BU0spID4+IEdFTjZfQ0FHRl9TSElGVDsK PiA+ID4gIAllbHNlCj4gPiA+ICAJCWNhZ2YgPSBnZW41X2ludmVydF9mcmVxKHJwcywgKHJwc3Rh dCAmIE1FTVNUQVRfUFNUQVRFX01BU0spID4+Cj4gPiA+IEBAIC0xOTE1LDcgKzE5MTUsNyBAQCBz dGF0aWMgdTMyIHJlYWRfY2FnZihzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gPiA+ICAJCXZsdl9w dW5pdF9nZXQoaTkxNSk7Cj4gPiA+ICAJCWZyZXEgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5J VF9SRUdfR1BVX0ZSRVFfU1RTKTsKPiA+ID4gIAkJdmx2X3B1bml0X3B1dChpOTE1KTsKPiA+ID4g LQl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChH UkFQSElDU19WRVIoaTkxNSkgPj0gNikgewo+ID4gPiAgCQlmcmVxID0gaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBHRU42X1JQU1RBVDEpOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ICAJCWZyZXEg PSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTVNUQVRfSUxLKTsKPiA+ID4gQEAgLTE5Njgs NyArMTk2OCw3IEBAIHZvaWQgaW50ZWxfcnBzX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCj4gPiA+ICAJICogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFydCB3 aXRoIGludGVsLWlwcyBvbmNlIGV2ZXJ5dGhpbmcgaXMKPiA+ID4gIAkgKiBzZXQgdXAsIHRvIGF2 b2lkIGludGVsLWlwcyBzbmVha2luZyBpbiBhbmQgcmVhZGluZyBib2d1cyB2YWx1ZXMuCj4gPiA+ ICAJICovCj4gPiA+IC0JaWYgKElTX0dFTihndC0+aTkxNSwgNSkpIHsKPiA+ID4gKwlpZiAoR1JB UEhJQ1NfVkVSKGd0LT5pOTE1KSA9PSA1KSB7Cj4gPiA+ICAJCUdFTV9CVUdfT04oaXBzX21jaGRl dik7Cj4gPiA+ICAJCXJjdV9hc3NpZ25fcG9pbnRlcihpcHNfbWNoZGV2LCBndC0+aTkxNSk7Cj4g PiA+ICAJCWlwc19waW5nX2Zvcl9pOTE1X2xvYWQoKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3NzZXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3NzZXUuYwo+ID4gPiBpbmRleCAwZDlmNzRhZWM4ZmUuLjM2N2ZkNDRiODFjOCAxMDA2 NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfc3NldS5jCj4gPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3NzZXUuYwo+ID4gPiBAQCAtNTkw LDEzICs1OTAsMTMgQEAgdm9pZCBpbnRlbF9zc2V1X2luZm9faW5pdChzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQo+ID4gPiAgCQljaGVycnl2aWV3X3NzZXVfaW5mb19pbml0KGd0KTsKPiA+ID4gIAllbHNl IGlmIChJU19CUk9BRFdFTEwoaTkxNSkpCj4gPiA+ICAJCWJkd19zc2V1X2luZm9faW5pdChndCk7 Cj4gPiA+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDkpKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA9PSA5KQo+ID4gPiAgCQlnZW45X3NzZXVfaW5mb19pbml0KGd0KTsKPiA+ ID4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTApKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNT X1ZFUihpOTE1KSA9PSAxMCkKPiA+ID4gIAkJZ2VuMTBfc3NldV9pbmZvX2luaXQoZ3QpOwo+ID4g PiAtCWVsc2UgaWYgKElTX0dFTihpOTE1LCAxMSkpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1Nf VkVSKGk5MTUpID09IDExKQo+ID4gPiAgCQlnZW4xMV9zc2V1X2luZm9faW5pdChndCk7Cj4gPiA+ IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDEyKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBI SUNTX1ZFUihpOTE1KSA+PSAxMikKPiA+ID4gIAkJZ2VuMTJfc3NldV9pbmZvX2luaXQoZ3QpOwo+ ID4gPiAgfQo+ID4gPiAKPiA+ID4gQEAgLTYxMyw3ICs2MTMsNyBAQCB1MzIgaW50ZWxfc3NldV9t YWtlX3JwY3Moc3RydWN0IGludGVsX2d0ICpndCwKPiA+ID4gIAkgKiBObyBleHBsaWNpdCBSUENT IHJlcXVlc3QgaXMgbmVlZGVkIHRvIGVuc3VyZSBmdWxsCj4gPiA+ICAJICogc2xpY2Uvc3Vic2xp Y2UvRVUgZW5hYmxlbWVudCBwcmlvciB0byBHZW45Lgo+ID4gPiAgCSAqLwo+ID4gPiAtCWlmIChJ TlRFTF9HRU4oaTkxNSkgPCA5KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPCA5KQo+ ID4gPiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJLyoKPiA+ID4gQEAgLTY1MSw3ICs2NTEs NyBAQCB1MzIgaW50ZWxfc3NldV9tYWtlX3JwY3Moc3RydWN0IGludGVsX2d0ICpndCwKPiA+ID4g IAkgKiBzdWJzbGljZXMgYXJlIGVuYWJsZWQsIG9yIGEgY291bnQgYmV0d2VlbiBvbmUgYW5kIGZv dXIgb24gdGhlIGZpcnN0Cj4gPiA+ICAJICogc2xpY2UuCj4gPiA+ICAJICovCj4gPiA+IC0JaWYg KElTX0dFTihpOTE1LCAxMSkgJiYKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDEx ICYmCj4gPiA+ICAJICAgIHNsaWNlcyA9PSAxICYmCj4gPiA+ICAJICAgIHN1YnNsaWNlcyA+IG1p bl90KHU4LCA0LCBod2VpZ2h0OChzc2V1LT5zdWJzbGljZV9tYXNrWzBdKSAvIDIpKSB7Cj4gPiA+ ICAJCUdFTV9CVUdfT04oc3Vic2xpY2VzICYgMSk7Cj4gPiA+IEBAIC02NjksNyArNjY5LDcgQEAg dTMyIGludGVsX3NzZXVfbWFrZV9ycGNzKHN0cnVjdCBpbnRlbF9ndCAqZ3QsCj4gPiA+ICAJaWYg KHNzZXUtPmhhc19zbGljZV9wZykgewo+ID4gPiAgCQl1MzIgbWFzaywgdmFsID0gc2xpY2VzOwo+ ID4gPiAKPiA+ID4gLQkJaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewo+ID4gPiArCQlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDExKSB7Cj4gPiA+ICAJCQltYXNrID0gR0VOMTFfUlBDU19T X0NOVF9NQVNLOwo+ID4gPiAgCQkJdmFsIDw8PSBHRU4xMV9SUENTX1NfQ05UX1NISUZUOwo+ID4g PiAgCQl9IGVsc2Ugewo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfd29ya2Fyb3VuZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3dvcmth cm91bmRzLmMKPiA+ID4gaW5kZXggNjJjYjllZTViZmMzLi5iNjJkMWUzMWE2NDUgMTAwNjQ0Cj4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmMKPiA+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfd29ya2Fyb3VuZHMuYwo+ID4g PiBAQCAtNjk5LDkgKzY5OSw5IEBAIF9faW50ZWxfZW5naW5lX2luaXRfY3R4X3dhKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiA+ID4gCj4gPiA+ICAJaWYgKElTX0RHMShpOTE1KSkK PiA+ID4gIAkJZGcxX2N0eF93b3JrYXJvdW5kc19pbml0KGVuZ2luZSwgd2FsKTsKPiA+ID4gLQll bHNlIGlmIChJU19HRU4oaTkxNSwgMTIpKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA9PSAxMikKPiA+ID4gIAkJZ2VuMTJfY3R4X3dvcmthcm91bmRzX2luaXQoZW5naW5lLCB3 YWwpOwo+ID4gPiAtCWVsc2UgaWYgKElTX0dFTihpOTE1LCAxMSkpCj4gPiA+ICsJZWxzZSBpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID09IDExKQo+ID4gPiAgCQlpY2xfY3R4X3dvcmthcm91bmRzX2lu aXQoZW5naW5lLCB3YWwpOwo+ID4gPiAgCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoaTkxNSkpCj4g PiA+ICAJCWNubF9jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4gPiA+IEBAIC03 MTksMTQgKzcxOSwxNCBAQCBfX2ludGVsX2VuZ2luZV9pbml0X2N0eF93YShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCj4gPiA+ICAJCWNodl9jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdp bmUsIHdhbCk7Cj4gPiA+ICAJZWxzZSBpZiAoSVNfQlJPQURXRUxMKGk5MTUpKQo+ID4gPiAgCQli ZHdfY3R4X3dvcmthcm91bmRzX2luaXQoZW5naW5lLCB3YWwpOwo+ID4gPiAtCWVsc2UgaWYgKElT X0dFTihpOTE1LCA3KSkKPiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNykK PiA+ID4gIAkJZ2VuN19jdHhfd29ya2Fyb3VuZHNfaW5pdChlbmdpbmUsIHdhbCk7Cj4gPiA+IC0J ZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDYpKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA9PSA2KQo+ID4gPiAgCQlnZW42X2N0eF93b3JrYXJvdW5kc19pbml0KGVuZ2luZSwgd2Fs KTsKPiA+ID4gLQllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPCA4KQo+ID4gPiArCWVsc2UgaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA8IDgpCj4gPiA+ICAJCTsKPiA+ID4gIAllbHNlCj4gPiA+IC0J CU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oaTkxNSkpOwo+ID4gPiArCQlNSVNTSU5HX0NBU0UoR1JB UEhJQ1NfVkVSKGk5MTUpKTsKPiA+ID4gCj4gPiA+ICAJd2FfaW5pdF9maW5pc2god2FsKTsKPiA+ ID4gIH0KPiA+ID4gQEAgLTk1MCw3ICs5NTAsNyBAQCB3YV9pbml0X21jcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ID4gPiAgCXVuc2ln bmVkIGludCBzbGljZSwgc3Vic2xpY2U7Cj4gPiA+ICAJdTMyIGwzX2VuLCBtY3IsIG1jcl9tYXNr Owo+ID4gPiAKPiA+ID4gLQlHRU1fQlVHX09OKElOVEVMX0dFTihpOTE1KSA8IDEwKTsKPiA+ID4g KwlHRU1fQlVHX09OKEdSQVBISUNTX1ZFUihpOTE1KSA8IDEwKTsKPiA+ID4gCj4gPiA+ICAJLyoK PiA+ID4gIAkgKiBXYVByb2dyYW1NZ3NyRm9yTDNCYW5rU3BlY2lmaWNNbWlvUmVhZHM6IGNubCxp Y2wKPiA+ID4gQEAgLTk4MCw3ICs5ODAsNyBAQCB3YV9pbml0X21jcihzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ID4gPiAgCSAqIG9mIGV2 ZXJ5IE1NSU8gcmVhZC4KPiA+ID4gIAkgKi8KPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihp OTE1KSA+PSAxMCAmJiBpc19wb3dlcl9vZl8yKHNzZXUtPnNsaWNlX21hc2spKSB7Cj4gPiA+ICsJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMCAmJiBpc19wb3dlcl9vZl8yKHNzZXUtPnNsaWNl X21hc2spKSB7Cj4gPiA+ICAJCXUzMiBsM19mdXNlID0KPiA+ID4gIAkJCWludGVsX3VuY29yZV9y ZWFkKCZpOTE1LT51bmNvcmUsIEdFTjEwX01JUlJPUl9GVVNFMykgJgo+ID4gPiAgCQkJR0VOMTBf TDNCQU5LX01BU0s7Cj4gPiA+IEBAIC0xMDAyLDcgKzEwMDIsNyBAQCB3YV9pbml0X21jcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ID4g PiAgCX0KPiA+ID4gIAlzdWJzbGljZS0tOwo+ID4gPiAKPiA+ID4gLQlpZiAoSU5URUxfR0VOKGk5 MTUpID49IDExKSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMSkgewo+ID4g PiAgCQltY3IgPSBHRU4xMV9NQ1JfU0xJQ0Uoc2xpY2UpIHwgR0VOMTFfTUNSX1NVQlNMSUNFKHN1 YnNsaWNlKTsKPiA+ID4gIAkJbWNyX21hc2sgPSBHRU4xMV9NQ1JfU0xJQ0VfTUFTSyB8IEdFTjEx X01DUl9TVUJTTElDRV9NQVNLOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+IEBAIC0xMTcxLDkgKzEx NzEsOSBAQCBndF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCj4gPiA+ICAJCWRnMV9ndF93b3JrYXJvdW5kc19p bml0KGk5MTUsIHdhbCk7Cj4gPiA+ICAJZWxzZSBpZiAoSVNfVElHRVJMQUtFKGk5MTUpKQo+ID4g PiAgCQl0Z2xfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwo+ID4gPiAtCWVsc2UgaWYg KElTX0dFTihpOTE1LCAxMikpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09 IDEyKQo+ID4gPiAgCQlnZW4xMl9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7Cj4gPiA+ IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDExKSkKPiA+ID4gKwllbHNlIGlmIChHUkFQSElDU19W RVIoaTkxNSkgPT0gMTEpCj4gPiA+ICAJCWljbF9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdh bCk7Cj4gPiA+ICAJZWxzZSBpZiAoSVNfQ0FOTk9OTEFLRShpOTE1KSkKPiA+ID4gIAkJY25sX2d0 X3dvcmthcm91bmRzX2luaXQoaTkxNSwgd2FsKTsKPiA+ID4gQEAgLTExOTMsMTggKzExOTMsMTgg QEAgZ3RfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3Ry dWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ID4gPiAgCQl2bHZfZ3Rfd29ya2Fyb3VuZHNfaW5pdChp OTE1LCB3YWwpOwo+ID4gPiAgCWVsc2UgaWYgKElTX0lWWUJSSURHRShpOTE1KSkKPiA+ID4gIAkJ aXZiX2d0X3dvcmthcm91bmRzX2luaXQoaTkxNSwgd2FsKTsKPiA+ID4gLQllbHNlIGlmIChJU19H RU4oaTkxNSwgNikpCj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDYpCj4g PiA+ICAJCXNuYl9ndF93b3JrYXJvdW5kc19pbml0KGk5MTUsIHdhbCk7Cj4gPiA+IC0JZWxzZSBp ZiAoSVNfR0VOKGk5MTUsIDUpKQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9 PSA1KQo+ID4gPiAgCQlpbGtfZ3Rfd29ya2Fyb3VuZHNfaW5pdChpOTE1LCB3YWwpOwo+ID4gPiAg CWVsc2UgaWYgKElTX0c0WChpOTE1KSkKPiA+ID4gIAkJZzR4X2d0X3dvcmthcm91bmRzX2luaXQo aTkxNSwgd2FsKTsKPiA+ID4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgNCkpCj4gPiA+ICsJZWxz ZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDQpCj4gPiA+ICAJCWdlbjRfZ3Rfd29ya2Fyb3Vu ZHNfaW5pdChpOTE1LCB3YWwpOwo+ID4gPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA8PSA4 KQo+ID4gPiArCWVsc2UgaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA8PSA4KQo+ID4gPiAgCQk7Cj4g PiA+ICAJZWxzZQo+ID4gPiAtCQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGk5MTUpKTsKPiA+ID4g KwkJTUlTU0lOR19DQVNFKEdSQVBISUNTX1ZFUihpOTE1KSk7Cj4gPiA+ICB9Cj4gPiA+IAo+ID4g PiAgdm9pZCBpbnRlbF9ndF9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQo+ID4gPiBAQCAtMTU1OCw5ICsxNTU4LDkgQEAgdm9pZCBpbnRlbF9lbmdpbmVfaW5p dF93aGl0ZWxpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4gPiAKPiA+ID4g IAlpZiAoSVNfREcxKGk5MTUpKQo+ID4gPiAgCQlkZzFfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSk7 Cj4gPiA+IC0JZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDEyKSkKPiA+ID4gKwllbHNlIGlmIChHUkFQ SElDU19WRVIoaTkxNSkgPT0gMTIpCj4gPiA+ICAJCXRnbF93aGl0ZWxpc3RfYnVpbGQoZW5naW5l KTsKPiA+ID4gLQllbHNlIGlmIChJU19HRU4oaTkxNSwgMTEpKQo+ID4gPiArCWVsc2UgaWYgKEdS QVBISUNTX1ZFUihpOTE1KSA9PSAxMSkKPiA+ID4gIAkJaWNsX3doaXRlbGlzdF9idWlsZChlbmdp bmUpOwo+ID4gPiAgCWVsc2UgaWYgKElTX0NBTk5PTkxBS0UoaTkxNSkpCj4gPiA+ICAJCWNubF93 aGl0ZWxpc3RfYnVpbGQoZW5naW5lKTsKPiA+ID4gQEAgLTE1NzYsMTAgKzE1NzYsMTAgQEAgdm9p ZCBpbnRlbF9lbmdpbmVfaW5pdF93aGl0ZWxpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ID4gPiAgCQlieHRfd2hpdGVsaXN0X2J1aWxkKGVuZ2luZSk7Cj4gPiA+ICAJZWxzZSBp ZiAoSVNfU0tZTEFLRShpOTE1KSkKPiA+ID4gIAkJc2tsX3doaXRlbGlzdF9idWlsZChlbmdpbmUp Owo+ID4gPiAtCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA8PSA4KQo+ID4gPiArCWVsc2UgaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA8PSA4KQo+ID4gPiAgCQk7Cj4gPiA+ICAJZWxzZQo+ID4gPiAt CQlNSVNTSU5HX0NBU0UoSU5URUxfR0VOKGk5MTUpKTsKPiA+ID4gKwkJTUlTU0lOR19DQVNFKEdS QVBISUNTX1ZFUihpOTE1KSk7Cj4gPiA+IAo+ID4gPiAgCXdhX2luaXRfZmluaXNoKHcpOwo+ID4g PiAgfQo+ID4gPiBAQCAtMTY5NSw3ICsxNjk1LDcgQEAgcmNzX2VuZ2luZV93YV9pbml0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2FsKQo+ID4g PiAgCQkJICAgICBFTkFCTEVfU01BTExQTCk7Cj4gPiA+ICAJfQo+ID4gPiAKPiA+ID4gLQlpZiAo SVNfR0VOKGk5MTUsIDExKSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gMTEp IHsKPiA+ID4gIAkJLyogVGhpcyBpcyBub3QgYW4gV2EuIEVuYWJsZSBmb3IgYmV0dGVyIGltYWdl IHF1YWxpdHkgKi8KPiA+ID4gIAkJd2FfbWFza2VkX2VuKHdhbCwKPiA+ID4gIAkJCSAgICAgXzNE X0NISUNLRU4zLAo+ID4gPiBAQCAtMTc5Myw3ICsxNzkzLDcgQEAgcmNzX2VuZ2luZV93YV9pbml0 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfd2FfbGlzdCAqd2Fs KQo+ID4gPiAgCQkJICAgICBGRl9ET1BfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiA+ID4gIAl9Cj4g PiA+IAo+ID4gPiAtCWlmIChJU19HRU5fUkFOR0UoaTkxNSwgOSwgMTIpKSB7Cj4gPiA+ICsJaWYg KElTX0dSQVBISUNTX1ZFUihpOTE1LCA5LCAxMikpIHsKPiA+ID4gIAkJLyogRnRyUGVyQ3R4dFBy ZWVtcHRpb25HcmFudWxhcml0eUNvbnRyb2w6c2tsLGJ4dCxrYmwsY2ZsLGNubCxpY2wsdGdsICov Cj4gPiA+ICAJCXdhX21hc2tlZF9lbih3YWwsCj4gPiA+ICAJCQkgICAgIEdFTjdfRkZfU0xJQ0Vf Q1NfQ0hJQ0tFTjEsCj4gPiA+IEBAIC0xODE3LDcgKzE4MTcsNyBAQCByY3NfZW5naW5lX3dhX2lu aXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3 YWwpCj4gPiA+ICAJCQkgICAgIEdFTjlfUE9PTEVEX0VVX0xPQURfQkFMQU5DSU5HX0ZJWF9ESVNB QkxFKTsKPiA+ID4gIAl9Cj4gPiA+IAo+ID4gPiAtCWlmIChJU19HRU4oaTkxNSwgOSkpIHsKPiA+ ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID09IDkpIHsKPiA+ID4gIAkJLyogV2FDb250ZXh0 U3dpdGNoV2l0aENvbmN1cnJlbnRUTEJJbnZhbGlkYXRlOnNrbCxieHQsa2JsLGdsayxjZmwgKi8K PiA+ID4gIAkJd2FfbWFza2VkX2VuKHdhbCwKPiA+ID4gIAkJCSAgICAgR0VOOV9DU0ZFX0NISUNL RU4xX1JDUywKPiA+ID4gQEAgLTE5MjEsNyArMTkyMSw3IEBAIHJjc19lbmdpbmVfd2FfaW5pdChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1X3dhX2xpc3QgKndhbCkK PiA+ID4gIAkJCQkgICAgIEdFTjdfUFNEX1NJTkdMRV9QT1JUX0RJU1BBVENIX0VOQUJMRSk7Cj4g PiA+ICAJfQo+ID4gPiAKPiA+ID4gLQlpZiAoSVNfR0VOKGk5MTUsIDcpKSB7Cj4gPiA+ICsJaWYg KEdSQVBISUNTX1ZFUihpOTE1KSA9PSA3KSB7Cj4gPiA+ICAJCS8qIFdhQkNTVkNTVGxiSW52YWxp ZGF0aW9uTW9kZTppdmIsdmx2LGhzdyAqLwo+ID4gPiAgCQl3YV9tYXNrZWRfZW4od2FsLAo+ID4g PiAgCQkJICAgICBHRlhfTU9ERV9HRU43LAo+ID4gPiBAQCAtMTk1Myw3ICsxOTUzLDcgQEAgcmNz X2VuZ2luZV93YV9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5 MTVfd2FfbGlzdCAqd2FsKQo+ID4gPiAgCQkgICAgICAgR0VONl9XSVpfSEFTSElOR18xNng0KTsK PiA+ID4gIAl9Cj4gPiA+IAo+ID4gPiAtCWlmIChJU19HRU5fUkFOR0UoaTkxNSwgNiwgNykpCj4g PiA+ICsJaWYgKElTX0dSQVBISUNTX1ZFUihpOTE1LCA2LCA3KSkKPiA+ID4gIAkJLyoKPiA+ID4g IAkJICogV2UgbmVlZCB0byBkaXNhYmxlIHRoZSBBc3luY0ZsaXAgcGVyZm9ybWFuY2Ugb3B0aW1p c2F0aW9ucyBpbgo+ID4gPiAgCQkgKiBvcmRlciB0byB1c2UgTUlfV0FJVF9GT1JfRVZFTlQgd2l0 aGluIHRoZSBDUy4gSXQgc2hvdWxkCj4gPiA+IEBAIC0xOTY1LDcgKzE5NjUsNyBAQCByY3NfZW5n aW5lX3dhX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV93 YV9saXN0ICp3YWwpCj4gPiA+ICAJCQkgICAgIE1JX01PREUsCj4gPiA+ICAJCQkgICAgIEFTWU5D X0ZMSVBfUEVSRl9ESVNBQkxFKTsKPiA+ID4gCj4gPiA+IC0JaWYgKElTX0dFTihpOTE1LCA2KSkg ewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gNikgewo+ID4gPiAgCQkvKgo+ID4g PiAgCQkgKiBSZXF1aXJlZCBmb3IgdGhlIGhhcmR3YXJlIHRvIHByb2dyYW0gc2NhbmxpbmUgdmFs dWVzIGZvcgo+ID4gPiAgCQkgKiB3YWl0aW5nCj4gPiA+IEBAIC0yMDE5LDE0ICsyMDE5LDE0IEBA IHJjc19lbmdpbmVfd2FfaW5pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVj dCBpOTE1X3dhX2xpc3QgKndhbCkKPiA+ID4gIAkJCSAgICAgIENNMF9TVENfRVZJQ1RfRElTQUJM RV9MUkFfU05CKTsKPiA+ID4gIAl9Cj4gPiA+IAo+ID4gPiAtCWlmIChJU19HRU5fUkFOR0UoaTkx NSwgNCwgNikpCj4gPiA+ICsJaWYgKElTX0dSQVBISUNTX1ZFUihpOTE1LCA0LCA2KSkKPiA+ID4g IAkJLyogV2FUaW1lZFNpbmdsZVZlcnRleERpc3BhdGNoOmNsLGJ3LGN0ZyxlbGssaWxrLHNuYiAq Lwo+ID4gPiAgCQl3YV9hZGQod2FsLCBNSV9NT0RFLAo+ID4gPiAgCQkgICAgICAgMCwgX01BU0tF RF9CSVRfRU5BQkxFKFZTX1RJTUVSX0RJU1BBVENIKSwKPiA+ID4gIAkJICAgICAgIC8qIFhYWCBi aXQgZG9lc24ndCBzdGljayBvbiBCcm9hZHdhdGVyICovCj4gPiA+ICAJCSAgICAgICBJU19JOTY1 RyhpOTE1KSA/IDAgOiBWU19USU1FUl9ESVNQQVRDSCk7Cj4gPiA+IAo+ID4gPiAtCWlmIChJU19H RU4oaTkxNSwgNCkpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA0KQo+ID4gPiAg CQkvKgo+ID4gPiAgCQkgKiBEaXNhYmxlIENPTlNUQU5UX0JVRkZFUiBiZWZvcmUgaXQgaXMgbG9h ZGVkIGZyb20gdGhlIGNvbnRleHQKPiA+ID4gIAkJICogaW1hZ2UuIEZvciBhcyBpdCBpcyBsb2Fk ZWQsIGl0IGlzIGV4ZWN1dGVkIGFuZCB0aGUgc3RvcmVkCj4gPiA+IEBAIC0yMDU4LDcgKzIwNTgs NyBAQCB4Y3NfZW5naW5lX3dhX2luaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBz dHJ1Y3QgaTkxNV93YV9saXN0ICp3YWwpCj4gPiA+ICBzdGF0aWMgdm9pZAo+ID4gPiAgZW5naW5l X2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3Qg aTkxNV93YV9saXN0ICp3YWwpCj4gPiA+ICB7Cj4gPiA+IC0JaWYgKEk5MTVfU0VMRlRFU1RfT05M WShJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDQpKQo+ID4gPiArCWlmIChJOTE1X1NFTEZURVNU X09OTFkoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA0KSkKPiA+ID4gIAkJcmV0dXJuOwo+ ID4gPiAKPiA+ID4gIAlpZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCj4gPiA+IEBA IC0yMDcxLDcgKzIwNzEsNyBAQCB2b2lkIGludGVsX2VuZ2luZV9pbml0X3dvcmthcm91bmRzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgaTkx NV93YV9saXN0ICp3YWwgPSAmZW5naW5lLT53YV9saXN0Owo+ID4gPiAKPiA+ID4gLQlpZiAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPCA0KQo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZW5naW5l LT5pOTE1KSA8IDQpCj4gPiA+ICAJCXJldHVybjsKPiA+ID4gCj4gPiA+ICAJd2FfaW5pdF9zdGFy dCh3YWwsICJlbmdpbmUiLCBlbmdpbmUtPm5hbWUpOwo+ID4gPiBAQCAtMjExMiw5ICsyMTEyLDkg QEAgc3RhdGljIGJvb2wgbWNyX3JhbmdlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1 MzIgb2Zmc2V0KQo+ID4gPiAgCWNvbnN0IHN0cnVjdCBtY3JfcmFuZ2UgKm1jcl9yYW5nZXM7Cj4g PiA+ICAJaW50IGk7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTIpCj4g PiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSAxMikKPiA+ID4gIAkJbWNyX3JhbmdlcyA9 IG1jcl9yYW5nZXNfZ2VuMTI7Cj4gPiA+IC0JZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDgp Cj4gPiA+ICsJZWxzZSBpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpID49IDgpCj4gPiA+ICAJCW1jcl9y YW5nZXMgPSBtY3JfcmFuZ2VzX2dlbjg7Cj4gPiA+ICAJZWxzZQo+ID4gPiAgCQlyZXR1cm4gZmFs c2U7Cj4gPiA+IEBAIC0yMTQzLDcgKzIxNDMsNyBAQCB3YV9saXN0X3NybShzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwKPiA+ID4gIAl1MzIgc3JtLCAqY3M7Cj4gPiA+IAo+ID4gPiAgCXNybSA9IE1J X1NUT1JFX1JFR0lTVEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKPiA+ID4gLQlpZiAo SU5URUxfR0VOKGk5MTUpID49IDgpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA4 KQo+ID4gPiAgCQlzcm0rKzsKPiA+ID4gCj4gPiA+ICAJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxp c3Q7IGkgPCB3YWwtPmNvdW50OyBpKyssIHdhKyspIHsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX2NzLmMKPiA+ID4gaW5kZXggMzQ1M2ViNzdjNDk4Li42 NGFiZjVmZWFiZmEgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Nl bGZ0ZXN0X2VuZ2luZV9jcy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Nl bGZ0ZXN0X2VuZ2luZV9jcy5jCj4gPiA+IEBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBpbnQgd3Jp dGVfdGltZXN0YW1wKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBpbnQgc2xvdCkKPiA+ID4gIAkJ cmV0dXJuIFBUUl9FUlIoY3MpOwo+ID4gPiAKPiA+ID4gIAljbWQgPSBNSV9TVE9SRV9SRUdJU1RF Ul9NRU0gfCBNSV9VU0VfR0dUVDsKPiA+ID4gLQlpZiAoSU5URUxfR0VOKHJxLT5lbmdpbmUtPmk5 MTUpID49IDgpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihycS0+ZW5naW5lLT5pOTE1KSA+PSA4 KQo+ID4gPiAgCQljbWQrKzsKPiA+ID4gIAkqY3MrKyA9IGNtZDsKPiA+ID4gIAkqY3MrKyA9IGk5 MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfVElNRVNUQU1QKHJxLT5lbmdpbmUtPm1taW9fYmFzZSkp Owo+ID4gPiBAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBpbnQgcGVyZl9taV9iYl9zdGFydCh2 b2lkICphcmcpCj4gPiA+ICAJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gPiA+ICAJaW50IGVy ciA9IDA7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNykgLyogZm9y IHBlci1lbmdpbmUgQ1NfVElNRVNUQU1QICovCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+ aTkxNSkgPCA3KSAvKiBmb3IgcGVyLWVuZ2luZSBDU19USU1FU1RBTVAgKi8KPiA+ID4gIAkJcmV0 dXJuIDA7Cj4gPiA+IAo+ID4gPiAgCXBlcmZfYmVnaW4oZ3QpOwo+ID4gPiBAQCAtMjQ5LDcgKzI0 OSw3IEBAIHN0YXRpYyBpbnQgcGVyZl9taV9ub29wKHZvaWQgKmFyZykKPiA+ID4gIAllbnVtIGlu dGVsX2VuZ2luZV9pZCBpZDsKPiA+ID4gIAlpbnQgZXJyID0gMDsKPiA+ID4gCj4gPiA+IC0JaWYg KElOVEVMX0dFTihndC0+aTkxNSkgPCA3KSAvKiBmb3IgcGVyLWVuZ2luZSBDU19USU1FU1RBTVAg Ki8KPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDcpIC8qIGZvciBwZXItZW5n aW5lIENTX1RJTUVTVEFNUCAqLwo+ID4gPiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJcGVy Zl9iZWdpbihndCk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9lbmdpbmVfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2Vu Z2luZV9wbS5jCj4gPiA+IGluZGV4IDJjODk4NjIyYmRmYi4uNzJjY2EzZjBkYTIxIDEwMDY0NAo+ ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYwo+ ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYwo+ ID4gPiBAQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9lbmdpbmVfdGltZXN0YW1w cyh2b2lkICphcmcpCj4gPiA+ICAJICogdGhlIHNhbWUgQ1MgY2xvY2suCj4gPiA+ICAJICovCj4g PiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgOCkKPiA+ID4gKwlpZiAoR1JB UEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDgpCj4gPiA+ICAJCXJldHVybiAwOwo+ID4gPiAKPiA+ID4g IAlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndCwgaWQpIHsKPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmMKPiA+ID4gaW5kZXggMWY5MzU5MWE4YzY5 Li5lYTIyMDNhZjA3NjQgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jCj4gPiA+IEBAIC0zMjY5LDcgKzMyNjksNyBAQCBzdGF0aWMg aW50IGxpdmVfcHJlZW1wdF91c2VyKHZvaWQgKmFyZykKPiA+ID4gIAkJaWYgKCFpbnRlbF9lbmdp bmVfaGFzX3ByZWVtcHRpb24oZW5naW5lKSkKPiA+ID4gIAkJCWNvbnRpbnVlOwo+ID4gPiAKPiA+ ID4gLQkJaWYgKElTX0dFTihndC0+aTkxNSwgOCkgJiYgZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJf Q0xBU1MpCj4gPiA+ICsJCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID09IDggJiYgZW5naW5l LT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gPiA+ICAJCQljb250aW51ZTsgLyogd2UgbmVlZCBw ZXItY29udGV4dCBHUFIgKi8KPiA+ID4gCj4gPiA+ICAJCWlmIChpZ3RfbGl2ZV90ZXN0X2JlZ2lu KCZ0LCBndC0+aTkxNSwgX19mdW5jX18sIGVuZ2luZS0+bmFtZSkpIHsKPiA+ID4gQEAgLTQyOTMs NyArNDI5Myw3IEBAIHN0YXRpYyBpbnQgbGl2ZV92aXJ0dWFsX3ByZXNlcnZlZCh2b2lkICphcmcp Cj4gPiA+ICAJCXJldHVybiAwOwo+ID4gPiAKPiA+ID4gIAkvKiBBcyB3ZSB1c2UgQ1NfR1BSIHdl IGNhbm5vdCBydW4gYmVmb3JlIHRoZXkgZXhpc3RlZCBvbiBhbGwgZW5naW5lcy4gKi8KPiA+ID4g LQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDkpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihn dC0+aTkxNSkgPCA5KQo+ID4gPiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJZm9yIChjbGFz cyA9IDA7IGNsYXNzIDw9IE1BWF9FTkdJTkVfQ0xBU1M7IGNsYXNzKyspIHsKPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2d0X3BtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ndF9wbS5jCj4gPiA+IGluZGV4IGMwODQ1YmY3MmRk My4uYjk0NDEyMTdjYTNkIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9zZWxmdGVzdF9ndF9wbS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Nl bGZ0ZXN0X2d0X3BtLmMKPiA+ID4gQEAgLTc0LDEwICs3NCwxMCBAQCBzdGF0aWMgaW50IGxpdmVf Z3RfY2xvY2tzKHZvaWQgKmFyZykKPiA+ID4gIAkJcmV0dXJuIDA7Cj4gPiA+ICAJfQo+ID4gPiAK PiA+ID4gLQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDQpIC8qIEFueSBDU19USU1FU1RBTVA/ ICovCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA0KSAvKiBBbnkgQ1NfVElN RVNUQU1QPyAqLwo+ID4gPiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+IC0JaWYgKElTX0dFTihn dC0+aTkxNSwgNSkpCj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPT0gNSkKPiA+ ID4gIAkJLyoKPiA+ID4gIAkJICogWFhYIENTX1RJTUVTVEFNUCBsb3cgZHdvcmQgaXMgZHlzZnVu Y3Rpb25hbD8KPiA+ID4gIAkJICoKPiA+ID4gQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIGludCBs aXZlX2d0X2Nsb2Nrcyh2b2lkICphcmcpCj4gPiA+ICAJCSAqLwo+ID4gPiAgCQlyZXR1cm4gMDsK PiA+ID4gCj4gPiA+IC0JaWYgKElTX0dFTihndC0+aTkxNSwgNCkpCj4gPiA+ICsJaWYgKEdSQVBI SUNTX1ZFUihndC0+aTkxNSkgPT0gNCkKPiA+ID4gIAkJLyoKPiA+ID4gIAkJICogWFhYIENTX1RJ TUVTVEFNUCBhcHBlYXJzIGdpYmJlcmlzaAo+ID4gPiAgCQkgKgo+ID4gPiBAQCAtMTA1LDcgKzEw NSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ndF9jbG9ja3Modm9pZCAqYXJnKQo+ID4gPiAgCQl1NjQg dGltZTsKPiA+ID4gIAkJdTY0IGR0Owo+ID4gPiAKPiA+ID4gLQkJaWYgKElOVEVMX0dFTihlbmdp bmUtPmk5MTUpIDwgNyAmJiBlbmdpbmUtPmlkICE9IFJDUzApCj4gPiA+ICsJCWlmIChHUkFQSElD U19WRVIoZW5naW5lLT5pOTE1KSA8IDcgJiYgZW5naW5lLT5pZCAhPSBSQ1MwKQo+ID4gPiAgCQkJ Y29udGludWU7Cj4gPiA+IAo+ID4gPiAgCQltZWFzdXJlX2Nsb2NrcyhlbmdpbmUsICZjeWNsZXMs ICZkdCk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdjaGVj ay5jCj4gPiA+IGluZGV4IDViNjNkNGRmOGM5My4uODUzMjQ2ZmFkMDVmIDEwMDY0NAo+ID4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwo+ID4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwo+ID4gPiBA QCAtMTgwLDcgKzE4MCw3IEBAIGhhbmdfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGhhbmcgKmgsIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIAkJZ290byBjYW5jZWxfcnE7Cj4g PiA+IAo+ID4gPiAgCWJhdGNoID0gaC0+YmF0Y2g7Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPj0gOCkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDgpIHsK PiA+ID4gIAkJKmJhdGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONDsKPiA+ID4gIAkJKmJh dGNoKysgPSBsb3dlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKPiA+ID4gIAkJKmJh dGNoKysgPSB1cHBlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKPiA+ID4gQEAgLTE5 NCw3ICsxOTQsNyBAQCBoYW5nX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoYW5nICpoLCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVG RkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKPiA+ID4gIAkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRz KHZtYS0+bm9kZS5zdGFydCk7Cj4gPiA+ICAJCSpiYXRjaCsrID0gdXBwZXJfMzJfYml0cyh2bWEt Pm5vZGUuc3RhcnQpOwo+ID4gPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSA2 KSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpID49IDYpIHsKPiA+ ID4gIAkJKmJhdGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU1fR0VONDsKPiA+ID4gIAkJKmJhdGNo KysgPSAwOwo+ID4gPiAgCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMoaHdzX2FkZHJlc3MoaHdz LCBycSkpOwo+ID4gPiBAQCAtMjA3LDcgKzIwNyw3IEBAIGhhbmdfY3JlYXRlX3JlcXVlc3Qoc3Ry dWN0IGhhbmcgKmgsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIAkJKmJh dGNoKysgPSBNSV9OT09QOwo+ID4gPiAgCQkqYmF0Y2grKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFS VCB8IDEgPDwgODsKPiA+ID4gIAkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRzKHZtYS0+bm9kZS5z dGFydCk7Cj4gPiA+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpID49IDQpIHsKPiA+ ID4gKwl9IGVsc2UgaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPj0gNCkgewo+ID4gPiAgCQkq YmF0Y2grKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40IHwgTUlfVVNFX0dHVFQ7Cj4gPiA+ICAJ CSpiYXRjaCsrID0gMDsKPiA+ID4gIAkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRzKGh3c19hZGRy ZXNzKGh3cywgcnEpKTsKPiA+ID4gQEAgLTI0Myw3ICsyNDMsNyBAQCBoYW5nX2NyZWF0ZV9yZXF1 ZXN0KHN0cnVjdCBoYW5nICpoLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ ICAJfQo+ID4gPiAKPiA+ID4gIAlmbGFncyA9IDA7Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihndC0+ aTkxNSkgPD0gNSkKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8PSA1KQo+ID4g PiAgCQlmbGFncyB8PSBJOTE1X0RJU1BBVENIX1NFQ1VSRTsKPiA+ID4gCj4gPiA+ICAJZXJyID0g cnEtPmVuZ2luZS0+ZW1pdF9iYl9zdGFydChycSwgdm1hLT5ub2RlLnN0YXJ0LCBQQUdFX1NJWkUs IGZsYWdzKTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X2xsYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMKPiA+ID4g aW5kZXggOTQwMDZmMTE3YmJkLi40NTliNzc1ZjE2M2EgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jCj4gPiA+IEBAIC00NCw3ICs0NCw3IEBAIHN0YXRp YyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxsYykKPiA+ID4g IAkJaWYgKGZvdW5kICE9IGlhX2ZyZXEpIHsKPiA+ID4gIAkJCXByX2VycigiTWluIGZyZXEgdGFi bGUoJWQvWyVkLCAlZF0pOiVkTUh6IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgQ1BVIGZyZXEsIGZv dW5kICVkLCBleHBlY3RlZCAlZFxuIiwKPiA+ID4gIAkJCSAgICAgICBncHVfZnJlcSwgY29uc3Rz Lm1pbl9ncHVfZnJlcSwgY29uc3RzLm1heF9ncHVfZnJlcSwKPiA+ID4gLQkJCSAgICAgICBpbnRl bF9ncHVfZnJlcShycHMsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9G UkVRX1NDQUxFUiA6IDEpKSwKPiA+ID4gKwkJCSAgICAgICBpbnRlbF9ncHVfZnJlcShycHMsIGdw dV9mcmVxICogKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEp KSwKPiA+ID4gIAkJCSAgICAgICBmb3VuZCwgaWFfZnJlcSk7Cj4gPiA+ICAJCQllcnIgPSAtRUlO VkFMOwo+ID4gPiAgCQkJYnJlYWs7Cj4gPiA+IEBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyBpbnQg Z2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxsYykKPiA+ID4gIAkJaWYg KGZvdW5kICE9IHJpbmdfZnJlcSkgewo+ID4gPiAgCQkJcHJfZXJyKCJNaW4gZnJlcSB0YWJsZSgl ZC9bJWQsICVkXSk6JWRNSHogZGlkIG5vdCBtYXRjaCBleHBlY3RlZCByaW5nIGZyZXEsIGZvdW5k ICVkLCBleHBlY3RlZCAlZFxuIiwKPiA+ID4gIAkJCSAgICAgICBncHVfZnJlcSwgY29uc3RzLm1p bl9ncHVfZnJlcSwgY29uc3RzLm1heF9ncHVfZnJlcSwKPiA+ID4gLQkJCSAgICAgICBpbnRlbF9n cHVfZnJlcShycHMsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVR X1NDQUxFUiA6IDEpKSwKPiA+ID4gKwkJCSAgICAgICBpbnRlbF9ncHVfZnJlcShycHMsIGdwdV9m cmVxICogKEdSQVBISUNTX1ZFUihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpKSwK PiA+ID4gIAkJCSAgICAgICBmb3VuZCwgcmluZ19mcmVxKTsKPiA+ID4gIAkJCWVyciA9IC1FSU5W QUw7Cj4gPiA+ICAJCQlicmVhazsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3NlbGZ0ZXN0X2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf bHJjLmMKPiA+ID4gaW5kZXggZDhmNjYyMzUyNGU4Li4zMTE5MDE2ZDk5MTAgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gPiA+IEBAIC01ODQsNyAr NTg0LDcgQEAgc3RhdGljIGludCBfX2xpdmVfbHJjX2dwcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gPiA+ICAJaW50IGVycjsKPiA+ID4gIAlpbnQgbjsKPiA+ID4gCj4gPiA+IC0J aWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgOSAmJiBlbmdpbmUtPmNsYXNzICE9IFJFTkRF Ul9DTEFTUykKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2luZS0+aTkxNSkgPCA5ICYmIGVu Z2luZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQo+ID4gPiAgCQlyZXR1cm4gMDsgLyogR1BSIG9u bHkgb24gcmNzMCBmb3IgZ2VuOCAqLwo+ID4gPiAKPiA+ID4gIAllcnIgPSBncHJfbWFrZV9kaXJ0 eShlbmdpbmUtPmtlcm5lbF9jb250ZXh0KTsKPiA+ID4gQEAgLTEzODksMTAgKzEzODksMTAgQEAg c3RhdGljIGludCBfX2xyY19pc29sYXRpb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LCB1MzIgcG9pc29uKQo+ID4gPiAKPiA+ID4gIHN0YXRpYyBib29sIHNraXBfaXNvbGF0aW9uKGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIHsKPiA+ID4gLQlpZiAo ZW5naW5lLT5jbGFzcyA9PSBDT1BZX0VOR0lORV9DTEFTUyAmJiBJTlRFTF9HRU4oZW5naW5lLT5p OTE1KSA9PSA5KQo+ID4gPiArCWlmIChlbmdpbmUtPmNsYXNzID09IENPUFlfRU5HSU5FX0NMQVNT ICYmIEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID09IDkpCj4gPiA+ICAJCXJldHVybiB0cnVl Owo+ID4gPiAKPiA+ID4gLQlpZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MgJiYgSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPT0gMTEpCj4gPiA+ICsJaWYgKGVuZ2luZS0+Y2xhc3MgPT0g UkVOREVSX0NMQVNTICYmIEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID09IDExKQo+ID4gPiAg CQlyZXR1cm4gdHJ1ZTsKPiA+ID4gCj4gPiA+ICAJcmV0dXJuIGZhbHNlOwo+ID4gPiBAQCAtMTU1 MSw3ICsxNTUxLDcgQEAgc3RhdGljIGludCBfX2xpdmVfbHJjX2luZGlyZWN0X2N0eF9iYihzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gPiA+ICAJLyogV2UgdXNlIHRoZSBhbHJlYWR5 IHJlc2VydmVkIGV4dHJhIHBhZ2UgaW4gY29udGV4dCBzdGF0ZSAqLwo+ID4gPiAgCWlmICghYS0+ d2FfYmJfcGFnZSkgewo+ID4gPiAgCQlHRU1fQlVHX09OKGItPndhX2JiX3BhZ2UpOwo+ID4gPiAt CQlHRU1fQlVHX09OKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID09IDEyKTsKPiA+ID4gKwkJR0VN X0JVR19PTihHUkFQSElDU19WRVIoZW5naW5lLT5pOTE1KSA9PSAxMik7Cj4gPiA+ICAJCWdvdG8g dW5waW5fYjsKPiA+ID4gIAl9Cj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbW9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2Vs ZnRlc3RfbW9jcy5jCj4gPiA+IGluZGV4IGU1NWE4ODdkMTFlMi4uYjliYjBlNmU5N2Y3IDEwMDY0 NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9tb2NzLmMKPiA+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbW9jcy5jCj4gPiA+IEBA IC0xODMsNyArMTgzLDcgQEAgc3RhdGljIGJvb2wgbWNyX3JhbmdlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LCB1MzIgb2Zmc2V0KQo+ID4gPiAgCSAqIHdoaWNoIG9ubHkgY29udHJvbHMg Q1BVIGluaXRpYXRlZCBNTUlPLiBSb3V0aW5nIGRvZXMgbm90Cj4gPiA+ICAJICogd29yayBmb3Ig Q1MgYWNjZXNzIHNvIHdlIGNhbm5vdCB2ZXJpZnkgdGhlbSBvbiB0aGlzIHBhdGguCj4gPiA+ICAJ ICovCj4gPiA+IC0JcmV0dXJuIElOVEVMX0dFTihpOTE1KSA+PSA4ICYmIG9mZnNldCA+PSAweGIw MDAgJiYgb2Zmc2V0IDw9IDB4YjRmZjsKPiA+ID4gKwlyZXR1cm4gR1JBUEhJQ1NfVkVSKGk5MTUp ID49IDggJiYgb2Zmc2V0ID49IDB4YjAwMCAmJiBvZmZzZXQgPD0gMHhiNGZmOwo+ID4gPiAgfQo+ ID4gPiAKPiA+ID4gIHN0YXRpYyBpbnQgY2hlY2tfbDNjY190YWJsZShzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9zZWxmdGVzdF9yYzYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3JjNi5j Cj4gPiA+IGluZGV4IDcxMGY4MjVmNmU1YS4uOGM3MGI3ZTEyMDc0IDEwMDY0NAo+ID4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yYzYuYwo+ID4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yYzYuYwo+ID4gPiBAQCAtMTQwLDcgKzE0MCw3 IEBAIHN0YXRpYyBjb25zdCB1MzIgKl9fbGl2ZV9yYzZfY3R4KHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSkKPiA+ID4gIAl9Cj4gPiA+IAo+ID4gPiAgCWNtZCA9IE1JX1NUT1JFX1JFR0lTVEVSX01F TSB8IE1JX1VTRV9HR1RUOwo+ID4gPiAtCWlmIChJTlRFTF9HRU4ocnEtPmVuZ2luZS0+aTkxNSkg Pj0gOCkKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKHJxLT5lbmdpbmUtPmk5MTUpID49IDgpCj4g PiA+ICAJCWNtZCsrOwo+ID4gPiAKPiA+ID4gIAkqY3MrKyA9IGNtZDsKPiA+ID4gQEAgLTE5Myw3 ICsxOTMsNyBAQCBpbnQgbGl2ZV9yYzZfY3R4X3dhKHZvaWQgKmFyZykKPiA+ID4gIAlpbnQgZXJy ID0gMDsKPiA+ID4gCj4gPiA+ICAJLyogQSByZWFkIG9mIENUWF9JTkZPIHVwc2V0cyByYzYuIFBv a2UgdGhlIGJlYXIhICovCj4gPiA+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA4KQo+ID4g PiArCWlmIChHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgOCkKPiA+ID4gIAkJcmV0dXJuIDA7Cj4g PiA+IAo+ID4gPiAgCWVuZ2luZXMgPSByYW5kb21pc2VkX2VuZ2luZXMoZ3QsICZwcm5nLCAmY291 bnQpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf cmluZ19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9yaW5n X3N1Ym1pc3Npb24uYwo+ID4gPiBpbmRleCBjMTJlNzQxNzFiNjMuLjA0MTk1NDQwOGQwZiAxMDA2 NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmluZ19zdWJt aXNzaW9uLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfcmlu Z19zdWJtaXNzaW9uLmMKPiA+ID4gQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgc3RydWN0IGk5 MTVfdm1hICpjcmVhdGVfd2FsbHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ID4g PiAgCQlyZXR1cm4gRVJSX0NBU1QoY3MpOwo+ID4gPiAgCX0KPiA+ID4gCj4gPiA+IC0JaWYgKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDYpIHsKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVu Z2luZS0+aTkxNSkgPj0gNikgewo+ID4gPiAgCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9H RU40Owo+ID4gPiAgCQkqY3MrKyA9IDA7Cj4gPiA+IC0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZW5n aW5lLT5pOTE1KSA+PSA0KSB7Cj4gPiA+ICsJfSBlbHNlIGlmIChHUkFQSElDU19WRVIoZW5naW5l LT5pOTE1KSA+PSA0KSB7Cj4gPiA+ICAJCSpjcysrID0gTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQg fCBNSV9VU0VfR0dUVDsKPiA+ID4gIAkJKmNzKysgPSAwOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ IEBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIGludCBsaXZlX2N0eF9zd2l0Y2hfd2Eodm9pZCAq YXJnKQo+ID4gPiAgCQlpZiAoIWludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoZW5naW5lKSkK PiA+ID4gIAkJCWNvbnRpbnVlOwo+ID4gPiAKPiA+ID4gLQkJaWYgKElTX0dFTl9SQU5HRShndC0+ aTkxNSwgNCwgNSkpCj4gPiA+ICsJCWlmIChJU19HUkFQSElDU19WRVIoZ3QtPmk5MTUsIDQsIDUp KQo+ID4gPiAgCQkJY29udGludWU7IC8qIE1JX1NUT1JFX0RXT1JEIGlzIHByaXZpbGVnZWQhICov Cj4gPiA+IAo+ID4gPiAgCQlzYXZlZF93YSA9IGZldGNoX2FuZF96ZXJvKCZlbmdpbmUtPndhX2N0 eC52bWEpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRl c3RfcnBzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9ycHMuYwo+ID4gPiBp bmRleCAzY2ExYmQ1NzkzYzMuLjdlZTI1MTNlMTVmOSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcnBzLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcnBzLmMKPiA+ID4gQEAgLTIwNCw3ICsyMDQsNyBAQCBzdGF0 aWMgdm9pZCBzaG93X3BzdGF0ZV9saW1pdHMoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ID4gPiAg CQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoQlhUX1JQX1NUQVRFX0NBUCksCj4gPiA+ICAJCQlpbnRl bF91bmNvcmVfcmVhZChycHNfdG9fdW5jb3JlKHJwcyksCj4gPiA+ICAJCQkJCSAgQlhUX1JQX1NU QVRFX0NBUCkpOwo+ID4gPiAtCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDkpKSB7Cj4gPiA+ICsJ fSBlbHNlIGlmIChHUkFQSElDU19WRVIoaTkxNSkgPT0gOSkgewo+ID4gPiAgCQlwcl9pbmZvKCJQ X1NUQVRFX0xJTUlUU1sleF06IDB4JTA4eFxuIiwKPiA+ID4gIAkJCWk5MTVfbW1pb19yZWdfb2Zm c2V0KEdFTjlfUlBfU1RBVEVfTElNSVRTKSwKPiA+ID4gIAkJCWludGVsX3VuY29yZV9yZWFkKHJw c190b191bmNvcmUocnBzKSwKPiA+ID4gQEAgLTIyMiw3ICsyMjIsNyBAQCBpbnQgbGl2ZV9ycHNf Y2xvY2tfaW50ZXJ2YWwodm9pZCAqYXJnKQo+ID4gPiAgCXN0cnVjdCBpZ3Rfc3Bpbm5lciBzcGlu Owo+ID4gPiAgCWludCBlcnIgPSAwOwo+ID4gPiAKPiA+ID4gLQlpZiAoIWludGVsX3Jwc19pc19l bmFibGVkKHJwcykgfHwgSU5URUxfR0VOKGd0LT5pOTE1KSA8IDYpCj4gPiA+ICsJaWYgKCFpbnRl bF9ycHNfaXNfZW5hYmxlZChycHMpIHx8IEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA2KQo+ID4g PiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJaWYgKGlndF9zcGlubmVyX2luaXQoJnNwaW4s IGd0KSkKPiA+ID4gQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgdm9pZCBzaG93X3BjdV9jb25m aWcoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ID4gPiAKPiA+ID4gIAltaW5fZ3B1X2ZyZXEgPSBy cHMtPm1pbl9mcmVxOwo+ID4gPiAgCW1heF9ncHVfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Cj4gPiA+ IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihp OTE1KSA+PSA5KSB7Cj4gPiA+ICAJCS8qIENvbnZlcnQgR1QgZnJlcXVlbmN5IHRvIDUwIEhaIHVu aXRzICovCj4gPiA+ICAJCW1pbl9ncHVfZnJlcSAvPSBHRU45X0ZSRVFfU0NBTEVSOwo+ID4gPiAg CQltYXhfZ3B1X2ZyZXEgLz0gR0VOOV9GUkVRX1NDQUxFUjsKPiA+ID4gQEAgLTYxNCw3ICs2MTQs NyBAQCBpbnQgbGl2ZV9ycHNfZnJlcXVlbmN5X2NzKHZvaWQgKmFyZykKPiA+ID4gIAlpZiAoIWlu dGVsX3Jwc19pc19lbmFibGVkKHJwcykpCj4gPiA+ICAJCXJldHVybiAwOwo+ID4gPiAKPiA+ID4g LQlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA8IDgpIC8qIGZvciBDUyBzaW1wbGljaXR5ICovCj4g PiA+ICsJaWYgKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA4KSAvKiBmb3IgQ1Mgc2ltcGxpY2l0 eSAqLwo+ID4gPiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJaWYgKENQVV9MQVRFTkNZID49 IDApCj4gPiA+IEBAIC03NTUsNyArNzU1LDcgQEAgaW50IGxpdmVfcnBzX2ZyZXF1ZW5jeV9zcm0o dm9pZCAqYXJnKQo+ID4gPiAgCWlmICghaW50ZWxfcnBzX2lzX2VuYWJsZWQocnBzKSkKPiA+ID4g IAkJcmV0dXJuIDA7Cj4gPiA+IAo+ID4gPiAtCWlmIChJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgOCkg LyogZm9yIENTIHNpbXBsaWNpdHkgKi8KPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1 KSA8IDgpIC8qIGZvciBDUyBzaW1wbGljaXR5ICovCj4gPiA+ICAJCXJldHVybiAwOwo+ID4gPiAK PiA+ID4gIAlpZiAoQ1BVX0xBVEVOQ1kgPj0gMCkKPiA+ID4gQEAgLTEwMzEsNyArMTAzMSw3IEBA IGludCBsaXZlX3Jwc19pbnRlcnJ1cHQodm9pZCAqYXJnKQo+ID4gPiAgCSAqIEZpcnN0LCBsZXQn cyBjaGVjayB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgcmVjZWl2aW5nIGludGVycnVwdHMuCj4gPiA+ ICAJICovCj4gPiA+IAo+ID4gPiAtCWlmICghaW50ZWxfcnBzX2hhc19pbnRlcnJ1cHRzKHJwcykg fHwgSU5URUxfR0VOKGd0LT5pOTE1KSA8IDYpCj4gPiA+ICsJaWYgKCFpbnRlbF9ycHNfaGFzX2lu dGVycnVwdHMocnBzKSB8fCBHUkFQSElDU19WRVIoZ3QtPmk5MTUpIDwgNikKPiA+ID4gIAkJcmV0 dXJuIDA7Cj4gPiA+IAo+ID4gPiAgCWludGVsX2d0X3BtX2dldChndCk7Cj4gPiA+IEBAIC0xMTM2 LDcgKzExMzYsNyBAQCBpbnQgbGl2ZV9ycHNfcG93ZXIodm9pZCAqYXJnKQo+ID4gPiAgCSAqIHRo YXQgdGhlb3J5Lgo+ID4gPiAgCSAqLwo+ID4gPiAKPiA+ID4gLQlpZiAoIWludGVsX3Jwc19pc19l bmFibGVkKHJwcykgfHwgSU5URUxfR0VOKGd0LT5pOTE1KSA8IDYpCj4gPiA+ICsJaWYgKCFpbnRl bF9ycHNfaXNfZW5hYmxlZChycHMpIHx8IEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCA2KQo+ID4g PiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJaWYgKCFsaWJyYXBsX3N1cHBvcnRlZChndC0+ aTkxNSkpCj4gPiA+IEBAIC0xMjQwLDcgKzEyNDAsNyBAQCBpbnQgbGl2ZV9ycHNfZHluYW1pYyh2 b2lkICphcmcpCj4gPiA+ICAJICogbW92aW5nIHBhcnRzIGludG8gZHluYW1pYyByZWNsb2NraW5n IGJhc2VkIG9uIGxvYWQuCj4gPiA+ICAJICovCj4gPiA+IAo+ID4gPiAtCWlmICghaW50ZWxfcnBz X2lzX2VuYWJsZWQocnBzKSB8fCBJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgNikKPiA+ID4gKwlpZiAo IWludGVsX3Jwc19pc19lbmFibGVkKHJwcykgfHwgR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA8IDYp Cj4gPiA+ICAJCXJldHVybiAwOwo+ID4gPiAKPiA+ID4gIAlpZiAoaWd0X3NwaW5uZXJfaW5pdCgm c3BpbiwgZ3QpKQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2Vs ZnRlc3RfdGltZWxpbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVs aW5lLmMKPiA+ID4gaW5kZXggOWFkYmQ5ZDE0N2JlLi42NGRhMGM5MWRlYzEgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3RpbWVsaW5lLmMKPiA+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfdGltZWxpbmUuYwo+ID4gPiBA QCAtNDU3LDEyICs0NTcsMTIgQEAgc3RhdGljIGludCBlbWl0X2dndHRfc3RvcmVfZHcoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBhZGRyLCB1MzIgdmFsdWUpCj4gPiA+ICAJaWYgKElTX0VS UihjcykpCj4gPiA+ICAJCXJldHVybiBQVFJfRVJSKGNzKTsKPiA+ID4gCj4gPiA+IC0JaWYgKElO VEVMX0dFTihycS0+ZW5naW5lLT5pOTE1KSA+PSA4KSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZF UihycS0+ZW5naW5lLT5pOTE1KSA+PSA4KSB7Cj4gPiA+ICAJCSpjcysrID0gTUlfU1RPUkVfRFdP UkRfSU1NX0dFTjQgfCBNSV9VU0VfR0dUVDsKPiA+ID4gIAkJKmNzKysgPSBhZGRyOwo+ID4gPiAg CQkqY3MrKyA9IDA7Cj4gPiA+ICAJCSpjcysrID0gdmFsdWU7Cj4gPiA+IC0JfSBlbHNlIGlmIChJ TlRFTF9HRU4ocnEtPmVuZ2luZS0+aTkxNSkgPj0gNCkgewo+ID4gPiArCX0gZWxzZSBpZiAoR1JB UEhJQ1NfVkVSKHJxLT5lbmdpbmUtPmk5MTUpID49IDQpIHsKPiA+ID4gIAkJKmNzKysgPSBNSV9T VE9SRV9EV09SRF9JTU1fR0VONCB8IE1JX1VTRV9HR1RUOwo+ID4gPiAgCQkqY3MrKyA9IDA7Cj4g PiA+ICAJCSpjcysrID0gYWRkcjsKPiA+ID4gQEAgLTk5Miw3ICs5OTIsNyBAQCBzdGF0aWMgaW50 IGxpdmVfaHdzcF9yZWFkKHZvaWQgKmFyZykKPiA+ID4gIAkgKiBldmVuIGFjcm9zcyBtdWx0aXBs ZSB3cmFwcy4KPiA+ID4gIAkgKi8KPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihndC0+aTkx NSkgPCA4KSAvKiBDUyBjb252ZW5pZW5jZSBbU1JNL0xSTV0gKi8KPiA+ID4gKwlpZiAoR1JBUEhJ Q1NfVkVSKGd0LT5pOTE1KSA8IDgpIC8qIENTIGNvbnZlbmllbmNlIFtTUk0vTFJNXSAqLwo+ID4g PiAgCQlyZXR1cm4gMDsKPiA+ID4gCj4gPiA+ICAJdGwgPSBpbnRlbF90aW1lbGluZV9jcmVhdGUo Z3QpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf d29ya2Fyb3VuZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91 bmRzLmMKPiA+ID4gaW5kZXggNjQ5MzdlYzNmMmRjLi5jMzA3NTRkYWY0YjEgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMKPiA+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+ ID4gPiBAQCAtMTQ1LDcgKzE0NSw3IEBAIHJlYWRfbm9ucHJpdnMoc3RydWN0IGludGVsX2NvbnRl eHQgKmNlKQo+ID4gPiAgCQlnb3RvIGVycl9yZXE7Cj4gPiA+IAo+ID4gPiAgCXNybSA9IE1JX1NU T1JFX1JFR0lTVEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKPiA+ID4gLQlpZiAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOCkKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2lu ZS0+aTkxNSkgPj0gOCkKPiA+ID4gIAkJc3JtKys7Cj4gPiA+IAo+ID4gPiAgCWNzID0gaW50ZWxf cmluZ19iZWdpbihycSwgNCAqIFJJTkdfTUFYX05PTlBSSVZfU0xPVFMpOwo+ID4gPiBAQCAtNTQ2 LDcgKzU0Niw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0KHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSkKPiA+ID4gCj4gPiA+ICAJCXNybSA9IE1JX1NUT1JFX1JFR0lTVEVSX01F TTsKPiA+ID4gIAkJbHJtID0gTUlfTE9BRF9SRUdJU1RFUl9NRU07Cj4gPiA+IC0JCWlmIChJTlRF TF9HRU4oZW5naW5lLT5pOTE1KSA+PSA4KQo+ID4gPiArCQlpZiAoR1JBUEhJQ1NfVkVSKGVuZ2lu ZS0+aTkxNSkgPj0gOCkKPiA+ID4gIAkJCWxybSsrLCBzcm0rKzsKPiA+ID4gCj4gPiA+ICAJCXBy X2RlYnVnKCIlczogV3JpdGluZyBnYXJiYWdlIHRvICV4XG4iLAo+ID4gPiBAQCAtNzQ5LDcgKzc0 OSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9kaXJ0eV93aGl0ZWxpc3Qodm9pZCAqYXJnKQo+ID4gPiAK PiA+ID4gIAkvKiBDYW4gdGhlIHVzZXIgd3JpdGUgdG8gdGhlIHdoaXRlbGlzdGVkIHJlZ2lzdGVy cz8gKi8KPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPCA3KSAvKiBtaW5p bXVtIHJlcXVpcmVtZW50IGZvciBMUkksIFNSTSwgTFJNICovCj4gPiA+ICsJaWYgKEdSQVBISUNT X1ZFUihndC0+aTkxNSkgPCA3KSAvKiBtaW5pbXVtIHJlcXVpcmVtZW50IGZvciBMUkksIFNSTSwg TFJNICovCj4gPiA+ICAJCXJldHVybiAwOwo+ID4gPiAKPiA+ID4gIAlmb3JfZWFjaF9lbmdpbmUo ZW5naW5lLCBndCwgaWQpIHsKPiA+ID4gQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMgaW50IHJl YWRfd2hpdGVsaXN0ZWRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiA+ID4g IAkJZ290byBlcnJfcmVxOwo+ID4gPiAKPiA+ID4gIAlzcm0gPSBNSV9TVE9SRV9SRUdJU1RFUl9N RU07Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDgpCj4gPiA+ICsJaWYg KEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUpID49IDgpCj4gPiA+ICAJCXNybSsrOwo+ID4gPiAK PiA+ID4gIAljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQgKiBlbmdpbmUtPndoaXRlbGlzdC5j b3VudCk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Yy5jCj4gPiA+IGlu ZGV4IGFkYWUwNGM0N2FhYi4uODRmODA2OTExMzcwIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuYwo+ID4gPiBAQCAtNjAsNyArNjAsNyBAQCB2b2lkIGlu dGVsX2d1Y19pbml0X3NlbmRfcmVncyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4gPiA+ICAJZW51 bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5zID0gMDsKPiA+ID4gIAl1bnNpZ25lZCBpbnQg aTsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEpIHsKPiA+ID4g KwlpZiAoR1JBUEhJQ1NfVkVSKGd0LT5pOTE1KSA+PSAxMSkgewo+ID4gPiAgCQlndWMtPnNlbmRf cmVncy5iYXNlID0KPiA+ID4gIAkJCQlpOTE1X21taW9fcmVnX29mZnNldChHRU4xMV9TT0ZUX1ND UkFUQ0goMCkpOwo+ID4gPiAgCQlndWMtPnNlbmRfcmVncy5jb3VudCA9IEdFTjExX1NPRlRfU0NS QVRDSF9DT1VOVDsKPiA+ID4gQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIGludGVsX2d1Y19pbml0 X2Vhcmx5KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPiA+ID4gCj4gPiA+ICAJbXV0ZXhfaW5pdCgm Z3VjLT5zZW5kX211dGV4KTsKPiA+ID4gIAlzcGluX2xvY2tfaW5pdCgmZ3VjLT5pcnFfbG9jayk7 Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSAxMSkgewo+ID4gPiArCWlmIChHUkFQSElD U19WRVIoaTkxNSkgPj0gMTEpIHsKPiA+ID4gIAkJZ3VjLT5ub3RpZnlfcmVnID0gR0VOMTFfR1VD X0hPU1RfSU5URVJSVVBUOwo+ID4gPiAgCQlndWMtPmludGVycnVwdHMucmVzZXQgPSBnZW4xMV9y ZXNldF9ndWNfaW50ZXJydXB0czsKPiA+ID4gIAkJZ3VjLT5pbnRlcnJ1cHRzLmVuYWJsZSA9IGdl bjExX2VuYWJsZV9ndWNfaW50ZXJydXB0czsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19hZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3VjL2ludGVsX2d1Y19hZHMuYwo+ID4gPiBpbmRleCAxNzUyNjcxNzM2OGMuLmIzMmZhZmJhMmE5 MCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3Vj X2Fkcy5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19h ZHMuYwo+ID4gPiBAQCAtMTYyLDcgKzE2Miw3IEBAIHN0YXRpYyB2b2lkIF9fZ3VjX2Fkc19pbml0 KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPiA+ID4gIAlibG9iLT5zeXN0ZW1faW5mby5nZW5lcmlj X2d0X3N5c2luZm9bR1VDX0dFTkVSSUNfR1RfU1lTSU5GT19WREJPWF9TRkNfU1VQUE9SVF9NQVNL XSA9Cj4gPiA+ICAJCWd0LT5pbmZvLnZkYm94X3NmY19hY2Nlc3M7Cj4gPiA+IAo+ID4gPiAtCWlm IChJTlRFTF9HRU4oaTkxNSkgPj0gMTIgJiYgIUlTX0RHRlgoaTkxNSkpIHsKPiA+ID4gKwlpZiAo R1JBUEhJQ1NfVkVSKGk5MTUpID49IDEyICYmICFJU19ER0ZYKGk5MTUpKSB7Cj4gPiA+ICAJCXUz MiBkaXN0ZGJyZWcgPSBpbnRlbF91bmNvcmVfcmVhZChndC0+dW5jb3JlLAo+ID4gPiAgCQkJCQkJ ICBHRU4xMl9ESVNUX0RCU19QT1BVTEFURUQpOwo+ID4gPiAgCQlibG9iLT5zeXN0ZW1faW5mby5n ZW5lcmljX2d0X3N5c2luZm9bR1VDX0dFTkVSSUNfR1RfU1lTSU5GT19ET09SQkVMTF9DT1VOVF9Q RVJfU1FJREldID0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Vj L2ludGVsX2d1Y19mdy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Z3 LmMKPiA+ID4gaW5kZXggMjI3MGQ2YjNiMjcyLi43NmZlNzY2YWQxYmMgMTAwNjQ0Cj4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19mdy5jCj4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19mdy5jCj4gPiA+IEBAIC0zMCw3 ICszMCw3IEBAIHN0YXRpYyB2b2lkIGd1Y19wcmVwYXJlX3hmZXIoc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlKQo+ID4gPiAgCWVsc2UKPiA+ID4gIAkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgR0VOOV9HVF9QTV9DT05GSUcsIEdUX0RPT1JCRUxMX0VOQUJMRSk7Cj4gPiA+IAo+ID4gPiAt CWlmIChJU19HRU4odW5jb3JlLT5pOTE1LCA5KSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIo dW5jb3JlLT5pOTE1KSA9PSA5KSB7Cj4gPiA+ICAJCS8qIERPUCBDbG9jayBHYXRpbmcgRW5hYmxl IGZvciBHdUMgY2xvY2tzICovCj4gPiA+ICAJCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBHRU43 X01JU0NDUENUTCwKPiA+ID4gIAkJCQkgMCwgR0VOOF9ET1BfQ0xPQ0tfR0FURV9HVUNfRU5BQkxF KTsKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1 Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3Vi bWlzc2lvbi5jCj4gPiA+IGluZGV4IDMzNTcxOWYxNzQ5MC4uNTQxZjZkYTFlYzQ3IDEwMDY0NAo+ ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lv bi5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJt aXNzaW9uLmMKPiA+ID4gQEAgLTQzOCw3ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW50ZXJy dXB0c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gPiA+ICAJdTMyIGlycXMgPSBHVF9D T05URVhUX1NXSVRDSF9JTlRFUlJVUFQ7Cj4gPiA+ICAJdTMyIGRtYXNrID0gaXJxcyA8PCAxNiB8 IGlycXM7Cj4gPiA+IAo+ID4gPiAtCUdFTV9CVUdfT04oSU5URUxfR0VOKGd0LT5pOTE1KSA8IDEx KTsKPiA+ID4gKwlHRU1fQlVHX09OKEdSQVBISUNTX1ZFUihndC0+aTkxNSkgPCAxMSk7Cj4gPiA+ IAo+ID4gPiAgCS8qIERvbid0IGhhbmRsZSB0aGUgY3R4IHN3aXRjaCBpbnRlcnJ1cHQgaW4gR3VD IHN1Ym1pc3Npb24gbW9kZSAqLwo+ID4gPiAgCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBHRU4x MV9SRU5ERVJfQ09QWV9JTlRSX0VOQUJMRSwgZG1hc2ssIDApOwo+ID4gPiBAQCAtNDUxLDcgKzQ1 MSw3IEBAIHN0YXRpYyB2b2lkIGd1Y19pbnRlcnJ1cHRzX3JlbGVhc2Uoc3RydWN0IGludGVsX2d0 ICpndCkKPiA+ID4gIAl1MzIgaXJxcyA9IEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVDsKPiA+ ID4gIAl1MzIgZG1hc2sgPSBpcnFzIDw8IDE2IHwgaXJxczsKPiA+ID4gCj4gPiA+IC0JR0VNX0JV R19PTihJTlRFTF9HRU4oZ3QtPmk5MTUpIDwgMTEpOwo+ID4gPiArCUdFTV9CVUdfT04oR1JBUEhJ Q1NfVkVSKGd0LT5pOTE1KSA8IDExKTsKPiA+ID4gCj4gPiA+ICAJLyogSGFuZGxlIGN0eCBzd2l0 Y2ggaW50ZXJydXB0cyBhZ2FpbiAqLwo+ID4gPiAgCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBH RU4xMV9SRU5ERVJfQ09QWV9JTlRSX0VOQUJMRSwgMCwgZG1hc2spOwo+ID4gPiBAQCAtNjQ4LDcg KzY0OCw3IEBAIHN0YXRpYyB2b2lkIGd1Y19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gPiA+ICAJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuOF9lbWl0X2Zs dXNoX3hjczsKPiA+ID4gIAllbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iID0gZ2VuOF9lbWl0 X2luaXRfYnJlYWRjcnVtYjsKPiA+ID4gIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0g Z2VuOF9lbWl0X2ZpbmlfYnJlYWRjcnVtYl94Y3M7Cj4gPiA+IC0JaWYgKElOVEVMX0dFTihlbmdp bmUtPmk5MTUpID49IDEyKSB7Cj4gPiA+ICsJaWYgKEdSQVBISUNTX1ZFUihlbmdpbmUtPmk5MTUp ID49IDEyKSB7Cj4gPiA+ICAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW4xMl9l bWl0X2ZpbmlfYnJlYWRjcnVtYl94Y3M7Cj4gPiA+ICAJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdl bjEyX2VtaXRfZmx1c2hfeGNzOwo+ID4gPiAgCX0KPiA+ID4gQEAgLTY3MCw3ICs2NzAsNyBAQCBz dGF0aWMgdm9pZCBndWNfZGVmYXVsdF92ZnVuY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ID4gPiAKPiA+ID4gIHN0YXRpYyB2b2lkIHJjc19zdWJtaXNzaW9uX292ZXJyaWRlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiA+ID4gIHsKPiA+ID4gLQlzd2l0Y2ggKElO VEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7Cj4gPiA+ICsJc3dpdGNoIChHUkFQSElDU19WRVIoZW5n aW5lLT5pOTE1KSkgewo+ID4gPiAgCWNhc2UgMTI6Cj4gPiA+ICAJCWVuZ2luZS0+ZW1pdF9mbHVz aCA9IGdlbjEyX2VtaXRfZmx1c2hfcmNzOwo+ID4gPiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVh ZGNydW1iID0gZ2VuMTJfZW1pdF9maW5pX2JyZWFkY3J1bWJfcmNzOwo+ID4gPiBAQCAtNzAwLDcg KzcwMCw3IEBAIGludCBpbnRlbF9ndWNfc3VibWlzc2lvbl9zZXR1cChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gPiA+ICAJICogVGhlIHNldHVwIHJlbGllcyBvbiBzZXZlcmFsIGFz c3VtcHRpb25zIChlLmcuIGlycXMgYWx3YXlzIGVuYWJsZWQpCj4gPiA+ICAJICogdGhhdCBhcmUg b25seSB2YWxpZCBvbiBnZW4xMSsKPiA+ID4gIAkgKi8KPiA+ID4gLQlHRU1fQlVHX09OKElOVEVM X0dFTihpOTE1KSA8IDExKTsKPiA+ID4gKwlHRU1fQlVHX09OKEdSQVBISUNTX1ZFUihpOTE1KSA8 IDExKTsKPiA+ID4gCj4gPiA+ICAJdGFza2xldF9zZXR1cCgmZW5naW5lLT5leGVjbGlzdHMudGFz a2xldCwgZ3VjX3N1Ym1pc3Npb25fdGFza2xldCk7Cj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfaHVjLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9odWMuYwo+ID4gPiBpbmRleCA1NmQyMTQ0ZGM2YTAuLmZjNTM4N2I0 MTBhMiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxf aHVjLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfaHVjLmMK PiA+ID4gQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBpbnRlbF9odWNfaW5pdF9lYXJseShzdHJ1Y3Qg aW50ZWxfaHVjICpodWMpCj4gPiA+IAo+ID4gPiAgCWludGVsX3VjX2Z3X2luaXRfZWFybHkoJmh1 Yy0+ZncsIElOVEVMX1VDX0ZXX1RZUEVfSFVDKTsKPiA+ID4gCj4gPiA+IC0JaWYgKElOVEVMX0dF TihpOTE1KSA+PSAxMSkgewo+ID4gPiArCWlmIChHUkFQSElDU19WRVIoaTkxNSkgPj0gMTEpIHsK PiA+ID4gIAkJaHVjLT5zdGF0dXMucmVnID0gR0VOMTFfSFVDX0tFUk5FTF9MT0FEX0lORk87Cj4g PiA+ICAJCWh1Yy0+c3RhdHVzLm1hc2sgPSBIVUNfTE9BRF9TVUNDRVNTRlVMOwo+ID4gPiAgCQlo dWMtPnN0YXR1cy52YWx1ZSA9IEhVQ19MT0FEX1NVQ0NFU1NGVUw7Cj4gPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvdWMvaW50ZWxfdWMuYwo+ID4gPiBpbmRleCA2YWJiOGYyZGMzM2QuLjZjMmJmNGI2 YmMxMCAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxf dWMuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5jCj4g PiA+IEBAIC0yMyw3ICsyMyw3IEBAIHN0YXRpYyB2b2lkIHVjX2V4cGFuZF9kZWZhdWx0X29wdGlv bnMoc3RydWN0IGludGVsX3VjICp1YykKPiA+ID4gIAkJcmV0dXJuOwo+ID4gPiAKPiA+ID4gIAkv KiBEb24ndCBlbmFibGUgR3VDL0h1QyBvbiBwcmUtR2VuMTIgKi8KPiA+ID4gLQlpZiAoSU5URUxf R0VOKGk5MTUpIDwgMTIpIHsKPiA+ID4gKwlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgMTIpIHsK PiA+ID4gIAkJaTkxNS0+cGFyYW1zLmVuYWJsZV9ndWMgPSAwOwo+ID4gPiAgCQlyZXR1cm47Cj4g PiA+ICAJfQo+ID4gPiBAQCAtNDY3LDcgKzQ2Nyw3IEBAIHN0YXRpYyBpbnQgX191Y19pbml0X2h3 KHN0cnVjdCBpbnRlbF91YyAqdWMpCj4gPiA+IAo+ID4gPiAgCS8qIFdhRW5hYmxldUtlcm5lbEhl YWRlclZhbGlkRml4OnNrbCAqLwo+ID4gPiAgCS8qIFdhRW5hYmxlR3VDQm9vdEhhc2hDaGVja05v dFNldDpza2wsYnh0LGtibCAqLwo+ID4gPiAtCWlmIChJU19HRU4oaTkxNSwgOSkpCj4gPiA+ICsJ aWYgKEdSQVBISUNTX1ZFUihpOTE1KSA9PSA5KQo+ID4gPiAgCQlhdHRlbXB0cyA9IDM7Cj4gPiA+ ICAJZWxzZQo+ID4gPiAgCQlhdHRlbXB0cyA9IDE7Cj4gPiA+IC0tCj4gPiA+IDIuMzEuMQo+ID4g PiAKPiA+IAo+ID4gLS0gCj4gPiBNYXR0IFJvcGVyCj4gPiBHcmFwaGljcyBTb2Z0d2FyZSBFbmdp bmVlcgo+ID4gVlRULU9TR0MgUGxhdGZvcm0gRW5hYmxlbWVudAo+ID4gSW50ZWwgQ29ycG9yYXRp b24KPiA+ICg5MTYpIDM1Ni0yNzk1CgotLSAKTWF0dCBSb3BlcgpHcmFwaGljcyBTb2Z0d2FyZSBF bmdpbmVlcgpWVFQtT1NHQyBQbGF0Zm9ybSBFbmFibGVtZW50CkludGVsIENvcnBvcmF0aW9uCig5 MTYpIDM1Ni0yNzk1Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=