X-Original-To: alpine-aports@lists.alpinelinux.org Received: from mail.bitmessage.ch (mail.bitmessage.ch [146.228.112.252]) by lists.alpinelinux.org (Postfix) with ESMTP id 4DAC55C48AC for ; Mon, 10 Apr 2017 16:18:48 +0000 (GMT) dkim-signature: v=1; a=rsa-sha256; d=bitmessage.ch; s=mail; c=relaxed/relaxed; q=dns/txt; h=From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=bwuRRcJixL/7y3kApZezCZVFfsKM+yZIjUrRGg0iVPc=; b=VOAMn5uC0EcS1YT41DF5Rgs7Qb4SRvsqUo9sL7aUuPojv5GXnZHxEdAj9BuSlObQEE0495LuAbXUJIrYHOJWiLPVQgQb47FjbXfpqGVblYraFWQD52ZGoZLbH+1Tq7eG4CZst/6HE9Xk3WERc/jIOd2v5BFBfcfUZrsvIAZBq5s= Received: from localhost (ppp91-122-181-7.pppoe.avangarddsl.ru [91.122.181.7]) by mail.bitmessage.ch with ESMTPSA (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256) ; Mon, 10 Apr 2017 18:18:20 +0200 Date: Mon, 10 Apr 2017 16:18:43 +0000 From: =?utf-8?Q?C=C3=A1g?= To: alpine-aports@lists.alpinelinux.org Subject: [alpine-aports] [PATCH] mg: upgrade to 20170401 and add unicode support Message-ID: <20170410161843.GB17236@alpine> X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="NzB8fVQJ5HfG6fxh" Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.8.0 (2017-02-23) --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename="mg.patch" --- a/main/mg/APKBUILD +++ b/main/mg/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Lee Hinman # Maintainer: Natanael Copa pkgname=mg -pkgver=20140414 -pkgrel=3 +pkgver=20170401 +pkgrel=0 pkgdesc="mg is Micro GNU/emacs, this is a portable version of the mg maintained by the OpenBSD team." url="http://homepage.boetes.org/software/mg" arch="x86 x86_64" @@ -11,8 +11,9 @@ makedepends="ncurses-dev libbsd-dev bsd-compat-headers" install= subpackages="$pkgname-doc" -source="http://dev.alpinelinux.org/archive/$pkgname-$pkgver.tar.gz - musl-fixes.patch +source="http://homepage.boetes.org/software/mg/$pkgname-$pkgver.tar.gz + missing-defines.patch + unicode.patch " _builddir="$srcdir"/$pkgname-$pkgver @@ -38,9 +39,6 @@ install -Dm644 tutorial "$pkgdir"/usr/share/doc/$pkgname/tutorial } -md5sums="ad4a99a5e26d25db75af7936c6657fbe mg-20140414.tar.gz -b09b7700ded811df8f6cf35f9a8df1ff musl-fixes.patch" -sha256sums="89ce25ee13cedc14c3c5c7b76d7a9e0ea38a060ad61e90ac43258d8dadf0d065 mg-20140414.tar.gz -f05ae4f0cd9475932ebe51e32ce05217e7fb59a5a0614efd2b33af4cc888323c musl-fixes.patch" -sha512sums="b080b24c6015225ee1670eb6f062a21f40d34b02c699687d92842983506497c93e15cceb79d05b6cbbebfa8466f7261cb7dde8bcc4888489236cf64104215161 mg-20140414.tar.gz -47ced85e221951c02654533a015be67018c045ad336a9997b70dcc869f10546318aeae8d1fbd43248d485e4f9c1c950deb93789b7aa8def493ba036af1beaaa1 musl-fixes.patch" +sha512sums="729b2d9ba7eb236cc8bcbcf3ac7604494980cbf2fd21dc5a3856011bc830eee75be29a246b0bf3dfa6c7a03fcf69a902ae50d05ea371ac4d0225a4da6089d7ce mg-20170401.tar.gz +f1967dd33a025e11ff63ba797c2fb64ac0679cd6c09a332241a28e0976b96db467894e1e3573c5bc88b7feaecdb430695aa4f8fa2712b227d0947b3d8b05c97c missing-defines.patch +586a622b6838bb5b4f2e958352cec6bd4ca9c7db93bcc0dfeb6d8e588fb1191bc5f01afd17a385c10ddbd6ceb631d2d9caccd4e080294d1fceb5db676ab6a4fc unicode.patch" --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename="missing-defines.patch" diff --git a/fileio.c b/fileio.c index 4bb1f46..c937eb0 100644 --- a/fileio.c +++ b/fileio.c @@ -27,6 +27,14 @@ #include "kbd.h" #include "pathnames.h" +#ifndef MAXNAMLEN +#define MAXNAMLEN 255 +#endif + +#ifndef DEFFILEMODE +#define DEFFILEMODE 0666 +#endif + static char *bkuplocation(const char *); static int bkupleavetmp(const char *); diff --git a/re_search.c b/re_search.c index 287030a..da44f00 100644 --- a/re_search.c +++ b/re_search.c @@ -34,6 +34,10 @@ #define RE_NMATCH 10 /* max number of matches */ #define REPLEN 256 /* max length of replacement string */ +#ifndef REG_STARTEND +#define REG_STARTEND 4 +#endif + char re_pat[NPAT]; /* regex pattern */ int re_srch_lastdir = SRCH_NOPR; /* last search flags */ int casefoldsearch = TRUE; /* does search ignore case? */ --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset="utf-8" Content-Disposition: attachment; filename="unicode.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZA0KaW5kZXggOTk0ZDZiZS4uMmY1ZDJj MSAxMDA2NDQNCi0tLSBhL1JFQURNRS5tZA0KKysrIGIvUkVBRE1FLm1kDQpAQCAtMSw0OSArMSw1 MCBAQA0KLSMgUE9SVElORyBNRyBBTkQgVVNJTkcgTElCQlNEDQorIyBtZyB3aXRoIHdpZGUgZGlz cGxheSBzdXBwb3J0Lg0KIA0KLUkndmUgbWFpbnRhaW5lZCBhbmQgcG9ydGVkIG1nIGZvciBxdWl0 ZSBzb21lIHRpbWUgbm93IGFuZCBhdCBmaXJzdCBpdA0KLXdhcyBlYXN5IHJlY2VudGx5IGl0IGdv dCBoYXJkZXIgYW5kIGhhcmRlciBzaW5jZSBpdCB3YXMgYSBtb3ZpbmcNCi10YXJnZXQuIEVzcGVj aWFsbHkgdGhlIGluY2x1c2lvbiBvZiBzb21lIHN5c3RlbSBzcGVjaWZpYyBsaWJyYXJpZXMgc2lu Y2UNCi1hYm91dCAyIHllYXJzIGFnbyBtYWRlIGl0IHRvbyBtdWNoIG9mIGFuIGVmZm9ydCBmb3Ig bXkgaHVtYmxlIGNvZGluZw0KLXNraWxscy4NCi0NCi1TbyByZWNlbnRseSBKYXNwZXIgTGlldmlz c2UgQWRyaWFhbnNlIGFza2VkIG1lIHRvIHRyeSBpdCBhZ2FpbiBhbmQgSQ0KLXJlc3RhcnRlZCB3 b3JraW5nIG9uIHRoZSBwcm9qZWN0IGFuZCByYW4gaW50byBleGFjdGx5IHRoZSBzYW1lIHByb2Js ZW1zDQotYWdhaW4uIFdoaWxlIGdvb2dsaW5nIGZvciBzb2x1dGlvbnMgSSByYW4gaW50byBsaWJi c2Q6DQotDQotICBodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy93aWtpLw0KLQ0KLUl0J3Mg YSBwb3J0aW5nIGxpYnJhcnkgZm9yIE9wZW5CU0QgY29kZSEgQW5kIGFmdGVyIGluc3RhbGxpbmcg dGhhdCBpdA0KLXdhcyBhIHBpZWNlIG9mIHBpZSB0byBnZXQgbWcgcG9ydGVkIGFnYWluLg0KLQ0K LSMjIFBPUlRJTkcgVE8gQUxMIE9USEVSIFBMQVRGT1JNUw0KLQ0KLU9rYXksIHRoYXQgd2FzIGRl Ymlhbi4gTm93IEkgaGF2ZSB0byBnZXQgdGhlIHJlc3Qgb2YgYWxsIHRoZSBwcmV2aW91c2x5DQot c3Vwb3J0ZWQgcGxhdGZvcm1zIHdvcmtpbmcgYWdhaW4uIEFsbCBoZWxwIGlzIHdlbGNvbWUgYW5k IGFzIGFsd2F5czoNCi1QbGVhc2UgcHJvdmlkZSBwYXRjaGVzIHRoYXQgZG8gbm90IGJyZWFrIHN0 dWZmIGZvciBvdGhlciBwbGF0Zm9ybXMuDQotDQotIyMgQlVJTERJTkcgTUcNCi0NCi1TbywgYmFz aWMgaW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBtZzoNCi0NCi0gLSBHZXQgbGliYnNkIGluc3Rh bGxlZC4NCi0gLSBSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kczoNCitJIGp1c3QgcmVjZWl2ZWQg dGhpcyBhbWF6aW5nIHBhdGNoIGZyb20gUy4gR2lsZXMuIEZvciB0aG9zZSBpbXBhdGllbnQNCitw ZW9wbGU6IGNoZWNrIGl0IG91dCAodGloaWhpKSBhbmQgYWRkIHRoaXMgbGluZSB0byB5b3VyIGAu bWdgDQogDQogYGBgDQotbWFrZQ0KLXN1ZG8gbWFrZSBpbnN0YWxsDQorc2V0LWRlZmF1bHQtbW9k ZSAid2lkZSINCiBgYGANCiANCi0jIyBVU0lORyBDVlMNCi0NCi1UaGlzIGNvZGUgaXMgdGhlIGN2 cyBjaGVja291dCBmcm9tIHRoZSBPcGVuQlNEIHByb2plY3Qgc28gaWYgeW91IGluc3RhbGwNCi1j dnMgeW91IGNhbiBzZWUgd2hhdCBJIGNoYW5nZWQgdG8gcG9ydCBtZy4gTGlrZSB0aGlzOg0KLQ0K LWBgYA0KLWN2cyBkaWZmIC11dw0KLWBgYA0KLQ0KLSMjIEFCT1VUIGZnZXRsbigpDQotDQotSW5j YXNlIHlvdSBhcmUgd29uZGVyaW5nIGFib3V0IHRoYXQgZGVwcmVjYXRpb24gd2FybmluZywgaGVy ZSBpcyBhIG5pY2UgZXhwbGFuYXRpb24gYWJvdXQgd2h5IGl0IGlzIGhhcmQgdG8gZml4Og0KLQ0K LSAgaHR0cDovL25pYWxsb2hpZ2dpbnMuY29tLzIwMDkvMTAvMDMvcmVhZC1hLWZpbGUtbGluZS1i eS1saW5lLWluLWMtc2VjdXJlLWZnZXRzLWlkaW9tLw0KKyMjIEludHJvZHVjdGlvbiBieSBTLiBH aWxlcw0KKw0KK0hpLA0KKw0KK0kndmUgZ290IGEgcGF0Y2ggdGhhdCBhbGxvd3MgbWcgdG8gZGlz cGxheSB3aWRlIGNoYXJhY3RlcnMsIGlmIHlvdSdyZQ0KK2ludGVyZXN0ZWQuDQorDQorSXQgY2Fu IGJlIHR1cm5lZCBvbiBieSBzaG93LXdpZGUtbW9kZSAoYmV0dGVyIG5hbWUgd2VsY29tZSksIGFu ZCBpcw0KK2ZhaXJseSBsaW1pdGVkIGluIHJlZ2FyZCB0byB3aGF0IHR5cGVzIG9mIHdpZGUgY2hh cmFjdGVycyBhcmUNCitkaXNwbGF5ZWQuIEV2ZXJ5dGhpbmcgZ29lcyB0aHJvdWdoIG1icnRvd2Mo MyksIHNvIHlvdSBnZXQgZXhhY3RseSBvbmUNCitzdXBwb3J0ZWQgZW5jb2Rpbmc6IHdoYXRldmVy IExDXyogc2F5cy4gRXZlcnl0aGluZyBlbHNlIGlzIGRpc3BsYXllZA0KK2FzIG9jdGFsIGVzY2Fw ZSBzZXF1ZW5jZXMgKGFzIG5vcm1hbCBjdXJyZW50IGJlaGF2aW9yKS4gTW90aW9uIGlzDQorc3Rp bGwgb24gYSBieXRlIGxldmVsLCBzbyBtdWx0aWJ5dGUgY2hhcmFjdGVycyBhcmUgc2xvdyB0byB0 cmF2ZWwNCit0aHJvdWdoLCBhbmQgeW91IGNhbiBpbnNlcnQgYnl0ZXMgaW4gdGhlIG1pZGRsZSBv ZiB0aGVtICh3aGljaCB3b3Jrcw0KK2ZpbmUpLiBBIGxpbWl0ZWQgdmVyc2lvbiBvZiBpbnNlcnQt Y2hhciBpcyBhbHNvIGluY2x1ZGVkLCB3aGljaCB3b3Jrcw0KK3Rocm91Z2ggd2NoYXJfdCwgc28g dGhhdCBvbiBhbnkgc3lzdGVtIHdpdGggX19TVERDX0lTT18xMDY0Nl9fIHNldCwNCitpbnNlcnRp bmcgdW5pY29kZSBjb2RlcG9pbnRzIGJ5IG51bWJlciBpcyBwb3NzaWJsZS4NCisNCitJdCBhbHNv IGZpeGVzIHNvbWUgb2RkIGJ1Z3MgcmVsYXRlZCB0byB3aWRlIGNoYXJhY3RlciBkaXNwbGF5IGFu ZA0KK2V4dGVuZGVkIGxpbmVzLiBGb3IgZXhhbXBsZTogaW4gYSBmaWxlIHdpdGggZW5vdWdoIHdp ZGUgY2hhcmFjdGVycw0KKyhzdWNoIGFzIO+8oe+8ou+8oykgdG8gbWFrZSBhIGxpbmUgZXh0ZW5k IGZhciAoc2F5LCAyMDAgY2hhcmFjdGVycyBvbiBhbg0KKzgwLXdpZGUgZGlzcGxheSksIG1vdmlu ZyB0byB0aGUgcmlnaHQgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgd2lsbCAoaW4NCisyMDE2MDEx OCkgY29ycnVwdCB0aGUgZGlzcGxheSwgdGhlbiBldmVudHVhbGx5IHNlZ2ZhdWx0LCBiZWNhdXNl DQordnRwdXRlIGRvZXNuJ3QgcGVyZm9ybSB0aGUgc2FtZSBvY3RhbCBleHBhbnNpb24gYXMgdnRw dXRjIGFuZCB0aGUNCitjb2x1bW5zIGdldCBvdXQgb2Ygc3luYy4gVGhpcyBwYXRjaCBtYWtlcyBk aXNwbGF5LmMgYXdhcmUgb2YgdGhlDQorcG9zc2liaWxpdHkgdGhhdCB0aGUgYnl0ZXMgYW5kIGds eXBocyBvZiB0aGUgYnVmZmVycyBhcmVuJ3QgMToxLCBzbw0KK3Byb3RlY3RzIGFnYWluc3QgdGhh dC4NCisNCitUaGF0IHNhaWQsIHdpZGUgY2hhcmFjdGVyIHN1cHBvcnQgY29tcGxpY2F0ZXMgYSBs b3Qgb2YgYWxyZWFkeQ0KK2NvbXBsaWNhdGVkIGxvZ2ljIChmb3IgZXhhbXBsZSwgdnRwdXRzKSBh bmQgcmVsaWVzIG9uIHdjaGFyX3QgZm9yDQorYWxtb3N0IGV2ZXJ5dGhpbmcsIGFkZGluZyBzb21l IHVuZXNjYXBhYmxlIG92ZXJoZWFkLg0KKw0KK0lmIHlvdSB3YW50IHRvIHRha2UgdGhpcyBwYXRj aCwgcGxlYXNlIGRvIHNvLiBJZiB5b3UgdGhpbmsgaXQncyB0b28NCit1Z2x5IG9yIG5vdCB1c2Vm dWwsIHRoYXQncyBhbHNvIGZpbmUuICBMZXQgbWUga25vdyBpZiB5b3Ugd2FudCBtZSB0bw0KK3Jl d3JpdGUgcGFydHMgb2YgaXQgKG9yIGlmIHlvdSBzZWUgYW55IGJ1Z3MpIG9yIGlmIHRoZXJlIGFy ZSBzdHlsZQ0KK2NvbnZlbnRpb25zIEkgZGlkbid0IGZvbGxvdy4gSXQgYXBwbGllcyBjbGVhbmx5 IHdpdGggcGF0Y2ggLWksIHBsZWFzZQ0KK2ZvcmdpdmUgdGhlIGdpdC1pc21zLg0KKw0KKyhBbmQs IG9mIGNvdXJzZSwgbWFueSB0aGFua3MgZm9yIHlvdXIgd29yayBpbiBtYWludGFpbmluZyB0aGUg cG9ydC4pDQorDQorUy4gR2lsbGVzDQpkaWZmIC0tZ2l0IGEvYmFzaWMuYyBiL2Jhc2ljLmMNCmlu ZGV4IDg1ZDlmNzAuLjEyM2UxMTUgMTAwNjQ0DQotLS0gYS9iYXNpYy5jDQorKysgYi9iYXNpYy5j DQpAQCAtMTgsNiArMTgsNyBAQA0KICNpbmNsdWRlIDxzaWduYWwuaD4NCiAjaW5jbHVkZSA8c3Rk aW8uaD4NCiAjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHdjaGFyLmg+DQogDQogI2lu Y2x1ZGUgImRlZi5oIg0KIA0KQEAgLTI2OSwxMiArMjcwLDI1IEBAIHNldGdvYWwodm9pZCkNCiBp bnQNCiBnZXRnb2FsKHN0cnVjdCBsaW5lICpkbHApDQogew0KLQlpbnQgYywgaSwgY29sID0gMDsN Ci0JY2hhciB0bXBbNV07DQorCXJldHVybiBnZXRieXRlb2Zjb2woZGxwLCAwLCBjdXJnb2FsKTsN Cit9DQogDQorLyoNCisgKiBSZXR1cm4gdGhlIGJ5dGUgb2Zmc2V0IHdpdGhpbiBscCB0aGF0IGlz IHRhcmdldGNvbCBjb2x1bW5zIGJleW9uZA0KKyAqIHN0YXJ0Ynl0ZQ0KKyAqLw0KK3NpemVfdA0K K2dldGJ5dGVvZmNvbChjb25zdCBzdHJ1Y3QgbGluZSAqbHAsIGNvbnN0IHNpemVfdCBzdGFydGJ5 dGUsDQorICAgICAgICAgICAgIGNvbnN0IHNpemVfdCB0YXJnZXRjb2wpDQorew0KKwlpbnQgYzsN CisJc2l6ZV90IGksIGNvbCA9IDA7DQorCWNoYXIgdG1wWzVdOw0KKwlzaXplX3QgYWR2YW5jZV9i eSA9IDE7DQogDQotCWZvciAoaSA9IDA7IGkgPCBsbGVuZ3RoKGRscCk7IGkrKykgew0KLQkJYyA9 IGxnZXRjKGRscCwgaSk7DQorCWZvciAoaSA9IHN0YXJ0Ynl0ZTsgaSA8IGxsZW5ndGgobHApOyBp ICs9IGFkdmFuY2VfYnkpIHsNCisJCWFkdmFuY2VfYnkgPSAxOw0KKwkJYyA9IGxnZXRjKGxwLCBp KTsNCiAJCWlmIChjID09ICdcdCcNCiAjaWZkZWYJTk9UQUINCiAJCSAgICAmJiAhKGN1cmJwLT5i X2ZsYWcgJiBCRk5PVEFCKQ0KQEAgLTI4NCwxOCArMjk4LDg2IEBAIGdldGdvYWwoc3RydWN0IGxp bmUgKmRscCkNCiAJCQljb2wrKzsNCiAJCX0gZWxzZSBpZiAoSVNDVFJMKGMpICE9IEZBTFNFKSB7 DQogCQkJY29sICs9IDI7DQotCQl9IGVsc2UgaWYgKGlzcHJpbnQoYykpDQorCQl9IGVsc2UgaWYg KGlzcHJpbnQoYykpIHsNCiAJCQljb2wrKzsNCi0JCWVsc2Ugew0KKwkJfSBlbHNlIGlmICghKGN1 cmJwLT5iX2ZsYWcgJiBCRlNIT1dSQVcpKSB7DQorCQkJbWJzdGF0ZV90IG1icyA9IHsgMCB9Ow0K KwkJCXdjaGFyX3Qgd2MgPSAwOw0KKwkJCXNpemVfdCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAm bHAtPmxfdGV4dFtpXSwNCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGxsZW5ndGgobHAp IC0gaSwgJm1icyk7DQorCQkJaW50IHdpZHRoID0gLTE7DQorCQkJaWYgKGNvbnN1bWVkIDwgKHNp emVfdCkgLTIpIHsNCisJCQkJd2lkdGggPSB3Y3dpZHRoKHdjKTsNCisJCQl9DQorCQkJaWYgKHdp ZHRoID49IDApIHsNCisJCQkJY29sICs9IHdpZHRoOw0KKwkJCQlhZHZhbmNlX2J5ID0gY29uc3Vt ZWQ7DQorCQkJfSBlbHNlIHsNCisJCQkJY29sICs9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCks ICJcXCVvIiwgYyk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCiAJCQljb2wgKz0gc25wcmludGYodG1w LCBzaXplb2YodG1wKSwgIlxcJW8iLCBjKTsNCiAJCX0NCi0JCWlmIChjb2wgPiBjdXJnb2FsKQ0K KwkJaWYgKGNvbCA+IHRhcmdldGNvbCkNCiAJCQlicmVhazsNCiAJfQ0KIAlyZXR1cm4gKGkpOw0K IH0NCiANCiAvKg0KKyAqIFJldHVybiB0aGUgY29sdW1uIGF0IHdoaWNoIHNwZWNpZmllZCBvZmZz ZXQgYnl0ZSB3b3VsZCBhcHBlYXIsIGlmDQorICogdGhpcyB3ZXJlIHBhcnQgb2YgYSBsb25nZXIg c3RyaW5nIHByaW50ZWQgYnkgdnRwdXRzLCBzdGFydGluZyBhdA0KKyAqIGludGlhbF9jb2wNCisg Ki8NCitzaXplX3QNCitnZXRjb2xvZmJ5dGUoY29uc3Qgc3RydWN0IGxpbmUgKmxwLCBjb25zdCBz aXplX3Qgc3RhcnRieXRlLA0KKyAgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5pdGlhbF9jb2ws IGNvbnN0IHNpemVfdCB0YXJnZXRvZmZzZXQpDQorew0KKwlpbnQgYzsNCisJc2l6ZV90IGksIGNv bCA9IGluaXRpYWxfY29sOw0KKwljaGFyIHRtcFs1XTsNCisJc2l6ZV90IGFkdmFuY2VfYnkgPSAx Ow0KKw0KKwlmb3IgKGkgPSBzdGFydGJ5dGU7IGkgPCBsbGVuZ3RoKGxwKTsgaSArPSBhZHZhbmNl X2J5KSB7DQorCQlpZiAoaSA+PSB0YXJnZXRvZmZzZXQpDQorCQkJYnJlYWs7DQorCQlhZHZhbmNl X2J5ID0gMTsNCisJCWMgPSBsZ2V0YyhscCwgaSk7DQorCQlpZiAoYyA9PSAnXHQnDQorI2lmZGVm CU5PVEFCDQorCQkgICAgJiYgIShjdXJicC0+Yl9mbGFnICYgQkZOT1RBQikNCisjZW5kaWYNCisJ CQkpIHsNCisJCQljb2wgfD0gMHgwNzsNCisJCQljb2wrKzsNCisJCX0gZWxzZSBpZiAoSVNDVFJM KGMpICE9IEZBTFNFKSB7DQorCQkJY29sICs9IDI7DQorCQl9IGVsc2UgaWYgKGlzcHJpbnQoYykp IHsNCisJCQljb2wrKzsNCisJCX0gZWxzZSBpZiAoIShjdXJicC0+Yl9mbGFnICYgQkZTSE9XUkFX KSkgew0KKwkJCW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsNCisJCQl3Y2hhcl90IHdjID0gMDsNCisJ CQlzaXplX3QgY29uc3VtZWQgPSBtYnJ0b3djKCZ3YywgJmxwLT5sX3RleHRbaV0sDQorCQkJICAg ICAgICAgICAgICAgICAgICAgICAgICBsbGVuZ3RoKGxwKSAtIGksICZtYnMpOw0KKwkJCWludCB3 aWR0aCA9IC0xOw0KKwkJCWlmIChjb25zdW1lZCA8IChzaXplX3QpIC0yKSB7DQorCQkJCXdpZHRo ID0gd2N3aWR0aCh3Yyk7DQorCQkJfQ0KKwkJCWlmICh3aWR0aCA+PSAwKSB7DQorCQkJCWNvbCAr PSB3aWR0aDsNCisJCQkJYWR2YW5jZV9ieSA9IGNvbnN1bWVkOw0KKwkJCX0gZWxzZSB7DQorCQkJ CWNvbCArPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiXFwlbyIsIGMpOw0KKwkJCX0NCisJ CX0gZWxzZSB7DQorCQkJY29sICs9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICJcXCVvIiwg Yyk7DQorCQl9DQorCX0NCisJcmV0dXJuIChjb2wpOw0KK30NCisNCisNCisvKg0KICAqIFNjcm9s bCBmb3J3YXJkIGJ5IGEgc3BlY2lmaWVkIG51bWJlcg0KICAqIG9mIGxpbmVzLCBvciBieSBhIGZ1 bGwgcGFnZSBpZiBubyBhcmd1bWVudC4NCiAgKiBUaGUgIjIiIGlzIHRoZSB3aW5kb3cgb3Zlcmxh cCAodGhpcyBpcyB0aGUgZGVmYXVsdA0KZGlmZiAtLWdpdCBhL2Ntb2RlLmMgYi9jbW9kZS5jDQpp bmRleCBhMjM4Mjg1Li45ZDRjYWMzIDEwMDY0NA0KLS0tIGEvY21vZGUuYw0KKysrIGIvY21vZGUu Yw0KQEAgLTE0LDYgKzE0LDcgQEANCiAjaW5jbHVkZSA8Y3R5cGUuaD4NCiAjaW5jbHVkZSA8c2ln bmFsLmg+DQogI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHdjaGFyLmg+DQogDQogI2lu Y2x1ZGUgImRlZi5oIg0KICNpbmNsdWRlICJmdW5tYXAuaCINCkBAIC00MTksMTAgKzQyMCwyNSBA QCBmaW5kY29scG9zKGNvbnN0IHN0cnVjdCBidWZmZXIgKmJwLCBjb25zdCBzdHJ1Y3QgbGluZSAq bHAsIGludCBsbykNCiAJCQkpIHsNCiAJCQljb2wgfD0gMHgwNzsNCiAJCQljb2wrKzsNCi0JCX0g ZWxzZSBpZiAoSVNDVFJMKGMpICE9IEZBTFNFKQ0KKwkJfSBlbHNlIGlmIChJU0NUUkwoYykgIT0g RkFMU0UpIHsNCiAJCQljb2wgKz0gMjsNCi0JCWVsc2UgaWYgKGlzcHJpbnQoYykpIHsNCisJCX0g ZWxzZSBpZiAoaXNwcmludChjKSkgew0KIAkJCWNvbCsrOw0KKwkJfSBlbHNlIGlmICghKGJwLT5i X2ZsYWcgJiBCRlNIT1dSQVcpKSB7DQorCQkJbWJzdGF0ZV90IG1icyA9IHsgMCB9Ow0KKwkJCXdj aGFyX3Qgd2MgPSAwOw0KKwkJCXNpemVfdCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAmbHAtPmxf dGV4dFtpXSwNCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGxsZW5ndGgobHApIC0gaSwg Jm1icyk7DQorCQkJaW50IHdpZHRoID0gLTE7DQorCQkJaWYgKGNvbnN1bWVkIDwgKHNpemVfdCkg LTIpIHsNCisJCQkJd2lkdGggPSB3Y3dpZHRoKHdjKTsNCisJCQl9DQorCQkJaWYgKHdpZHRoID49 IDApIHsNCisJCQkJY29sICs9IHdpZHRoOw0KKwkJCQlpICs9IChjb25zdW1lZCAtIDEpOw0KKwkJ CX0gZWxzZSB7DQorCQkJCWNvbCArPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiXFwlbyIs IGMpOw0KKwkJCX0NCiAJCX0gZWxzZSB7DQogCQkJY29sICs9IHNucHJpbnRmKHRtcCwgc2l6ZW9m KHRtcCksICJcXCVvIiwgYyk7DQogCQl9DQpkaWZmIC0tZ2l0IGEvZGVmLmggYi9kZWYuaA0KaW5k ZXggNTRiNzRjZS4uMmZiMjg5ZCAxMDA2NDQNCi0tLSBhL2RlZi5oDQorKysgYi9kZWYuaA0KQEAg LTI3MCw3ICsyNzAsNyBAQCBzdHJ1Y3QgYnVmZmVyIHsNCiAJaW50CQkgYl9tYXJrbzsJLyogZGl0 dG8gZm9yIHRoZSAibWFyayIJCSAqLw0KIAlzaG9ydAkJIGJfbm1vZGVzOwkvKiBudW1iZXIgb2Yg bm9uLWZ1bmRhbWVudGFsIG1vZGVzICovDQogCWNoYXIJCSBiX253bmQ7CS8qIENvdW50IG9mIHdp bmRvd3Mgb24gYnVmZmVyCSAqLw0KLQljaGFyCQkgYl9mbGFnOwkvKiBGbGFncwkJCSAqLw0KKwlz aG9ydAkJIGJfZmxhZzsJLyogRmxhZ3MJCQkgKi8NCiAJY2hhcgkJIGJfZm5hbWVbTkZJTEVOXTsg LyogRmlsZSBuYW1lCQkJICovDQogCWNoYXIJCSBiX2N3ZFtORklMRU5dOyAvKiB3b3JraW5nIGRp cmVjdG9yeQkJICovDQogCXN0cnVjdCBmaWxlaW5mbwkgYl9maTsJCS8qIEZpbGUgYXR0cmlidXRl cwkJICovDQpAQCAtMjk3LDYgKzI5Nyw3IEBAIHN0cnVjdCBidWZmZXIgew0KICNkZWZpbmUgQkZE SVJUWSAgICAgMHgyMAkJLyogQnVmZmVyIHdhcyBtb2RpZmllZCBlbHNld2hlcmUgKi8NCiAjZGVm aW5lIEJGSUdORElSVFkgIDB4NDAJCS8qIElnbm9yZSBtb2RpZmljYXRpb25zIAkgKi8NCiAjZGVm aW5lIEJGRElSRURERUwgIDB4ODAJCS8qIERpcmVkIGhhcyBhIGRlbGV0ZWQgJ0QnIGZpbGUJICov DQorI2RlZmluZSBCRlNIT1dSQVcgICAweDEwMAkJLyogU2hvdyB1bnByaW50YWJsZSBhcyBvY3Rh bAkgKi8NCiAvKg0KICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHJl Y2VudCBhY3Rpb25zIGZvciB0aGUgVW5kbyBjb21tYW5kLg0KICAqLw0KQEAgLTQ5Nyw2ICs0OTgs NyBAQCBpbnQJCSBkaWdpdF9hcmd1bWVudChpbnQsIGludCk7DQogaW50CQkgbmVnYXRpdmVfYXJn dW1lbnQoaW50LCBpbnQpOw0KIGludAkJIHNlbGZpbnNlcnQoaW50LCBpbnQpOw0KIGludAkJIHF1 b3RlKGludCwgaW50KTsNCitpbnQJCSBpbnNlcnRfY2hhcihpbnQsIGludCk7DQogDQogLyogbWFp bi5jICovDQogaW50CQkgY3RybGcoaW50LCBpbnQpOw0KQEAgLTUxOSw2ICs1MjEsOCBAQCBpbnQJ CSBmb3J3bGluZShpbnQsIGludCk7DQogaW50CQkgYmFja2xpbmUoaW50LCBpbnQpOw0KIHZvaWQJ CSBzZXRnb2FsKHZvaWQpOw0KIGludAkJIGdldGdvYWwoc3RydWN0IGxpbmUgKik7DQorc2l6ZV90 CQkgZ2V0Ynl0ZW9mY29sKGNvbnN0IHN0cnVjdCBsaW5lICosIHNpemVfdCwgc2l6ZV90KTsNCitz aXplX3QJCSBnZXRjb2xvZmJ5dGUoY29uc3Qgc3RydWN0IGxpbmUgKiwgc2l6ZV90LCBzaXplX3Qs IHNpemVfdCk7DQogaW50CQkgZm9yd3BhZ2UoaW50LCBpbnQpOw0KIGludAkJIGJhY2twYWdlKGlu dCwgaW50KTsNCiBpbnQJCSBmb3J3MXBhZ2UoaW50LCBpbnQpOw0KQEAgLTY2NSw2ICs2NjksNyBA QCBpbnQJCSBub3RhYm1vZGUoaW50LCBpbnQpOw0KICNlbmRpZgkvKiBOT1RBQiAqLw0KIGludAkJ IG92ZXJ3cml0ZV9tb2RlKGludCwgaW50KTsNCiBpbnQJCSBzZXRfZGVmYXVsdF9tb2RlKGludCxp bnQpOw0KK2ludAkJIHNob3dfcmF3X21vZGUoaW50LCBpbnQpOw0KIA0KICNpZmRlZiBSRUdFWA0K IC8qIHJlX3NlYXJjaC5jIFggKi8NCmRpZmYgLS1naXQgYS9kaXNwbGF5LmMgYi9kaXNwbGF5LmMN CmluZGV4IDdhZjcyM2MuLjEwNGY4NzMgMTAwNjQ0DQotLS0gYS9kaXNwbGF5LmMNCisrKyBiL2Rp c3BsYXkuYw0KQEAgLTcsNyArNyw3IEBADQogICogcmVkaXNwbGF5IHN5c3RlbSBrbm93cyBhbG1v c3Qgbm90aGluZyBhYm91dCB0aGUgZWRpdGluZw0KICAqIHByb2Nlc3M7IHRoZSBlZGl0aW5nIGZ1 bmN0aW9ucyBkbywgaG93ZXZlciwgc2V0IHNvbWUNCiAgKiBoaW50cyB0byBlbGltaW5hdGUgYSBs b3Qgb2YgdGhlIGdyaW5kaW5nLiBUaGVyZSBpcyBtb3JlDQotICogdGhhdCBjYW4gYmUgZG9uZTsg dGhlICJ2dHB1dGMiIGludGVyZmFjZSBpcyBhIHJlYWwNCisgKiB0aGF0IGNhbiBiZSBkb25lOyB0 aGUgInZ0cHV0cyIgaW50ZXJmYWNlIGlzIGEgcmVhbA0KICAqIHBpZy4NCiAgKi8NCiANCkBAIC0x OCw2ICsxOCw3IEBADQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICNpbmNsdWRlIDxzdHJpbmcuaD4N CiAjaW5jbHVkZSA8dGVybS5oPg0KKyNpbmNsdWRlIDx3Y2hhci5oPg0KIA0KICNpbmNsdWRlICJk ZWYuaCINCiAjaW5jbHVkZSAia2JkLmgiDQpAQCAtNTIsMTEgKzUzLDEwIEBAIHN0cnVjdCBzY29y ZSB7DQogfTsNCiANCiB2b2lkCXZ0bW92ZShpbnQsIGludCk7DQotdm9pZAl2dHB1dGMoaW50KTsN CiB2b2lkCXZ0cHV0ZShpbnQpOw0KLWludAl2dHB1dHMoY29uc3QgY2hhciAqKTsNCitpbnQJdnRw dXRzKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3QpOw0KIHZvaWQJdnRlZW9sKHZvaWQpOw0K LXZvaWQJdXBkZXh0KGludCwgaW50KTsNCitpbnQJdXBkZXh0KGludCwgaW50KTsNCiB2b2lkCW1v ZGVsaW5lKHN0cnVjdCBtZ3dpbiAqLCBpbnQpOw0KIHZvaWQJc2V0c2NvcmVzKGludCwgaW50KTsN CiB2b2lkCXRyYWNlYmFjayhpbnQsIGludCwgaW50LCBpbnQpOw0KQEAgLTIxNiw4ICsyMTYsOCBA QCB2dHJlc2l6ZShpbnQgZm9yY2UsIGludCBuZXdyb3csIGludCBuZXdjb2wpDQogCX0NCiAJaWYg KHJvd2NoYW5nZWQgfHwgY29sY2hhbmdlZCB8fCBmaXJzdF9ydW4pIHsNCiAJCWZvciAoaSA9IDA7 IGkgPCAyICogKG5ld3JvdyAtIDEpOyBpKyspDQotCQkJVFJZUkVBTExPQyh2aWRlb1tpXS52X3Rl eHQsIG5ld2NvbCk7DQotCQlUUllSRUFMTE9DKGJsYW5rcy52X3RleHQsIG5ld2NvbCk7DQorCQkJ VFJZUkVBTExPQyh2aWRlb1tpXS52X3RleHQsIG5ld2NvbCAqIE1CX0NVUl9NQVgpOw0KKwkJVFJZ UkVBTExPQyhibGFua3Mudl90ZXh0LCBuZXdjb2wgKiBNQl9DVVJfTUFYKTsNCiAJfQ0KIA0KIAlu cm93ID0gbmV3cm93Ow0KQEAgLTI2MCw3ICsyNjAsNyBAQCB2dGluaXQodm9pZCkNCiAJICovDQog DQogCWJsYW5rcy52X2NvbG9yID0gQ1RFWFQ7DQotCWZvciAoaSA9IDA7IGkgPCBuY29sOyArK2kp DQorCWZvciAoaSA9IDA7IGkgPCBuY29sICogTUJfQ1VSX01BWDsgKytpKQ0KIAkJYmxhbmtzLnZf dGV4dFtpXSA9ICcgJzsNCiB9DQogDQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZ0dGlkeSh2b2lkKQ0K ICAqIE1vdmUgdGhlIHZpcnR1YWwgY3Vyc29yIHRvIGFuIG9yaWdpbg0KICAqIDAgc3BvdCBvbiB0 aGUgdmlydHVhbCBkaXNwbGF5IHNjcmVlbi4gSSBjb3VsZA0KICAqIHN0b3JlIHRoZSBjb2x1bW4g YXMgYSBjaGFyYWN0ZXIgcG9pbnRlciB0byB0aGUgc3BvdA0KLSAqIG9uIHRoZSBsaW5lLCB3aGlj aCB3b3VsZCBtYWtlICJ2dHB1dGMiIGEgbGl0dGxlIGJpdA0KKyAqIG9uIHRoZSBsaW5lLCB3aGlj aCB3b3VsZCBtYWtlICJ2dHB1dHMiIGEgbGl0dGxlIGJpdA0KICAqIG1vcmUgZWZmaWNpZW50LiBO byBjaGVja2luZyBmb3IgZXJyb3JzLg0KICAqLw0KIHZvaWQNCkBAIC0yOTgsODIgKzI5OCw2IEBA IHZ0bW92ZShpbnQgcm93LCBpbnQgY29sKQ0KIH0NCiANCiAvKg0KLSAqIFdyaXRlIGEgY2hhcmFj dGVyIHRvIHRoZSB2aXJ0dWFsIGRpc3BsYXksDQotICogZGVhbGluZyB3aXRoIGxvbmcgbGluZXMg YW5kIHRoZSBkaXNwbGF5IG9mIHVucHJpbnRhYmxlDQotICogdGhpbmdzIGxpa2UgY29udHJvbCBj aGFyYWN0ZXJzLiBBbHNvIGV4cGFuZCB0YWJzIGV2ZXJ5IDgNCi0gKiBjb2x1bW5zLiBUaGlzIGNv ZGUgb25seSBwdXRzIHByaW50aW5nIGNoYXJhY3RlcnMgaW50bw0KLSAqIHRoZSB2aXJ0dWFsIGRp c3BsYXkgaW1hZ2UuIFNwZWNpYWwgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4NCi0gKiBleHBhbmRp bmcgdGFicy4gT24gYSBzY3JlZW4gd2hvc2Ugd2lkdGggaXMgbm90IGEgbXVsdGlwbGUNCi0gKiBv ZiA4LCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHZpcnR1YWwgY3Vyc29yIHRvIGhpdCB0aGUNCi0g KiByaWdodCBtYXJnaW4gYmVmb3JlIHRoZSBuZXh0IHRhYiBzdG9wIGlzIHJlYWNoZWQuIFRoaXMN Ci0gKiBtYWtlcyB0aGUgdGFiIGNvZGUgbG9vcCBpZiB5b3UgYXJlIG5vdCBjYXJlZnVsLg0KLSAq IFRocmVlIGd1ZXNzZXMgaG93IHdlIGZvdW5kIHRoaXMuDQotICovDQotdm9pZA0KLXZ0cHV0Yyhp bnQgYykNCi17DQotCXN0cnVjdCB2aWRlbwkqdnA7DQotDQotCWMgJj0gMHhmZjsNCi0NCi0JdnAg PSB2c2NyZWVuW3Z0cm93XTsNCi0JaWYgKHZ0Y29sID49IG5jb2wpDQotCQl2cC0+dl90ZXh0W25j b2wgLSAxXSA9ICckJzsNCi0JZWxzZSBpZiAoYyA9PSAnXHQnDQotI2lmZGVmCU5PVEFCDQotCSAg ICAmJiAhKGN1cmJwLT5iX2ZsYWcgJiBCRk5PVEFCKQ0KLSNlbmRpZg0KLQkgICAgKSB7DQotCQlk byB7DQotCQkJdnRwdXRjKCcgJyk7DQotCQl9IHdoaWxlICh2dGNvbCA8IG5jb2wgJiYgKHZ0Y29s ICYgMHgwNykgIT0gMCk7DQotCX0gZWxzZSBpZiAoSVNDVFJMKGMpKSB7DQotCQl2dHB1dGMoJ14n KTsNCi0JCXZ0cHV0YyhDQ0hSKGMpKTsNCi0JfSBlbHNlIGlmIChpc3ByaW50KGMpKQ0KLQkJdnAt PnZfdGV4dFt2dGNvbCsrXSA9IGM7DQotCWVsc2Ugew0KLQkJY2hhciBiZls1XTsNCi0NCi0JCXNu cHJpbnRmKGJmLCBzaXplb2YoYmYpLCAiXFwlbyIsIGMpOw0KLQkJdnRwdXRzKGJmKTsNCi0JfQ0K LX0NCi0NCi0vKg0KLSAqIFB1dCBhIGNoYXJhY3RlciB0byB0aGUgdmlydHVhbCBzY3JlZW4gaW4g YW4gZXh0ZW5kZWQgbGluZS4gIElmIHdlIGFyZSBub3QNCi0gKiB5ZXQgb24gbGVmdCBlZGdlLCBk b24ndCBwcmludCBpdCB5ZXQuICBDaGVjayBmb3Igb3ZlcmZsb3cgb24gdGhlIHJpZ2h0DQotICog bWFyZ2luLg0KLSAqLw0KLXZvaWQNCi12dHB1dGUoaW50IGMpDQotew0KLQlzdHJ1Y3QgdmlkZW8g KnZwOw0KLQ0KLQljICY9IDB4ZmY7DQotDQotCXZwID0gdnNjcmVlblt2dHJvd107DQotCWlmICh2 dGNvbCA+PSBuY29sKQ0KLQkJdnAtPnZfdGV4dFtuY29sIC0gMV0gPSAnJCc7DQotCWVsc2UgaWYg KGMgPT0gJ1x0Jw0KLSNpZmRlZglOT1RBQg0KLQkgICAgJiYgIShjdXJicC0+Yl9mbGFnICYgQkZO T1RBQikNCi0jZW5kaWYNCi0JICAgICkgew0KLQkJZG8gew0KLQkJCXZ0cHV0ZSgnICcpOw0KLQkJ fSB3aGlsZSAoKCh2dGNvbCArIGxib3VuZCkgJiAweDA3KSAhPSAwICYmIHZ0Y29sIDwgbmNvbCk7 DQotCX0gZWxzZSBpZiAoSVNDVFJMKGMpICE9IEZBTFNFKSB7DQotCQl2dHB1dGUoJ14nKTsNCi0J CXZ0cHV0ZShDQ0hSKGMpKTsNCi0JfSBlbHNlIHsNCi0JCWlmICh2dGNvbCA+PSAwKQ0KLQkJCXZw LT52X3RleHRbdnRjb2xdID0gYzsNCi0JCSsrdnRjb2w7DQotCX0NCi19DQotDQotLyoNCiAgKiBF cmFzZSBmcm9tIHRoZSBlbmQgb2YgdGhlIHNvZnR3YXJlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRo ZSBsaW5lIG9uIHdoaWNoDQogICogdGhlIHNvZnR3YXJlIGN1cnNvciBpcyBsb2NhdGVkLiBUaGUg ZGlzcGxheSByb3V0aW5lcyB3aWxsIGRlY2lkZSBpZiBhDQogICogaGFyZHdhcmUgZXJhc2UgdG8g ZW5kIG9mIGxpbmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCB0byBkaXNwbGF5IHRoaXMuDQpAQCAt Mzg0LDcgKzMwOCw3IEBAIHZ0ZWVvbCh2b2lkKQ0KIAlzdHJ1Y3QgdmlkZW8gKnZwOw0KIA0KIAl2 cCA9IHZzY3JlZW5bdnRyb3ddOw0KLQl3aGlsZSAodnRjb2wgPCBuY29sKQ0KKwl3aGlsZSAodnRj b2wgPCBuY29sICogTUJfQ1VSX01BWCkNCiAJCXZwLT52X3RleHRbdnRjb2wrK10gPSAnICc7DQog fQ0KIA0KQEAgLTQwNCw3ICszMjgsNyBAQCB1cGRhdGUoaW50IG1vZGVsaW5lY29sb3IpDQogCXN0 cnVjdCBtZ3dpbgkqd3A7DQogCXN0cnVjdCB2aWRlbwkqdnAxOw0KIAlzdHJ1Y3QgdmlkZW8JKnZw MjsNCi0JaW50CSBjLCBpLCBqOw0KKwlpbnQJIGMsIGk7DQogCWludAkgaGZsYWc7DQogCWludAkg Y3Vycm93LCBjdXJjb2w7DQogCWludAkgb2Zmcywgc2l6ZTsNCkBAIC00NzksOCArNDAzLDkgQEAg dXBkYXRlKGludCBtb2RlbGluZWNvbG9yKQ0KIAkJCXZzY3JlZW5baV0tPnZfY29sb3IgPSBDVEVY VDsNCiAJCQl2c2NyZWVuW2ldLT52X2ZsYWcgfD0gKFZGQ0hHIHwgVkZIQkFEKTsNCiAJCQl2dG1v dmUoaSwgMCk7DQotCQkJZm9yIChqID0gMDsgaiA8IGxsZW5ndGgobHApOyArK2opDQotCQkJCXZ0 cHV0YyhsZ2V0YyhscCwgaikpOw0KKwkJCWlmIChsbGVuZ3RoKGxwKSkgew0KKwkJCQl2dHB1dHMo bHAtPmxfdGV4dCwgbGxlbmd0aChscCksIDApOw0KKwkJCX0NCiAJCQl2dGVlb2woKTsNCiAJCX0g ZWxzZSBpZiAoKHdwLT53X3JmbGFnICYgKFdGRURJVCB8IFdGRlVMTCkpICE9IDApIHsNCiAJCQlo ZmxhZyA9IFRSVUU7DQpAQCAtNDg5LDggKzQxNCwxMCBAQCB1cGRhdGUoaW50IG1vZGVsaW5lY29s b3IpDQogCQkJCXZzY3JlZW5baV0tPnZfZmxhZyB8PSAoVkZDSEcgfCBWRkhCQUQpOw0KIAkJCQl2 dG1vdmUoaSwgMCk7DQogCQkJCWlmIChscCAhPSB3cC0+d19idWZwLT5iX2hlYWRwKSB7DQotCQkJ CQlmb3IgKGogPSAwOyBqIDwgbGxlbmd0aChscCk7ICsraikNCi0JCQkJCQl2dHB1dGMobGdldGMo bHAsIGopKTsNCisJCQkJCWlmIChsbGVuZ3RoKGxwKSkgew0KKwkJCQkJCXZ0cHV0cyhscC0+bF90 ZXh0LCBsbGVuZ3RoKGxwKSwNCisJCQkJCQkgICAgMCk7DQorCQkJCQl9DQogCQkJCQlscCA9IGxm b3J3KGxwKTsNCiAJCQkJfQ0KIAkJCQl2dGVlb2woKTsNCkBAIC01MDgsMzIgKzQzNSw1MyBAQCB1 cGRhdGUoaW50IG1vZGVsaW5lY29sb3IpDQogCQkrK2N1cnJvdzsNCiAJCWxwID0gbGZvcncobHAp Ow0KIAl9DQorDQogCWN1cmNvbCA9IDA7DQogCWkgPSAwOw0KIAl3aGlsZSAoaSA8IGN1cndwLT53 X2RvdG8pIHsNCi0JCWMgPSBsZ2V0YyhscCwgaSsrKTsNCisJCWNoYXIgdG1wWzVdOw0KKwkJYyA9 IGxnZXRjKGxwLCBpKTsNCiAJCWlmIChjID09ICdcdCcNCiAjaWZkZWYJTk9UQUINCiAJCSAgICAm JiAhKGN1cmJwLT5iX2ZsYWcgJiBCRk5PVEFCKQ0KICNlbmRpZg0KIAkJCSkgew0KLQkJCWN1cmNv bCB8PSAweDA3Ow0KIAkJCWN1cmNvbCsrOw0KKwkJCXdoaWxlICgoY3VyY29sIC0gbGJvdW5kKSAm IDB4MDcpIHsNCisJCQkJY3VyY29sKys7DQorCQkJfQ0KIAkJfSBlbHNlIGlmIChJU0NUUkwoYykg IT0gRkFMU0UpDQogCQkJY3VyY29sICs9IDI7DQotCQllbHNlIGlmIChpc3ByaW50KGMpKQ0KKwkJ ZWxzZSBpZiAoaXNwcmludChjKSkgew0KIAkJCWN1cmNvbCsrOw0KLQkJZWxzZSB7DQotCQkJY2hh ciBiZls1XTsNCi0NCi0JCQlzbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIlxcJW8iLCBjKTsNCi0J CQljdXJjb2wgKz0gc3RybGVuKGJmKTsNCisJCX0gZWxzZSBpZiAoIShjdXJicC0+Yl9mbGFnICYg QkZTSE9XUkFXKSkgew0KKwkJCW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsNCisJCQl3Y2hhcl90IHdj ID0gMDsNCisJCQlzaXplX3QgY29uc3VtZWQgPSBtYnJ0b3djKCZ3YywgJmxwLT5sX3RleHRbaV0s DQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBsbGVuZ3RoKGxwKSAtIGksICZtYnMpOw0K KwkJCWludCB3aWR0aCA9IC0xOw0KKwkJCWlmIChjb25zdW1lZCA8IChzaXplX3QpIC0yKSB7DQor CQkJCXdpZHRoID0gd2N3aWR0aCh3Yyk7DQorCQkJfSBlbHNlIHsNCisJCQkJbWVtc2V0KCZtYnMs IDAsIHNpemVvZiBtYnMpOw0KKwkJCX0NCisJCQlpZiAod2lkdGggPj0gMCkgew0KKwkJCQljdXJj b2wgKz0gd2lkdGg7DQorCQkJCWkgKz0gKGNvbnN1bWVkIC0gMSk7DQorCQkJfSBlbHNlIHsNCisJ CQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIlxcJW8iLCBjKTsNCisJCQkJY3VyY29sICs9 IHN0cmxlbih0bXApOw0KKwkJCX0NCisJCX0gZWxzZSB7DQorCQkJc25wcmludGYodG1wLCBzaXpl b2YodG1wKSwgIlxcJW8iLCBjKTsNCisJCQljdXJjb2wgKz0gc3RybGVuKHRtcCk7DQogCQl9DQor CQlpKys7DQogCX0NCiAJaWYgKGN1cmNvbCA+PSBuY29sIC0gMSkgewkvKiBleHRlbmRlZCBsaW5l LiAqLw0KIAkJLyogZmxhZyB3ZSBhcmUgZXh0ZW5kZWQgYW5kIGNoYW5nZWQgKi8NCiAJCXZzY3Jl ZW5bY3Vycm93XS0+dl9mbGFnIHw9IFZGRVhUIHwgVkZDSEc7DQotCQl1cGRleHQoY3Vycm93LCBj dXJjb2wpOwkvKiBhbmQgb3V0cHV0IGV4dGVuZGVkIGxpbmUgKi8NCisJCWN1cmNvbCA9IHVwZGV4 dChjdXJyb3csIGN1cmNvbCk7DQogCX0gZWxzZQ0KIAkJbGJvdW5kID0gMDsJLyogbm90IGV4dGVu ZGVkIGxpbmUgKi8NCiANCkBAIC01NTIsOCArNTAwLDEwIEBAIHVwZGF0ZShpbnQgbW9kZWxpbmVj b2xvcikNCiAJCQkJaWYgKCh3cCAhPSBjdXJ3cCkgfHwgKGxwICE9IHdwLT53X2RvdHApIHx8DQog CQkJCSAgICAoY3VyY29sIDwgbmNvbCAtIDEpKSB7DQogCQkJCQl2dG1vdmUoaSwgMCk7DQotCQkJ CQlmb3IgKGogPSAwOyBqIDwgbGxlbmd0aChscCk7ICsraikNCi0JCQkJCQl2dHB1dGMobGdldGMo bHAsIGopKTsNCisJCQkJCWlmIChsbGVuZ3RoKGxwKSkgew0KKwkJCQkJCXZ0cHV0cyhscC0+bF90 ZXh0LCBsbGVuZ3RoKGxwKSwNCisJCQkJCQkgICAgMCk7DQorCQkJCQl9DQogCQkJCQl2dGVlb2wo KTsNCiAJCQkJCS8qIHRoaXMgbGluZSBubyBsb25nZXIgaXMgZXh0ZW5kZWQgKi8NCiAJCQkJCXZz Y3JlZW5baV0tPnZfZmxhZyAmPSB+VkZFWFQ7DQpAQCAtNjU1LDM5ICs2MDUsNDQgQEAgdWNvcHko c3RydWN0IHZpZGVvICp2dnAsIHN0cnVjdCB2aWRlbyAqcHZwKQ0KIAlwdnAtPnZfaGFzaCA9IHZ2 cC0+dl9oYXNoOw0KIAlwdnAtPnZfY29zdCA9IHZ2cC0+dl9jb3N0Ow0KIAlwdnAtPnZfY29sb3Ig PSB2dnAtPnZfY29sb3I7DQotCWJjb3B5KHZ2cC0+dl90ZXh0LCBwdnAtPnZfdGV4dCwgbmNvbCk7 DQorCWJjb3B5KHZ2cC0+dl90ZXh0LCBwdnAtPnZfdGV4dCwgbmNvbCAqIE1CX0NVUl9NQVgpOw0K IH0NCiANCiAvKg0KLSAqIHVwZGV4dDogdXBkYXRlIHRoZSBleHRlbmRlZCBsaW5lIHdoaWNoIHRo ZSBjdXJzb3IgaXMgY3VycmVudGx5IG9uIGF0IGENCi0gKiBjb2x1bW4gZ3JlYXRlciB0aGFuIHRo ZSB0ZXJtaW5hbCB3aWR0aC4gVGhlIGxpbmUgd2lsbCBiZSBzY3JvbGxlZCByaWdodCBvcg0KLSAq IGxlZnQgdG8gbGV0IHRoZSB1c2VyIHNlZSB3aGVyZSB0aGUgY3Vyc29yIGlzLg0KKyAqIHVwZGV4 dDogdXBkYXRlIHRoZSBleHRlbmRlZCBsaW5lIHdoaWNoIHRoZSBjdXJzb3IgaXMgY3VycmVudGx5 IG9uDQorICogYXQgYSBjb2x1bW4gZ3JlYXRlciB0aGFuIHRoZSB0ZXJtaW5hbCB3aWR0aC4gVGhl IGxpbmUgd2lsbCBiZQ0KKyAqIHNjcm9sbGVkIHJpZ2h0IG9yIGxlZnQgdG8gbGV0IHRoZSB1c2Vy IHNlZSB3aGVyZSB0aGUgY3Vyc29yDQorICogaXMuIGN1cmNvbCBtYXkgbmVlZCB0byBiZSBhZGp1 c3RlZCwgZGVwZW5kaW5nIG9uIGhvdyB3aWRlDQorICogY2hhcmFjdGVycyBhbmQgbGJvdW5kIGlu dGVyYWN0LCB0aGF0IGFkanVzdGVkIHBvc2l0aW9uIGlzIHJldHVybmVkLg0KICAqLw0KLXZvaWQN CitpbnQNCiB1cGRleHQoaW50IGN1cnJvdywgaW50IGN1cmNvbCkNCiB7DQotCXN0cnVjdCBsaW5l CSpscDsJCQkvKiBwb2ludGVyIHRvIGN1cnJlbnQgbGluZSAqLw0KLQlpbnQJIGo7CQkJLyogaW5k ZXggaW50byBsaW5lICovDQorCXN0cnVjdCBsaW5lICpscCA9IGN1cndwLT53X2RvdHA7CS8qIHBv aW50ZXIgdG8gY3VycmVudCBsaW5lICovDQorCXNpemVfdCBzdGFydGJ5dGU7DQorCWludCBiZXR0 ZXJjb2wgPSBjdXJjb2w7DQorCXNpemVfdCBmdWxsZXh0ZW50Ow0KIA0KIAlpZiAobmNvbCA8IDIp DQotCQlyZXR1cm47DQorCQlyZXR1cm4gY3VyY29sOw0KIA0KIAkvKg0KLQkgKiBjYWxjdWxhdGUg d2hhdCBjb2x1bW4gdGhlIGxlZnQgYm91bmQgc2hvdWxkIGJlDQotCSAqIChmb3JjZSBjdXJzb3Ig aW50byBtaWRkbGUgaGFsZiBvZiBzY3JlZW4pDQorCSAqIGNhbGN1bGF0ZSB3aGF0IGNvbHVtbiB0 aGUgbGVmdCBib3VuZCBzaG91bGQgYmUgKGZvcmNlDQorCSAqIGN1cnNvciBpbnRvIG1pZGRsZSBo YWxmIG9mIHNjcmVlbikuIEVuc3VyaW5nIHRoYXQgaXQgaXMgYXQNCisJICogYSB0YWJzdG9wIGFs bG93cyB1cGRhdGUoKSB0byBjYWxjdWxhdGUgY3VyY29sIHdpdGhvdXQNCisJICogd29uZGVyaW5n IGhvdyB0YWJzdG9wcyBhcmUgY2FsY3VsYXRlZCBiZWZvcmUgdGhlIGZpcnN0ICckJy4NCiAJICov DQogCWxib3VuZCA9IGN1cmNvbCAtIChjdXJjb2wgJSAobmNvbCA+PiAxKSkgLSAobmNvbCA+PiAy KTsNCi0NCi0JLyoNCi0JICogc2NhbiB0aHJvdWdoIHRoZSBsaW5lIG91dHB1dGluZyBjaGFyYWN0 ZXJzIHRvIHRoZSB2aXJ0dWFsIHNjcmVlbg0KLQkgKiBvbmNlIHdlIHJlYWNoIHRoZSBsZWZ0IGVk Z2UNCi0JICovDQotCXZ0bW92ZShjdXJyb3csIC1sYm91bmQpOwkJLyogc3RhcnQgc2Nhbm5pbmcg b2Zmc2NyZWVuICovDQotCWxwID0gY3Vyd3AtPndfZG90cDsJCQkvKiBsaW5lIHRvIG91dHB1dCAq Lw0KLQlmb3IgKGogPSAwOyBqIDwgbGxlbmd0aChscCk7ICsraikJLyogdW50aWwgdGhlIGVuZC1v Zi1saW5lICovDQotCQl2dHB1dGUobGdldGMobHAsIGopKTsNCi0JdnRlZW9sKCk7CQkJCS8qIHRy dW5jYXRlIHRoZSB2aXJ0dWFsIGxpbmUgKi8NCi0JdnNjcmVlbltjdXJyb3ddLT52X3RleHRbMF0g PSAnJCc7CS8qIGFuZCBwdXQgYSAnJCcgaW4gY29sdW1uIDEgKi8NCisJbGJvdW5kID0gKGxib3Vu ZCB8IDB4MDcpICsgMTsNCisJdnNjcmVlbltjdXJyb3ddLT52X3RleHRbMF0gPSAnJCc7DQorCXZ0 bW92ZShjdXJyb3csIDEpOw0KKwlzdGFydGJ5dGUgPSBnZXRieXRlb2Zjb2wobHAsIDAsIGxib3Vu ZCArIDEpOw0KKwlmdWxsZXh0ZW50ID0gZ2V0Ynl0ZW9mY29sKGxwLCBzdGFydGJ5dGUsIG5jb2wg KyAxKTsNCisJdnRwdXRzKGxwLT5sX3RleHQgKyBzdGFydGJ5dGUsIGZ1bGxleHRlbnQgLSBzdGFy dGJ5dGUsIDEpOw0KKwl2dGVlb2woKTsNCisNCisJYmV0dGVyY29sID0gbGJvdW5kICsgZ2V0Y29s b2ZieXRlKGxwLCBzdGFydGJ5dGUsIDEsIGN1cndwLT53X2RvdG8pOw0KKwlyZXR1cm4gKGJldHRl cmNvbCk7DQogfQ0KIA0KIC8qDQpAQCAtNzAyLDEyICs2NTcsMzUgQEAgdXBkZXh0KGludCBjdXJy b3csIGludCBjdXJjb2wpDQogdm9pZA0KIHVsaW5lKGludCByb3csIHN0cnVjdCB2aWRlbyAqdnZw LCBzdHJ1Y3QgdmlkZW8gKnB2cCkNCiB7DQotCWNoYXIgICpjcDE7DQotCWNoYXIgICpjcDI7DQot CWNoYXIgICpjcDM7DQotCWNoYXIgICpjcDQ7DQotCWNoYXIgICpjcDU7DQorCWNoYXIgICpjcDE7 IC8qIFBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIGRpcnR5IHJlZ2lvbiAqLw0KKwljaGFyICAqY3Ay OyAvKiBwdnAncyBjb3VudGVycGFydCBmb3IgY3AxICovDQorCWNoYXIgICpjcDM7IC8qIFBvaW50 ZXIgdG8gZW5kIG9mIGRpcnR5IHJlZ2lvbiAqLw0KKwljaGFyICAqY3A0OyAvKiBwdnAncyBjb3Vu dGVycGFydCBmb3IgY3AzICovDQorCWNoYXIgICpjcDU7IC8qIEFmdGVyIHRoaXMsIHdpdGhpbiBk aXJ0eSByZWdpb24sIGFsbCBpcyAnICcgKi8NCisJY2hhciAgKm1iY291bnRlcjsNCiAJaW50ICAg IG5iZmxhZzsNCisJaW50ICAgIHN0YXJ0Y29sOyAvKiBvbnNjcmVlbiBjb2x1bW4gbWF0Y2hpbmcg Y3AxICovDQorCWNoYXIgICpsYXN0Ynl0ZTsgLyogYnl0ZSB3aGljaCBoYW5kbGVzIGxhc3Qgb25z Y3JlZW4gY29sdW1uICAqLw0KKwlpbnQgICAgc2VlbmNvbHMgPSAwOw0KKwltYnN0YXRlX3QgbWJz ID0geyAwIH07DQorCXdjaGFyX3Qgd2MgPSAwOw0KKw0KKwlsYXN0Ynl0ZSA9IHZ2cC0+dl90ZXh0 Ow0KKwl3aGlsZSAoc2VlbmNvbHMgPCBuY29sICYmICpsYXN0Ynl0ZSkgew0KKwkJc2l6ZV90IGNv bnN1bWVkID0gbWJydG93Yygmd2MsIGxhc3RieXRlLA0KKwkJICAgICh2dnAtPnZfdGV4dCArIG5j b2wgKiBNQl9DVVJfTUFYIC0gbGFzdGJ5dGUpLCAmbWJzKTsNCisJCWlmIChjb25zdW1lZCA8IChz aXplX3QpIC0yKSB7DQorCQkJbGFzdGJ5dGUgKz0gY29uc3VtZWQ7DQorCQkJc2VlbmNvbHMgKz0g d2N3aWR0aCh3Yyk7DQorCQl9IGVsc2Ugew0KKwkJCWxhc3RieXRlKys7DQorCQkJc2VlbmNvbHMr KzsNCisJCQltZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7DQorCQl9DQorCX0NCisJaWYgKGxh c3RieXRlIC0gdnZwLT52X3RleHQgPCBuY29sKSB7DQorCQlsYXN0Ynl0ZSA9ICZ2dnAtPnZfdGV4 dFtuY29sXTsNCisJfQ0KIA0KIAlpZiAodnZwLT52X2NvbG9yICE9IHB2cC0+dl9jb2xvcikgewkv KiBXcm9uZyBjb2xvciwgZG8gYQkgKi8NCiAJCXR0bW92ZShyb3csIDApOwkJCS8qIGZ1bGwgcmVk cmF3LgkJICovDQpAQCAtNzIzLDExICs3MDEsMTIgQEAgdWxpbmUoaW50IHJvdywgc3RydWN0IHZp ZGVvICp2dnAsIHN0cnVjdCB2aWRlbyAqcHZwKQ0KIAkJICogcHV0dGluZyB0aGUgaW52aXNpYmxl IGdsaXRjaCBjaGFyYWN0ZXIgb24gdGhlIG5leHQgbGluZS4NCiAJCSAqIChIYXplbHRpbmUgZXhl Y3V0aXZlIDgwIG1vZGVsIDMwKQ0KIAkJICovDQotCQljcDIgPSAmdnZwLT52X3RleHRbbmNvbCAt IChtYWdpY19jb29raWVfZ2xpdGNoID49IDAgPw0KLQkJICAgIChtYWdpY19jb29raWVfZ2xpdGNo ICE9IDAgPyBtYWdpY19jb29raWVfZ2xpdGNoIDogMSkgOiAwKV07DQorCQljcDIgPSBsYXN0Ynl0 ZSAtDQorCQkgICAgKG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPj0gMCA/IChtYWdpY19jb29raWVfZ2xp dGNoICE9IDAgPw0KKwkJICAgIG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggOiAxKSA6IDApOw0KICNlbHNl DQogCQljcDEgPSAmdnZwLT52X3RleHRbMF07DQotCQljcDIgPSAmdnZwLT52X3RleHRbbmNvbF07 DQorCQljcDIgPSBsYXN0Ynl0ZTsNCiAjZW5kaWYNCiAJCXdoaWxlIChjcDEgIT0gY3AyKSB7DQog CQkJdHRwdXRjKCpjcDErKyk7DQpAQCAtNzM4LDIxICs3MTcsMzEgQEAgdWxpbmUoaW50IHJvdywg c3RydWN0IHZpZGVvICp2dnAsIHN0cnVjdCB2aWRlbyAqcHZwKQ0KIAl9DQogCWNwMSA9ICZ2dnAt PnZfdGV4dFswXTsJCS8qIENvbXB1dGUgbGVmdCBtYXRjaC4JICovDQogCWNwMiA9ICZwdnAtPnZf dGV4dFswXTsNCi0Jd2hpbGUgKGNwMSAhPSAmdnZwLT52X3RleHRbbmNvbF0gJiYgY3AxWzBdID09 IGNwMlswXSkgew0KKwl3aGlsZSAoY3AxICE9IGxhc3RieXRlICYmIGNwMVswXSA9PSBjcDJbMF0p IHsNCiAJCSsrY3AxOw0KIAkJKytjcDI7DQogCX0NCi0JaWYgKGNwMSA9PSAmdnZwLT52X3RleHRb bmNvbF0pCS8qIEFsbCBlcXVhbC4JCSAqLw0KKwlpZiAoY3AxID09IGxhc3RieXRlKQkvKiBBbGwg ZXF1YWwuCQkgKi8NCiAJCXJldHVybjsNCisJd2hpbGUgKGNwMSAhPSB2dnAtPnZfdGV4dCAmJiAh aXNwcmludCgqY3AxKSAmJg0KKwkgICAgICAgbWJydG93Yygmd2MsIGNwMSwgKGxhc3RieXRlIC0g Y3AxKSwgJm1icykgPj0gKHNpemVfdCkgLTIpIHsNCisJCS0tY3AxOw0KKwkJLS1jcDI7DQorCX0N CiAJbmJmbGFnID0gRkFMU0U7DQotCWNwMyA9ICZ2dnAtPnZfdGV4dFtuY29sXTsJLyogQ29tcHV0 ZSByaWdodCBtYXRjaC4gICovDQotCWNwNCA9ICZwdnAtPnZfdGV4dFtuY29sXTsNCisJY3AzID0g bGFzdGJ5dGU7CS8qIENvbXB1dGUgcmlnaHQgbWF0Y2guICAqLw0KKwljcDQgPSAmcHZwLT52X3Rl eHRbbGFzdGJ5dGUgLSB2dnAtPnZfdGV4dF07DQogCXdoaWxlIChjcDNbLTFdID09IGNwNFstMV0p IHsNCiAJCS0tY3AzOw0KIAkJLS1jcDQ7DQogCQlpZiAoY3AzWzBdICE9ICcgJykJLyogTm90ZSBu b24tYmxhbmtzIGluCSAqLw0KIAkJCW5iZmxhZyA9IFRSVUU7CS8qIHRoZSByaWdodCBtYXRjaC4J ICovDQogCX0NCisJd2hpbGUgKGNwMyAhPSBsYXN0Ynl0ZSAmJiAhaXNwcmludCgqY3AzKSAmJg0K KwkgICAgICAgIG1icnRvd2MoJndjLCBjcDMsIChsYXN0Ynl0ZSAtIGNwMyksICZtYnMpID49IChz aXplX3QpIC0yKSB7DQorCQkrK2NwMzsNCisJCSsrY3A0Ow0KKwl9DQogCWNwNSA9IGNwMzsJCQkv KiBJcyBlcmFzZSBnb29kPwkgKi8NCiAJaWYgKG5iZmxhZyA9PSBGQUxTRSAmJiB2dnAtPnZfY29s b3IgPT0gQ1RFWFQpIHsNCiAJCXdoaWxlIChjcDUgIT0gY3AxICYmIGNwNVstMV0gPT0gJyAnKQ0K QEAgLTc2MiwxMyArNzUxLDI3IEBAIHVsaW5lKGludCByb3csIHN0cnVjdCB2aWRlbyAqdnZwLCBz dHJ1Y3QgdmlkZW8gKnB2cCkNCiAJCQljcDUgPSBjcDM7DQogCX0NCiAJLyogQWxjeW9uIGhhY2sg Ki8NCi0JdHRtb3ZlKHJvdywgKGludCkgKGNwMSAtICZ2dnAtPnZfdGV4dFswXSkpOw0KKwlzdGFy dGNvbCA9IDA7DQorCW1iY291bnRlciA9IHZ2cC0+dl90ZXh0Ow0KKwl3aGlsZSAoKGNwMSAtIG1i Y291bnRlcikgPiAwKSB7DQorCQlzaXplX3QgY29uc3VtZWQgPSBtYnJ0b3djKCZ3YywgbWJjb3Vu dGVyLCAoY3AxIC0gbWJjb3VudGVyKSwNCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgJm1i cyk7DQorCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKwkJCW1iY291bnRlciArPSBj b25zdW1lZDsNCisJCQlzdGFydGNvbCArPSB3Y3dpZHRoKHdjKTsNCisJCX0gZWxzZSB7DQorCQkJ bWJjb3VudGVyKys7DQorCQkJc3RhcnRjb2wrKzsNCisJCQltZW1zZXQoJm1icywgMCwgc2l6ZW9m IG1icyk7DQorCQl9DQorCX0NCisJdHRtb3ZlKHJvdywgc3RhcnRjb2wpOw0KICNpZmRlZglTVEFO RE9VVF9HTElUQ0gNCiAJaWYgKHZ2cC0+dl9jb2xvciAhPSBDVEVYVCAmJiBtYWdpY19jb29raWVf Z2xpdGNoID4gMCkgew0KIAkJaWYgKGNwMSA8ICZ2dnAtPnZfdGV4dFttYWdpY19jb29raWVfZ2xp dGNoXSkNCiAJCQljcDEgPSAmdnZwLT52X3RleHRbbWFnaWNfY29va2llX2dsaXRjaF07DQotCQlp ZiAoY3A1ID4gJnZ2cC0+dl90ZXh0W25jb2wgLSBtYWdpY19jb29raWVfZ2xpdGNoXSkNCi0JCQlj cDUgPSAmdnZwLT52X3RleHRbbmNvbCAtIG1hZ2ljX2Nvb2tpZV9nbGl0Y2hdOw0KKwkJaWYgKGNw NSA+IGxhc3RieXRlIC0gbWFnaWNfY29va2llX2dsaXRjaCkNCisJCQljcDUgPSBsYXN0Ynl0ZSAt IG1hZ2ljX2Nvb2tpZV9nbGl0Y2g7DQogCX0gZWxzZSBpZiAobWFnaWNfY29va2llX2dsaXRjaCA8 IDApDQogI2VuZGlmDQogCQl0dGNvbG9yKHZ2cC0+dl9jb2xvcik7DQpAQCAtODAxLDQ2ICs4MDQs MzkgQEAgbW9kZWxpbmUoc3RydWN0IG1nd2luICp3cCwgaW50IG1vZGVsaW5lY29sb3IpDQogCXZz Y3JlZW5bbl0tPnZfZmxhZyB8PSAoVkZDSEcgfCBWRkhCQUQpOwkvKiBSZWNvbXB1dGUsIGRpc3Bs YXkuCSAqLw0KIAl2dG1vdmUobiwgMCk7CQkJCS8qIFNlZWsgdG8gcmlnaHQgbGluZS4JICovDQog CWJwID0gd3AtPndfYnVmcDsNCi0JdnRwdXRjKCctJyk7DQotCXZ0cHV0YygnLScpOw0KKwluID0g dnRwdXRzKCItLSIsIDAsIDApOw0KIAlpZiAoKGJwLT5iX2ZsYWcgJiBCRlJFQURPTkxZKSAhPSAw KSB7DQotCQl2dHB1dGMoJyUnKTsNCisJCW4gKz0gdnRwdXRzKCIlIiwgMCwgbik7DQogCQlpZiAo KGJwLT5iX2ZsYWcgJiBCRkNIRykgIT0gMCkNCi0JCQl2dHB1dGMoJyonKTsNCisJCQluICs9IHZ0 cHV0cygiKiIsIDAsIG4pOw0KIAkJZWxzZQ0KLQkJCXZ0cHV0YygnJScpOw0KKwkJCW4gKz0gdnRw dXRzKCIlIiwgMCwgbik7DQogCX0gZWxzZSBpZiAoKGJwLT5iX2ZsYWcgJiBCRkNIRykgIT0gMCkg ewkvKiAiKiIgaWYgY2hhbmdlZC4JICovDQotCQl2dHB1dGMoJyonKTsNCi0JCXZ0cHV0YygnKicp Ow0KKwkJbiArPSB2dHB1dHMoIioqIiwgMCwgbik7DQogCX0gZWxzZSB7DQotCQl2dHB1dGMoJy0n KTsNCi0JCXZ0cHV0YygnLScpOw0KKwkJbiArPSB2dHB1dHMoIi0tIiwgMCwgbik7DQogCX0NCi0J dnRwdXRjKCctJyk7DQorCW4gKz0gdnRwdXRzKCItIiwgMCwgbik7DQogCW4gPSA1Ow0KLQluICs9 IHZ0cHV0cygiTWc6ICIpOw0KKwluICs9IHZ0cHV0cygiTWc6ICIsIDAsIG4pOw0KIAlpZiAoYnAt PmJfYm5hbWVbMF0gIT0gJ1wwJykNCi0JCW4gKz0gdnRwdXRzKCYoYnAtPmJfYm5hbWVbMF0pKTsN CisJCW4gKz0gdnRwdXRzKCYoYnAtPmJfYm5hbWVbMF0pLCAwLCBuKTsNCiAJd2hpbGUgKG4gPCA0 MikgewkJCS8qIFBhZCBvdXQgd2l0aCBibGFua3MuCSAqLw0KLQkJdnRwdXRjKCcgJyk7DQotCQkr K247DQorCQluICs9IHZ0cHV0cygiICIsIDAsIG4pOw0KIAl9DQotCXZ0cHV0YygnKCcpOw0KLQkr K247DQorCW4gKz0gdnRwdXRzKCIoIiwgMCwgbik7DQogCWZvciAobWQgPSAwOyA7ICkgew0KLQkJ biArPSB2dHB1dHMoYnAtPmJfbW9kZXNbbWRdLT5wX25hbWUpOw0KKwkJbiArPSB2dHB1dHMoYnAt PmJfbW9kZXNbbWRdLT5wX25hbWUsIDAsIG4pOw0KIAkJaWYgKCsrbWQgPiBicC0+Yl9ubW9kZXMp DQogCQkJYnJlYWs7DQotCQl2dHB1dGMoJy0nKTsNCi0JCSsrbjsNCisJCW4gKz0gdnRwdXRzKCIt IiwgMCwgbik7DQogCX0NCiAJLyogWFhYIFRoZXNlIHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8g YSByZWFsIG1vZGUgKi8NCiAJaWYgKG1hY3JvZGVmID09IFRSVUUpDQotCQluICs9IHZ0cHV0cygi LWRlZiIpOw0KKwkJbiArPSB2dHB1dHMoIi1kZWYiLCAwLCBuKTsNCiAJaWYgKGdsb2JhbHdkID09 IFRSVUUpDQotCQluICs9IHZ0cHV0cygiLWd3ZCIpOw0KLQl2dHB1dGMoJyknKTsNCi0JKytuOw0K KwkJbiArPSB2dHB1dHMoIi1nd2QiLCAwLCBuKTsNCisJbiArPSB2dHB1dHMoIikiLCAwLCBuKTsN CiANCiAJaWYgKGxpbmVub3MgJiYgY29sbm9zKQ0KIAkJbGVuID0gc25wcmludGYoc2wsIHNpemVv ZihzbCksICItLUwlZC0tQyVkIiwgd3AtPndfZG90bGluZSwNCkBAIC04NTAsMjcgKzg0NiwxMzIg QEAgbW9kZWxpbmUoc3RydWN0IG1nd2luICp3cCwgaW50IG1vZGVsaW5lY29sb3IpDQogCWVsc2Ug aWYgKGNvbG5vcykNCiAJCWxlbiA9IHNucHJpbnRmKHNsLCBzaXplb2Yoc2wpLCAiLS1DJWQiLCBn ZXRjb2xwb3Mod3ApKTsNCiAJaWYgKChsaW5lbm9zIHx8IGNvbG5vcykgJiYgbGVuIDwgc2l6ZW9m KHNsKSAmJiBsZW4gIT0gLTEpDQotCQluICs9IHZ0cHV0cyhzbCk7DQorCQluICs9IHZ0cHV0cyhz bCwgMCwgbik7DQogDQogCXdoaWxlIChuIDwgbmNvbCkgewkJCS8qIFBhZCBvdXQuCQkgKi8NCi0J CXZ0cHV0YygnLScpOw0KLQkJKytuOw0KKwkJbiArPSB2dHB1dHMoIi0iLCAwLCBuKTsNCiAJfQ0K IH0NCiANCiAvKg0KLSAqIE91dHB1dCBhIHN0cmluZyB0byB0aGUgbW9kZSBsaW5lLCByZXBvcnQg aG93IGxvbmcgaXQgd2FzLg0KKyAqIE91dHB1dCBhIHN0cmluZyB0byB0aGUgbW9kZSBsaW5lLCBy ZXBvcnQgaG93IGxvbmcgaXQgd2FzLA0KKyAqIGRlYWxpbmcgd2l0aCBsb25nIGxpbmVzIGFuZCB0 aGUgZGlzcGxheSBvZiB1bnByaW50YWJsZQ0KKyAqIHRoaW5ncyBsaWtlIGNvbnRyb2wgY2hhcmFj dGVycy4gQWxzbyBleHBhbmQgdGFicyBldmVyeSA4DQorICogY29sdW1ucy4gVGhpcyBjb2RlIG9u bHkgcHV0cyBwcmludGluZyBjaGFyYWN0ZXJzIGludG8NCisgKiB0aGUgdmlydHVhbCBkaXNwbGF5 IGltYWdlLiBTcGVjaWFsIGNhcmUgbXVzdCBiZSB0YWtlbiB3aGVuDQorICogZXhwYW5kaW5nIHRh YnMuIE9uIGEgc2NyZWVuIHdob3NlIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxlDQorICogb2YgOCwg aXQgaXMgcG9zc2libGUgZm9yIHRoZSB2aXJ0dWFsIGN1cnNvciB0byBoaXQgdGhlDQorICogcmln aHQgbWFyZ2luIGJlZm9yZSB0aGUgbmV4dCB0YWIgc3RvcCBpcyByZWFjaGVkLiBUaGlzDQorICog bWFrZXMgdGhlIHRhYiBjb2RlIGxvb3AgaWYgeW91IGFyZSBub3QgY2FyZWZ1bC4NCisgKiBUaHJl ZSBndWVzc2VzIGhvdyB3ZSBmb3VuZCB0aGlzLg0KICAqLw0KIGludA0KLXZ0cHV0cyhjb25zdCBj aGFyICpzKQ0KK3Z0cHV0cyhjb25zdCBjaGFyICpzLCBjb25zdCBzaXplX3QgbWF4X2J5dGVzLCBj b25zdCBzaXplX3QgaW5pdGlhbF9jb2wpDQogew0KLQlpbnQgbiA9IDA7DQorCWNvbnN0IHVuc2ln bmVkIGNoYXIgKnVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczsNCisJc3RydWN0IHZpZGVv ICp2cCA9IHZzY3JlZW5bdnRyb3ddOw0KKwlzaXplX3QgYnl0ZXNfaGFuZGxlZCA9IDA7DQorCXNp emVfdCBsYXN0X2Z1bGxfYnl0ZV9zdGFydCA9IHZ0Y29sOw0KKwlzaXplX3Qgc3BhY2VfcHJpbnRl ZCA9IDA7DQorDQorCWlmICghcykgew0KKwkJcmV0dXJuICgwKTsNCisJfQ0KKw0KKwl3aGlsZSAo KnVzICYmICghbWF4X2J5dGVzIHx8IGJ5dGVzX2hhbmRsZWQgPCBtYXhfYnl0ZXMpKSB7DQorCQlp ZiAoc3BhY2VfcHJpbnRlZCArIGluaXRpYWxfY29sID49IG5jb2wpIHsNCisJCQlicmVhazsNCisJ CX0gZWxzZSBpZiAoKnVzID09ICdcdCcNCisjaWZkZWYJTk9UQUINCisJCSAgICAgICAgICAgJiYg IShjdXJicC0+Yl9mbGFnICYgQkZOT1RBQikNCisjZW5kaWYNCisJCSAgICAgICAgICAgKSB7DQor CQkJbGFzdF9mdWxsX2J5dGVfc3RhcnQgPSB2dGNvbDsNCisJCQlkbyB7DQorCQkJCWlmICh2dGNv bCA+PSAwKSB7DQorCQkJCQlsYXN0X2Z1bGxfYnl0ZV9zdGFydCA9IHZ0Y29sOw0KKwkJCQkJdnAt PnZfdGV4dFt2dGNvbF0gPSAnICc7DQorCQkJCX0NCisJCQkJdnRjb2wrKzsNCisJCQkJc3BhY2Vf cHJpbnRlZCsrOw0KKwkJCX0gd2hpbGUgKHNwYWNlX3ByaW50ZWQgKyBpbml0aWFsX2NvbCA8IG5j b2wgJiYNCisJCQkgICAgICAgICAoKHNwYWNlX3ByaW50ZWQgKyBpbml0aWFsX2NvbCkgJiAweDA3 KSk7DQorCQkJdXMrKzsNCisJCQlieXRlc19oYW5kbGVkKys7DQorCQl9IGVsc2UgaWYgKElTQ1RS TCgqdXMpKSB7DQorCQkJbGFzdF9mdWxsX2J5dGVfc3RhcnQgPSB2dGNvbDsNCisJCQlpZiAodnRj b2wgPj0gMCkgew0KKwkJCQl2cC0+dl90ZXh0W3Z0Y29sXSA9ICdeJzsNCisJCQl9DQorCQkJdnRj b2wrKzsNCisJCQlpZiAodnRjb2wgPj0gMCkgew0KKwkJCQl2cC0+dl90ZXh0W3Z0Y29sXSA9IEND SFIoKnVzKTsNCisJCQl9DQorCQkJdnRjb2wrKzsNCisJCQlieXRlc19oYW5kbGVkKys7DQorCQkJ c3BhY2VfcHJpbnRlZCArPSAyOw0KKwkJCXVzKys7DQorCQl9IGVsc2UgaWYgKGlzcHJpbnQoKnVz KSkgew0KKwkJCWxhc3RfZnVsbF9ieXRlX3N0YXJ0ID0gdnRjb2w7DQorCQkJaWYgKHZ0Y29sID49 IDApIHsNCisJCQkJdnAtPnZfdGV4dFt2dGNvbF0gPSAqdXMrKzsNCisJCQl9DQorCQkJdnRjb2wr KzsNCisJCQlieXRlc19oYW5kbGVkKys7DQorCQkJc3BhY2VfcHJpbnRlZCsrOw0KKwkJfSBlbHNl IGlmICghKGN1cmJwLT5iX2ZsYWcgJiBCRlNIT1dSQVcpKSB7DQorCQkJbWJzdGF0ZV90IG1icyA9 IHsgMCB9Ow0KKwkJCXdjaGFyX3Qgd2MgPSAwOw0KKwkJCXNpemVfdCBjb25zdW1hYmxlID0gbWF4 X2J5dGVzID8NCisJCQkgICAgICAgIChtYXhfYnl0ZXMgLSBieXRlc19oYW5kbGVkKSA6IC0xOw0K KwkJCXNpemVfdCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAoY29uc3QgY2hhciAqKXVzLA0KKwkJ CSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtYWJsZSwgJm1icyk7DQorCQkJaW50IHdp ZHRoID0gLTE7DQorCQkJbGFzdF9mdWxsX2J5dGVfc3RhcnQgPSB2dGNvbDsNCisJCQlpZiAoY29u c3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKwkJCQl3aWR0aCA9IHdjd2lkdGgod2MpOw0KKwkJCX0N CisJCQlpZiAod2lkdGggPj0gMCkgew0KKwkJCQlieXRlc19oYW5kbGVkICs9IGNvbnN1bWVkOw0K KwkJCQlzcGFjZV9wcmludGVkICs9IHdpZHRoOw0KKwkJCQlkbyB7DQorCQkJCQlpZiAodnRjb2wg Pj0gMCkgew0KKwkJCQkJCXZwLT52X3RleHRbdnRjb2xdID0gKnVzKys7DQorCQkJCQl9DQorCQkJ CQl2dGNvbCsrOw0KKwkJCQl9IHdoaWxlICgtLWNvbnN1bWVkKTsNCisJCQl9IGVsc2Ugew0KKwkJ CQljaGFyIGJmWzVdOw0KKwkJCQlzbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIlxcJW8iLCAqdXMp Ow0KKwkJCQlieXRlc19oYW5kbGVkKys7DQorCQkJCXNwYWNlX3ByaW50ZWQgKz0gdnRwdXRzKGJm LCAwLA0KKwkJCQkgICAgc3BhY2VfcHJpbnRlZCArIGluaXRpYWxfY29sKTsNCisJCQkJdXMrKzsN CisJCQl9DQorCQl9IGVsc2Ugew0KKwkJCWNoYXIgYmZbNV07DQorCQkJbGFzdF9mdWxsX2J5dGVf c3RhcnQgPSB2dGNvbDsNCisJCQlzbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIlxcJW8iLCAqdXMp Ow0KKwkJCWJ5dGVzX2hhbmRsZWQrKzsNCisJCQlzcGFjZV9wcmludGVkICs9IHZ0cHV0cyhiZiwg MCwNCisJCQkgICAgc3BhY2VfcHJpbnRlZCArIGluaXRpYWxfY29sKTsNCisJCQl1cysrOw0KKwkJ fQ0KKwl9DQogDQotCXdoaWxlICgqcyAhPSAnXDAnKSB7DQotCQl2dHB1dGMoKnMrKyk7DQotCQkr K247DQorCWlmICgoc3BhY2VfcHJpbnRlZCArIGluaXRpYWxfY29sID4gbmNvbCkgfHwNCisJICAg IChzcGFjZV9wcmludGVkICsgaW5pdGlhbF9jb2wgPT0gbmNvbCAmJg0KKwkgICAgKCp1cyAmJiAo IW1heF9ieXRlcyB8fCBieXRlc19oYW5kbGVkIDwgbWF4X2J5dGVzKSkpKSB7DQorCQl2cC0+dl90 ZXh0W2xhc3RfZnVsbF9ieXRlX3N0YXJ0XSA9ICckJzsNCisJCXdoaWxlICgrK2xhc3RfZnVsbF9i eXRlX3N0YXJ0IDw9IHZ0Y29sKSB7DQorCQkJdnAtPnZfdGV4dFtsYXN0X2Z1bGxfYnl0ZV9zdGFy dF0gPSAnICc7DQorCQl9DQorCQlieXRlc19oYW5kbGVkKys7DQorCQlzcGFjZV9wcmludGVkKys7 DQorCQl1cysrOw0KIAl9DQotCXJldHVybiAobik7DQorDQorCXJldHVybiAoc3BhY2VfcHJpbnRl ZCk7DQogfQ0KIA0KIC8qDQpAQCAtODg4LDExICs5ODksMTEgQEAgaGFzaChzdHJ1Y3QgdmlkZW8g KnZwKQ0KIAljaGFyICAgKnM7DQogDQogCWlmICgodnAtPnZfZmxhZyAmIFZGSEJBRCkgIT0gMCkg ewkvKiBIYXNoIGJhZC4JCSAqLw0KLQkJcyA9ICZ2cC0+dl90ZXh0W25jb2wgLSAxXTsNCi0JCWZv ciAoaSA9IG5jb2w7IGkgIT0gMDsgLS1pLCAtLXMpDQorCQlzID0gJnZwLT52X3RleHRbbmNvbCAq IE1CX0NVUl9NQVggLSAxXTsNCisJCWZvciAoaSA9IG5jb2wgKiBNQl9DVVJfTUFYOyBpICE9IDA7 IC0taSwgLS1zKQ0KIAkJCWlmICgqcyAhPSAnICcpDQogCQkJCWJyZWFrOw0KLQkJbiA9IG5jb2wg LSBpOwkJCS8qIEVyYXNlIGNoZWFwZXI/CSAqLw0KKwkJbiA9IG5jb2wgKiBNQl9DVVJfTUFYIC0g aTsJCQkvKiBFcmFzZSBjaGVhcGVyPwkgKi8NCiAJCWlmIChuID4gdGNlZW9sKQ0KIAkJCW4gPSB0 Y2Vlb2w7DQogCQl2cC0+dl9jb3N0ID0gaSArIG47CQkvKiBCeXRlcyArIGJsYW5rcy4JICovDQpk aWZmIC0tZ2l0IGEvZWNoby5jIGIvZWNoby5jDQppbmRleCA2OTY2YzAwLi4yMmI4MzMzIDEwMDY0 NA0KLS0tIGEvZWNoby5jDQorKysgYi9lY2hvLmMNCkBAIC04NDQsOSArODQ0LDExIEBAIGV3cHJp bnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAqICVrIHByaW50cyB0aGUgbmFtZSBvZiB0aGUg Y3VycmVudCBrZXkgKGFuZCB0YWtlcyBubyBhcmd1bWVudHMpLg0KICAqICVkIHByaW50cyBhIGRl Y2ltYWwgaW50ZWdlcg0KICAqICVvIHByaW50cyBhbiBvY3RhbCBpbnRlZ2VyDQorICogJXggcHJp bnRzIGEgaGV4YWRlY2ltYWwgaW50ZWdlcg0KICAqICVwIHByaW50cyBhIHBvaW50ZXINCiAgKiAl cyBwcmludHMgYSBzdHJpbmcNCiAgKiAlbGQgcHJpbnRzIGEgbG9uZyB3b3JkDQorICogJWx4IHBy aW50cyBhIGhleGFkZWNpbWFsIGxvbmcgd29yZA0KICAqIEFueXRoaW5nIGVsc2UgaXMgZWNob2Vk IHZlcmJhdGltDQogICovDQogc3RhdGljIHZvaWQNCkBAIC04ODUsNiArODg3LDEwIEBAIGVmb3Jt YXQoY29uc3QgY2hhciAqZnAsIHZhX2xpc3QgYXApDQogCQkJCWVwdXRpKHZhX2FyZyhhcCwgaW50 KSwgOCk7DQogCQkJCWJyZWFrOw0KIA0KKwkJCWNhc2UgJ3gnOg0KKwkJCQllcHV0aSh2YV9hcmco YXAsIGludCksIDE2KTsNCisJCQkJYnJlYWs7DQorDQogCQkJY2FzZSAncCc6DQogCQkJCXNucHJp bnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlcCIsDQogCQkJCSAgICB2YV9hcmcoYXAsIHZvaWQgKikp Ow0KQEAgLTkwMiw2ICs5MDgsOSBAQCBlZm9ybWF0KGNvbnN0IGNoYXIgKmZwLCB2YV9saXN0IGFw KQ0KIAkJCQljYXNlICdkJzoNCiAJCQkJCWVwdXRsKHZhX2FyZyhhcCwgbG9uZyksIDEwKTsNCiAJ CQkJCWJyZWFrOw0KKwkJCQljYXNlICd4JzoNCisJCQkJCWVwdXRsKHZhX2FyZyhhcCwgbG9uZyks IDE2KTsNCisJCQkJCWJyZWFrOw0KIAkJCQlkZWZhdWx0Og0KIAkJCQkJZXB1dGMoYyk7DQogCQkJ CQlicmVhazsNCkBAIC05MzksNiArOTQ4LDcgQEAgc3RhdGljIHZvaWQNCiBlcHV0bChsb25nIGws IGludCByKQ0KIHsNCiAJbG9uZwkgcTsNCisJaW50CSBjOw0KIA0KIAlpZiAobCA8IDApIHsNCiAJ CWVwdXRjKCctJyk7DQpAQCAtOTQ2LDcgKzk1NiwxMCBAQCBlcHV0bChsb25nIGwsIGludCByKQ0K IAl9DQogCWlmICgocSA9IGwgLyByKSAhPSAwKQ0KIAkJZXB1dGwocSwgcik7DQotCWVwdXRjKChp bnQpKGwgJSByKSArICcwJyk7DQorCWMgPSAoaW50KShsICUgcikgKyAnMCc7DQorCWlmIChjID4g JzknKQ0KKwkJYyArPSAnYScgLSAnOScgLSAxOw0KKwllcHV0YyhjKTsNCiB9DQogDQogLyoNCmRp ZmYgLS1naXQgYS9mdW5tYXAuYyBiL2Z1bm1hcC5jDQppbmRleCBiZDU1NWQ2Li43ZDg4Yjc1IDEw MDY0NA0KLS0tIGEvZnVubWFwLmMNCisrKyBiL2Z1bm1hcC5jDQpAQCAtMTE0LDYgKzExNCw3IEBA IHN0YXRpYyBzdHJ1Y3QgZnVubWFwIGZ1bmN0bmFtZXNbXSA9IHsNCiAJe2J1ZmZlcmluc2VydCwg Imluc2VydC1idWZmZXIiLH0sDQogCXtmaWxlaW5zZXJ0LCAiaW5zZXJ0LWZpbGUiLH0sDQogCXtm aWxsd29yZCwgImluc2VydC13aXRoLXdyYXAiLH0sDQorCXtpbnNlcnRfY2hhciwgImluc2VydC1j aGFyIix9LA0KIAl7YmFja2lzZWFyY2gsICJpc2VhcmNoLWJhY2t3YXJkIix9LA0KIAl7Zm9yd2lz ZWFyY2gsICJpc2VhcmNoLWZvcndhcmQiLH0sDQogCXtqb2lubGluZSwgImpvaW4tbGluZSIsfSwN CkBAIC0xOTEsNiArMTkyLDcgQEAgc3RhdGljIHN0cnVjdCBmdW5tYXAgZnVuY3RuYW1lc1tdID0g ew0KIAl7c2hlbGxjb21tYW5kLCAic2hlbGwtY29tbWFuZCIsfSwNCiAJe3BpcGVyZWdpb24sICJz aGVsbC1jb21tYW5kLW9uLXJlZ2lvbiIsfSwNCiAJe3Nocmlua3dpbmQsICJzaHJpbmstd2luZG93 Iix9LA0KKwl7c2hvd19yYXdfbW9kZSwgInNob3ctcmF3LW1vZGUiLH0sDQogI2lmZGVmIE5PVEFC DQogCXtzcGFjZV90b190YWJzdG9wLCAic3BhY2UtdG8tdGFic3RvcCIsfSwNCiAjZW5kaWYgLyog Tk9UQUIgKi8NCmRpZmYgLS1naXQgYS9rYmQuYyBiL2tiZC5jDQppbmRleCAxZDdhMWEyLi5mNjEz YjEwIDEwMDY0NA0KLS0tIGEva2JkLmMNCisrKyBiL2tiZC5jDQpAQCAtOSw2ICs5LDggQEANCiAj aW5jbHVkZSA8c3lzL3F1ZXVlLmg+DQogI2luY2x1ZGUgPHNpZ25hbC5oPg0KICNpbmNsdWRlIDxz dGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8d2NoYXIuaD4NCiANCiAj aW5jbHVkZSAiZGVmLmgiDQogI2luY2x1ZGUgImtiZC5oIg0KQEAgLTQwNiw2ICs0MDgsNDMgQEAg cXVvdGUoaW50IGYsIGludCBuKQ0KIH0NCiANCiAvKg0KKyAqIFByb21wdCBmb3IgYSBjb2RlcG9p bnQgaW4gd2hhdGV2ZXIgdGhlIG5hdGl2ZSBzeXN0ZW0ncyBlbmNvZGluZyBpcywNCisgKiBpbnNl cnQgaXQgaW50byB0aGUgZmlsZQ0KKyAqLw0KK2ludA0KK2luc2VydF9jaGFyKGludCBmLCBpbnQg bikNCit7DQorCWNoYXIgKmJ1ZnA7DQorCWNoYXIgaW5wYnVmWzMyXTsNCisJd2NoYXJfdCB3YzsN CisJY2hhciBtYltNQl9DVVJfTUFYICsgMV07DQorCW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsNCisJ c2l6ZV90IG1ic2xlbjsNCisJc2l6ZV90IGk7DQorDQorCWlmICgoYnVmcCA9IGVyZWFkKCJJbnNl cnQgY2hhcmFjdGVyIChoZXgpOiAiLCBpbnBidWYsIHNpemVvZiBpbnBidWYsDQorCSAgICAgRUZO RVcpKSA9PSBOVUxMKSB7DQorCQlyZXR1cm4gKEFCT1JUKTsNCisJfSBlbHNlIGlmIChidWZwWzBd ID09ICdcMCcpIHsNCisJCXJldHVybiAoRkFMU0UpOw0KKwl9DQorDQorCXdjID0gKHdjaGFyX3Qp IHN0cnRvbGwoYnVmcCwgTlVMTCwgMTYpOw0KKwltYnNsZW4gPSB3Y3J0b21iKG1iLCB3YywgJm1i cyk7DQorCWlmIChtYnNsZW4gPT0gKHNpemVfdCkgLTEpIHsNCisJCXJldHVybiAoRkFMU0UpOw0K Kwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCBtYnNsZW47ICsraSkgew0KKwkJaWYgKGxpbnNlcnQo MSwgbWJbaV0pID09IEZBTFNFKSB7DQorCQkJcmV0dXJuIChGQUxTRSk7DQorCQl9DQorCX0NCisN CisJcmV0dXJuIChUUlVFKTsNCit9DQorDQorLyoNCiAgKiBXcmFwZXIgZnVuY3Rpb24gdG8gY291 bnQgaW52b2NhdGlvbiByZXBlYXRzLg0KICAqIFdlIGlnbm9yZSBhbnkgZnVuY3Rpb24gd2hvc2Ug c29sZSBwdXJwb3NlIGlzIHRvIGdldCB1cw0KICAqIHRvIHRoZSBpbnRlbmRlZCBmdW5jdGlvbi4N CmRpZmYgLS1naXQgYS9rZXltYXAuYyBiL2tleW1hcC5jDQppbmRleCBlZjcxZjg0Li5hYjIzMTgy IDEwMDY0NA0KLS0tIGEva2V5bWFwLmMNCisrKyBiL2tleW1hcC5jDQpAQCAtMTIwLDYgKzEyMCwy MSBAQCBzdGF0aWMgc3RydWN0IEtFWU1BUEUgKDIpIGNYNG1hcCA9IHsNCiAJfQ0KIH07DQogDQor c3RhdGljIFBGIGNYOEpbXSA9IHsNCisJaW5zZXJ0X2NoYXIJCS8qIF5NICovDQorfTsNCisNCitz dGF0aWMgc3RydWN0IEtFWU1BUEUgKDEpIGNYOG1hcCA9IHsNCisJMSwNCisJMSwNCisJcmVzY2Fu LA0KKwl7DQorCQl7DQorCQkJQ0NIUignTScpLCBDQ0hSKCdNJyksIGNYOEosIE5VTEwNCisJCX0N CisJfQ0KK307DQorDQogc3RhdGljIFBGIGNYY0JbXSA9IHsNCiAJbGlzdGJ1ZmZlcnMsCQkvKiBe QiAqLw0KIAlxdWl0LAkJCS8qIF5DICovDQpAQCAtMTU4LDYgKzE3MywxMCBAQCBzdGF0aWMgUEYg Y1gwW10gPSB7DQogCU5VTEwJCQkvKiA0ICovDQogfTsNCiANCitzdGF0aWMgUEYgY1g4W10gPSB7 DQorCU5VTEwJCQkvKiA0ICovDQorfTsNCisNCiBzdGF0aWMgUEYgY1hlcVtdID0gew0KIAlzaG93 Y3BvcwkJLyogPSAqLw0KIH07DQpAQCAtMTg5LDkgKzIwOCw5IEBAIHN0YXRpYyBQRiBjWGNhcltd ID0gew0KIAl1bmRvCQkJLyogdSAqLw0KIH07DQogDQotc3RydWN0IEtFWU1BUEUgKDYpIGNYbWFw ID0gew0KLQk2LA0KLQk2LA0KK3N0cnVjdCBLRVlNQVBFICg3KSBjWG1hcCA9IHsNCisJNywNCisJ NywNCiAJcmVzY2FuLA0KIAl7DQogCQl7DQpAQCAtMjA3LDYgKzIyNiw5IEBAIHN0cnVjdCBLRVlN QVBFICg2KSBjWG1hcCA9IHsNCiAJCQknMCcsICc0JywgY1gwLCAoS0VZTUFQICopICYgY1g0bWFw DQogCQl9LA0KIAkJew0KKwkJCSc4JywgJzgnLCBjWDgsIChLRVlNQVAgKikgJiBjWDhtYXANCisJ CX0sDQorCQl7DQogCQkJJz0nLCAnPScsIGNYZXEsIE5VTEwNCiAJCX0sDQogCQl7DQpAQCAtNDkx LDYgKzUxMywxOCBAQCBzdGF0aWMgc3RydWN0IEtFWU1BUEUgKDEpIG92ZXJ3bWFwID0gew0KIAl9 DQogfTsNCiANCitzdGF0aWMgc3RydWN0IEtFWU1BUEUgKDEpIHJhd21hcCA9IHsNCisJMCwNCisJ MSwJCS8qIDEgdG8gYXZvaWQgMCBzaXplZCBhcnJheSAqLw0KKwlyZXNjYW4sDQorCXsNCisJCS8q IHVudXNlZCBkdW1teSBlbnRyeSBmb3IgVk1TIEMgKi8NCisJCXsNCisJCQkoS0NIQVIpMCwgKEtD SEFSKTAsIE5VTEwsIE5VTEwNCisJCX0NCisJfQ0KK307DQorDQogDQogLyoNCiAgKiBUaGUgYmFz aWMgKHJvb3QpIGtleWJvYXJkIG1hcA0KQEAgLTUxMyw2ICs1NDcsNyBAQCBzdGF0aWMgc3RydWN0 IG1hcHNfcyBtYXBfdGFibGVbXSA9IHsNCiAJeyhLRVlNQVAgKikgJm5vdGFibWFwLCAibm90YWIi LH0sDQogI2VuZGlmIC8qIE5PVEFCICovDQogCXsoS0VZTUFQICopICZvdmVyd21hcCwgIm92ZXJ3 cml0ZSIsfSwNCisJeyhLRVlNQVAgKikgJnJhd21hcCwgInJhdyIsfSwNCiAJeyhLRVlNQVAgKikg Jm1ldGFtYXAsICJlc2MgcHJlZml4Iix9LA0KIAl7KEtFWU1BUCAqKSAmY1htYXAsICJjLXggcHJl Zml4Iix9LA0KIAl7KEtFWU1BUCAqKSAmY1g0bWFwLCAiYy14IDQgcHJlZml4Iix9LA0KZGlmZiAt LWdpdCBhL21vZGVzLmMgYi9tb2Rlcy5jDQppbmRleCAwMjdhNWNkLi4yMDEzYmNiIDEwMDY0NA0K LS0tIGEvbW9kZXMuYw0KKysrIGIvbW9kZXMuYw0KQEAgLTExMSw2ICsxMTEsMjMgQEAgb3Zlcndy aXRlX21vZGUoaW50IGYsIGludCBuKQ0KIH0NCiANCiBpbnQNCitzaG93X3Jhd19tb2RlKGludCBm LCBpbnQgbikNCit7DQorCWlmIChjaGFuZ2Vtb2RlKGYsIG4sICJyYXciKSA9PSBGQUxTRSkNCisJ CXJldHVybiAoRkFMU0UpOw0KKwlpZiAoZiAmIEZGQVJHKSB7DQorCQlpZiAobiA8PSAwKQ0KKwkJ CWN1cmJwLT5iX2ZsYWcgJj0gfkJGU0hPV1JBVzsNCisJCWVsc2UNCisJCQljdXJicC0+Yl9mbGFn IHw9IEJGU0hPV1JBVzsNCisJfSBlbHNlDQorCQljdXJicC0+Yl9mbGFnIF49IEJGU0hPV1JBVzsN CisNCisJc2dhcmJmID0gVFJVRTsNCisJcmV0dXJuIChUUlVFKTsNCit9DQorDQoraW50DQogc2V0 X2RlZmF1bHRfbW9kZShpbnQgZiwgaW50IG4pDQogew0KIAlpbnQJIGk7DQpAQCAtMTcwLDUgKzE4 NywxMSBAQCBzZXRfZGVmYXVsdF9tb2RlKGludCBmLCBpbnQgbikNCiAJCQlkZWZiX2ZsYWcgfD0g QkZOT1RBQjsNCiAJfQ0KICNlbmRpZgkvKiBOT1RBQiAqLw0KKwlpZiAoc3RyY21wKG1vZGVidWYs ICJyYXciKSA9PSAwKSB7DQorCQlpZiAobiA8PSAwKQ0KKwkJCWRlZmJfZmxhZyAmPSB+QkZTSE9X UkFXOw0KKwkJZWxzZQ0KKwkJCWRlZmJfZmxhZyB8PSBCRlNIT1dSQVc7DQorCX0NCiAJcmV0dXJu IChUUlVFKTsNCiB9DQpkaWZmIC0tZ2l0IGEvdXRpbC5jIGIvdXRpbC5jDQppbmRleCA5MzU3ZDRk Li5kYmZjMDU4IDEwMDY0NA0KLS0tIGEvdXRpbC5jDQorKysgYi91dGlsLmMNCkBAIC0xMyw2ICsx Myw4IEBADQogI2luY2x1ZGUgPGN0eXBlLmg+DQogI2luY2x1ZGUgPHNpZ25hbC5oPg0KICNpbmNs dWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8d2NoYXIuaD4N CiANCiAjaW5jbHVkZSAiZGVmLmgiDQogDQpAQCAtMzMsNiArMzUsOSBAQCBzaG93Y3BvcyhpbnQg ZiwgaW50IG4pDQogCWludAkgbmxpbmUsIHJvdzsNCiAJaW50CSBjbGluZSwgY2J5dGU7CQkvKiBD dXJyZW50IGxpbmUvY2hhci9ieXRlICovDQogCWludAkgcmF0aW87DQorCWNoYXIJIGlzbWIgPSAw Ow0KKwl3Y2hhcl90CSB3YyA9IDA7DQorCWNoYXIJIG1iY1tNQl9DVVJfTUFYICsgMV07DQogDQog CS8qIGNvbGxlY3QgdGhlIGRhdGEgKi8NCiAJY2xwID0gYmZpcnN0bHAoY3VyYnApOw0KQEAgLTY5 LDggKzc0LDQzIEBAIHNob3djcG9zKGludCBmLCBpbnQgbikNCiAJCWNscCA9IGxmb3J3KGNscCk7 DQogCX0NCiAJcmF0aW8gPSBuY2hhciA/ICgxMDBMICogY2NoYXIpIC8gbmNoYXIgOiAxMDA7DQot CWV3cHJpbnRmKCJDaGFyOiAlYyAoMCVvKSAgcG9pbnQ9JWxkKCVkJSUpICBsaW5lPSVkICByb3c9 JWQgIGNvbD0lZCIsDQotCSAgICBjYnl0ZSwgY2J5dGUsIGNjaGFyLCByYXRpbywgY2xpbmUsIHJv dywgZ2V0Y29scG9zKGN1cndwKSk7DQorDQorCWlmICghKGN1cmJwLT5iX2ZsYWcgJiBCRlNIT1dS QVcpKSB7DQorCQltYnN0YXRlX3QgbWJzID0geyAwIH07DQorCQlzaXplX3QgY29uc3VtZWQgPSAw Ow0KKwkJc2l6ZV90IG9mZnNldCA9IDA7DQorCQl3aGlsZSAoY2J5dGUgIT0gJ1xuJyAmJiBvZmZz ZXQgPD0gY3Vyd3AtPndfZG90bykgew0KKwkJCWludCBjID0gbGdldGMoY2xwLCBjdXJ3cC0+d19k b3RvIC0gb2Zmc2V0KTsNCisJCQlpZiAoaXNwcmludChjKSB8fCAoSVNDVFJMKGMpICE9IEZBTFNF KSkgew0KKwkJCQlicmVhazsNCisJCQl9DQorCQkJY29uc3VtZWQgPSBtYnJ0b3djKCZ3YywNCisJ CQkgICAgICAgICAgICAgICAgICAgJmNscC0+bF90ZXh0W2N1cndwLT53X2RvdG8gLSBvZmZzZXRd LA0KKwkJCSAgICAgICAgICAgICAgICAgICBsbGVuZ3RoKGNscCkgLSBjdXJ3cC0+d19kb3RvICsg b2Zmc2V0LA0KKwkJCSAgICAgICAgICAgICAgICAgICAmbWJzKTsNCisJCQlpZiAoY29uc3VtZWQg PCAoc2l6ZV90KSAtMikgew0KKwkJCQlpc21iID0gKG9mZnNldCA8IGNvbnN1bWVkKTsNCisJCQkJ c25wcmludGYobWJjLCBjb25zdW1lZCArIDEsICIlcyIsDQorCQkJCSAgICAgICAgICZjbHAtPmxf dGV4dFtjdXJ3cC0+d19kb3RvIC0gb2Zmc2V0XSk7DQorCQkJCW1iY1tjb25zdW1lZCArIDFdID0g J1wwJzsNCisJCQkJYnJlYWs7DQorCQkJfSBlbHNlIHsNCisJCQkJbWVtc2V0KCZtYnMsIDAsIHNp emVvZiBtYnMpOw0KKwkJCX0NCisJCQlvZmZzZXQrKzsNCisJCX0NCisJfQ0KKw0KKwlpZiAoaXNt Yikgew0KKwkJZXdwcmludGYoIkNoYXI6ICVzIChjb2RlcG9pbnQgMHglbHgpIEJ5dGU6ICVjICgw JW8pICAiDQorCQkgICAgICAgICAicG9pbnQ9JWxkKCVkJSUpICBsaW5lPSVkICByb3c9JWQgY29s PSVkIiwgbWJjLA0KKwkJICAgICAgICAgKGxvbmcpIHdjLCBjYnl0ZSwgY2J5dGUsIGNjaGFyLCBy YXRpbywgY2xpbmUsIHJvdywNCisJCSAgICAgICAgIGdldGNvbHBvcyhjdXJ3cCkpOw0KKwl9IGVs c2Ugew0KKwkJZXdwcmludGYoIkNoYXI6ICVjICgwJW8pICBwb2ludD0lbGQoJWQlJSkgIGxpbmU9 JWQgIHJvdz0lZCINCisJCSAgICAgICAgICJjb2w9JWQiLCBjYnl0ZSwgY2J5dGUsIGNjaGFyLCBy YXRpbywgY2xpbmUsIHJvdywNCisJCSAgICAgICAgIGdldGNvbHBvcyhjdXJ3cCkpOw0KKwl9DQog CXJldHVybiAoVFJVRSk7DQogfQ0KIA0KQEAgLTk2LDYgKzEzNiwyMiBAQCBnZXRjb2xwb3Moc3Ry dWN0IG1nd2luICp3cCkNCiAJCQljb2wgKz0gMjsNCiAJCWVsc2UgaWYgKGlzcHJpbnQoYykpIHsN CiAJCQljb2wrKzsNCisJCX0gZWxzZSBpZiAoISh3cC0+d19idWZwLT5iX2ZsYWcgJiBCRlNIT1dS QVcpKSB7DQorCQkJbWJzdGF0ZV90IG1icyA9IHsgMCB9Ow0KKwkJCXdjaGFyX3Qgd2MgPSAwOw0K KwkJCXNpemVfdCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAmd3AtPndfZG90cC0+bF90ZXh0W2ld LA0KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgbGxlbmd0aCh3cC0+d19kb3RwKSAtIGks DQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJzKTsNCisJCQlpbnQgd2lkdGggPSAt MTsNCisJCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKwkJCQl3aWR0aCA9IHdjd2lk dGgod2MpOw0KKwkJCX0NCisJCQlpZiAod2lkdGggPj0gMCkgew0KKwkJCQljb2wgKz0gd2lkdGg7 DQorCQkJCWkgKz0gKGNvbnN1bWVkIC0gMSk7DQorCQkJfSBlbHNlIHsNCisJCQkJY29sICs9IHNu cHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICJcXCVvIiwgYyk7DQorCQkJfQ0KIAkJfSBlbHNlIHsN CiAJCQljb2wgKz0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIlxcJW8iLCBjKTsNCiAJCX0N Cg== --NzB8fVQJ5HfG6fxh-- --- Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org Help: alpine-aports+help@lists.alpinelinux.org ---