Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tDVqG-001EnO-Qr for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Nov 2024 21:33:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tDVqF-00HEIN-Hv for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Nov 2024 21:32:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tDVqE-00HEI1-QN for pgsql-hackers@lists.postgresql.org; Tue, 19 Nov 2024 21:32:59 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tDVq7-002oU2-Qc for pgsql-hackers@postgresql.org; Tue, 19 Nov 2024 21:32:58 +0000 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-212008b0d6eso29573565ad.3 for ; Tue, 19 Nov 2024 13:32:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1732051969; x=1732656769; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:to:from:subject :message-id:from:to:cc:subject:date:message-id:reply-to; bh=Xv4H5VQ7LISy7fsAUR1UtGJOZXJ1X0CKV/R24yHrh0s=; b=mPE/cgsvkJ3QX3AOCTFBwSvR0cpKT30LDvI3nN7cQ+Vi+OaoCae2oiUtOVLzFAOCRj uSfzFYKWaR5k0yW9NLT8Bbvcw4bPu4MoOQ7u2suXknd8ltCD5YDdNhl2tMuHBIiD+dyf qrYDqDIMQH/ubaeI3RQBiESZHmRMiXxE5+nG0CQFKwoy+txdordgtAXShSNFatqVtF6F Z1NARosQpHcWCAQWU/fZg8LDUVwk4rmA83zp+KiCdg39wX8qeH1ST5OCdTafNfiQvZlt rnz2MvOzaW51iDMRG+H2bOahViI/p/Kd+fLutJ5+vgxUpKQQTTYSQP4VATigy3FkO8ne 4biQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732051969; x=1732656769; h=mime-version:user-agent:references:in-reply-to:date:to:from:subject :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Xv4H5VQ7LISy7fsAUR1UtGJOZXJ1X0CKV/R24yHrh0s=; b=wuNcVXw5y7jl7FK0Iju4N09l6pmUZcjyy4wHFEjUQh46hk5jQQbBGS1yPxLk30k3jV +O82zfvmMuvfIpFvBt+CiO9LJFDszVyRjLtTPO/XjCbWPxnlKPYUJviMIIb/ectq1LaA W/lCmV+TsLlE25F5+MasudPwpmNGRPpj4Mq7qRG3bqsDCz1ZSwYgXpFNgUMEkbU0FE7e MjtAA9sToxDMaKK+2ITab7+D2t5h5bH+Chjh9j1pS5WKYObe9Sj/q8FbN99juyHNsu7W i3G7vme4II/Z+tryF0zuuaF+TiJslJReORkjE+kt0WE6430tAi+Yc3FM/MObXzpqG/Fi w0Bw== X-Forwarded-Encrypted: i=1; AJvYcCUREZJZG6hq8NxMBaj3uJrR8hszPa4lGkjnzmpLGOxDjU7WdNvz2PlyKgomEazSXCbIEXdk1BlIjPRXVWJv@postgresql.org X-Gm-Message-State: AOJu0YzC4MEDPRI7vicNn3dD7pcCdhNJjdwbR6sQo1wmQAxTmWWL/Rqv xZHmQa+qbIGQS0Y5MJq0iOI8HAwP8zIwmnj0r70HYl47dfNqQyD9wZNJkobplR6kTKMJkoX5aXQ = X-Google-Smtp-Source: AGHT+IGjDXQrbrwiICl/1himcgu8rV4//HUM9hQ6fsHLUOiAsEJBOZOOV1eIW5UP2Dzvkdrj2vlweA== X-Received: by 2002:a17:902:d501:b0:20c:763e:d9cc with SMTP id d9443c01a7336-2126c117425mr1548825ad.7.1732051968887; Tue, 19 Nov 2024 13:32:48 -0800 (PST) Received: from [172.18.10.22] ([12.126.244.130]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21200bb9ab7sm55804465ad.171.2024.11.19.13.32.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Nov 2024 13:32:48 -0800 (PST) Message-ID: <78a1b434ff40510dc5aaabe986299a09f4da90cf.camel@j-davis.com> Subject: Re: Collation & ctype method table, and extension hooks From: Jeff Davis To: Andreas Karlsson , pgsql-hackers@postgresql.org Date: Tue, 19 Nov 2024 13:32:47 -0800 In-Reply-To: <247f18f3-09e5-480d-9222-9d0d9684995f@proxel.se> References: <2830211e1b6e6a2e26d845780b03e125281ea17b.camel@j-davis.com> <59da7ee4-5e1a-4727-b464-a603c6ed84cd@proxel.se> <247f18f3-09e5-480d-9222-9d0d9684995f@proxel.se> Content-Type: multipart/mixed; boundary="=-LTFx9IBzSoydfVtEfUQa" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-LTFx9IBzSoydfVtEfUQa Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2024-11-01 at 14:08 +0100, Andreas Karlsson wrote: > I think adding such a small file would make life easier for people > new=20 > to the collation part of the code base. It would be a nice symmetry=20 > between collation providers and where code for them can be found. Done. > >=20 > For me combining them would make the intention of the code easier to=20 > understand since aren't the casemap functions just a set of > "ctype_methods"? Done. There is a bit of weirdness in libc because: * Single byte encodings use the single-byte isupper(), toupper(), etc. * UTF8 encoding uses wide character iswupper(), towupper(), etc. * Non-UTF8 multibyte encodings use isupper() for pattern matching but towupper() for case mapping that weirdness existed before, but it's a bit more obvious what's happening now. > > > This commit makes me tempted to handle the ctype_is_c logic for > > > character classes also in callbacks and remove the if in > > > functions > > > like > > > pg_wc_ispunct(). But this si something that would need to be > > > benchmarked. I like this idea, but it can be a follow up. Attached new patchset. I also tried some performance tests again. I used smalltext (a table of 10M ~30-character strings) and bigtext (a table of 32768 rows, each containing the 100KiB source of=C2=A0https://en.wikipedia.org/wiki/Diacriti= c ). And I then ran the following regex on each: select count(*) from thetable where t ~ '[[:digit:]][[:space:]][[:punct:]][[:alpha:]][[:lower:]][[:upper:]]'; for "C", "en_US", and "en-US-x-icu". The timings for smalltext were indistinguishable between master and the patched version. The timings for bigtext were pretty noisy so it's hard to tell if there was a regression or not, but I saw some evidence in the profile that char_properties has a cost (~1%). I'm not sure if that's a significant concern or not. Which API do you think is the right one? Individual functions testing individual properties, or something like char_properties() that can test several at once? Regards, Jeff Davis --=-LTFx9IBzSoydfVtEfUQa Content-Disposition: attachment; filename*0=v8-0001-Perform-provider-specific-initialization-code-in-.pat; filename*1=ch Content-Type: text/x-patch; name="v8-0001-Perform-provider-specific-initialization-code-in-.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5OWY3YWI2Y2NhZjZhMjNlMWZjY2Q2ZWIwYzIwZjIyOTIwODgxNTVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDI1IFNlcCAyMDI0IDE1OjQ5OjMyIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2OCAxLzddIFBl cmZvcm0gcHJvdmlkZXItc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gY29kZSBpbiBuZXcKIGZ1bmN0 aW9ucy4KCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L01ha2VmaWxlICAgICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAgICAgfCAxNTUgKysrLS0tLS0t LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMg fCAgNzAgKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYyAg ICAgfCAgOTcgKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVf bGliYy5jICAgIHwgIDc0ICsrKysrKysrKystCiA2IGZpbGVzIGNoYW5nZWQsIDI1NCBpbnNlcnRp b25zKCspLCAxNDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvTWFrZWZpbGUKaW5kZXgg ODVlNWVhZjMyZS4uMzVlOGMwMWFhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9NYWtlZmlsZQpAQCAtNzksNiAr NzksNyBAQCBPQkpTID0gXAogCW9yZGVyZWRzZXRhZ2dzLm8gXAogCXBhcnRpdGlvbmZ1bmNzLm8g XAogCXBnX2xvY2FsZS5vIFwKKwlwZ19sb2NhbGVfYnVpbHRpbi5vIFwKIAlwZ19sb2NhbGVfaWN1 Lm8gXAogCXBnX2xvY2FsZV9saWJjLm8gXAogCXBnX2xzbi5vIFwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tZXNv bi5idWlsZAppbmRleCBmNzNmMjk0YjhmLi5lODZkNmRjOGUwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21l c29uLmJ1aWxkCkBAIC02Niw2ICs2Niw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAg J29yZGVyZWRzZXRhZ2dzLmMnLAogICAncGFydGl0aW9uZnVuY3MuYycsCiAgICdwZ19sb2NhbGUu YycsCisgICdwZ19sb2NhbGVfYnVpbHRpbi5jJywKICAgJ3BnX2xvY2FsZV9pY3UuYycsCiAgICdw Z19sb2NhbGVfbGliYy5jJywKICAgJ3BnX2xzbi5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUu YwppbmRleCBkNGU4OTY2M2VjLi5lYzVmNTA5YzRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2Fs ZS5jCkBAIC05Miw4ICs5Miw2IEBACiAvKiBwZ19sb2NhbGVfaWN1LmMgKi8KICNpZmRlZiBVU0Vf SUNVCiBleHRlcm4gVUNvbGxhdG9yICpwZ191Y29sX29wZW4oY29uc3QgY2hhciAqbG9jX3N0cik7 Ci1leHRlcm4gVUNvbGxhdG9yICptYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFyICppY3Vsb2Nz dHIsCi0JCQkJCQkJCQljb25zdCBjaGFyICppY3VydWxlcyk7CiBleHRlcm4gaW50CXN0cm5jb2xs X2ljdShjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCiAJCQkJCQkgY29uc3QgY2hhciAq YXJnMiwgc3NpemVfdCBsZW4yLAogCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CkBAIC0xMDYs OCArMTA0LDkgQEAgZXh0ZXJuIHNpemVfdCBzdHJueGZybV9wcmVmaXhfaWN1KGNoYXIgKmRlc3Qs IHNpemVfdCBkZXN0c2l6ZSwKICNlbmRpZgogCiAvKiBwZ19sb2NhbGVfbGliYy5jICovCi1leHRl cm4gbG9jYWxlX3QgbWFrZV9saWJjX2NvbGxhdG9yKGNvbnN0IGNoYXIgKmNvbGxhdGUsCi0JCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKmN0eXBlKTsKK2V4dGVybiBwZ19sb2NhbGVfdCBjcmVhdGVfcGdf bG9jYWxlX2J1aWx0aW4oT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKK2V4dGVy biBwZ19sb2NhbGVfdCBjcmVhdGVfcGdfbG9jYWxlX2ljdShPaWQgY29sbGlkLCBNZW1vcnlDb250 ZXh0IGNvbnRleHQpOworZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19sb2NhbGVfbGliYyhP aWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogZXh0ZXJuIGludAlzdHJuY29sbF9s aWJjKGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKIAkJCQkJCSAgY29uc3QgY2hhciAq YXJnMiwgc3NpemVfdCBsZW4yLAogCQkJCQkJICBwZ19sb2NhbGVfdCBsb2NhbGUpOwpAQCAtMTM4 LDcgKzEzNyw3IEBAIGNoYXIJICAgKmxvY2FsaXplZF9mdWxsX21vbnRoc1sxMiArIDFdOwogLyog aXMgdGhlIGRhdGFiYXNlcydzIExDX0NUWVBFIHRoZSBDIGxvY2FsZT8gKi8KIGJvb2wJCWRhdGFi YXNlX2N0eXBlX2lzX2MgPSBmYWxzZTsKIAotc3RhdGljIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0 IGRlZmF1bHRfbG9jYWxlOworc3RhdGljIHBnX2xvY2FsZV90IGRlZmF1bHRfbG9jYWxlID0gTlVM TDsKIAogLyogaW5kaWNhdGVzIHdoZXRoZXIgbG9jYWxlIGluZm9ybWF0aW9uIGNhY2hlIGlzIHZh bGlkICovCiBzdGF0aWMgYm9vbCBDdXJyZW50TG9jYWxlQ29udlZhbGlkID0gZmFsc2U7CkBAIC0x MjEzLDcgKzEyMTIsNiBAQCBJc29Mb2NhbGVOYW1lKGNvbnN0IGNoYXIgKndpbmxvY25hbWUpCiAK ICNlbmRpZgkJCQkJCQkvKiBXSU4zMiAmJiBMQ19NRVNTQUdFUyAqLwogCi0KIC8qCiAgKiBDcmVh dGUgYSBuZXcgcGdfbG9jYWxlX3Qgc3RydWN0IGZvciB0aGUgZ2l2ZW4gY29sbGF0aW9uIG9pZC4K ICAqLwpAQCAtMTIyNiw3NSArMTIyNCwxNyBAQCBjcmVhdGVfcGdfbG9jYWxlKE9pZCBjb2xsaWQs IE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAlEYXR1bQkJZGF0dW07CiAJYm9vbAkJaXNudWxsOwog Ci0JcmVzdWx0ID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3RydWN0 IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKLQogCXRwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9i amVjdElkR2V0RGF0dW0oY29sbGlkKSk7CiAJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKIAkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiAldSIsIGNvbGxp ZCk7CiAJY29sbGZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCk7CiAKLQly ZXN1bHQtPnByb3ZpZGVyID0gY29sbGZvcm0tPmNvbGxwcm92aWRlcjsKLQlyZXN1bHQtPmRldGVy bWluaXN0aWMgPSBjb2xsZm9ybS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKLQogCWlmIChjb2xsZm9y bS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9CVUlMVElOKQotCXsKLQkJY29uc3QgY2hh ciAqbG9jc3RyOwotCi0JCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVsbChDT0xMT0lELCB0 cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGxvY2FsZSk7Ci0JCWxvY3N0ciA9IFRleHREYXR1bUdl dENTdHJpbmcoZGF0dW0pOwotCi0JCXJlc3VsdC0+Y29sbGF0ZV9pc19jID0gdHJ1ZTsKLQkJcmVz dWx0LT5jdHlwZV9pc19jID0gKHN0cmNtcChsb2NzdHIsICJDIikgPT0gMCk7Ci0KLQkJYnVpbHRp bl92YWxpZGF0ZV9sb2NhbGUoR2V0RGF0YWJhc2VFbmNvZGluZygpLCBsb2NzdHIpOwotCi0JCXJl c3VsdC0+aW5mby5idWlsdGluLmxvY2FsZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoY29udGV4dCwK LQkJCQkJCQkJCQkJCQkJICBsb2NzdHIpOwotCX0KKwkJcmVzdWx0ID0gY3JlYXRlX3BnX2xvY2Fs ZV9idWlsdGluKGNvbGxpZCwgY29udGV4dCk7CiAJZWxzZSBpZiAoY29sbGZvcm0tPmNvbGxwcm92 aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCXsKLSNpZmRlZiBVU0VfSUNVCi0JCWNvbnN0IGNo YXIgKmljdWxvY3N0cjsKLQkJY29uc3QgY2hhciAqaWN1cnVsZXM7Ci0KLQkJZGF0dW0gPSBTeXND YWNoZUdldEF0dHJOb3ROdWxsKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsbG9j YWxlKTsKLQkJaWN1bG9jc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7Ci0KLQkJcmVz dWx0LT5jb2xsYXRlX2lzX2MgPSBmYWxzZTsKLQkJcmVzdWx0LT5jdHlwZV9pc19jID0gZmFsc2U7 Ci0KLQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0 aW9uX2NvbGxpY3VydWxlcywgJmlzbnVsbCk7Ci0JCWlmICghaXNudWxsKQotCQkJaWN1cnVsZXMg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQkJZWxzZQotCQkJaWN1cnVsZXMgPSBOVUxM OwotCi0JCXJlc3VsdC0+aW5mby5pY3UubG9jYWxlID0gTWVtb3J5Q29udGV4dFN0cmR1cChjb250 ZXh0LCBpY3Vsb2NzdHIpOwotCQlyZXN1bHQtPmluZm8uaWN1LnVjb2wgPSBtYWtlX2ljdV9jb2xs YXRvcihpY3Vsb2NzdHIsIGljdXJ1bGVzKTsKLSNlbHNlCi0JCS8qIGNvdWxkIGdldCBoZXJlIGlm IGEgY29sbGF0aW9uIHdhcyBjcmVhdGVkIGJ5IGEgYnVpbGQgd2l0aCBJQ1UgKi8KLQkJZXJlcG9y dChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0J CQkJIGVycm1zZygiSUNVIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCIpKSk7Ci0jZW5k aWYKLQl9CisJCXJlc3VsdCA9IGNyZWF0ZV9wZ19sb2NhbGVfaWN1KGNvbGxpZCwgY29udGV4dCk7 CiAJZWxzZSBpZiAoY29sbGZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykK LQl7Ci0JCWNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlOwotCQljb25zdCBjaGFyICpjb2xsY3R5cGU7 Ci0KLQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKENPTExPSUQsIHRwLCBBbnVtX3Bn X2NvbGxhdGlvbl9jb2xsY29sbGF0ZSk7Ci0JCWNvbGxjb2xsYXRlID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhkYXR1bSk7Ci0JCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVsbChDT0xMT0lELCB0 cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGN0eXBlKTsKLQkJY29sbGN0eXBlID0gVGV4dERhdHVt R2V0Q1N0cmluZyhkYXR1bSk7Ci0KLQkJcmVzdWx0LT5jb2xsYXRlX2lzX2MgPSAoc3RyY21wKGNv bGxjb2xsYXRlLCAiQyIpID09IDApIHx8Ci0JCQkoc3RyY21wKGNvbGxjb2xsYXRlLCAiUE9TSVgi KSA9PSAwKTsKLQkJcmVzdWx0LT5jdHlwZV9pc19jID0gKHN0cmNtcChjb2xsY3R5cGUsICJDIikg PT0gMCkgfHwKLQkJCShzdHJjbXAoY29sbGN0eXBlLCAiUE9TSVgiKSA9PSAwKTsKLQotCQlyZXN1 bHQtPmluZm8ubHQgPSBtYWtlX2xpYmNfY29sbGF0b3IoY29sbGNvbGxhdGUsIGNvbGxjdHlwZSk7 Ci0JfQorCQlyZXN1bHQgPSBjcmVhdGVfcGdfbG9jYWxlX2xpYmMoY29sbGlkLCBjb250ZXh0KTsK IAllbHNlCiAJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KIAkJUEdMT0NBTEVfU1VQUE9SVF9FUlJP Uihjb2xsZm9ybS0+Y29sbHByb3ZpZGVyKTsKQEAgLTEzNTQsNyArMTI5NCw5IEBAIGluaXRfZGF0 YWJhc2VfY29sbGF0aW9uKHZvaWQpCiB7CiAJSGVhcFR1cGxlCXR1cDsKIAlGb3JtX3BnX2RhdGFi YXNlIGRiZm9ybTsKLQlEYXR1bQkJZGF0dW07CisJcGdfbG9jYWxlX3QgcmVzdWx0OworCisJQXNz ZXJ0KGRlZmF1bHRfbG9jYWxlID09IE5VTEwpOwogCiAJLyogRmV0Y2ggb3VyIHBnX2RhdGFiYXNl IHJvdyBub3JtYWxseSwgdmlhIHN5c2NhY2hlICovCiAJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKERB VEFCQVNFT0lELCBPYmplY3RJZEdldERhdHVtKE15RGF0YWJhc2VJZCkpOwpAQCAtMTM2Myw4MCAr MTMwNSwyMSBAQCBpbml0X2RhdGFiYXNlX2NvbGxhdGlvbih2b2lkKQogCWRiZm9ybSA9IChGb3Jt X3BnX2RhdGFiYXNlKSBHRVRTVFJVQ1QodHVwKTsKIAogCWlmIChkYmZvcm0tPmRhdGxvY3Byb3Zp ZGVyID09IENPTExQUk9WSURFUl9CVUlMVElOKQotCXsKLQkJY2hhcgkgICAqZGF0bG9jYWxlOwot Ci0JCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVsbChEQVRBQkFTRU9JRCwgdHVwLCBBbnVt X3BnX2RhdGFiYXNlX2RhdGxvY2FsZSk7Ci0JCWRhdGxvY2FsZSA9IFRleHREYXR1bUdldENTdHJp bmcoZGF0dW0pOwotCi0JCWJ1aWx0aW5fdmFsaWRhdGVfbG9jYWxlKGRiZm9ybS0+ZW5jb2Rpbmcs IGRhdGxvY2FsZSk7Ci0KLQkJZGVmYXVsdF9sb2NhbGUuY29sbGF0ZV9pc19jID0gdHJ1ZTsKLQkJ ZGVmYXVsdF9sb2NhbGUuY3R5cGVfaXNfYyA9IChzdHJjbXAoZGF0bG9jYWxlLCAiQyIpID09IDAp OwotCi0JCWRlZmF1bHRfbG9jYWxlLmluZm8uYnVpbHRpbi5sb2NhbGUgPSBNZW1vcnlDb250ZXh0 U3RyZHVwKAotCQkJCQkJCQkJCQkJCQkJCSBUb3BNZW1vcnlDb250ZXh0LCBkYXRsb2NhbGUpOwot CX0KKwkJcmVzdWx0ID0gY3JlYXRlX3BnX2xvY2FsZV9idWlsdGluKERFRkFVTFRfQ09MTEFUSU9O X09JRCwKKwkJCQkJCQkJCQkgIFRvcE1lbW9yeUNvbnRleHQpOwogCWVsc2UgaWYgKGRiZm9ybS0+ ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKLQl7Ci0jaWZkZWYgVVNFX0lDVQot CQljaGFyCSAgICpkYXRsb2NhbGU7Ci0JCWNoYXIJICAgKmljdXJ1bGVzOwotCQlib29sCQlpc251 bGw7Ci0KLQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKERBVEFCQVNFT0lELCB0dXAs IEFudW1fcGdfZGF0YWJhc2VfZGF0bG9jYWxlKTsKLQkJZGF0bG9jYWxlID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhkYXR1bSk7Ci0KLQkJZGVmYXVsdF9sb2NhbGUuY29sbGF0ZV9pc19jID0gZmFsc2U7 Ci0JCWRlZmF1bHRfbG9jYWxlLmN0eXBlX2lzX2MgPSBmYWxzZTsKLQotCQlkYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwLCBBbnVtX3BnX2RhdGFiYXNlX2RhdGljdXJ1bGVz LCAmaXNudWxsKTsKLQkJaWYgKCFpc251bGwpCi0JCQlpY3VydWxlcyA9IFRleHREYXR1bUdldENT dHJpbmcoZGF0dW0pOwotCQllbHNlCi0JCQlpY3VydWxlcyA9IE5VTEw7Ci0KLQkJZGVmYXVsdF9s b2NhbGUuaW5mby5pY3UubG9jYWxlID0gTWVtb3J5Q29udGV4dFN0cmR1cChUb3BNZW1vcnlDb250 ZXh0LCBkYXRsb2NhbGUpOwotCQlkZWZhdWx0X2xvY2FsZS5pbmZvLmljdS51Y29sID0gbWFrZV9p Y3VfY29sbGF0b3IoZGF0bG9jYWxlLCBpY3VydWxlcyk7Ci0jZWxzZQotCQkvKiBjb3VsZCBnZXQg aGVyZSBpZiBhIGNvbGxhdGlvbiB3YXMgY3JlYXRlZCBieSBhIGJ1aWxkIHdpdGggSUNVICovCi0J CWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAotCQkJCSBlcnJtc2coIklDVSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKSkp OwotI2VuZGlmCi0JfQorCQlyZXN1bHQgPSBjcmVhdGVfcGdfbG9jYWxlX2ljdShERUZBVUxUX0NP TExBVElPTl9PSUQsCisJCQkJCQkJCQkgIFRvcE1lbW9yeUNvbnRleHQpOwogCWVsc2UgaWYgKGRi Zm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCi0JewotCQljb25zdCBj aGFyICpkYXRjb2xsYXRlOwotCQljb25zdCBjaGFyICpkYXRjdHlwZTsKLQotCQlkYXR1bSA9IFN5 c0NhY2hlR2V0QXR0ck5vdE51bGwoREFUQUJBU0VPSUQsIHR1cCwgQW51bV9wZ19kYXRhYmFzZV9k YXRjb2xsYXRlKTsKLQkJZGF0Y29sbGF0ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOwot CQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoREFUQUJBU0VPSUQsIHR1cCwgQW51bV9w Z19kYXRhYmFzZV9kYXRjdHlwZSk7Ci0JCWRhdGN0eXBlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhk YXR1bSk7Ci0KLQkJZGVmYXVsdF9sb2NhbGUuY29sbGF0ZV9pc19jID0gKHN0cmNtcChkYXRjb2xs YXRlLCAiQyIpID09IDApIHx8Ci0JCQkoc3RyY21wKGRhdGNvbGxhdGUsICJQT1NJWCIpID09IDAp OwotCQlkZWZhdWx0X2xvY2FsZS5jdHlwZV9pc19jID0gKHN0cmNtcChkYXRjdHlwZSwgIkMiKSA9 PSAwKSB8fAotCQkJKHN0cmNtcChkYXRjdHlwZSwgIlBPU0lYIikgPT0gMCk7Ci0KLQkJZGVmYXVs dF9sb2NhbGUuaW5mby5sdCA9IG1ha2VfbGliY19jb2xsYXRvcihkYXRjb2xsYXRlLCBkYXRjdHlw ZSk7Ci0JfQorCQlyZXN1bHQgPSBjcmVhdGVfcGdfbG9jYWxlX2xpYmMoREVGQVVMVF9DT0xMQVRJ T05fT0lELAorCQkJCQkJCQkJICAgVG9wTWVtb3J5Q29udGV4dCk7CiAJZWxzZQogCQkvKiBzaG91 bGRuJ3QgaGFwcGVuICovCiAJCVBHTE9DQUxFX1NVUFBPUlRfRVJST1IoZGJmb3JtLT5kYXRsb2Nw cm92aWRlcik7CiAKLQotCWRlZmF1bHRfbG9jYWxlLnByb3ZpZGVyID0gZGJmb3JtLT5kYXRsb2Nw cm92aWRlcjsKLQotCS8qCi0JICogRGVmYXVsdCBsb2NhbGUgaXMgY3VycmVudGx5IGFsd2F5cyBk ZXRlcm1pbmlzdGljLiAgTm9uZGV0ZXJtaW5pc3RpYwotCSAqIGxvY2FsZXMgY3VycmVudGx5IGRv bid0IHN1cHBvcnQgcGF0dGVybiBtYXRjaGluZywgd2hpY2ggd291bGQgYnJlYWsgYQotCSAqIGxv dCBvZiB0aGluZ3MgaWYgYXBwbGllZCBnbG9iYWxseS4KLQkgKi8KLQlkZWZhdWx0X2xvY2FsZS5k ZXRlcm1pbmlzdGljID0gdHJ1ZTsKLQogCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCisJZGVmYXVs dF9sb2NhbGUgPSByZXN1bHQ7CiB9CiAKIC8qCkBAIC0xNDU0LDcgKzEzMzcsNyBAQCBwZ19uZXds b2NhbGVfZnJvbV9jb2xsYXRpb24oT2lkIGNvbGxpZCkKIAlib29sCQlmb3VuZDsKIAogCWlmIChj b2xsaWQgPT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQotCQlyZXR1cm4gJmRlZmF1bHRfbG9jYWxl OworCQlyZXR1cm4gZGVmYXVsdF9sb2NhbGU7CiAKIAlpZiAoIU9pZElzVmFsaWQoY29sbGlkKSkK IAkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiAldSIsIGNv bGxpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0 aW4uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjQyNDY5NzFhNGQKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYwpAQCAtMCwwICsx LDcwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogUG9zdGdyZVNRTCBsb2NhbGUgdXRpbGl0 aWVzIGZvciBidWlsdGluIHByb3ZpZGVyCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy MDAyLTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X2RhdGFiYXNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGls cy9wZ19sb2NhbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCitleHRlcm4gcGdf bG9jYWxlX3QgY3JlYXRlX3BnX2xvY2FsZV9idWlsdGluKE9pZCBjb2xsaWQsCisJCQkJCQkJCQkJ CU1lbW9yeUNvbnRleHQgY29udGV4dCk7CisKK3BnX2xvY2FsZV90CitjcmVhdGVfcGdfbG9jYWxl X2J1aWx0aW4oT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQoreworCWNvbnN0IGNo YXIgKmxvY3N0cjsKKwlwZ19sb2NhbGVfdCByZXN1bHQ7CisKKwlpZiAoY29sbGlkID09IERFRkFV TFRfQ09MTEFUSU9OX09JRCkKKwl7CisJCUhlYXBUdXBsZQl0cDsKKwkJRGF0dW0JCWRhdHVtOwor CisJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lELCBPYmplY3RJZEdldERhdHVtKE15 RGF0YWJhc2VJZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRhdGFiYXNlICV1IiwgTXlEYXRhYmFzZUlkKTsK KwkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKERBVEFCQVNFT0lELCB0cCwKKwkJCQkJ CQkJCSAgIEFudW1fcGdfZGF0YWJhc2VfZGF0bG9jYWxlKTsKKwkJbG9jc3RyID0gVGV4dERhdHVt R2V0Q1N0cmluZyhkYXR1bSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJfQorCWVsc2UKKwl7 CisJCUhlYXBUdXBsZQl0cDsKKwkJRGF0dW0JCWRhdHVtOworCisJCXRwID0gU2VhcmNoU3lzQ2Fj aGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0oY29sbGlkKSk7CisJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29s bGF0aW9uICV1IiwgY29sbGlkKTsKKwkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKENP TExPSUQsIHRwLAorCQkJCQkJCQkJICAgQW51bV9wZ19jb2xsYXRpb25fY29sbGxvY2FsZSk7CisJ CWxvY3N0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQlSZWxlYXNlU3lzQ2FjaGUo dHApOworCX0KKworCWJ1aWx0aW5fdmFsaWRhdGVfbG9jYWxlKEdldERhdGFiYXNlRW5jb2Rpbmco KSwgbG9jc3RyKTsKKworCXJlc3VsdCA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oY29udGV4dCwg c2l6ZW9mKHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0KSk7CisKKwlyZXN1bHQtPmluZm8uYnVpbHRp bi5sb2NhbGUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKGNvbnRleHQsIGxvY3N0cik7CisJcmVzdWx0 LT5wcm92aWRlciA9IENPTExQUk9WSURFUl9CVUlMVElOOworCXJlc3VsdC0+ZGV0ZXJtaW5pc3Rp YyA9IHRydWU7CisJcmVzdWx0LT5jb2xsYXRlX2lzX2MgPSB0cnVlOworCXJlc3VsdC0+Y3R5cGVf aXNfYyA9IChzdHJjbXAobG9jc3RyLCAiQyIpID09IDApOworCisJcmV0dXJuIHJlc3VsdDsKK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jCmluZGV4IDJhODdlMjVkZmIuLjczZWI0 MzBkNzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwpAQCAtMTIsMTQgKzEy LDIwIEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2lmZGVmIFVTRV9JQ1UKLQogI2luY2x1 ZGUgPHVuaWNvZGUvdWNudi5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgorI2VuZGlm CiAKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVk ZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2Zvcm1hdHRpbmcuaCIKKyNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgorI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCiAKIC8qCiAgKiBTaXplIG9mIHN0YWNrIGJ1ZmZlciB0byB1c2Ug Zm9yIHN0cmluZyB0cmFuc2Zvcm1hdGlvbnMsIHVzZWQgdG8gYXZvaWQgaGVhcApAQCAtMjksOSAr MzUsMTEgQEAKICAqLwogI2RlZmluZQkJVEVYVEJVRkxFTgkJCTEwMjQKIAorZXh0ZXJuIHBnX2xv Y2FsZV90IGNyZWF0ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29u dGV4dCk7CisKKyNpZmRlZiBVU0VfSUNVCisKIGV4dGVybiBVQ29sbGF0b3IgKnBnX3Vjb2xfb3Bl bihjb25zdCBjaGFyICpsb2Nfc3RyKTsKLWV4dGVybiBVQ29sbGF0b3IgKm1ha2VfaWN1X2NvbGxh dG9yKGNvbnN0IGNoYXIgKmljdWxvY3N0ciwKLQkJCQkJCQkJCWNvbnN0IGNoYXIgKmljdXJ1bGVz KTsKIGV4dGVybiBpbnQJc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVu MSwKIAkJCQkJCSBjb25zdCBjaGFyICphcmcyLCBzc2l6ZV90IGxlbjIsCiAJCQkJCQkgcGdfbG9j YWxlX3QgbG9jYWxlKTsKQEAgLTQ5LDYgKzU3LDggQEAgZXh0ZXJuIHNpemVfdCBzdHJueGZybV9w cmVmaXhfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKICAqLwogc3RhdGljIFVDb252 ZXJ0ZXIgKmljdV9jb252ZXJ0ZXIgPSBOVUxMOwogCitzdGF0aWMgVUNvbGxhdG9yICptYWtlX2lj dV9jb2xsYXRvcihjb25zdCBjaGFyICppY3Vsb2NzdHIsCisJCQkJCQkJCQljb25zdCBjaGFyICpp Y3VydWxlcyk7CiBzdGF0aWMgaW50CXN0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFy ZzEsIHNzaXplX3QgbGVuMSwKIAkJCQkJCQkJIGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVu MiwKIAkJCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CkBAIC02Myw2ICs3Myw4NSBAQCBzdGF0 aWMgaW50MzJfdCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKIAkJCQkJCQkg Y29uc3QgY2hhciAqc3JjLCBpbnQzMl90IHNyY2xlbik7CiBzdGF0aWMgdm9pZCBpY3Vfc2V0X2Nv bGxhdGlvbl9hdHRyaWJ1dGVzKFVDb2xsYXRvciAqY29sbGF0b3IsIGNvbnN0IGNoYXIgKmxvYywK IAkJCQkJCQkJCQkgVUVycm9yQ29kZSAqc3RhdHVzKTsKKyNlbmRpZgorCitwZ19sb2NhbGVfdAor Y3JlYXRlX3BnX2xvY2FsZV9pY3UoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQor eworI2lmZGVmIFVTRV9JQ1UKKwlib29sCQlkZXRlcm1pbmlzdGljOworCWNvbnN0IGNoYXIgKmlj dWxvY3N0cjsKKwljb25zdCBjaGFyICppY3VydWxlcyA9IE5VTEw7CisJVUNvbGxhdG9yICAqY29s bGF0b3I7CisJcGdfbG9jYWxlX3QgcmVzdWx0OworCisJaWYgKGNvbGxpZCA9PSBERUZBVUxUX0NP TExBVElPTl9PSUQpCisJeworCQlIZWFwVHVwbGUJdHA7CisJCURhdHVtCQlkYXR1bTsKKwkJYm9v bAkJaXNudWxsOworCisJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lELCBPYmplY3RJ ZEdldERhdHVtKE15RGF0YWJhc2VJZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQor CQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRhdGFiYXNlICV1IiwgTXlE YXRhYmFzZUlkKTsKKworCQkvKiBkZWZhdWx0IGRhdGFiYXNlIGNvbGxhdGlvbiBpcyBhbHdheXMg ZGV0ZXJtaW5pc3RpYyAqLworCQlkZXRlcm1pbmlzdGljID0gdHJ1ZTsKKwkJZGF0dW0gPSBTeXND YWNoZUdldEF0dHJOb3ROdWxsKERBVEFCQVNFT0lELCB0cCwKKwkJCQkJCQkJCSAgIEFudW1fcGdf ZGF0YWJhc2VfZGF0bG9jYWxlKTsKKwkJaWN1bG9jc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhk YXR1bSk7CisJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0cCwKKwkJCQkJ CQkJQW51bV9wZ19kYXRhYmFzZV9kYXRpY3VydWxlcywgJmlzbnVsbCk7CisJCWlmICghaXNudWxs KQorCQkJaWN1cnVsZXMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKworCQlSZWxlYXNl U3lzQ2FjaGUodHApOworCX0KKwllbHNlCisJeworCQlGb3JtX3BnX2NvbGxhdGlvbiBjb2xsZm9y bTsKKwkJSGVhcFR1cGxlCXRwOworCQlEYXR1bQkJZGF0dW07CisJCWJvb2wJCWlzbnVsbDsKKwor CQl0cCA9IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKGNvbGxpZCkp OworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiAldSIsIGNvbGxpZCk7CisJCWNvbGxmb3JtID0gKEZv cm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApOworCQlkZXRlcm1pbmlzdGljID0gY29sbGZv cm0tPmNvbGxpc2RldGVybWluaXN0aWM7CisJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVs bChDT0xMT0lELCB0cCwKKwkJCQkJCQkJCSAgIEFudW1fcGdfY29sbGF0aW9uX2NvbGxsb2NhbGUp OworCQlpY3Vsb2NzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwkJZGF0dW0gPSBT eXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsCisJCQkJCQkJCUFudW1fcGdfY29sbGF0aW9uX2Nv bGxpY3VydWxlcywgJmlzbnVsbCk7CisJCWlmICghaXNudWxsKQorCQkJaWN1cnVsZXMgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCX0KKwor CWNvbGxhdG9yID0gbWFrZV9pY3VfY29sbGF0b3IoaWN1bG9jc3RyLCBpY3VydWxlcyk7CisKKwly ZXN1bHQgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKGNvbnRleHQsIHNpemVvZihzdHJ1Y3QgcGdf bG9jYWxlX3N0cnVjdCkpOworCXJlc3VsdC0+aW5mby5pY3UubG9jYWxlID0gTWVtb3J5Q29udGV4 dFN0cmR1cChjb250ZXh0LCBpY3Vsb2NzdHIpOworCXJlc3VsdC0+aW5mby5pY3UudWNvbCA9IGNv bGxhdG9yOworCXJlc3VsdC0+cHJvdmlkZXIgPSBDT0xMUFJPVklERVJfSUNVOworCXJlc3VsdC0+ ZGV0ZXJtaW5pc3RpYyA9IGRldGVybWluaXN0aWM7CisJcmVzdWx0LT5jb2xsYXRlX2lzX2MgPSBm YWxzZTsKKwlyZXN1bHQtPmN0eXBlX2lzX2MgPSBmYWxzZTsKKworCXJldHVybiByZXN1bHQ7Cisj ZWxzZQorCS8qIGNvdWxkIGdldCBoZXJlIGlmIGEgY29sbGF0aW9uIHdhcyBjcmVhdGVkIGJ5IGEg YnVpbGQgd2l0aCBJQ1UgKi8KKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJIGVycm1zZygiSUNVIGlzIG5vdCBzdXBwb3J0ZWQg aW4gdGhpcyBidWlsZCIpKSk7CisKKwlyZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCisjaWZkZWYg VVNFX0lDVQogCiAvKgogICogV3JhcHBlciBhcm91bmQgdWNvbF9vcGVuKCkgdG8gaGFuZGxlIEFQ SSBkaWZmZXJlbmNlcyBmb3Igb2xkZXIgSUNVCkBAIC0xNjAsNyArMjQ5LDcgQEAgcGdfdWNvbF9v cGVuKGNvbnN0IGNoYXIgKmxvY19zdHIpCiAgKgogICogRW5zdXJlIHRoYXQgbm8gcGF0aCBsZWFr cyBhIFVDb2xsYXRvci4KICAqLwotVUNvbGxhdG9yICoKK3N0YXRpYyBVQ29sbGF0b3IgKgogbWFr ZV9pY3VfY29sbGF0b3IoY29uc3QgY2hhciAqaWN1bG9jc3RyLCBjb25zdCBjaGFyICppY3VydWxl cykKIHsKIAlpZiAoIWljdXJ1bGVzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3BnX2xvY2FsZV9saWJjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2xpYmMu YwppbmRleCA4M2YzMTBmYzcxLi4zNzRhYzM3YmEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlX2xpYmMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlX2xpYmMuYwpAQCAtMTEsMTAgKzExLDE2IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1 ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mb3JtYXR0aW5nLmgiCisjaW5jbHVkZSAi dXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9zeXNjYWNoZS5oIgogCiAvKgogICogU2l6ZSBvZiBzdGFjayBidWZmZXIgdG8gdXNl IGZvciBzdHJpbmcgdHJhbnNmb3JtYXRpb25zLCB1c2VkIHRvIGF2b2lkIGhlYXAKQEAgLTI0LDE1 ICszMCwxNiBAQAogICovCiAjZGVmaW5lCQlURVhUQlVGTEVOCQkJMTAyNAogCi1leHRlcm4gbG9j YWxlX3QgbWFrZV9saWJjX2NvbGxhdG9yKGNvbnN0IGNoYXIgKmNvbGxhdGUsCi0JCQkJCQkJCSAg IGNvbnN0IGNoYXIgKmN0eXBlKTsKK2V4dGVybiBwZ19sb2NhbGVfdCBjcmVhdGVfcGdfbG9jYWxl X2xpYmMoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKKwogZXh0ZXJuIGludAlz dHJuY29sbF9saWJjKGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKIAkJCQkJCSAgY29u c3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4yLAogCQkJCQkJICBwZ19sb2NhbGVfdCBsb2NhbGUp OwogZXh0ZXJuIHNpemVfdCBzdHJueGZybV9saWJjKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6 ZSwKIAkJCQkJCQljb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCQkJCQkJCXBnX2xv Y2FsZV90IGxvY2FsZSk7Ci0KK3N0YXRpYyBsb2NhbGVfdCBtYWtlX2xpYmNfY29sbGF0b3IoY29u c3QgY2hhciAqY29sbGF0ZSwKKwkJCQkJCQkJICAgY29uc3QgY2hhciAqY3R5cGUpOwogc3RhdGlj IHZvaWQgcmVwb3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpOwog CiAjaWZkZWYgV0lOMzIKQEAgLTQxLDYgKzQ4LDY1IEBAIHN0YXRpYyBpbnQJc3RybmNvbGxfbGli Y193aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKIAkJCQkJCQkJCSBw Z19sb2NhbGVfdCBsb2NhbGUpOwogI2VuZGlmCiAKK3BnX2xvY2FsZV90CitjcmVhdGVfcGdfbG9j YWxlX2xpYmMoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQoreworCWNvbnN0IGNo YXIgKmNvbGxhdGU7CisJY29uc3QgY2hhciAqY3R5cGU7CisJbG9jYWxlX3QJbG9jOworCXBnX2xv Y2FsZV90IHJlc3VsdDsKKworCWlmIChjb2xsaWQgPT0gREVGQVVMVF9DT0xMQVRJT05fT0lEKQor CXsKKwkJSGVhcFR1cGxlCXRwOworCQlEYXR1bQkJZGF0dW07CisKKwkJdHAgPSBTZWFyY2hTeXND YWNoZTEoREFUQUJBU0VPSUQsIE9iamVjdElkR2V0RGF0dW0oTXlEYXRhYmFzZUlkKSk7CisJCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgZGF0YWJhc2UgJXUiLCBNeURhdGFiYXNlSWQpOworCQlkYXR1bSA9IFN5c0NhY2hl R2V0QXR0ck5vdE51bGwoREFUQUJBU0VPSUQsIHRwLAorCQkJCQkJCQkJICAgQW51bV9wZ19kYXRh YmFzZV9kYXRjb2xsYXRlKTsKKwkJY29sbGF0ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0p OworCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoREFUQUJBU0VPSUQsIHRwLAorCQkJ CQkJCQkJICAgQW51bV9wZ19kYXRhYmFzZV9kYXRjdHlwZSk7CisJCWN0eXBlID0gVGV4dERhdHVt R2V0Q1N0cmluZyhkYXR1bSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl9CisJZWxzZQor CXsKKwkJSGVhcFR1cGxlCXRwOworCQlEYXR1bQkJZGF0dW07CisKKwkJdHAgPSBTZWFyY2hTeXND YWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQpKTsKKwkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHRwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBj b2xsYXRpb24gJXUiLCBjb2xsaWQpOworCisJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVs bChDT0xMT0lELCB0cCwKKwkJCQkJCQkJCSAgIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjb2xsYXRl KTsKKwkJY29sbGF0ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQlkYXR1bSA9IFN5 c0NhY2hlR2V0QXR0ck5vdE51bGwoQ09MTE9JRCwgdHAsCisJCQkJCQkJCQkgICBBbnVtX3BnX2Nv bGxhdGlvbl9jb2xsY3R5cGUpOworCQljdHlwZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0p OworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJfQorCisKKwlsb2MgPSBtYWtlX2xpYmNfY29s bGF0b3IoY29sbGF0ZSwgY3R5cGUpOworCisJcmVzdWx0ID0gTWVtb3J5Q29udGV4dEFsbG9jWmVy byhjb250ZXh0LCBzaXplb2Yoc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKKwlyZXN1bHQtPnBy b3ZpZGVyID0gQ09MTFBST1ZJREVSX0xJQkM7CisJcmVzdWx0LT5kZXRlcm1pbmlzdGljID0gdHJ1 ZTsKKwlyZXN1bHQtPmNvbGxhdGVfaXNfYyA9IChzdHJjbXAoY29sbGF0ZSwgIkMiKSA9PSAwKSB8 fAorCQkoc3RyY21wKGNvbGxhdGUsICJQT1NJWCIpID09IDApOworCXJlc3VsdC0+Y3R5cGVfaXNf YyA9IChzdHJjbXAoY3R5cGUsICJDIikgPT0gMCkgfHwKKwkJKHN0cmNtcChjdHlwZSwgIlBPU0lY IikgPT0gMCk7CisJcmVzdWx0LT5pbmZvLmx0ID0gbG9jOworCisJcmV0dXJuIHJlc3VsdDsKK30K KwogLyoKICAqIENyZWF0ZSBhIGxvY2FsZV90IHdpdGggdGhlIGdpdmVuIGNvbGxhdGlvbiBhbmQg Y3R5cGUuCiAgKgpAQCAtNDksNyArMTE1LDcgQEAgc3RhdGljIGludAlzdHJuY29sbF9saWJjX3dp bjMyX3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLAogICoKICAqIEVuc3VyZSB0 aGF0IG5vIHBhdGggbGVha3MgYSBsb2NhbGVfdC4KICAqLwotbG9jYWxlX3QKK3N0YXRpYyBsb2Nh bGVfdAogbWFrZV9saWJjX2NvbGxhdG9yKGNvbnN0IGNoYXIgKmNvbGxhdGUsIGNvbnN0IGNoYXIg KmN0eXBlKQogewogCWxvY2FsZV90CWxvYyA9IDA7Ci0tIAoyLjM0LjEKCg== --=-LTFx9IBzSoydfVtEfUQa Content-Disposition: attachment; filename="v8-0002-Control-collation-behavior-with-a-method-table.patch" Content-Type: text/x-patch; name="v8-0002-Control-collation-behavior-with-a-method-table.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBlZWZkNjVkMWQwNTExMWNkMTJhOTM5MDJlOGFjZjAwOWQyZjRjMzlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDI2IFNlcCAyMDI0IDExOjI3OjI5IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2OCAyLzddIENv bnRyb2wgY29sbGF0aW9uIGJlaGF2aW9yIHdpdGggYSBtZXRob2QgdGFibGUuCgpQcmV2aW91c2x5 LCBiZWhhdmlvciBicmFuY2hlZCBiYXNlZCBvbiB0aGUgcHJvdmlkZXIuCgpBIG1ldGhvZCB0YWJs ZSBpcyBsZXNzIGVycm9yIHByb25lIGFuZCBlYXNpZXIgdG8gaG9vay4KLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgICAgICB8IDEyMyArKystLS0tLS0tLS0tLS0tLS0tLS0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMgIHwgMTQ3ICsrKysrKysrKysr KysrKy0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jIHwg IDQwICsrKysrLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oICAgICAgICAgIHwgIDMz ICsrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxNjcgaW5zZXJ0aW9ucygrKSwgMTc2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCBlYzVmNTA5YzRlLi4wMGVjYTY4 NzE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC05MiwyNyArOTIsMTIgQEAKIC8q IHBnX2xvY2FsZV9pY3UuYyAqLwogI2lmZGVmIFVTRV9JQ1UKIGV4dGVybiBVQ29sbGF0b3IgKnBn X3Vjb2xfb3Blbihjb25zdCBjaGFyICpsb2Nfc3RyKTsKLWV4dGVybiBpbnQJc3RybmNvbGxfaWN1 KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKLQkJCQkJCSBjb25zdCBjaGFyICphcmcy LCBzc2l6ZV90IGxlbjIsCi0JCQkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKTsKLWV4dGVybiBzaXpl X3Qgc3Rybnhmcm1faWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKLQkJCQkJCSAgIGNv bnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCi0JCQkJCQkgICBwZ19sb2NhbGVfdCBsb2Nh bGUpOwotZXh0ZXJuIHNpemVfdCBzdHJueGZybV9wcmVmaXhfaWN1KGNoYXIgKmRlc3QsIHNpemVf dCBkZXN0c2l6ZSwKLQkJCQkJCQkJICBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAot CQkJCQkJCQkgIHBnX2xvY2FsZV90IGxvY2FsZSk7CiAjZW5kaWYKIAogLyogcGdfbG9jYWxlX2xp YmMuYyAqLwogZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19sb2NhbGVfYnVpbHRpbihPaWQg Y29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0 ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRl cm4gcGdfbG9jYWxlX3QgY3JlYXRlX3BnX2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNv bnRleHQgY29udGV4dCk7Ci1leHRlcm4gaW50CXN0cm5jb2xsX2xpYmMoY29uc3QgY2hhciAqYXJn MSwgc3NpemVfdCBsZW4xLAotCQkJCQkJICBjb25zdCBjaGFyICphcmcyLCBzc2l6ZV90IGxlbjIs Ci0JCQkJCQkgIHBnX2xvY2FsZV90IGxvY2FsZSk7Ci1leHRlcm4gc2l6ZV90IHN0cm54ZnJtX2xp YmMoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAotCQkJCQkJCWNvbnN0IGNoYXIgKnNyYywg c3NpemVfdCBzcmNsZW4sCi0JCQkJCQkJcGdfbG9jYWxlX3QgbG9jYWxlKTsKIAogLyogR1VDIHNl dHRpbmdzICovCiBjaGFyCSAgICpsb2NhbGVfbWVzc2FnZXM7CkBAIC0xMjM5LDYgKzEyMjQsOSBA QCBjcmVhdGVfcGdfbG9jYWxlKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAkJ Lyogc2hvdWxkbid0IGhhcHBlbiAqLwogCQlQR0xPQ0FMRV9TVVBQT1JUX0VSUk9SKGNvbGxmb3Jt LT5jb2xscHJvdmlkZXIpOwogCisJQXNzZXJ0KChyZXN1bHQtPmNvbGxhdGVfaXNfYyAmJiByZXN1 bHQtPmNvbGxhdGUgPT0gTlVMTCkgfHwKKwkJICAgKCFyZXN1bHQtPmNvbGxhdGVfaXNfYyAmJiBy ZXN1bHQtPmNvbGxhdGUgIT0gTlVMTCkpOworCiAJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09M TE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGx2ZXJzaW9uLAogCQkJCQkJCSZpc251bGwp OwogCWlmICghaXNudWxsKQpAQCAtMTQ5MCwxOSArMTQ3OCw3IEBAIGdldF9jb2xsYXRpb25fYWN0 dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKQog aW50CiBwZ19zdHJjb2xsKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIsIHBnX2xv Y2FsZV90IGxvY2FsZSkKIHsKLQlpbnQJCQlyZXN1bHQ7Ci0KLQlpZiAobG9jYWxlLT5wcm92aWRl ciA9PSBDT0xMUFJPVklERVJfTElCQykKLQkJcmVzdWx0ID0gc3RybmNvbGxfbGliYyhhcmcxLCAt MSwgYXJnMiwgLTEsIGxvY2FsZSk7Ci0jaWZkZWYgVVNFX0lDVQotCWVsc2UgaWYgKGxvY2FsZS0+ cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKLQkJcmVzdWx0ID0gc3RybmNvbGxfaWN1KGFy ZzEsIC0xLCBhcmcyLCAtMSwgbG9jYWxlKTsKLSNlbmRpZgotCWVsc2UKLQkJLyogc2hvdWxkbid0 IGhhcHBlbiAqLwotCQlQR0xPQ0FMRV9TVVBQT1JUX0VSUk9SKGxvY2FsZS0+cHJvdmlkZXIpOwot Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gbG9jYWxlLT5jb2xsYXRlLT5zdHJuY29sbChhcmcx LCAtMSwgYXJnMiwgLTEsIGxvY2FsZSk7CiB9CiAKIC8qCkBAIC0xNTIzLDUxICsxNDk5LDI1IEBA IGludAogcGdfc3RybmNvbGwoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLCBjb25zdCBj aGFyICphcmcyLCBzc2l6ZV90IGxlbjIsCiAJCQlwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JaW50 CQkJcmVzdWx0OwotCi0JaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMp Ci0JCXJlc3VsdCA9IHN0cm5jb2xsX2xpYmMoYXJnMSwgbGVuMSwgYXJnMiwgbGVuMiwgbG9jYWxl KTsKLSNpZmRlZiBVU0VfSUNVCi0JZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJP VklERVJfSUNVKQotCQlyZXN1bHQgPSBzdHJuY29sbF9pY3UoYXJnMSwgbGVuMSwgYXJnMiwgbGVu MiwgbG9jYWxlKTsKLSNlbmRpZgotCWVsc2UKLQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwotCQlQ R0xPQ0FMRV9TVVBQT1JUX0VSUk9SKGxvY2FsZS0+cHJvdmlkZXIpOwotCi0JcmV0dXJuIHJlc3Vs dDsKKwlyZXR1cm4gbG9jYWxlLT5jb2xsYXRlLT5zdHJuY29sbChhcmcxLCBsZW4xLCBhcmcyLCBs ZW4yLCBsb2NhbGUpOwogfQogCiAvKgogICogUmV0dXJuIHRydWUgaWYgdGhlIGNvbGxhdGlvbiBw cm92aWRlciBzdXBwb3J0cyBwZ19zdHJ4ZnJtKCkgYW5kCiAgKiBwZ19zdHJueGZybSgpOyBvdGhl cndpc2UgZmFsc2UuCiAgKgotICogVW5mb3J0dW5hdGVseSwgaXQgc2VlbXMgdGhhdCBzdHJ4ZnJt KCkgZm9yIG5vbi1DIGNvbGxhdGlvbnMgaXMgYnJva2VuIG9uCi0gKiBtYW55IGNvbW1vbiBwbGF0 Zm9ybXM7IHRlc3Rpbmcgb2YgbXVsdGlwbGUgdmVyc2lvbnMgb2YgZ2xpYmMgcmV2ZWFscyB0aGF0 LAotICogZm9yIG1hbnkgbG9jYWxlcywgc3RyY29sbCgpIGFuZCBzdHJ4ZnJtKCkgZG8gbm90IHJl dHVybiBjb25zaXN0ZW50Ci0gKiByZXN1bHRzLiBXaGlsZSBubyBvdGhlciBsaWJjIG90aGVyIHRo YW4gQ3lnd2luIGhhcyBzbyBmYXIgYmVlbiBzaG93biB0bwotICogaGF2ZSBhIHByb2JsZW0sIHdl IHRha2UgdGhlIGNvbnNlcnZhdGl2ZSBjb3Vyc2Ugb2YgYWN0aW9uIGZvciByaWdodCBub3cgYW5k Ci0gKiBkaXNhYmxlIHRoaXMgY2F0ZWdvcmljYWxseS4gIChVc2VycyB3aG8gYXJlIGNlcnRhaW4g dGhpcyBpc24ndCBhIHByb2JsZW0gb24KLSAqIHRoZWlyIHN5c3RlbSBjYW4gZGVmaW5lIFRSVVNU X1NUUlhGUk0uKQogICoKICAqIE5vIHNpbWlsYXIgcHJvYmxlbSBpcyBrbm93biBmb3IgdGhlIElD VSBwcm92aWRlci4KICAqLwogYm9vbAogcGdfc3RyeGZybV9lbmFibGVkKHBnX2xvY2FsZV90IGxv Y2FsZSkKIHsKLQlpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKLSNp ZmRlZiBUUlVTVF9TVFJYRlJNCi0JCXJldHVybiB0cnVlOwotI2Vsc2UKLQkJcmV0dXJuIGZhbHNl OwotI2VuZGlmCi0JZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNV KQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJUEdM T0NBTEVfU1VQUE9SVF9FUlJPUihsb2NhbGUtPnByb3ZpZGVyKTsKLQotCXJldHVybiBmYWxzZTsJ CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCS8qCisJICogbG9jYWxlLT5jb2xsYXRlLT5z dHJueGZybSBpcyBzdGlsbCBhIHJlcXVpcmVkIG1ldGhvZCwgZXZlbiBpZiBpdCBtYXkKKwkgKiBo YXZlIHRoZSB3cm9uZyBiZWhhdmlvciwgYmVjYXVzZSB0aGUgcGxhbm5lciB1c2VzIGl0IGZvciBl c3RpbWF0ZXMgaW4KKwkgKiBzb21lIGNhc2VzLgorCSAqLworCXJldHVybiBsb2NhbGUtPmNvbGxh dGUtPnN0cnhmcm1faXNfc2FmZTsKIH0KIAogLyoKQEAgLTE1NzgsMTkgKzE1MjgsNyBAQCBwZ19z dHJ4ZnJtX2VuYWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKQogc2l6ZV90CiBwZ19zdHJ4ZnJtKGNo YXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBs b2NhbGUpCiB7Ci0Jc2l6ZV90CQlyZXN1bHQgPSAwOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAq LwotCi0JaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCi0JCXJlc3Vs dCA9IHN0cm54ZnJtX2xpYmMoZGVzdCwgZGVzdHNpemUsIHNyYywgLTEsIGxvY2FsZSk7Ci0jaWZk ZWYgVVNFX0lDVQotCWVsc2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lD VSkKLQkJcmVzdWx0ID0gc3Rybnhmcm1faWN1KGRlc3QsIGRlc3RzaXplLCBzcmMsIC0xLCBsb2Nh bGUpOwotI2VuZGlmCi0JZWxzZQotCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCVBHTE9DQUxF X1NVUFBPUlRfRVJST1IobG9jYWxlLT5wcm92aWRlcik7Ci0KLQlyZXR1cm4gcmVzdWx0OworCXJl dHVybiBsb2NhbGUtPmNvbGxhdGUtPnN0cm54ZnJtKGRlc3QsIGRlc3RzaXplLCBzcmMsIC0xLCBs b2NhbGUpOwogfQogCiAvKgpAQCAtMTYxNiwxOSArMTU1NCw3IEBAIHNpemVfdAogcGdfc3Rybnhm cm0oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qg c3JjbGVuLAogCQkJcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXNpemVfdAkJcmVzdWx0ID0gMDsJ CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQotCWlmIChsb2NhbGUtPnByb3ZpZGVyID09IENP TExQUk9WSURFUl9MSUJDKQotCQlyZXN1bHQgPSBzdHJueGZybV9saWJjKGRlc3QsIGRlc3RzaXpl LCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKLSNpZmRlZiBVU0VfSUNVCi0JZWxzZSBpZiAobG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQlyZXN1bHQgPSBzdHJueGZybV9pY3Uo ZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwotI2VuZGlmCi0JZWxzZQotCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCVBHTE9DQUxFX1NVUFBPUlRfRVJST1IobG9jYWxlLT5w cm92aWRlcik7Ci0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBsb2NhbGUtPmNvbGxhdGUtPnN0 cm54ZnJtKGRlc3QsIGRlc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKIH0KIAogLyoKQEAg LTE2MzgsMTUgKzE1NjQsNyBAQCBwZ19zdHJueGZybShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNp emUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiBib29sCiBwZ19zdHJ4ZnJtX3By ZWZpeF9lbmFibGVkKHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlpZiAobG9jYWxlLT5wcm92aWRl ciA9PSBDT0xMUFJPVklERVJfTElCQykKLQkJcmV0dXJuIGZhbHNlOwotCWVsc2UgaWYgKGxvY2Fs ZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQot CQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCVBHTE9DQUxFX1NVUFBPUlRfRVJST1IobG9jYWxl LT5wcm92aWRlcik7Ci0KLQlyZXR1cm4gZmFsc2U7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KKwlyZXR1cm4gKGxvY2FsZS0+Y29sbGF0ZS0+c3Rybnhmcm1fcHJlZml4ICE9IE5VTEwpOwog fQogCiAvKgpAQCAtMTY1OCw3ICsxNTc2LDcgQEAgc2l6ZV90CiBwZ19zdHJ4ZnJtX3ByZWZpeChj aGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKIAkJCQkgIHBnX2xv Y2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfc3Rybnhmcm1fcHJlZml4KGRlc3QsIGRlc3Rz aXplLCBzcmMsIC0xLCBsb2NhbGUpOworCXJldHVybiBsb2NhbGUtPmNvbGxhdGUtPnN0cm54ZnJt X3ByZWZpeChkZXN0LCBkZXN0c2l6ZSwgc3JjLCAtMSwgbG9jYWxlKTsKIH0KIAogLyoKQEAgLTE2 ODMsMTYgKzE2MDEsNyBAQCBzaXplX3QKIHBnX3N0cm54ZnJtX3ByZWZpeChjaGFyICpkZXN0LCBz aXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIAkJCQkgICBzc2l6ZV90IHNyY2xlbiwg cGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXNpemVfdAkJcmVzdWx0ID0gMDsJCS8qIGtlZXAgY29t cGlsZXIgcXVpZXQgKi8KLQotI2lmZGVmIFVTRV9JQ1UKLQlpZiAobG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfSUNVKQotCQlyZXN1bHQgPSBzdHJueGZybV9wcmVmaXhfaWN1KGRlc3Qs IGRlc3RzaXplLCBzcmMsIC0xLCBsb2NhbGUpOwotCWVsc2UKLSNlbmRpZgotCQlQR0xPQ0FMRV9T VVBQT1JUX0VSUk9SKGxvY2FsZS0+cHJvdmlkZXIpOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1 cm4gbG9jYWxlLT5jb2xsYXRlLT5zdHJueGZybV9wcmVmaXgoZGVzdCwgZGVzdHNpemUsIHNyYywg c3JjbGVuLCBsb2NhbGUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3BnX2xvY2FsZV9pY3UuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1 LmMKaW5kZXggNzNlYjQzMGQ3NS4uMTFlYzlkNGU0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlX2ljdS5jCkBAIC00MCwxMyArNDAsMTQgQEAgZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0 ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAjaWZk ZWYgVVNFX0lDVQogCiBleHRlcm4gVUNvbGxhdG9yICpwZ191Y29sX29wZW4oY29uc3QgY2hhciAq bG9jX3N0cik7Ci1leHRlcm4gaW50CXN0cm5jb2xsX2ljdShjb25zdCBjaGFyICphcmcxLCBzc2l6 ZV90IGxlbjEsCisKK3N0YXRpYyBpbnQJc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNz aXplX3QgbGVuMSwKIAkJCQkJCSBjb25zdCBjaGFyICphcmcyLCBzc2l6ZV90IGxlbjIsCiAJCQkJ CQkgcGdfbG9jYWxlX3QgbG9jYWxlKTsKLWV4dGVybiBzaXplX3Qgc3Rybnhmcm1faWN1KGNoYXIg KmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKK3N0YXRpYyBzaXplX3Qgc3Rybnhmcm1faWN1KGNoYXIg KmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnNyYywgc3NpemVf dCBzcmNsZW4sCiAJCQkJCQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpOwotZXh0ZXJuIHNpemVfdCBz dHJueGZybV9wcmVmaXhfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKK3N0YXRpYyBz aXplX3Qgc3Rybnhmcm1fcHJlZml4X2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCiAJ CQkJCQkJCSAgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkJCQkJICBwZ19s b2NhbGVfdCBsb2NhbGUpOwogCkBAIC01OSwxMiArNjAsMjAgQEAgc3RhdGljIFVDb252ZXJ0ZXIg KmljdV9jb252ZXJ0ZXIgPSBOVUxMOwogCiBzdGF0aWMgVUNvbGxhdG9yICptYWtlX2ljdV9jb2xs YXRvcihjb25zdCBjaGFyICppY3Vsb2NzdHIsCiAJCQkJCQkJCQljb25zdCBjaGFyICppY3VydWxl cyk7Ci1zdGF0aWMgaW50CXN0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNz aXplX3QgbGVuMSwKLQkJCQkJCQkJIGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMiwKLQkJ CQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7Ci1zdGF0aWMgc2l6ZV90IHN0cm54ZnJtX3ByZWZp eF9pY3Vfbm9fdXRmOChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCi0JCQkJCQkJCQkJICBj b25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAotCQkJCQkJCQkJCSAgcGdfbG9jYWxlX3Qg bG9jYWxlKTsKK3N0YXRpYyBpbnQJc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXpl X3QgbGVuMSwKKwkJCQkJCSBjb25zdCBjaGFyICphcmcyLCBzc2l6ZV90IGxlbjIsCisJCQkJCQkg cGdfbG9jYWxlX3QgbG9jYWxlKTsKK3N0YXRpYyBzaXplX3Qgc3Rybnhmcm1fcHJlZml4X2ljdShj aGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkJCSAgY29uc3QgY2hhciAqc3JjLCBz c2l6ZV90IHNyY2xlbiwKKwkJCQkJCQkJICBwZ19sb2NhbGVfdCBsb2NhbGUpOworI2lmZGVmIEhB VkVfVUNPTF9TVFJDT0xMVVRGOAorc3RhdGljIGludAlzdHJuY29sbF9pY3VfdXRmOChjb25zdCBj aGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCisJCQkJCQkJICBjb25zdCBjaGFyICphcmcyLCBzc2l6 ZV90IGxlbjIsCisJCQkJCQkJICBwZ19sb2NhbGVfdCBsb2NhbGUpOworI2VuZGlmCitzdGF0aWMg c2l6ZV90IHN0cm54ZnJtX3ByZWZpeF9pY3VfdXRmOChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNp emUsCisJCQkJCQkJCQkgICBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCQkJ CQkJICAgcGdfbG9jYWxlX3QgbG9jYWxlKTsKIHN0YXRpYyB2b2lkIGluaXRfaWN1X2NvbnZlcnRl cih2b2lkKTsKIHN0YXRpYyBzaXplX3QgdWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNvbnZlcnRl ciwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnN0ciwgaW50MzJfdCBsZW4pOwpAQCAtNzMsNiArODIs MjUgQEAgc3RhdGljIGludDMyX3QgdWNoYXJfY29udmVydChVQ29udmVydGVyICpjb252ZXJ0ZXIs CiAJCQkJCQkJIGNvbnN0IGNoYXIgKnNyYywgaW50MzJfdCBzcmNsZW4pOwogc3RhdGljIHZvaWQg aWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhVQ29sbGF0b3IgKmNvbGxhdG9yLCBjb25zdCBj aGFyICpsb2MsCiAJCQkJCQkJCQkJIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY29sbGF0ZV9tZXRob2RzIGNvbGxhdGVfbWV0aG9kc19pY3UgPSB7CisJLnN0cm5j b2xsID0gc3RybmNvbGxfaWN1LAorCS5zdHJueGZybSA9IHN0cm54ZnJtX2ljdSwKKwkuc3Rybnhm cm1fcHJlZml4ID0gc3Rybnhmcm1fcHJlZml4X2ljdSwKKwkuc3RyeGZybV9pc19zYWZlID0gdHJ1 ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29sbGF0ZV9tZXRob2RzIGNvbGxhdGVfbWV0 aG9kc19pY3VfdXRmOCA9IHsKKyNpZmRlZiBIQVZFX1VDT0xfU1RSQ09MTFVURjgKKwkuc3RybmNv bGwgPSBzdHJuY29sbF9pY3VfdXRmOCwKKyNlbHNlCisJLnN0cm5jb2xsID0gc3RybmNvbGxfaWN1 LAorI2VuZGlmCisJLnN0cm54ZnJtID0gc3Rybnhmcm1faWN1LAorCS5zdHJueGZybV9wcmVmaXgg PSBzdHJueGZybV9wcmVmaXhfaWN1X3V0ZjgsCisJLnN0cnhmcm1faXNfc2FmZSA9IHRydWUsCit9 OworCiAjZW5kaWYKIAogcGdfbG9jYWxlX3QKQEAgLTEzOSw2ICsxNjcsMTAgQEAgY3JlYXRlX3Bn X2xvY2FsZV9pY3UoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCXJlc3VsdC0+ ZGV0ZXJtaW5pc3RpYyA9IGRldGVybWluaXN0aWM7CiAJcmVzdWx0LT5jb2xsYXRlX2lzX2MgPSBm YWxzZTsKIAlyZXN1bHQtPmN0eXBlX2lzX2MgPSBmYWxzZTsKKwlpZiAoR2V0RGF0YWJhc2VFbmNv ZGluZygpID09IFBHX1VURjgpCisJCXJlc3VsdC0+Y29sbGF0ZSA9ICZjb2xsYXRlX21ldGhvZHNf aWN1X3V0Zjg7CisJZWxzZQorCQlyZXN1bHQtPmNvbGxhdGUgPSAmY29sbGF0ZV9tZXRob2RzX2lj dTsKIAogCXJldHVybiByZXN1bHQ7CiAjZWxzZQpAQCAtMzEzLDQyICszNDUsMzYgQEAgbWFrZV9p Y3VfY29sbGF0b3IoY29uc3QgY2hhciAqaWN1bG9jc3RyLCBjb25zdCBjaGFyICppY3VydWxlcykK IH0KIAogLyoKLSAqIHN0cm5jb2xsX2ljdQorICogc3RybmNvbGxfaWN1X3V0ZjgKICAqCiAgKiBD YWxsIHVjb2xfc3RyY29sbFVURjgoKSBvciB1Y29sX3N0cmNvbGwoKSBhcyBhcHByb3ByaWF0ZSBm b3IgdGhlIGdpdmVuCiAgKiBkYXRhYmFzZSBlbmNvZGluZy4gQW4gYXJndW1lbnQgbGVuZ3RoIG9m IC0xIG1lYW5zIHRoZSBzdHJpbmcgaXMKICAqIE5VTC10ZXJtaW5hdGVkLgogICovCisjaWZkZWYg SEFWRV9VQ09MX1NUUkNPTExVVEY4CiBpbnQKLXN0cm5jb2xsX2ljdShjb25zdCBjaGFyICphcmcx LCBzc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMiwKLQkJCSBwZ19s b2NhbGVfdCBsb2NhbGUpCitzdHJuY29sbF9pY3VfdXRmOChjb25zdCBjaGFyICphcmcxLCBzc2l6 ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMiwKKwkJCQkgIHBnX2xvY2Fs ZV90IGxvY2FsZSkKIHsKIAlpbnQJCQlyZXN1bHQ7CisJVUVycm9yQ29kZQlzdGF0dXM7CiAKIAlB c3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKIAotI2lmZGVmIEhB VkVfVUNPTF9TVFJDT0xMVVRGOAotCWlmIChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRG OCkKLQl7Ci0JCVVFcnJvckNvZGUJc3RhdHVzOworCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5n KCkgPT0gUEdfVVRGOCk7CiAKLQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQlyZXN1bHQgPSB1 Y29sX3N0cmNvbGxVVEY4KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJICBhcmcxLCBs ZW4xLAotCQkJCQkJCQkgIGFyZzIsIGxlbjIsCi0JCQkJCQkJCSAgJnN0YXR1cyk7Ci0JCWlmIChV X0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJtc2coImNvbGxh dGlvbiBmYWlsZWQ6ICVzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKLQl9Ci0JZWxzZQotI2Vu ZGlmCi0JewotCQlyZXN1bHQgPSBzdHJuY29sbF9pY3Vfbm9fdXRmOChhcmcxLCBsZW4xLCBhcmcy LCBsZW4yLCBsb2NhbGUpOwotCX0KKwlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJcmVzdWx0ID0g dWNvbF9zdHJjb2xsVVRGOChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJICBhcmcxLCBs ZW4xLAorCQkJCQkJCSAgYXJnMiwgbGVuMiwKKwkJCQkJCQkgICZzdGF0dXMpOworCWlmIChVX0ZB SUxVUkUoc3RhdHVzKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb2xsYXRpb24g ZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAKIAlyZXR1cm4gcmVzdWx0Owog fQorI2VuZGlmCiAKIC8qICdzcmNsZW4nIG9mIC0xIG1lYW5zIHRoZSBzdHJpbmdzIGFyZSBOVUwt dGVybWluYXRlZCAqLwogc2l6ZV90CkBAIC0zOTksMzcgKzQyNSwzMiBAQCBzdHJueGZybV9pY3Uo Y2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3Jj bGVuLAogCiAvKiAnc3JjbGVuJyBvZiAtMSBtZWFucyB0aGUgc3RyaW5ncyBhcmUgTlVMLXRlcm1p bmF0ZWQgKi8KIHNpemVfdAotc3Rybnhmcm1fcHJlZml4X2ljdShjaGFyICpkZXN0LCBzaXplX3Qg ZGVzdHNpemUsCi0JCQkJCWNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCi0JCQkJCXBn X2xvY2FsZV90IGxvY2FsZSkKK3N0cm54ZnJtX3ByZWZpeF9pY3VfdXRmOChjaGFyICpkZXN0LCBz aXplX3QgZGVzdHNpemUsCisJCQkJCQkgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwK KwkJCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7CiAJc2l6ZV90CQlyZXN1bHQ7CisJVUNoYXJJ dGVyYXRvciBpdGVyOworCXVpbnQzMl90CXN0YXRlWzJdOworCVVFcnJvckNvZGUJc3RhdHVzOwog CiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CiAKLQlpZiAo R2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpCi0JewotCQlVQ2hhckl0ZXJhdG9yIGl0 ZXI7Ci0JCXVpbnQzMl90CXN0YXRlWzJdOwotCQlVRXJyb3JDb2RlCXN0YXR1czsKKwlBc3NlcnQo R2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOwogCi0JCXVpdGVyX3NldFVURjgoJml0 ZXIsIHNyYywgc3JjbGVuKTsKLQkJc3RhdGVbMF0gPSBzdGF0ZVsxXSA9IDA7CS8qIHdvbid0IG5l ZWQgdGhhdCBhZ2FpbiAqLwotCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JCXJlc3VsdCA9IHVj b2xfbmV4dFNvcnRLZXlQYXJ0KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCSAgJml0 ZXIsCi0JCQkJCQkJCQkgIHN0YXRlLAotCQkJCQkJCQkJICAodWludDhfdCAqKSBkZXN0LAotCQkJ CQkJCQkJICBkZXN0c2l6ZSwKLQkJCQkJCQkJCSAgJnN0YXR1cyk7Ci0JCWlmIChVX0ZBSUxVUkUo c3RhdHVzKSkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJtc2coInNvcnQga2V5IGdlbmVy YXRpb24gZmFpbGVkOiAlcyIsCi0JCQkJCQkJdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKLQl9Ci0J ZWxzZQotCQlyZXN1bHQgPSBzdHJueGZybV9wcmVmaXhfaWN1X25vX3V0ZjgoZGVzdCwgZGVzdHNp emUsIHNyYywgc3JjbGVuLAotCQkJCQkJCQkJCQkgbG9jYWxlKTsKKwl1aXRlcl9zZXRVVEY4KCZp dGVyLCBzcmMsIHNyY2xlbik7CisJc3RhdGVbMF0gPSBzdGF0ZVsxXSA9IDA7CS8qIHdvbid0IG5l ZWQgdGhhdCBhZ2FpbiAqLworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwlyZXN1bHQgPSB1Y29s X25leHRTb3J0S2V5UGFydChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCSAgJml0ZXIs CisJCQkJCQkJCSAgc3RhdGUsCisJCQkJCQkJCSAgKHVpbnQ4X3QgKikgZGVzdCwKKwkJCQkJCQkJ ICBkZXN0c2l6ZSwKKwkJCQkJCQkJICAmc3RhdHVzKTsKKwlpZiAoVV9GQUlMVVJFKHN0YXR1cykp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWls ZWQ6ICVzIiwKKwkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAKIAlyZXR1cm4gcmVzdWx0 OwogfQpAQCAtNTA0LDcgKzUyNSw3IEBAIGljdV9mcm9tX3VjaGFyKGNoYXIgKipyZXN1bHQsIGNv bnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcikKIH0KIAogLyoKLSAqIHN0 cm5jb2xsX2ljdV9ub191dGY4CisgKiBzdHJuY29sbF9pY3UKICAqCiAgKiBDb252ZXJ0IHRoZSBh cmd1bWVudHMgZnJvbSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgdG8gVUNoYXIgc3RyaW5ncywgdGhl bgogICogY2FsbCB1Y29sX3N0cmNvbGwoKS4gQW4gYXJndW1lbnQgbGVuZ3RoIG9mIC0xIG1lYW5z IHRoYXQgdGhlIHN0cmluZyBpcwpAQCAtNTE0LDggKzUzNSw4IEBAIGljdV9mcm9tX3VjaGFyKGNo YXIgKipyZXN1bHQsIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcikK ICAqIGNhbGxlciBzaG91bGQgY2FsbCB0aGF0IGluc3RlYWQuCiAgKi8KIHN0YXRpYyBpbnQKLXN0 cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKLQkJCQkJ IGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMiwgcGdfbG9jYWxlX3QgbG9jYWxlKQorc3Ry bmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwKKwkJCSBjb25zdCBjaGFy ICphcmcyLCBzc2l6ZV90IGxlbjIsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKIAljaGFyCQlzYnVm W1RFWFRCVUZMRU5dOwogCWNoYXIJICAgKmJ1ZiA9IHNidWY7CkBAIC01MjgsNiArNTQ5LDggQEAg c3RybmNvbGxfaWN1X25vX3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLAogCWlu dAkJCXJlc3VsdDsKIAogCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9J Q1UpOworCisJLyogaWYgZW5jb2RpbmcgaXMgVVRGOCwgdXNlIG1vcmUgZWZmaWNpZW50IHN0cm5j b2xsX2ljdV91dGY4ICovCiAjaWZkZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4CiAJQXNzZXJ0KEdl dERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4KTsKICNlbmRpZgpAQCAtNTYxLDkgKzU4NCw5 IEBAIHN0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwK IAogLyogJ3NyY2xlbicgb2YgLTEgbWVhbnMgdGhlIHN0cmluZ3MgYXJlIE5VTC10ZXJtaW5hdGVk ICovCiBzdGF0aWMgc2l6ZV90Ci1zdHJueGZybV9wcmVmaXhfaWN1X25vX3V0ZjgoY2hhciAqZGVz dCwgc2l6ZV90IGRlc3RzaXplLAotCQkJCQkJCWNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNs ZW4sCi0JCQkJCQkJcGdfbG9jYWxlX3QgbG9jYWxlKQorc3Rybnhmcm1fcHJlZml4X2ljdShjaGFy ICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCWNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBz cmNsZW4sCisJCQkJCXBnX2xvY2FsZV90IGxvY2FsZSkKIHsKIAljaGFyCQlzYnVmW1RFWFRCVUZM RU5dOwogCWNoYXIJICAgKmJ1ZiA9IHNidWY7CkBAIC01NzYsNiArNTk5LDggQEAgc3Rybnhmcm1f cHJlZml4X2ljdV9ub191dGY4KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKIAlTaXplCQly ZXN1bHRfYnNpemU7CiAKIAlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJf SUNVKTsKKworCS8qIGlmIGVuY29kaW5nIGlzIFVURjgsIHVzZSBtb3JlIGVmZmljaWVudCBzdHJu eGZybV9wcmVmaXhfaWN1X3V0ZjggKi8KIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpICE9 IFBHX1VURjgpOwogCiAJaW5pdF9pY3VfY29udmVydGVyKCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2xpYmMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z19sb2NhbGVfbGliYy5jCmluZGV4IDM3NGFjMzdiYTAuLmM3YmU2ZGQ0ZjkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jCkBAIC0zMiwxMCArMzIsMTAgQEAKIAogZXh0ZXJu IHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19sb2NhbGVfbGliYyhPaWQgY29sbGlkLCBNZW1vcnlDb250 ZXh0IGNvbnRleHQpOwogCi1leHRlcm4gaW50CXN0cm5jb2xsX2xpYmMoY29uc3QgY2hhciAqYXJn MSwgc3NpemVfdCBsZW4xLAorc3RhdGljIGludAlzdHJuY29sbF9saWJjKGNvbnN0IGNoYXIgKmFy ZzEsIHNzaXplX3QgbGVuMSwKIAkJCQkJCSAgY29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4y LAogCQkJCQkJICBwZ19sb2NhbGVfdCBsb2NhbGUpOwotZXh0ZXJuIHNpemVfdCBzdHJueGZybV9s aWJjKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKK3N0YXRpYyBzaXplX3Qgc3Rybnhmcm1f bGliYyhjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCiAJCQkJCQkJY29uc3QgY2hhciAqc3Jj LCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkJCQlwZ19sb2NhbGVfdCBsb2NhbGUpOwogc3RhdGljIGxv Y2FsZV90IG1ha2VfbGliY19jb2xsYXRvcihjb25zdCBjaGFyICpjb2xsYXRlLApAQCAtNDgsNiAr NDgsMjcgQEAgc3RhdGljIGludAlzdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoY29uc3QgY2hhciAq YXJnMSwgc3NpemVfdCBsZW4xLAogCQkJCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CiAjZW5k aWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xsYXRlX21ldGhvZHMgY29sbGF0ZV9tZXRob2Rz X2xpYmMgPSB7CisJLnN0cm5jb2xsID0gc3RybmNvbGxfbGliYywKKwkuc3Rybnhmcm0gPSBzdHJu eGZybV9saWJjLAorCS5zdHJueGZybV9wcmVmaXggPSBOVUxMLAorCisJLyoKKwkgKiBVbmZvcnR1 bmF0ZWx5LCBpdCBzZWVtcyB0aGF0IHN0cnhmcm0oKSBmb3Igbm9uLUMgY29sbGF0aW9ucyBpcyBi cm9rZW4KKwkgKiBvbiBtYW55IGNvbW1vbiBwbGF0Zm9ybXM7IHRlc3Rpbmcgb2YgbXVsdGlwbGUg dmVyc2lvbnMgb2YgZ2xpYmMgcmV2ZWFscworCSAqIHRoYXQsIGZvciBtYW55IGxvY2FsZXMsIHN0 cmNvbGwoKSBhbmQgc3RyeGZybSgpIGRvIG5vdCByZXR1cm4KKwkgKiBjb25zaXN0ZW50IHJlc3Vs dHMuIFdoaWxlIG5vIG90aGVyIGxpYmMgb3RoZXIgdGhhbiBDeWd3aW4gaGFzIHNvIGZhcgorCSAq IGJlZW4gc2hvd24gdG8gaGF2ZSBhIHByb2JsZW0sIHdlIHRha2UgdGhlIGNvbnNlcnZhdGl2ZSBj b3Vyc2Ugb2YgYWN0aW9uCisJICogZm9yIHJpZ2h0IG5vdyBhbmQgZGlzYWJsZSB0aGlzIGNhdGVn b3JpY2FsbHkuICAoVXNlcnMgd2hvIGFyZSBjZXJ0YWluCisJICogdGhpcyBpc24ndCBhIHByb2Js ZW0gb24gdGhlaXIgc3lzdGVtIGNhbiBkZWZpbmUgVFJVU1RfU1RSWEZSTS4pCisJICovCisjaWZk ZWYgVFJVU1RfU1RSWEZSTQorCS5zdHJ4ZnJtX2lzX3NhZmUgPSB0cnVlLAorI2Vsc2UKKwkuc3Ry eGZybV9pc19zYWZlID0gZmFsc2UsCisjZW5kaWYKK307CisKIHBnX2xvY2FsZV90CiBjcmVhdGVf cGdfbG9jYWxlX2xpYmMoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQogewpAQCAt MTAzLDYgKzEyNCwxNSBAQCBjcmVhdGVfcGdfbG9jYWxlX2xpYmMoT2lkIGNvbGxpZCwgTWVtb3J5 Q29udGV4dCBjb250ZXh0KQogCXJlc3VsdC0+Y3R5cGVfaXNfYyA9IChzdHJjbXAoY3R5cGUsICJD IikgPT0gMCkgfHwKIAkJKHN0cmNtcChjdHlwZSwgIlBPU0lYIikgPT0gMCk7CiAJcmVzdWx0LT5p bmZvLmx0ID0gbG9jOworCWlmICghcmVzdWx0LT5jb2xsYXRlX2lzX2MpCisJeworI2lmZGVmIFdJ TjMyCisJCWlmIChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwkJCXJlc3VsdC0+ Y29sbGF0ZSA9ICZjb2xsYXRlX21ldGhvZHNfbGliY193aW4zMl91dGY4OworCQllbHNlCisjZW5k aWYKKwkJCXJlc3VsdC0+Y29sbGF0ZSA9ICZjb2xsYXRlX21ldGhvZHNfbGliYzsKKwl9CiAKIAly ZXR1cm4gcmVzdWx0OwogfQpAQCAtMjAwLDEyICsyMzAsNiBAQCBzdHJuY29sbF9saWJjKGNvbnN0 IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4y LAogCiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpOwogCi0j aWZkZWYgV0lOMzIKLQkvKiBjaGVjayBmb3IgdGhpcyBjYXNlIGJlZm9yZSBkb2luZyB0aGUgd29y ayBmb3IgbnVsLXRlcm1pbmF0aW9uICovCi0JaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQ R19VVEY4KQotCQlyZXR1cm4gc3RybmNvbGxfbGliY193aW4zMl91dGY4KGFyZzEsIGxlbjEsIGFy ZzIsIGxlbjIsIGxvY2FsZSk7Ci0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KLQogCWlmIChidWZz aXplMSArIGJ1ZnNpemUyID4gVEVYVEJVRkxFTikKIAkJYnVmID0gcGFsbG9jKGJ1ZnNpemUxICsg YnVmc2l6ZTIpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCmluZGV4IDM3ZWNmOTUxOTMuLjJmMDVkZmZj ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCkBAIC02MCw2ICs2MCwzNiBAQCBleHRlcm4gc3RydWN0 IGxjb252ICpQR0xDX2xvY2FsZWNvbnYodm9pZCk7CiBleHRlcm4gdm9pZCBjYWNoZV9sb2NhbGVf dGltZSh2b2lkKTsKIAogCitzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdDsKK3R5cGVkZWYgc3RydWN0 IHBnX2xvY2FsZV9zdHJ1Y3QgKnBnX2xvY2FsZV90OworCisvKiBtZXRob2RzIHRoYXQgZGVmaW5l IGNvbGxhdGlvbiBiZWhhdmlvciAqLworc3RydWN0IGNvbGxhdGVfbWV0aG9kcworeworCS8qIHJl cXVpcmVkICovCisJaW50CQkJKCpzdHJuY29sbCkgKGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3Qg bGVuMSwKKwkJCQkJCQkgY29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4yLAorCQkJCQkJCSBw Z19sb2NhbGVfdCBsb2NhbGUpOworCisJLyogcmVxdWlyZWQgKi8KKwlzaXplX3QJCSgqc3Rybnhm cm0pIChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKnNy Yywgc3NpemVfdCBzcmNsZW4sCisJCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CisKKwkvKiBv cHRpb25hbCAqLworCXNpemVfdAkJKCpzdHJueGZybV9wcmVmaXgpIChjaGFyICpkZXN0LCBzaXpl X3QgZGVzdHNpemUsCisJCQkJCQkJCQljb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAor CQkJCQkJCQkJcGdfbG9jYWxlX3QgbG9jYWxlKTsKKworCS8qCisJICogSWYgdGhlIHN0cm54ZnJt IG1ldGhvZCBpcyBub3QgdHJ1c3RlZCB0byByZXR1cm4gdGhlIGNvcnJlY3QgcmVzdWx0cywKKwkg KiBzZXQgc3RyeGZybV9pc19zYWZlIHRvIGZhbHNlLiBJdCBzZXQgdG8gZmFsc2UsIHRoZSBtZXRo b2Qgd2lsbCBub3QgYmUKKwkgKiB1c2VkIGluIG1vc3QgY2FzZXMsIGJ1dCB0aGUgcGxhbm5lciBz dGlsbCBleHBlY3RzIGl0IHRvIGJlIHRoZXJlIGZvcgorCSAqIGVzdGltYXRpb24gcHVycG9zZXMg KHdoZXJlIGluY29ycmVjdCByZXN1bHRzIGFyZSBhY2NlcHRhYmxlKS4KKwkgKi8KKwlib29sCQlz dHJ4ZnJtX2lzX3NhZmU7Cit9OworCiAvKgogICogV2UgdXNlIGEgZGlzY3JpbWluYXRlZCB1bmlv biB0byBob2xkIGVpdGhlciBhIGxvY2FsZV90IG9yIGFuIElDVSBjb2xsYXRvci4KICAqIHBnX2xv Y2FsZV90IGlzIG9jY2FzaW9uYWxseSBjaGVja2VkIGZvciB0cnV0aCwgc28gbWFrZSBpdCBhIHBv aW50ZXIuCkBAIC04Miw2ICsxMTIsOSBAQCBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdAogCWJvb2wJ CWRldGVybWluaXN0aWM7CiAJYm9vbAkJY29sbGF0ZV9pc19jOwogCWJvb2wJCWN0eXBlX2lzX2M7 CisKKwljb25zdCBzdHJ1Y3QgY29sbGF0ZV9tZXRob2RzICpjb2xsYXRlOwkvKiBOVUxMIGlmIGNv bGxhdGVfaXNfYyAqLworCiAJdW5pb24KIAl7CiAJCXN0cnVjdAotLSAKMi4zNC4xCgo= --=-LTFx9IBzSoydfVtEfUQa Content-Disposition: attachment; filename*0=v8-0003-Control-ctype-behavior-internally-with-a-method-t.pat; filename*1=ch Content-Type: text/x-patch; name="v8-0003-Control-ctype-behavior-internally-with-a-method-t.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiZmQyNmM0YzU0Y2YxYTFiNDMwZGNkZDkxODhjYWNiMzhiMzBiN2Y2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDI2IFNlcCAyMDI0IDEyOjEyOjUxIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2OCAzLzddIENv bnRyb2wgY3R5cGUgYmVoYXZpb3IgaW50ZXJuYWxseSB3aXRoIGEgbWV0aG9kIHRhYmxlLgoKUHJl dmlvdXNseSwgcGF0dGVybiBtYXRjaGluZyBhbmQgY2FzZSBtYXBwaW5nIGJlaGF2aW9yIGJyYW5j aGVkIGJhc2VkCm9uIHRoZSBwcm92aWRlci4KClJlZmFjdG9yIHRvIHVzZSBhIG1ldGhvZCB0YWJs ZSwgd2hpY2ggaXMgbGVzcyBlcnJvci1wcm9uZSBhbmQgZWFzaWVyCnRvIGhvb2suCi0tLQogc3Jj L2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYyAgICAgICAgfCAzODggKysrKy0tLS0tLS0t LS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jICAgICAgICB8IDQ0NSAr KystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMgICAgICAg ICAgICAgIHwgIDIyICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMgICAg ICB8ICAgNyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAgICAgfCAg NzEgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMgfCAxMjkg KysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jICAgICB8IDE4OCAr KysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jICAgIHwgNDY1 ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oICAg ICAgICAgICAgIHwgIDcxICsrKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICAgICAgIHwgICAxIC0KIDEwIGZpbGVzIGNoYW5nZWQsIDEwNjIgaW5zZXJ0aW9ucygrKSwgNzI1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2NfcGdfbG9j YWxlLmMgYi9zcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jCmluZGV4IGI3NTc4NGI2 Y2UuLmU4OTg2MzRmZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlZ2V4L3JlZ2NfcGdfbG9j YWxlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYwpAQCAtNjMsMzMg KzYzLDE4IEBACiAgKiBOQjogdGhlIGNvZGluZyBoZXJlIGFzc3VtZXMgcGdfd2NoYXIgaXMgYW4g dW5zaWduZWQgdHlwZS4KICAqLwogCi10eXBlZGVmIGVudW0KLXsKLQlQR19SRUdFWF9TVFJBVEVH WV9DLAkJLyogQyBsb2NhbGUgKGVuY29kaW5nIGluZGVwZW5kZW50KSAqLwotCVBHX1JFR0VYX1NU UkFURUdZX0JVSUxUSU4sCS8qIGJ1aWx0LWluIFVuaWNvZGUgc2VtYW50aWNzICovCi0JUEdfUkVH RVhfU1RSQVRFR1lfTElCQ19XSURFLAkvKiBVc2UgbG9jYWxlX3QgPHdjdHlwZS5oPiBmdW5jdGlv bnMgKi8KLQlQR19SRUdFWF9TVFJBVEVHWV9MSUJDXzFCWVRFLAkvKiBVc2UgbG9jYWxlX3QgPGN0 eXBlLmg+IGZ1bmN0aW9ucyAqLwotCVBHX1JFR0VYX1NUUkFURUdZX0lDVSwJCS8qIFVzZSBJQ1Ug dWNoYXIuaCBmdW5jdGlvbnMgKi8KLX0gUEdfTG9jYWxlX1N0cmF0ZWd5OwotCi1zdGF0aWMgUEdf TG9jYWxlX1N0cmF0ZWd5IHBnX3JlZ2V4X3N0cmF0ZWd5Owogc3RhdGljIHBnX2xvY2FsZV90IHBn X3JlZ2V4X2xvY2FsZTsKIHN0YXRpYyBPaWQJcGdfcmVnZXhfY29sbGF0aW9uOwogCitzdGF0aWMg c3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QgZHVtbXlfY19sb2NhbGUgPSB7CisJLmNvbGxhdGVfaXNf YyA9IHRydWUsCisJLmN0eXBlX2lzX2MgPSB0cnVlLAorfTsKKwogLyoKICAqIEhhcmQtd2lyZWQg Y2hhcmFjdGVyIHByb3BlcnRpZXMgZm9yIEMgbG9jYWxlCiAgKi8KLSNkZWZpbmUgUEdfSVNESUdJ VAkweDAxCi0jZGVmaW5lIFBHX0lTQUxQSEEJMHgwMgotI2RlZmluZSBQR19JU0FMTlVNCShQR19J U0RJR0lUIHwgUEdfSVNBTFBIQSkKLSNkZWZpbmUgUEdfSVNVUFBFUgkweDA0Ci0jZGVmaW5lIFBH X0lTTE9XRVIJMHgwOAotI2RlZmluZSBQR19JU0dSQVBICTB4MTAKLSNkZWZpbmUgUEdfSVNQUklO VAkweDIwCi0jZGVmaW5lIFBHX0lTUFVOQ1QJMHg0MAotI2RlZmluZSBQR19JU1NQQUNFCTB4ODAK LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGdfY2hhcl9wcm9wZXJ0aWVzWzEyOF0gPSB7 CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFyX3Byb3BlcnRpZXNfdGJsWzEyOF0gPSB7 CiAJIC8qIE5VTCAqLyAwLAogCSAvKiBeQSAqLyAwLAogCSAvKiBeQiAqLyAwLApAQCAtMjMyLDcg KzIxNyw2IEBAIHZvaWQKIHBnX3NldF9yZWdleF9jb2xsYXRpb24oT2lkIGNvbGxhdGlvbikKIHsK IAlwZ19sb2NhbGVfdCBsb2NhbGUgPSAwOwotCVBHX0xvY2FsZV9TdHJhdGVneSBzdHJhdGVneTsK IAogCWlmICghT2lkSXNWYWxpZChjb2xsYXRpb24pKQogCXsKQEAgLTI1Myw4ICsyMzcsOCBAQCBw Z19zZXRfcmVnZXhfY29sbGF0aW9uKE9pZCBjb2xsYXRpb24pCiAJCSAqIGNhdGFsb2cgYWNjZXNz IGlzIGF2YWlsYWJsZSwgc28gd2UgY2FuJ3QgY2FsbAogCQkgKiBwZ19uZXdsb2NhbGVfZnJvbV9j b2xsYXRpb24oKS4KIAkJICovCi0JCXN0cmF0ZWd5ID0gUEdfUkVHRVhfU1RSQVRFR1lfQzsKIAkJ Y29sbGF0aW9uID0gQ19DT0xMQVRJT05fT0lEOworCQlsb2NhbGUgPSAmZHVtbXlfY19sb2NhbGU7 CiAJfQogCWVsc2UKIAl7CkBAIC0yNzEsMzIgKzI1NSwxMSBAQCBwZ19zZXRfcmVnZXhfY29sbGF0 aW9uKE9pZCBjb2xsYXRpb24pCiAJCQkgKiBDL1BPU0lYIGNvbGxhdGlvbnMgdXNlIHRoaXMgcGF0 aCByZWdhcmRsZXNzIG9mIGRhdGFiYXNlCiAJCQkgKiBlbmNvZGluZwogCQkJICovCi0JCQlzdHJh dGVneSA9IFBHX1JFR0VYX1NUUkFURUdZX0M7Ci0JCQlsb2NhbGUgPSAwOworCQkJbG9jYWxlID0g JmR1bW15X2NfbG9jYWxlOwogCQkJY29sbGF0aW9uID0gQ19DT0xMQVRJT05fT0lEOwogCQl9Ci0J CWVsc2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0JVSUxUSU4pCi0JCXsK LQkJCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCk7Ci0JCQlzdHJhdGVn eSA9IFBHX1JFR0VYX1NUUkFURUdZX0JVSUxUSU47Ci0JCX0KLSNpZmRlZiBVU0VfSUNVCi0JCWVs c2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKLQkJewotCQkJc3Ry YXRlZ3kgPSBQR19SRUdFWF9TVFJBVEVHWV9JQ1U7Ci0JCX0KLSNlbmRpZgotCQllbHNlCi0JCXsK LQkJCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKLQkJCWlm IChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKLQkJCQlzdHJhdGVneSA9IFBHX1JF R0VYX1NUUkFURUdZX0xJQkNfV0lERTsKLQkJCWVsc2UKLQkJCQlzdHJhdGVneSA9IFBHX1JFR0VY X1NUUkFURUdZX0xJQkNfMUJZVEU7Ci0JCX0KIAl9CiAKLQlwZ19yZWdleF9zdHJhdGVneSA9IHN0 cmF0ZWd5OwogCXBnX3JlZ2V4X2xvY2FsZSA9IGxvY2FsZTsKIAlwZ19yZWdleF9jb2xsYXRpb24g PSBjb2xsYXRpb247CiB9CkBAIC0zMDQsODIgKzI2NywzMSBAQCBwZ19zZXRfcmVnZXhfY29sbGF0 aW9uKE9pZCBjb2xsYXRpb24pCiBzdGF0aWMgaW50CiBwZ193Y19pc2RpZ2l0KHBnX3djaGFyIGMp CiB7Ci0Jc3dpdGNoIChwZ19yZWdleF9zdHJhdGVneSkKLQl7Ci0JCWNhc2UgUEdfUkVHRVhfU1RS QVRFR1lfQzoKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgotCQkJCQkocGdfY2hh cl9wcm9wZXJ0aWVzW2NdICYgUEdfSVNESUdJVCkpOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZ X0JVSUxUSU46Ci0JCQlyZXR1cm4gcGdfdV9pc2RpZ2l0KGMsIHRydWUpOwotCQljYXNlIFBHX1JF R0VYX1NUUkFURUdZX0xJQkNfV0lERToKLQkJCWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCBj IDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dkaWdpdF9sKCh3aW50X3QpIGMs IHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7Ci0JCQkvKiBGQUxMIFRIUlUgKi8KLQkJY2FzZSBQ R19SRUdFWF9TVFJBVEVHWV9MSUJDXzFCWVRFOgotCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikg VUNIQVJfTUFYICYmCi0JCQkJCWlzZGlnaXRfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhf bG9jYWxlLT5pbmZvLmx0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9J Q1U6Ci0jaWZkZWYgVVNFX0lDVQotCQkJcmV0dXJuIHVfaXNkaWdpdChjKTsKLSNlbmRpZgotCQkJ YnJlYWs7Ci0JfQotCXJldHVybiAwOwkJCQkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCisJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGVfaXNfYykKKwkJcmV0 dXJuIChjIDw9IChwZ193Y2hhcikgMTI3ICYmCisJCQkJKGNoYXJfcHJvcGVydGllc190YmxbY10g JiBQR19JU0RJR0lUKSk7CisJZWxzZQorCQlyZXR1cm4gY2hhcl9wcm9wZXJ0aWVzKGMsIFBHX0lT RElHSVQsIHBnX3JlZ2V4X2xvY2FsZSkgIT0gMDsKIH0KIAogc3RhdGljIGludAogcGdfd2NfaXNh bHBoYShwZ193Y2hhciBjKQogewotCXN3aXRjaCAocGdfcmVnZXhfc3RyYXRlZ3kpCi0JewotCQlj YXNlIFBHX1JFR0VYX1NUUkFURUdZX0M6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcg JiYKLQkJCQkJKHBnX2NoYXJfcHJvcGVydGllc1tjXSAmIFBHX0lTQUxQSEEpKTsKLQkJY2FzZSBQ R19SRUdFWF9TVFJBVEVHWV9CVUlMVElOOgotCQkJcmV0dXJuIHBnX3VfaXNhbHBoYShjKTsKLQkJ Y2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDX1dJREU6Ci0JCQlpZiAoc2l6ZW9mKHdjaGFyX3Qp ID49IDQgfHwgYyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3YWxwaGFfbCgo d2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJLyogRkFMTCBUSFJVICov Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ18xQllURToKLQkJCXJldHVybiAoYyA8PSAo cGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc2FscGhhX2woKHVuc2lnbmVkIGNoYXIpIGMs IHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfUkVHRVhf U1RSQVRFR1lfSUNVOgotI2lmZGVmIFVTRV9JQ1UKLQkJCXJldHVybiB1X2lzYWxwaGEoYyk7Ci0j ZW5kaWYKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsJCQkJCS8qIGNhbid0IGdldCBoZXJlLCBi dXQga2VlcCBjb21waWxlciBxdWlldCAqLworCWlmIChwZ19yZWdleF9sb2NhbGUtPmN0eXBlX2lz X2MpCisJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgorCQkJCShjaGFyX3Byb3BlcnRp ZXNfdGJsW2NdICYgUEdfSVNBTFBIQSkpOworCWVsc2UKKwkJcmV0dXJuIGNoYXJfcHJvcGVydGll cyhjLCBQR19JU0FMUEhBLCBwZ19yZWdleF9sb2NhbGUpICE9IDA7CiB9CiAKIHN0YXRpYyBpbnQK IHBnX3djX2lzYWxudW0ocGdfd2NoYXIgYykKIHsKLQlzd2l0Y2ggKHBnX3JlZ2V4X3N0cmF0ZWd5 KQotCXsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9DOgotCQkJcmV0dXJuIChjIDw9IChwZ193 Y2hhcikgMTI3ICYmCi0JCQkJCShwZ19jaGFyX3Byb3BlcnRpZXNbY10gJiBQR19JU0FMTlVNKSk7 Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfQlVJTFRJTjoKLQkJCXJldHVybiBwZ191X2lzYWxu dW0oYywgdHJ1ZSk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ19XSURFOgotCQkJaWYg KHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCQkJcmV0 dXJuIGlzd2FsbnVtX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKLQkJ CS8qIEZBTEwgVEhSVSAqLwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfMUJZVEU6Ci0J CQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9NQVggJiYKLQkJCQkJaXNhbG51bV9sKCh1 bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpKTsKLQkJCWJyZWFrOwot CQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0lDVToKLSNpZmRlZiBVU0VfSUNVCi0JCQlyZXR1cm4g dV9pc2FsbnVtKGMpOwotI2VuZGlmCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7CQkJCQkvKiBj YW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwlpZiAocGdfcmVnZXhf bG9jYWxlLT5jdHlwZV9pc19jKQorCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcgJiYKKwkJ CQkoY2hhcl9wcm9wZXJ0aWVzX3RibFtjXSAmIFBHX0lTQUxOVU0pKTsKKwllbHNlCisJCXJldHVy biBjaGFyX3Byb3BlcnRpZXMoYywgUEdfSVNESUdJVCB8IFBHX0lTQUxQSEEsIHBnX3JlZ2V4X2xv Y2FsZSkgIT0gMDsKIH0KIAogc3RhdGljIGludApAQCAtMzk0LDIxOSArMzA2LDg3IEBAIHBnX3dj X2lzd29yZChwZ193Y2hhciBjKQogc3RhdGljIGludAogcGdfd2NfaXN1cHBlcihwZ193Y2hhciBj KQogewotCXN3aXRjaCAocGdfcmVnZXhfc3RyYXRlZ3kpCi0JewotCQljYXNlIFBHX1JFR0VYX1NU UkFURUdZX0M6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcgJiYKLQkJCQkJKHBnX2No YXJfcHJvcGVydGllc1tjXSAmIFBHX0lTVVBQRVIpKTsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVH WV9CVUlMVElOOgotCQkJcmV0dXJuIHBnX3VfaXN1cHBlcihjKTsKLQkJY2FzZSBQR19SRUdFWF9T VFJBVEVHWV9MSUJDX1dJREU6Ci0JCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8PSAo cGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3dXBwZXJfbCgod2ludF90KSBjLCBwZ19y ZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJLyogRkFMTCBUSFJVICovCi0JCWNhc2UgUEdfUkVH RVhfU1RSQVRFR1lfTElCQ18xQllURToKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIFVDSEFS X01BWCAmJgotCQkJCQlpc3VwcGVyX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2Fs ZS0+aW5mby5sdCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfSUNVOgot I2lmZGVmIFVTRV9JQ1UKLQkJCXJldHVybiB1X2lzdXBwZXIoYyk7Ci0jZW5kaWYKLQkJCWJyZWFr OwotCX0KLQlyZXR1cm4gMDsJCQkJCS8qIGNhbid0IGdldCBoZXJlLCBidXQga2VlcCBjb21waWxl ciBxdWlldCAqLworCWlmIChwZ19yZWdleF9sb2NhbGUtPmN0eXBlX2lzX2MpCisJCXJldHVybiAo YyA8PSAocGdfd2NoYXIpIDEyNyAmJgorCQkJCShjaGFyX3Byb3BlcnRpZXNfdGJsW2NdICYgUEdf SVNVUFBFUikpOworCWVsc2UKKwkJcmV0dXJuIGNoYXJfcHJvcGVydGllcyhjLCBQR19JU1VQUEVS LCBwZ19yZWdleF9sb2NhbGUpICE9IDA7CiB9CiAKIHN0YXRpYyBpbnQKIHBnX3djX2lzbG93ZXIo cGdfd2NoYXIgYykKIHsKLQlzd2l0Y2ggKHBnX3JlZ2V4X3N0cmF0ZWd5KQotCXsKLQkJY2FzZSBQ R19SRUdFWF9TVFJBVEVHWV9DOgotCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgMTI3ICYmCi0J CQkJCShwZ19jaGFyX3Byb3BlcnRpZXNbY10gJiBQR19JU0xPV0VSKSk7Ci0JCWNhc2UgUEdfUkVH RVhfU1RSQVRFR1lfQlVJTFRJTjoKLQkJCXJldHVybiBwZ191X2lzbG93ZXIoYyk7Ci0JCWNhc2Ug UEdfUkVHRVhfU1RSQVRFR1lfTElCQ19XSURFOgotCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0 IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCQkJcmV0dXJuIGlzd2xvd2VyX2woKHdpbnRf dCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKLQkJCS8qIEZBTEwgVEhSVSAqLwotCQlj YXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfMUJZVEU6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3dj aGFyKSBVQ0hBUl9NQVggJiYKLQkJCQkJaXNsb3dlcl9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19y ZWdleF9sb2NhbGUtPmluZm8ubHQpKTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX1JFR0VYX1NUUkFU RUdZX0lDVToKLSNpZmRlZiBVU0VfSUNVCi0JCQlyZXR1cm4gdV9pc2xvd2VyKGMpOwotI2VuZGlm Ci0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7CQkJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KKwlpZiAocGdfcmVnZXhfbG9jYWxlLT5jdHlwZV9pc19jKQor CQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSAxMjcgJiYKKwkJCQkoY2hhcl9wcm9wZXJ0aWVzX3Ri bFtjXSAmIFBHX0lTTE9XRVIpKTsKKwllbHNlCisJCXJldHVybiBjaGFyX3Byb3BlcnRpZXMoYywg UEdfSVNMT1dFUiwgcGdfcmVnZXhfbG9jYWxlKSAhPSAwOwogfQogCiBzdGF0aWMgaW50CiBwZ193 Y19pc2dyYXBoKHBnX3djaGFyIGMpCiB7Ci0Jc3dpdGNoIChwZ19yZWdleF9zdHJhdGVneSkKLQl7 Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfQzoKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIp IDEyNyAmJgotCQkJCQkocGdfY2hhcl9wcm9wZXJ0aWVzW2NdICYgUEdfSVNHUkFQSCkpOwotCQlj YXNlIFBHX1JFR0VYX1NUUkFURUdZX0JVSUxUSU46Ci0JCQlyZXR1cm4gcGdfdV9pc2dyYXBoKGMp OwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfV0lERToKLQkJCWlmIChzaXplb2Yod2No YXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dncmFw aF9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7Ci0JCQkvKiBGQUxMIFRI UlUgKi8KLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDXzFCWVRFOgotCQkJcmV0dXJuIChj IDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlzZ3JhcGhfbCgodW5zaWduZWQgY2hh cikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19S RUdFWF9TVFJBVEVHWV9JQ1U6Ci0jaWZkZWYgVVNFX0lDVQotCQkJcmV0dXJuIHVfaXNncmFwaChj KTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwkJCQkJLyogY2FuJ3QgZ2V0IGhl cmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+Y3R5 cGVfaXNfYykKKwkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgMTI3ICYmCisJCQkJKGNoYXJfcHJv cGVydGllc190YmxbY10gJiBQR19JU0dSQVBIKSk7CisJZWxzZQorCQlyZXR1cm4gY2hhcl9wcm9w ZXJ0aWVzKGMsIFBHX0lTR1JBUEgsIHBnX3JlZ2V4X2xvY2FsZSkgIT0gMDsKIH0KIAogc3RhdGlj IGludAogcGdfd2NfaXNwcmludChwZ193Y2hhciBjKQogewotCXN3aXRjaCAocGdfcmVnZXhfc3Ry YXRlZ3kpCi0JewotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0M6Ci0JCQlyZXR1cm4gKGMgPD0g KHBnX3djaGFyKSAxMjcgJiYKLQkJCQkJKHBnX2NoYXJfcHJvcGVydGllc1tjXSAmIFBHX0lTUFJJ TlQpKTsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9CVUlMVElOOgotCQkJcmV0dXJuIHBnX3Vf aXNwcmludChjKTsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDX1dJREU6Ci0JCQlpZiAo c2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1 cm4gaXN3cHJpbnRfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJ LyogRkFMTCBUSFJVICovCi0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ18xQllURToKLQkJ CXJldHVybiAoYyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc3ByaW50X2woKHVu c2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOwotCQkJYnJlYWs7Ci0J CWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfSUNVOgotI2lmZGVmIFVTRV9JQ1UKLQkJCXJldHVybiB1 X2lzcHJpbnQoYyk7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsJCQkJCS8qIGNh bid0IGdldCBoZXJlLCBidXQga2VlcCBjb21waWxlciBxdWlldCAqLworCWlmIChwZ19yZWdleF9s b2NhbGUtPmN0eXBlX2lzX2MpCisJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgorCQkJ CShjaGFyX3Byb3BlcnRpZXNfdGJsW2NdICYgUEdfSVNQUklOVCkpOworCWVsc2UKKwkJcmV0dXJu IGNoYXJfcHJvcGVydGllcyhjLCBQR19JU1BSSU5ULCBwZ19yZWdleF9sb2NhbGUpICE9IDA7CiB9 CiAKIHN0YXRpYyBpbnQKIHBnX3djX2lzcHVuY3QocGdfd2NoYXIgYykKIHsKLQlzd2l0Y2ggKHBn X3JlZ2V4X3N0cmF0ZWd5KQotCXsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9DOgotCQkJcmV0 dXJuIChjIDw9IChwZ193Y2hhcikgMTI3ICYmCi0JCQkJCShwZ19jaGFyX3Byb3BlcnRpZXNbY10g JiBQR19JU1BVTkNUKSk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfQlVJTFRJTjoKLQkJCXJl dHVybiBwZ191X2lzcHVuY3QoYywgdHJ1ZSk7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElC Q19XSURFOgotCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAw eEZGRkYpCi0JCQkJcmV0dXJuIGlzd3B1bmN0X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxl LT5pbmZvLmx0KTsKLQkJCS8qIEZBTEwgVEhSVSAqLwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZ X0xJQkNfMUJZVEU6Ci0JCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9NQVggJiYKLQkJ CQkJaXNwdW5jdF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQp KTsKLQkJCWJyZWFrOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0lDVToKLSNpZmRlZiBVU0Vf SUNVCi0JCQlyZXR1cm4gdV9pc3B1bmN0KGMpOwotI2VuZGlmCi0JCQlicmVhazsKLQl9Ci0JcmV0 dXJuIDA7CQkJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8K KwlpZiAocGdfcmVnZXhfbG9jYWxlLT5jdHlwZV9pc19jKQorCQlyZXR1cm4gKGMgPD0gKHBnX3dj aGFyKSAxMjcgJiYKKwkJCQkoY2hhcl9wcm9wZXJ0aWVzX3RibFtjXSAmIFBHX0lTUFVOQ1QpKTsK KwllbHNlCisJCXJldHVybiBjaGFyX3Byb3BlcnRpZXMoYywgUEdfSVNQVU5DVCwgcGdfcmVnZXhf bG9jYWxlKSAhPSAwOwogfQogCiBzdGF0aWMgaW50CiBwZ193Y19pc3NwYWNlKHBnX3djaGFyIGMp CiB7Ci0Jc3dpdGNoIChwZ19yZWdleF9zdHJhdGVneSkKLQl7Ci0JCWNhc2UgUEdfUkVHRVhfU1RS QVRFR1lfQzoKLQkJCXJldHVybiAoYyA8PSAocGdfd2NoYXIpIDEyNyAmJgotCQkJCQkocGdfY2hh cl9wcm9wZXJ0aWVzW2NdICYgUEdfSVNTUEFDRSkpOwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZ X0JVSUxUSU46Ci0JCQlyZXR1cm4gcGdfdV9pc3NwYWNlKGMpOwotCQljYXNlIFBHX1JFR0VYX1NU UkFURUdZX0xJQkNfV0lERToKLQkJCWlmIChzaXplb2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChw Z193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dzcGFjZV9sKCh3aW50X3QpIGMsIHBnX3Jl Z2V4X2xvY2FsZS0+aW5mby5sdCk7Ci0JCQkvKiBGQUxMIFRIUlUgKi8KLQkJY2FzZSBQR19SRUdF WF9TVFJBVEVHWV9MSUJDXzFCWVRFOgotCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJf TUFYICYmCi0JCQkJCWlzc3BhY2VfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxl LT5pbmZvLmx0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9JQ1U6Ci0j aWZkZWYgVVNFX0lDVQotCQkJcmV0dXJuIHVfaXNzcGFjZShjKTsKLSNlbmRpZgotCQkJYnJlYWs7 Ci0JfQotCXJldHVybiAwOwkJCQkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNvbXBpbGVy IHF1aWV0ICovCisJaWYgKHBnX3JlZ2V4X2xvY2FsZS0+Y3R5cGVfaXNfYykKKwkJcmV0dXJuIChj IDw9IChwZ193Y2hhcikgMTI3ICYmCisJCQkJKGNoYXJfcHJvcGVydGllc190YmxbY10gJiBQR19J U1NQQUNFKSk7CisJZWxzZQorCQlyZXR1cm4gY2hhcl9wcm9wZXJ0aWVzKGMsIFBHX0lTU1BBQ0Us IHBnX3JlZ2V4X2xvY2FsZSkgIT0gMDsKIH0KIAogc3RhdGljIHBnX3djaGFyCiBwZ193Y190b3Vw cGVyKHBnX3djaGFyIGMpCiB7Ci0Jc3dpdGNoIChwZ19yZWdleF9zdHJhdGVneSkKKwlpZiAocGdf cmVnZXhfbG9jYWxlLT5jdHlwZV9pc19jKQogCXsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9D OgotCQkJaWYgKGMgPD0gKHBnX3djaGFyKSAxMjcpCi0JCQkJcmV0dXJuIHBnX2FzY2lpX3RvdXBw ZXIoKHVuc2lnbmVkIGNoYXIpIGMpOwotCQkJcmV0dXJuIGM7Ci0JCWNhc2UgUEdfUkVHRVhfU1RS QVRFR1lfQlVJTFRJTjoKLQkJCXJldHVybiB1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUoYyk7Ci0J CWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ19XSURFOgotCQkJaWYgKHNpemVvZih3Y2hhcl90 KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCQkJcmV0dXJuIHRvd3VwcGVyX2wo KHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKLQkJCS8qIEZBTEwgVEhSVSAq LwotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0xJQkNfMUJZVEU6Ci0JCQlpZiAoYyA8PSAocGdf d2NoYXIpIFVDSEFSX01BWCkKLQkJCQlyZXR1cm4gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSBj LCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJcmV0dXJuIGM7Ci0JCWNhc2UgUEdfUkVH RVhfU1RSQVRFR1lfSUNVOgotI2lmZGVmIFVTRV9JQ1UKLQkJCXJldHVybiB1X3RvdXBwZXIoYyk7 Ci0jZW5kaWYKLQkJCWJyZWFrOworCQlpZiAoYyA8PSAocGdfd2NoYXIpIDEyNykKKwkJCXJldHVy biBwZ19hc2NpaV90b3VwcGVyKCh1bnNpZ25lZCBjaGFyKSBjKTsKKwkJcmV0dXJuIGM7CiAJfQot CXJldHVybiAwOwkJCQkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCisJZWxzZQorCQlyZXR1cm4gcGdfcmVnZXhfbG9jYWxlLT5jdHlwZS0+d2NfdG91cHBlcihj LCBwZ19yZWdleF9sb2NhbGUpOwogfQogCiBzdGF0aWMgcGdfd2NoYXIKIHBnX3djX3RvbG93ZXIo cGdfd2NoYXIgYykKIHsKLQlzd2l0Y2ggKHBnX3JlZ2V4X3N0cmF0ZWd5KQorCWlmIChwZ19yZWdl eF9sb2NhbGUtPmN0eXBlX2lzX2MpCiAJewotCQljYXNlIFBHX1JFR0VYX1NUUkFURUdZX0M6Ci0J CQlpZiAoYyA8PSAocGdfd2NoYXIpIDEyNykKLQkJCQlyZXR1cm4gcGdfYXNjaWlfdG9sb3dlcigo dW5zaWduZWQgY2hhcikgYyk7Ci0JCQlyZXR1cm4gYzsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVH WV9CVUlMVElOOgotCQkJcmV0dXJuIHVuaWNvZGVfbG93ZXJjYXNlX3NpbXBsZShjKTsKLQkJY2Fz ZSBQR19SRUdFWF9TVFJBVEVHWV9MSUJDX1dJREU6Ci0JCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49 IDQgfHwgYyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gdG93bG93ZXJfbCgod2lu dF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOwotCQkJLyogRkFMTCBUSFJVICovCi0J CWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ18xQllURToKLQkJCWlmIChjIDw9IChwZ193Y2hh cikgVUNIQVJfTUFYKQotCQkJCXJldHVybiB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBn X3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7Ci0JCQlyZXR1cm4gYzsKLQkJY2FzZSBQR19SRUdFWF9T VFJBVEVHWV9JQ1U6Ci0jaWZkZWYgVVNFX0lDVQotCQkJcmV0dXJuIHVfdG9sb3dlcihjKTsKLSNl bmRpZgotCQkJYnJlYWs7CisJCWlmIChjIDw9IChwZ193Y2hhcikgMTI3KQorCQkJcmV0dXJuIHBn X2FzY2lpX3RvbG93ZXIoKHVuc2lnbmVkIGNoYXIpIGMpOworCQlyZXR1cm4gYzsKIAl9Ci0JcmV0 dXJuIDA7CQkJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8K KwllbHNlCisJCXJldHVybiBwZ19yZWdleF9sb2NhbGUtPmN0eXBlLT53Y190b2xvd2VyKGMsIHBn X3JlZ2V4X2xvY2FsZSk7CiB9CiAKIApAQCAtNzMyLDM3ICs1MTIsMjUgQEAgcGdfY3R5cGVfZ2V0 X2NhY2hlKHBnX3djX3Byb2JlZnVuYyBwcm9iZWZ1bmMsIGludCBjY2xhc3Njb2RlKQogCSAqIHdv dWxkIGFsd2F5cyBiZSB0cnVlIGZvciBwcm9kdWN0aW9uIHZhbHVlcyBvZiBNQVhfU0lNUExFX0NI UiwgYnV0IGl0J3MKIAkgKiB1c2VmdWwgdG8gYWxsb3cgaXQgdG8gYmUgc21hbGwgZm9yIHRlc3Rp bmcgcHVycG9zZXMuKQogCSAqLwotCXN3aXRjaCAocGdfcmVnZXhfc3RyYXRlZ3kpCisJaWYgKHBn X3JlZ2V4X2xvY2FsZS0+Y3R5cGVfaXNfYykKIAl7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lf QzoKICNpZiBNQVhfU0lNUExFX0NIUiA+PSAxMjcKLQkJCW1heF9jaHIgPSAocGdfd2NoYXIpIDEy NzsKLQkJCXBjYy0+Y3YuY2NsYXNzY29kZSA9IC0xOworCQltYXhfY2hyID0gKHBnX3djaGFyKSAx Mjc7CisJCXBjYy0+Y3YuY2NsYXNzY29kZSA9IC0xOwogI2Vsc2UKLQkJCW1heF9jaHIgPSAocGdf d2NoYXIpIE1BWF9TSU1QTEVfQ0hSOworCQltYXhfY2hyID0gKHBnX3djaGFyKSBNQVhfU0lNUExF X0NIUjsKICNlbmRpZgotCQkJYnJlYWs7Ci0JCWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfQlVJTFRJ TjoKLQkJCW1heF9jaHIgPSAocGdfd2NoYXIpIE1BWF9TSU1QTEVfQ0hSOwotCQkJYnJlYWs7Ci0J CWNhc2UgUEdfUkVHRVhfU1RSQVRFR1lfTElCQ19XSURFOgotCQkJbWF4X2NociA9IChwZ193Y2hh cikgTUFYX1NJTVBMRV9DSFI7Ci0JCQlicmVhazsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9M SUJDXzFCWVRFOgotI2lmIE1BWF9TSU1QTEVfQ0hSID49IFVDSEFSX01BWAotCQkJbWF4X2NociA9 IChwZ193Y2hhcikgVUNIQVJfTUFYOworCX0KKwllbHNlCisJeworCQlpZiAocGdfcmVnZXhfbG9j YWxlLT5jdHlwZS0+bWF4X2NociAhPSAwICYmCisJCQlwZ19yZWdleF9sb2NhbGUtPmN0eXBlLT5t YXhfY2hyIDw9IE1BWF9TSU1QTEVfQ0hSKQorCQl7CisJCQltYXhfY2hyID0gcGdfcmVnZXhfbG9j YWxlLT5jdHlwZS0+bWF4X2NocjsKIAkJCXBjYy0+Y3YuY2NsYXNzY29kZSA9IC0xOwotI2Vsc2UK LQkJCW1heF9jaHIgPSAocGdfd2NoYXIpIE1BWF9TSU1QTEVfQ0hSOwotI2VuZGlmCi0JCQlicmVh azsKLQkJY2FzZSBQR19SRUdFWF9TVFJBVEVHWV9JQ1U6CisJCX0KKwkJZWxzZQogCQkJbWF4X2No ciA9IChwZ193Y2hhcikgTUFYX1NJTVBMRV9DSFI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJ CUFzc2VydChmYWxzZSk7Ci0JCQltYXhfY2hyID0gMDsJCS8qIGNhbid0IGdldCBoZXJlLCBidXQg a2VlcCBjb21waWxlciBxdWlldCAqLwotCQkJYnJlYWs7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0dGluZy5jCmluZGV4IDg1YTdkZDQ1NjEuLjZhMDU3MWY5M2UgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtMTU3MCw1MiArMTU3MCw2IEBAIHN0cl9udW10aChjaGFy ICpkZXN0LCBjaGFyICpudW0sIGludCB0eXBlKQogICoJCQl1cHBlci9sb3dlci9pbml0Y2FwIGZ1 bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZkZWYgVVNFX0lDVQotCi10eXBl ZGVmIGludDMyX3QgKCpJQ1VfQ29udmVydF9GdW5jKSAoVUNoYXIgKmRlc3QsIGludDMyX3QgZGVz dENhcGFjaXR5LAotCQkJCQkJCQkJIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3Ro LAotCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmxvY2FsZSwKLQkJCQkJCQkJCSBVRXJyb3JDb2RlICpw RXJyb3JDb2RlKTsKLQotc3RhdGljIGludDMyX3QKLWljdV9jb252ZXJ0X2Nhc2UoSUNVX0NvbnZl cnRfRnVuYyBmdW5jLCBwZ19sb2NhbGVfdCBteWxvY2FsZSwKLQkJCQkgVUNoYXIgKipidWZmX2Rl c3QsIFVDaGFyICpidWZmX3NvdXJjZSwgaW50MzJfdCBsZW5fc291cmNlKQotewotCVVFcnJvckNv ZGUJc3RhdHVzOwotCWludDMyX3QJCWxlbl9kZXN0OwotCi0JbGVuX2Rlc3QgPSBsZW5fc291cmNl OwkJLyogdHJ5IGZpcnN0IHdpdGggc2FtZSBsZW5ndGggKi8KLQkqYnVmZl9kZXN0ID0gcGFsbG9j KGxlbl9kZXN0ICogc2l6ZW9mKCoqYnVmZl9kZXN0KSk7Ci0Jc3RhdHVzID0gVV9aRVJPX0VSUk9S OwotCWxlbl9kZXN0ID0gZnVuYygqYnVmZl9kZXN0LCBsZW5fZGVzdCwgYnVmZl9zb3VyY2UsIGxl bl9zb3VyY2UsCi0JCQkJCW15bG9jYWxlLT5pbmZvLmljdS5sb2NhbGUsICZzdGF0dXMpOwotCWlm IChzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0JewotCQkvKiB0cnkgYWdhaW4g d2l0aCBhZGp1c3RlZCBsZW5ndGggKi8KLQkJcGZyZWUoKmJ1ZmZfZGVzdCk7Ci0JCSpidWZmX2Rl c3QgPSBwYWxsb2MobGVuX2Rlc3QgKiBzaXplb2YoKipidWZmX2Rlc3QpKTsKLQkJc3RhdHVzID0g VV9aRVJPX0VSUk9SOwotCQlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1 ZmZfc291cmNlLCBsZW5fc291cmNlLAotCQkJCQkJbXlsb2NhbGUtPmluZm8uaWN1LmxvY2FsZSwg JnN0YXR1cyk7Ci0JfQotCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZXJlcG9ydChFUlJPUiwK LQkJCQkoZXJybXNnKCJjYXNlIGNvbnZlcnNpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0 YXR1cykpKSk7Ci0JcmV0dXJuIGxlbl9kZXN0OwotfQotCi1zdGF0aWMgaW50MzJfdAotdV9zdHJU b1RpdGxlX2RlZmF1bHRfQkkoVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LAotCQkJ CQkJY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCi0JCQkJCQljb25zdCBjaGFy ICpsb2NhbGUsCi0JCQkJCQlVRXJyb3JDb2RlICpwRXJyb3JDb2RlKQotewotCXJldHVybiB1X3N0 clRvVGl0bGUoZGVzdCwgZGVzdENhcGFjaXR5LCBzcmMsIHNyY0xlbmd0aCwKLQkJCQkJCU5VTEws IGxvY2FsZSwgcEVycm9yQ29kZSk7Ci19Ci0KLSNlbmRpZgkJCQkJCQkvKiBVU0VfSUNVICovCi0K IC8qCiAgKiBJZiB0aGUgc3lzdGVtIHByb3ZpZGVzIHRoZSBuZWVkZWQgZnVuY3Rpb25zIGZvciB3 aWRlLWNoYXJhY3RlciBtYW5pcHVsYXRpb24KICAqICh3aGljaCBhcmUgYWxsIHN0YW5kYXJkaXpl ZCBieSBDOTkpLCB0aGVuIHdlIGltcGxlbWVudCB1cHBlci9sb3dlci9pbml0Y2FwCkBAIC0xNjYz LDEwMSArMTYxNywyOCBAQCBzdHJfdG9sb3dlcihjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5 dGVzLCBPaWQgY29sbGlkKQogCX0KIAllbHNlCiAJewotI2lmZGVmIFVTRV9JQ1UKLQkJaWYgKG15 bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQljb25zdCBjaGFyICpzcmMg PSBidWZmOworCQlzaXplX3QJCXNyY2xlbiA9IG5ieXRlczsKKwkJc2l6ZV90CQlkc3RzaXplOwor CQljaGFyCSAgICpkc3Q7CisJCXNpemVfdAkJbmVlZGVkOworCisJCS8qIGZpcnN0IHRyeSBidWZm ZXIgb2YgZXF1YWwgc2l6ZSBwbHVzIHRlcm1pbmF0aW5nIE5VTCAqLworCQlkc3RzaXplID0gc3Jj bGVuICsgMTsKKwkJZHN0ID0gcGFsbG9jKGRzdHNpemUpOworCisJCW5lZWRlZCA9IHBnX3N0cmxv d2VyKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIG15bG9jYWxlKTsKKwkJaWYgKG5lZWRlZCAr IDEgPiBkc3RzaXplKQogCQl7Ci0JCQlpbnQzMl90CQlsZW5fdWNoYXI7Ci0JCQlpbnQzMl90CQls ZW5fY29udjsKLQkJCVVDaGFyCSAgICpidWZmX3VjaGFyOwotCQkJVUNoYXIJICAgKmJ1ZmZfY29u djsKLQotCQkJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0 ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9Mb3dlciwgbXlsb2Nh bGUsCi0JCQkJCQkJCQkJJmJ1ZmZfY29udiwgYnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKLQkJCWlj dV9mcm9tX3VjaGFyKCZyZXN1bHQsIGJ1ZmZfY29udiwgbGVuX2NvbnYpOwotCQkJcGZyZWUoYnVm Zl91Y2hhcik7Ci0JCQlwZnJlZShidWZmX2NvbnYpOworCQkJLyogZ3JvdyBidWZmZXIgaWYgbmVl ZGVkIGFuZCByZXRyeSAqLworCQkJZHN0c2l6ZSA9IG5lZWRlZCArIDE7CisJCQlkc3QgPSByZXBh bGxvYyhkc3QsIGRzdHNpemUpOworCQkJbmVlZGVkID0gcGdfc3RybG93ZXIoZHN0LCBkc3RzaXpl LCBzcmMsIHNyY2xlbiwgbXlsb2NhbGUpOworCQkJQXNzZXJ0KG5lZWRlZCArIDEgPD0gZHN0c2l6 ZSk7CiAJCX0KLQkJZWxzZQotI2VuZGlmCi0JCWlmIChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0JVSUxUSU4pCi0JCXsKLQkJCWNvbnN0IGNoYXIgKnNyYyA9IGJ1ZmY7Ci0JCQlz aXplX3QJCXNyY2xlbiA9IG5ieXRlczsKLQkJCXNpemVfdAkJZHN0c2l6ZTsKLQkJCWNoYXIJICAg KmRzdDsKLQkJCXNpemVfdAkJbmVlZGVkOwotCi0JCQlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGlu ZygpID09IFBHX1VURjgpOwotCi0JCQkvKiBmaXJzdCB0cnkgYnVmZmVyIG9mIGVxdWFsIHNpemUg cGx1cyB0ZXJtaW5hdGluZyBOVUwgKi8KLQkJCWRzdHNpemUgPSBzcmNsZW4gKyAxOwotCQkJZHN0 ID0gcGFsbG9jKGRzdHNpemUpOwotCi0JCQluZWVkZWQgPSB1bmljb2RlX3N0cmxvd2VyKGRzdCwg ZHN0c2l6ZSwgc3JjLCBzcmNsZW4pOwotCQkJaWYgKG5lZWRlZCArIDEgPiBkc3RzaXplKQotCQkJ ewotCQkJCS8qIGdyb3cgYnVmZmVyIGlmIG5lZWRlZCBhbmQgcmV0cnkgKi8KLQkJCQlkc3RzaXpl ID0gbmVlZGVkICsgMTsKLQkJCQlkc3QgPSByZXBhbGxvYyhkc3QsIGRzdHNpemUpOwotCQkJCW5l ZWRlZCA9IHVuaWNvZGVfc3RybG93ZXIoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbik7Ci0JCQkJ QXNzZXJ0KG5lZWRlZCArIDEgPT0gZHN0c2l6ZSk7Ci0JCQl9Ci0KLQkJCUFzc2VydChkc3RbbmVl ZGVkXSA9PSAnXDAnKTsKLQkJCXJlc3VsdCA9IGRzdDsKLQkJfQotCQllbHNlCi0JCXsKLQkJCUFz c2VydChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpOwotCi0JCQlpZiAo cGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpID4gMSkKLQkJCXsKLQkJCQl3Y2hhcl90 ICAgICp3b3Jrc3BhY2U7Ci0JCQkJc2l6ZV90CQljdXJyX2NoYXI7Ci0JCQkJc2l6ZV90CQlyZXN1 bHRfc2l6ZTsKLQotCQkJCS8qIE92ZXJmbG93IHBhcmFub2lhICovCi0JCQkJaWYgKChuYnl0ZXMg KyAxKSA+IChJTlRfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpKSkKLQkJCQkJZXJlcG9ydChFUlJPUiwK LQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCQkJCSBlcnJtc2co Im91dCBvZiBtZW1vcnkiKSkpOwotCi0JCQkJLyogT3V0cHV0IHdvcmtzcGFjZSBjYW5ub3QgaGF2 ZSBtb3JlIGNvZGVzIHRoYW4gaW5wdXQgYnl0ZXMgKi8KLQkJCQl3b3Jrc3BhY2UgPSAod2NoYXJf dCAqKSBwYWxsb2MoKG5ieXRlcyArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKLQotCQkJCWNoYXIy d2NoYXIod29ya3NwYWNlLCBuYnl0ZXMgKyAxLCBidWZmLCBuYnl0ZXMsIG15bG9jYWxlKTsKLQot CQkJCWZvciAoY3Vycl9jaGFyID0gMDsgd29ya3NwYWNlW2N1cnJfY2hhcl0gIT0gMDsgY3Vycl9j aGFyKyspCi0JCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3BhY2Vb Y3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubHQpOwogCi0JCQkJLyoKLQkJCQkgKiBNYWtlIHJl c3VsdCBsYXJnZSBlbm91Z2g7IGNhc2UgY2hhbmdlIG1pZ2h0IGNoYW5nZSBudW1iZXIKLQkJCQkg KiBvZiBieXRlcwotCQkJCSAqLwotCQkJCXJlc3VsdF9zaXplID0gY3Vycl9jaGFyICogcGdfZGF0 YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpICsgMTsKLQkJCQlyZXN1bHQgPSBwYWxsb2MocmVz dWx0X3NpemUpOwotCi0JCQkJd2NoYXIyY2hhcihyZXN1bHQsIHdvcmtzcGFjZSwgcmVzdWx0X3Np emUsIG15bG9jYWxlKTsKLQkJCQlwZnJlZSh3b3Jrc3BhY2UpOwotCQkJfQotCQkJZWxzZQotCQkJ ewotCQkJCWNoYXIJICAgKnA7Ci0KLQkJCQlyZXN1bHQgPSBwbnN0cmR1cChidWZmLCBuYnl0ZXMp OwotCi0JCQkJLyoKLQkJCQkgKiBOb3RlOiB3ZSBhc3N1bWUgdGhhdCB0b2xvd2VyX2woKSB3aWxs IG5vdCBiZSBzbyBicm9rZW4gYXMKLQkJCQkgKiB0byBuZWVkIGFuIGlzdXBwZXJfbCgpIGd1YXJk IHRlc3QuICBXaGVuIHVzaW5nIHRoZSBkZWZhdWx0Ci0JCQkJICogY29sbGF0aW9uLCB3ZSBhcHBs eSB0aGUgdHJhZGl0aW9uYWwgUG9zdGdyZXMgYmVoYXZpb3IgdGhhdAotCQkJCSAqIGZvcmNlcyBB U0NJSS1zdHlsZSB0cmVhdG1lbnQgb2YgSS9pLCBidXQgaW4gbm9uLWRlZmF1bHQKLQkJCQkgKiBj b2xsYXRpb25zIHlvdSBnZXQgZXhhY3RseSB3aGF0IHRoZSBjb2xsYXRpb24gc2F5cy4KLQkJCQkg Ki8KLQkJCQlmb3IgKHAgPSByZXN1bHQ7ICpwOyBwKyspCi0JCQkJCSpwID0gdG9sb3dlcl9sKCh1 bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8ubHQpOwotCQkJfQotCQl9CisJCUFzc2Vy dChkc3RbbmVlZGVkXSA9PSAnXDAnKTsKKwkJcmVzdWx0ID0gZHN0OwogCX0KIAogCXJldHVybiBy ZXN1bHQ7CkBAIC0xODAwLDE0NyArMTY4MSwzMyBAQCBzdHJfdG91cHBlcihjb25zdCBjaGFyICpi dWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCX0KIAllbHNlCiAJewotI2lmZGVmIFVT RV9JQ1UKLQkJaWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQl7 Ci0JCQlpbnQzMl90CQlsZW5fdWNoYXIsCi0JCQkJCQlsZW5fY29udjsKLQkJCVVDaGFyCSAgICpi dWZmX3VjaGFyOwotCQkJVUNoYXIJICAgKmJ1ZmZfY29udjsKLQotCQkJbGVuX3VjaGFyID0gaWN1 X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3Vf Y29udmVydF9jYXNlKHVfc3RyVG9VcHBlciwgbXlsb2NhbGUsCi0JCQkJCQkJCQkJJmJ1ZmZfY29u diwgYnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKLQkJCWljdV9mcm9tX3VjaGFyKCZyZXN1bHQsIGJ1 ZmZfY29udiwgbGVuX2NvbnYpOwotCQkJcGZyZWUoYnVmZl91Y2hhcik7Ci0JCQlwZnJlZShidWZm X2NvbnYpOwotCQl9Ci0JCWVsc2UKLSNlbmRpZgotCQlpZiAobXlsb2NhbGUtPnByb3ZpZGVyID09 IENPTExQUk9WSURFUl9CVUlMVElOKQorCQljb25zdCBjaGFyICpzcmMgPSBidWZmOworCQlzaXpl X3QJCXNyY2xlbiA9IG5ieXRlczsKKwkJc2l6ZV90CQlkc3RzaXplOworCQljaGFyCSAgICpkc3Q7 CisJCXNpemVfdAkJbmVlZGVkOworCisJCS8qIGZpcnN0IHRyeSBidWZmZXIgb2YgZXF1YWwgc2l6 ZSBwbHVzIHRlcm1pbmF0aW5nIE5VTCAqLworCQlkc3RzaXplID0gc3JjbGVuICsgMTsKKwkJZHN0 ID0gcGFsbG9jKGRzdHNpemUpOworCisJCW5lZWRlZCA9IHBnX3N0cnVwcGVyKGRzdCwgZHN0c2l6 ZSwgc3JjLCBzcmNsZW4sIG15bG9jYWxlKTsKKwkJaWYgKG5lZWRlZCArIDEgPiBkc3RzaXplKQog CQl7Ci0JCQljb25zdCBjaGFyICpzcmMgPSBidWZmOwotCQkJc2l6ZV90CQlzcmNsZW4gPSBuYnl0 ZXM7Ci0JCQlzaXplX3QJCWRzdHNpemU7Ci0JCQljaGFyCSAgICpkc3Q7Ci0JCQlzaXplX3QJCW5l ZWRlZDsKLQotCQkJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KTsKLQot CQkJLyogZmlyc3QgdHJ5IGJ1ZmZlciBvZiBlcXVhbCBzaXplIHBsdXMgdGVybWluYXRpbmcgTlVM ICovCi0JCQlkc3RzaXplID0gc3JjbGVuICsgMTsKLQkJCWRzdCA9IHBhbGxvYyhkc3RzaXplKTsK LQotCQkJbmVlZGVkID0gdW5pY29kZV9zdHJ1cHBlcihkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVu KTsKLQkJCWlmIChuZWVkZWQgKyAxID4gZHN0c2l6ZSkKLQkJCXsKLQkJCQkvKiBncm93IGJ1ZmZl ciBpZiBuZWVkZWQgYW5kIHJldHJ5ICovCi0JCQkJZHN0c2l6ZSA9IG5lZWRlZCArIDE7Ci0JCQkJ ZHN0ID0gcmVwYWxsb2MoZHN0LCBkc3RzaXplKTsKLQkJCQluZWVkZWQgPSB1bmljb2RlX3N0cnVw cGVyKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4pOwotCQkJCUFzc2VydChuZWVkZWQgKyAxID09 IGRzdHNpemUpOwotCQkJfQotCi0JCQlBc3NlcnQoZHN0W25lZWRlZF0gPT0gJ1wwJyk7Ci0JCQly ZXN1bHQgPSBkc3Q7CisJCQkvKiBncm93IGJ1ZmZlciBpZiBuZWVkZWQgYW5kIHJldHJ5ICovCisJ CQlkc3RzaXplID0gbmVlZGVkICsgMTsKKwkJCWRzdCA9IHJlcGFsbG9jKGRzdCwgZHN0c2l6ZSk7 CisJCQluZWVkZWQgPSBwZ19zdHJ1cHBlcihkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCBteWxv Y2FsZSk7CisJCQlBc3NlcnQobmVlZGVkICsgMSA8PSBkc3RzaXplKTsKIAkJfQotCQllbHNlCi0J CXsKLQkJCUFzc2VydChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpOwot Ci0JCQlpZiAocGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpID4gMSkKLQkJCXsKLQkJ CQl3Y2hhcl90ICAgICp3b3Jrc3BhY2U7Ci0JCQkJc2l6ZV90CQljdXJyX2NoYXI7Ci0JCQkJc2l6 ZV90CQlyZXN1bHRfc2l6ZTsKLQotCQkJCS8qIE92ZXJmbG93IHBhcmFub2lhICovCi0JCQkJaWYg KChuYnl0ZXMgKyAxKSA+IChJTlRfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpKSkKLQkJCQkJZXJlcG9y dChFUlJPUiwKLQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCQkJ CSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSkpOwotCi0JCQkJLyogT3V0cHV0IHdvcmtzcGFjZSBj YW5ub3QgaGF2ZSBtb3JlIGNvZGVzIHRoYW4gaW5wdXQgYnl0ZXMgKi8KLQkJCQl3b3Jrc3BhY2Ug PSAod2NoYXJfdCAqKSBwYWxsb2MoKG5ieXRlcyArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKLQot CQkJCWNoYXIyd2NoYXIod29ya3NwYWNlLCBuYnl0ZXMgKyAxLCBidWZmLCBuYnl0ZXMsIG15bG9j YWxlKTsKLQotCQkJCWZvciAoY3Vycl9jaGFyID0gMDsgd29ya3NwYWNlW2N1cnJfY2hhcl0gIT0g MDsgY3Vycl9jaGFyKyspCi0JCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93dXBwZXJfbCh3 b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubHQpOwogCi0JCQkJLyoKLQkJCQkg KiBNYWtlIHJlc3VsdCBsYXJnZSBlbm91Z2g7IGNhc2UgY2hhbmdlIG1pZ2h0IGNoYW5nZSBudW1i ZXIKLQkJCQkgKiBvZiBieXRlcwotCQkJCSAqLwotCQkJCXJlc3VsdF9zaXplID0gY3Vycl9jaGFy ICogcGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpICsgMTsKLQkJCQlyZXN1bHQgPSBw YWxsb2MocmVzdWx0X3NpemUpOwotCi0JCQkJd2NoYXIyY2hhcihyZXN1bHQsIHdvcmtzcGFjZSwg cmVzdWx0X3NpemUsIG15bG9jYWxlKTsKLQkJCQlwZnJlZSh3b3Jrc3BhY2UpOwotCQkJfQotCQkJ ZWxzZQotCQkJewotCQkJCWNoYXIJICAgKnA7Ci0KLQkJCQlyZXN1bHQgPSBwbnN0cmR1cChidWZm LCBuYnl0ZXMpOwotCi0JCQkJLyoKLQkJCQkgKiBOb3RlOiB3ZSBhc3N1bWUgdGhhdCB0b3VwcGVy X2woKSB3aWxsIG5vdCBiZSBzbyBicm9rZW4gYXMKLQkJCQkgKiB0byBuZWVkIGFuIGlzbG93ZXJf bCgpIGd1YXJkIHRlc3QuICBXaGVuIHVzaW5nIHRoZSBkZWZhdWx0Ci0JCQkJICogY29sbGF0aW9u LCB3ZSBhcHBseSB0aGUgdHJhZGl0aW9uYWwgUG9zdGdyZXMgYmVoYXZpb3IgdGhhdAotCQkJCSAq IGZvcmNlcyBBU0NJSS1zdHlsZSB0cmVhdG1lbnQgb2YgSS9pLCBidXQgaW4gbm9uLWRlZmF1bHQK LQkJCQkgKiBjb2xsYXRpb25zIHlvdSBnZXQgZXhhY3RseSB3aGF0IHRoZSBjb2xsYXRpb24gc2F5 cy4KLQkJCQkgKi8KLQkJCQlmb3IgKHAgPSByZXN1bHQ7ICpwOyBwKyspCi0JCQkJCSpwID0gdG91 cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8ubHQpOwotCQkJfQotCQl9 CisJCUFzc2VydChkc3RbbmVlZGVkXSA9PSAnXDAnKTsKKwkJcmVzdWx0ID0gZHN0OwogCX0KIAog CXJldHVybiByZXN1bHQ7CiB9CiAKLXN0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZQotewotCWNvbnN0 IGNoYXIgKnN0cjsKLQlzaXplX3QJCWxlbjsKLQlzaXplX3QJCW9mZnNldDsKLQlib29sCQlpbml0 OwotCWJvb2wJCXByZXZfYWxudW07Ci19OwotCi0vKgotICogU2ltcGxlIHdvcmQgYm91bmRhcnkg aXRlcmF0b3IgdGhhdCBkcmF3cyBib3VuZGFyaWVzIGVhY2ggdGltZSB0aGUgcmVzdWx0IG9mCi0g KiBwZ191X2lzYWxudW0oKSBjaGFuZ2VzLgotICovCi1zdGF0aWMgc2l6ZV90Ci1pbml0Y2FwX3di bmV4dCh2b2lkICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgKndic3RhdGUg PSAoc3RydWN0IFdvcmRCb3VuZGFyeVN0YXRlICopIHN0YXRlOwotCi0Jd2hpbGUgKHdic3RhdGUt Pm9mZnNldCA8IHdic3RhdGUtPmxlbiAmJgotCQkgICB3YnN0YXRlLT5zdHJbd2JzdGF0ZS0+b2Zm c2V0XSAhPSAnXDAnKQotCXsKLQkJcGdfd2NoYXIJdSA9IHV0ZjhfdG9fdW5pY29kZSgodW5zaWdu ZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIgKwotCQkJCQkJCQkJCXdic3RhdGUtPm9mZnNldCk7Ci0J CWJvb2wJCWN1cnJfYWxudW0gPSBwZ191X2lzYWxudW0odSwgdHJ1ZSk7Ci0KLQkJaWYgKCF3YnN0 YXRlLT5pbml0IHx8IGN1cnJfYWxudW0gIT0gd2JzdGF0ZS0+cHJldl9hbG51bSkKLQkJewotCQkJ c2l6ZV90CQlwcmV2X29mZnNldCA9IHdic3RhdGUtPm9mZnNldDsKLQotCQkJd2JzdGF0ZS0+aW5p dCA9IHRydWU7Ci0JCQl3YnN0YXRlLT5vZmZzZXQgKz0gdW5pY29kZV91dGY4bGVuKHUpOwotCQkJ d2JzdGF0ZS0+cHJldl9hbG51bSA9IGN1cnJfYWxudW07Ci0JCQlyZXR1cm4gcHJldl9vZmZzZXQ7 Ci0JCX0KLQotCQl3YnN0YXRlLT5vZmZzZXQgKz0gdW5pY29kZV91dGY4bGVuKHUpOwotCX0KLQot CXJldHVybiB3YnN0YXRlLT5sZW47Ci19Ci0KIC8qCiAgKiBjb2xsYXRpb24tYXdhcmUsIHdpZGUt Y2hhcmFjdGVyLWF3YXJlIGluaXRjYXAgZnVuY3Rpb24KICAqCkBAIC0xOTUxLDcgKzE3MTgsNiBA QCBjaGFyICoKIHN0cl9pbml0Y2FwKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9p ZCBjb2xsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0OwotCWludAkJCXdhc2FsbnVtID0gZmFsc2U7 CiAJcGdfbG9jYWxlX3QgbXlsb2NhbGU7CiAKIAlpZiAoIWJ1ZmYpCkBAIC0xOTc5LDEyNSArMTc0 NSwyOCBAQCBzdHJfaW5pdGNhcChjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQg Y29sbGlkKQogCX0KIAllbHNlCiAJewotI2lmZGVmIFVTRV9JQ1UKLQkJaWYgKG15bG9jYWxlLT5w cm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCQljb25zdCBjaGFyICpzcmMgPSBidWZmOwor CQlzaXplX3QJCXNyY2xlbiA9IG5ieXRlczsKKwkJc2l6ZV90CQlkc3RzaXplOworCQljaGFyCSAg ICpkc3Q7CisJCXNpemVfdAkJbmVlZGVkOworCisJCS8qIGZpcnN0IHRyeSBidWZmZXIgb2YgZXF1 YWwgc2l6ZSBwbHVzIHRlcm1pbmF0aW5nIE5VTCAqLworCQlkc3RzaXplID0gc3JjbGVuICsgMTsK KwkJZHN0ID0gcGFsbG9jKGRzdHNpemUpOworCisJCW5lZWRlZCA9IHBnX3N0cnRpdGxlKGRzdCwg ZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIG15bG9jYWxlKTsKKwkJaWYgKG5lZWRlZCArIDEgPiBkc3Rz aXplKQogCQl7Ci0JCQlpbnQzMl90CQlsZW5fdWNoYXIsCi0JCQkJCQlsZW5fY29udjsKLQkJCVVD aGFyCSAgICpidWZmX3VjaGFyOwotCQkJVUNoYXIJICAgKmJ1ZmZfY29udjsKLQotCQkJbGVuX3Vj aGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMpOwotCQkJbGVuX2Nv bnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9UaXRsZV9kZWZhdWx0X0JJLCBteWxvY2FsZSwK LQkJCQkJCQkJCQkmYnVmZl9jb252LCBidWZmX3VjaGFyLCBsZW5fdWNoYXIpOwotCQkJaWN1X2Zy b21fdWNoYXIoJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7Ci0JCQlwZnJlZShidWZmX3Vj aGFyKTsKLQkJCXBmcmVlKGJ1ZmZfY29udik7CisJCQkvKiBncm93IGJ1ZmZlciBpZiBuZWVkZWQg YW5kIHJldHJ5ICovCisJCQlkc3RzaXplID0gbmVlZGVkICsgMTsKKwkJCWRzdCA9IHJlcGFsbG9j KGRzdCwgZHN0c2l6ZSk7CisJCQluZWVkZWQgPSBwZ19zdHJ0aXRsZShkc3QsIGRzdHNpemUsIHNy Yywgc3JjbGVuLCBteWxvY2FsZSk7CisJCQlBc3NlcnQobmVlZGVkICsgMSA8PSBkc3RzaXplKTsK IAkJfQotCQllbHNlCi0jZW5kaWYKLQkJaWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJP VklERVJfQlVJTFRJTikKLQkJewotCQkJY29uc3QgY2hhciAqc3JjID0gYnVmZjsKLQkJCXNpemVf dAkJc3JjbGVuID0gbmJ5dGVzOwotCQkJc2l6ZV90CQlkc3RzaXplOwotCQkJY2hhcgkgICAqZHN0 OwotCQkJc2l6ZV90CQluZWVkZWQ7Ci0JCQlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgd2JzdGF0 ZSA9IHsKLQkJCQkuc3RyID0gc3JjLAotCQkJCS5sZW4gPSBzcmNsZW4sCi0JCQkJLm9mZnNldCA9 IDAsCi0JCQkJLmluaXQgPSBmYWxzZSwKLQkJCQkucHJldl9hbG51bSA9IGZhbHNlLAotCQkJfTsK LQotCQkJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KTsKLQotCQkJLyog Zmlyc3QgdHJ5IGJ1ZmZlciBvZiBlcXVhbCBzaXplIHBsdXMgdGVybWluYXRpbmcgTlVMICovCi0J CQlkc3RzaXplID0gc3JjbGVuICsgMTsKLQkJCWRzdCA9IHBhbGxvYyhkc3RzaXplKTsKLQotCQkJ bmVlZGVkID0gdW5pY29kZV9zdHJ0aXRsZShkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLAotCQkJ CQkJCQkJICBpbml0Y2FwX3dibmV4dCwgJndic3RhdGUpOwotCQkJaWYgKG5lZWRlZCArIDEgPiBk c3RzaXplKQotCQkJewotCQkJCS8qIHJlc2V0IGl0ZXJhdG9yICovCi0JCQkJd2JzdGF0ZS5vZmZz ZXQgPSAwOwotCQkJCXdic3RhdGUuaW5pdCA9IGZhbHNlOwotCi0JCQkJLyogZ3JvdyBidWZmZXIg aWYgbmVlZGVkIGFuZCByZXRyeSAqLwotCQkJCWRzdHNpemUgPSBuZWVkZWQgKyAxOwotCQkJCWRz dCA9IHJlcGFsbG9jKGRzdCwgZHN0c2l6ZSk7Ci0JCQkJbmVlZGVkID0gdW5pY29kZV9zdHJ0aXRs ZShkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLAotCQkJCQkJCQkJCSAgaW5pdGNhcF93Ym5leHQs ICZ3YnN0YXRlKTsKLQkJCQlBc3NlcnQobmVlZGVkICsgMSA9PSBkc3RzaXplKTsKLQkJCX0KLQot CQkJcmVzdWx0ID0gZHN0OwotCQl9Ci0JCWVsc2UKLQkJewotCQkJQXNzZXJ0KG15bG9jYWxlLT5w cm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7Ci0KLQkJCWlmIChwZ19kYXRhYmFzZV9lbmNv ZGluZ19tYXhfbGVuZ3RoKCkgPiAxKQotCQkJewotCQkJCXdjaGFyX3QgICAgKndvcmtzcGFjZTsK LQkJCQlzaXplX3QJCWN1cnJfY2hhcjsKLQkJCQlzaXplX3QJCXJlc3VsdF9zaXplOwotCi0JCQkJ LyogT3ZlcmZsb3cgcGFyYW5vaWEgKi8KLQkJCQlpZiAoKG5ieXRlcyArIDEpID4gKElOVF9NQVgg LyBzaXplb2Yod2NoYXJfdCkpKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2Rl KEVSUkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIp KSk7Ci0KLQkJCQkvKiBPdXRwdXQgd29ya3NwYWNlIGNhbm5vdCBoYXZlIG1vcmUgY29kZXMgdGhh biBpbnB1dCBieXRlcyAqLwotCQkJCXdvcmtzcGFjZSA9ICh3Y2hhcl90ICopIHBhbGxvYygobmJ5 dGVzICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwotCi0JCQkJY2hhcjJ3Y2hhcih3b3Jrc3BhY2Us IG5ieXRlcyArIDEsIGJ1ZmYsIG5ieXRlcywgbXlsb2NhbGUpOwotCi0JCQkJZm9yIChjdXJyX2No YXIgPSAwOyB3b3Jrc3BhY2VbY3Vycl9jaGFyXSAhPSAwOyBjdXJyX2NoYXIrKykKLQkJCQl7Ci0J CQkJCWlmICh3YXNhbG51bSkKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXJf bCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubHQpOwotCQkJCQllbHNlCi0J CQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hh cl0sIG15bG9jYWxlLT5pbmZvLmx0KTsKLQkJCQkJd2FzYWxudW0gPSBpc3dhbG51bV9sKHdvcmtz cGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5sdCk7Ci0JCQkJfQotCi0JCQkJLyoKLQkJ CQkgKiBNYWtlIHJlc3VsdCBsYXJnZSBlbm91Z2g7IGNhc2UgY2hhbmdlIG1pZ2h0IGNoYW5nZSBu dW1iZXIKLQkJCQkgKiBvZiBieXRlcwotCQkJCSAqLwotCQkJCXJlc3VsdF9zaXplID0gY3Vycl9j aGFyICogcGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpICsgMTsKLQkJCQlyZXN1bHQg PSBwYWxsb2MocmVzdWx0X3NpemUpOwotCi0JCQkJd2NoYXIyY2hhcihyZXN1bHQsIHdvcmtzcGFj ZSwgcmVzdWx0X3NpemUsIG15bG9jYWxlKTsKLQkJCQlwZnJlZSh3b3Jrc3BhY2UpOwotCQkJfQot CQkJZWxzZQotCQkJewotCQkJCWNoYXIJICAgKnA7CiAKLQkJCQlyZXN1bHQgPSBwbnN0cmR1cChi dWZmLCBuYnl0ZXMpOwotCi0JCQkJLyoKLQkJCQkgKiBOb3RlOiB3ZSBhc3N1bWUgdGhhdCB0b3Vw cGVyX2woKS90b2xvd2VyX2woKSB3aWxsIG5vdCBiZSBzbwotCQkJCSAqIGJyb2tlbiBhcyB0byBu ZWVkIGd1YXJkIHRlc3RzLiAgV2hlbiB1c2luZyB0aGUgZGVmYXVsdAotCQkJCSAqIGNvbGxhdGlv biwgd2UgYXBwbHkgdGhlIHRyYWRpdGlvbmFsIFBvc3RncmVzIGJlaGF2aW9yIHRoYXQKLQkJCQkg KiBmb3JjZXMgQVNDSUktc3R5bGUgdHJlYXRtZW50IG9mIEkvaSwgYnV0IGluIG5vbi1kZWZhdWx0 Ci0JCQkJICogY29sbGF0aW9ucyB5b3UgZ2V0IGV4YWN0bHkgd2hhdCB0aGUgY29sbGF0aW9uIHNh eXMuCi0JCQkJICovCi0JCQkJZm9yIChwID0gcmVzdWx0OyAqcDsgcCsrKQotCQkJCXsKLQkJCQkJ aWYgKHdhc2FsbnVtKQotCQkJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBt eWxvY2FsZS0+aW5mby5sdCk7Ci0JCQkJCWVsc2UKLQkJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNp Z25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8ubHQpOwotCQkJCQl3YXNhbG51bSA9IGlzYWxu dW1fbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZvLmx0KTsKLQkJCQl9Ci0JCQl9 Ci0JCX0KKwkJQXNzZXJ0KGRzdFtuZWVkZWRdID09ICdcMCcpOworCQlyZXN1bHQgPSBkc3Q7CiAJ fQogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9s aWtlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZS5jCmluZGV4IDAxNTI3MjNiMmEuLjVi Njc5YmNhZDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYwpAQCAtOTYsNyArOTYsNyBAQCBTQl9sb3dlcl9j aGFyKHVuc2lnbmVkIGNoYXIgYywgcGdfbG9jYWxlX3QgbG9jYWxlKQogCWlmIChsb2NhbGUtPmN0 eXBlX2lzX2MpCiAJCXJldHVybiBwZ19hc2NpaV90b2xvd2VyKGMpOwogCWVsc2UKLQkJcmV0dXJu IHRvbG93ZXJfbChjLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gY2hhcl90b2xvd2VyKGMs IGxvY2FsZSk7CiB9CiAKIApAQCAtMjAxLDcgKzIwMSwxNyBAQCBHZW5lcmljX1RleHRfSUNfbGlr ZSh0ZXh0ICpzdHIsIHRleHQgKnBhdCwgT2lkIGNvbGxhdGlvbikKIAkgKiB3YXkuCiAJICovCiAK LQlpZiAocGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpID4gMSB8fCAobG9jYWxlLT5w cm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKSkKKwlpZiAobG9jYWxlLT5jdHlwZV9pc19jIHx8 CisJCShjaGFyX3RvbG93ZXJfZW5hYmxlZChsb2NhbGUpICYmCisJCSBwZ19kYXRhYmFzZV9lbmNv ZGluZ19tYXhfbGVuZ3RoKCkgPT0gMSkpCisJeworCQlwID0gVkFSREFUQV9BTlkocGF0KTsKKwkJ cGxlbiA9IFZBUlNJWkVfQU5ZX0VYSERSKHBhdCk7CisJCXMgPSBWQVJEQVRBX0FOWShzdHIpOwor CQlzbGVuID0gVkFSU0laRV9BTllfRVhIRFIoc3RyKTsKKwkJcmV0dXJuIFNCX0lNYXRjaFRleHQo cywgc2xlbiwgcCwgcGxlbiwgbG9jYWxlKTsKKwl9CisJZWxzZQogCXsKIAkJcGF0ID0gRGF0dW1H ZXRUZXh0UFAoRGlyZWN0RnVuY3Rpb25DYWxsMUNvbGwobG93ZXIsIGNvbGxhdGlvbiwKIAkJCQkJ CQkJCQkJCQkgUG9pbnRlckdldERhdHVtKHBhdCkpKTsKQEAgLTIxNiwxNCArMjI2LDYgQEAgR2Vu ZXJpY19UZXh0X0lDX2xpa2UodGV4dCAqc3RyLCB0ZXh0ICpwYXQsIE9pZCBjb2xsYXRpb24pCiAJ CWVsc2UKIAkJCXJldHVybiBNQl9NYXRjaFRleHQocywgc2xlbiwgcCwgcGxlbiwgMCk7CiAJfQot CWVsc2UKLQl7Ci0JCXAgPSBWQVJEQVRBX0FOWShwYXQpOwotCQlwbGVuID0gVkFSU0laRV9BTllf RVhIRFIocGF0KTsKLQkJcyA9IFZBUkRBVEFfQU5ZKHN0cik7Ci0JCXNsZW4gPSBWQVJTSVpFX0FO WV9FWEhEUihzdHIpOwotCQlyZXR1cm4gU0JfSU1hdGNoVGV4dChzLCBzbGVuLCBwLCBwbGVuLCBs b2NhbGUpOwotCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9s aWtlX3N1cHBvcnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYwppbmRl eCA4YjE1NTA5YTNiLi5iZjcxOGYxYTNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvbGlrZV9zdXBwb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Vfc3VwcG9y dC5jCkBAIC0xNDk4LDEzICsxNDk4LDggQEAgcGF0dGVybl9jaGFyX2lzYWxwaGEoY2hhciBjLCBi b29sIGlzX211bHRpYnl0ZSwKIHsKIAlpZiAobG9jYWxlLT5jdHlwZV9pc19jKQogCQlyZXR1cm4g KGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpOwotCWVsc2Ug aWYgKGlzX211bHRpYnl0ZSAmJiBJU19ISUdIQklUX1NFVChjKSkKLQkJcmV0dXJuIHRydWU7Ci0J ZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciAhPSBDT0xMUFJPVklERVJfTElCQykKLQkJcmV0dXJu IElTX0hJR0hCSVRfU0VUKGMpIHx8Ci0JCQkoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49 ICdhJyAmJiBjIDw9ICd6Jyk7CiAJZWxzZQotCQlyZXR1cm4gaXNhbHBoYV9sKCh1bnNpZ25lZCBj aGFyKSBjLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gY2hhcl9pc19jYXNlZChjLCBsb2Nh bGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCAwMGVjYTY4NzE3Li4y ZWJlNGMwMGJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC0xMjI3LDYgKzEyMjcs OSBAQCBjcmVhdGVfcGdfbG9jYWxlKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkK IAlBc3NlcnQoKHJlc3VsdC0+Y29sbGF0ZV9pc19jICYmIHJlc3VsdC0+Y29sbGF0ZSA9PSBOVUxM KSB8fAogCQkgICAoIXJlc3VsdC0+Y29sbGF0ZV9pc19jICYmIHJlc3VsdC0+Y29sbGF0ZSAhPSBO VUxMKSk7CiAKKwlBc3NlcnQoKHJlc3VsdC0+Y3R5cGVfaXNfYyAmJiByZXN1bHQtPmN0eXBlID09 IE5VTEwpIHx8CisJCSAgICghcmVzdWx0LT5jdHlwZV9pc19jICYmIHJlc3VsdC0+Y3R5cGUgIT0g TlVMTCkpOworCiAJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdf Y29sbGF0aW9uX2NvbGx2ZXJzaW9uLAogCQkJCQkJCSZpc251bGwpOwogCWlmICghaXNudWxsKQpA QCAtMTQ3MCw2ICsxNDczLDI3IEBAIGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBj b2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKQogCXJldHVybiBjb2xsdmVyc2lv bjsKIH0KIAorc2l6ZV90CitwZ19zdHJsb3dlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBj b25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJcGdfbG9jYWxlX3QgbG9jYWxlKQor eworCXJldHVybiBsb2NhbGUtPmN0eXBlLT5zdHJsb3dlcihkc3QsIGRzdHNpemUsIHNyYywgc3Jj bGVuLCBsb2NhbGUpOworfQorCitzaXplX3QKK3BnX3N0cnRpdGxlKGNoYXIgKmRzdCwgc2l6ZV90 IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJCQlwZ19sb2NhbGVf dCBsb2NhbGUpCit7CisJcmV0dXJuIGxvY2FsZS0+Y3R5cGUtPnN0cnRpdGxlKGRzdCwgZHN0c2l6 ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7Cit9CisKK3NpemVfdAorcGdfc3RydXBwZXIoY2hhciAq ZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJ CXBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gbG9jYWxlLT5jdHlwZS0+c3RydXBwZXIo ZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKK30KKwogLyoKICAqIHBnX3N0cmNv bGwKICAqCkBAIC0xNjA0LDYgKzE2MjgsNTMgQEAgcGdfc3Rybnhmcm1fcHJlZml4KGNoYXIgKmRl c3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCXJldHVybiBsb2NhbGUtPmNv bGxhdGUtPnN0cm54ZnJtX3ByZWZpeChkZXN0LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2Fs ZSk7CiB9CiAKKy8qCisgKiBjaGFyX3Byb3BlcnRpZXMoKQorICoKKyAqIE91dCBvZiB0aGUgcHJv cGVydGllcyBzcGVjaWZpZWQgaW4gdGhlIGdpdmVuIG1hc2ssIHJldHVybiBhIG5ldyBtYXNrIG9m IHRoZQorICogcHJvcGVydGllcyB0cnVlIGZvciB0aGUgZ2l2ZW4gY2hhcmFjdGVyLgorICovCitp bnQKK2NoYXJfcHJvcGVydGllcyhwZ193Y2hhciB3YywgaW50IG1hc2ssIHBnX2xvY2FsZV90IGxv Y2FsZSkKK3sKKwlyZXR1cm4gbG9jYWxlLT5jdHlwZS0+Y2hhcl9wcm9wZXJ0aWVzKHdjLCBtYXNr LCBsb2NhbGUpOworfQorCisvKgorICogY2hhcl9pc19jYXNlZCgpCisgKgorICogRnV6enkgdGVz dCBvZiB3aGV0aGVyIHRoZSBnaXZlbiBjaGFyIGlzIGNhc2UtdmFyeWluZyBvciBub3QuIFRoZSBh cmd1bWVudAorICogaXMgYSBzaW5nbGUgYnl0ZSwgc28gaW4gYSBtdWx0aWJ5dGUgZW5jb2Rpbmcs IGp1c3QgYXNzdW1lIGFueSBub24tQVNDSUkKKyAqIGNoYXIgaXMgY2FzZS12YXJ5aW5nLgorICov Citib29sCitjaGFyX2lzX2Nhc2VkKGNoYXIgY2gsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwly ZXR1cm4gbG9jYWxlLT5jdHlwZS0+Y2hhcl9pc19jYXNlZChjaCwgbG9jYWxlKTsKK30KKworLyoK KyAqIGNoYXJfdG9sb3dlcl9lbmFibGVkKCkKKyAqCisgKiBEb2VzIHRoZSBwcm92aWRlciBzdXBw b3J0IGNoYXJfdG9sb3dlcigpPworICovCitib29sCitjaGFyX3RvbG93ZXJfZW5hYmxlZChwZ19s b2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIChsb2NhbGUtPmN0eXBlLT5jaGFyX3RvbG93ZXIg IT0gTlVMTCk7Cit9CisKKy8qCisgKiBjaGFyX3RvbG93ZXIoKQorICoKKyAqIENvbnZlcnQgY2hh ciAoc2luZ2xlLWJ5dGUgZW5jb2RpbmcpIHRvIGxvd2VyY2FzZS4KKyAqLworY2hhcgorY2hhcl90 b2xvd2VyKHVuc2lnbmVkIGNoYXIgY2gsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4g bG9jYWxlLT5jdHlwZS0+Y2hhcl90b2xvd2VyKGNoLCBsb2NhbGUpOworfQorCiAvKgogICogUmV0 dXJuIHJlcXVpcmVkIGVuY29kaW5nIElEIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLCBvciAtMSBpZiBh bnkgZW5jb2RpbmcgaXMKICAqIHZhbGlkIGZvciB0aGUgbG9jYWxlLgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYwppbmRleCA0MjQ2OTcxYTRkLi41ZjkwMzU1MzU1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYwpAQCAtMTMsNiArMTMs OCBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2FzZS5oIgorI2lu Y2x1ZGUgImNvbW1vbi91bmljb2RlX2NhdGVnb3J5LmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgpA QCAtMjMsNiArMjUsMTMxIEBACiBleHRlcm4gcGdfbG9jYWxlX3QgY3JlYXRlX3BnX2xvY2FsZV9i dWlsdGluKE9pZCBjb2xsaWQsCiAJCQkJCQkJCQkJCU1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAK K3N0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZQoreworCWNvbnN0IGNoYXIgKnN0cjsKKwlzaXplX3QJ CWxlbjsKKwlzaXplX3QJCW9mZnNldDsKKwlib29sCQlpbml0OworCWJvb2wJCXByZXZfYWxudW07 Cit9OworCisvKgorICogU2ltcGxlIHdvcmQgYm91bmRhcnkgaXRlcmF0b3IgdGhhdCBkcmF3cyBi b3VuZGFyaWVzIGVhY2ggdGltZSB0aGUgcmVzdWx0IG9mCisgKiBwZ191X2lzYWxudW0oKSBjaGFu Z2VzLgorICovCitzdGF0aWMgc2l6ZV90Citpbml0Y2FwX3dibmV4dCh2b2lkICpzdGF0ZSkKK3sK KwlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgKndic3RhdGUgPSAoc3RydWN0IFdvcmRCb3VuZGFy eVN0YXRlICopIHN0YXRlOworCisJd2hpbGUgKHdic3RhdGUtPm9mZnNldCA8IHdic3RhdGUtPmxl biAmJgorCQkgICB3YnN0YXRlLT5zdHJbd2JzdGF0ZS0+b2Zmc2V0XSAhPSAnXDAnKQorCXsKKwkJ cGdfd2NoYXIJdSA9IHV0ZjhfdG9fdW5pY29kZSgodW5zaWduZWQgY2hhciAqKSB3YnN0YXRlLT5z dHIgKworCQkJCQkJCQkJCXdic3RhdGUtPm9mZnNldCk7CisJCWJvb2wJCWN1cnJfYWxudW0gPSBw Z191X2lzYWxudW0odSwgdHJ1ZSk7CisKKwkJaWYgKCF3YnN0YXRlLT5pbml0IHx8IGN1cnJfYWxu dW0gIT0gd2JzdGF0ZS0+cHJldl9hbG51bSkKKwkJeworCQkJc2l6ZV90CQlwcmV2X29mZnNldCA9 IHdic3RhdGUtPm9mZnNldDsKKworCQkJd2JzdGF0ZS0+aW5pdCA9IHRydWU7CisJCQl3YnN0YXRl LT5vZmZzZXQgKz0gdW5pY29kZV91dGY4bGVuKHUpOworCQkJd2JzdGF0ZS0+cHJldl9hbG51bSA9 IGN1cnJfYWxudW07CisJCQlyZXR1cm4gcHJldl9vZmZzZXQ7CisJCX0KKworCQl3YnN0YXRlLT5v ZmZzZXQgKz0gdW5pY29kZV91dGY4bGVuKHUpOworCX0KKworCXJldHVybiB3YnN0YXRlLT5sZW47 Cit9CisKK3N0YXRpYyBzaXplX3QKK3N0cmxvd2VyX2J1aWx0aW4oY2hhciAqZGVzdCwgc2l6ZV90 IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCSBwZ19sb2Nh bGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIHVuaWNvZGVfc3RybG93ZXIoZGVzdCwgZGVzdHNpemUs IHNyYywgc3JjbGVuKTsKK30KKworc3RhdGljIHNpemVfdAorc3RydGl0bGVfYnVpbHRpbihjaGFy ICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4s CisJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUg d2JzdGF0ZSA9IHsKKwkJLnN0ciA9IHNyYywKKwkJLmxlbiA9IHNyY2xlbiwKKwkJLm9mZnNldCA9 IDAsCisJCS5pbml0ID0gZmFsc2UsCisJCS5wcmV2X2FsbnVtID0gZmFsc2UsCisJfTsKKworCXJl dHVybiB1bmljb2RlX3N0cnRpdGxlKGRlc3QsIGRlc3RzaXplLCBzcmMsIHNyY2xlbiwKKwkJCQkJ CQlpbml0Y2FwX3dibmV4dCwgJndic3RhdGUpOworfQorCitzdGF0aWMgc2l6ZV90CitzdHJ1cHBl cl9idWlsdGluKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBz c2l6ZV90IHNyY2xlbiwKKwkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiB1bmlj b2RlX3N0cnVwcGVyKGRlc3QsIGRlc3RzaXplLCBzcmMsIHNyY2xlbik7Cit9CisKK3N0YXRpYyBp bnQKK2NoYXJfcHJvcGVydGllc19idWlsdGluKHBnX3djaGFyIHdjLCBpbnQgbWFzaywgcGdfbG9j YWxlX3QgbG9jYWxlKQoreworCWludAkJCXJlc3VsdCA9IDA7CisKKwlpZiAoKG1hc2sgJiBQR19J U0RJR0lUKSAmJiBwZ191X2lzZGlnaXQod2MsIHRydWUpKQorCQlyZXN1bHQgfD0gUEdfSVNESUdJ VDsKKwlpZiAoKG1hc2sgJiBQR19JU0FMUEhBKSAmJiBwZ191X2lzYWxwaGEod2MpKQorCQlyZXN1 bHQgfD0gUEdfSVNBTFBIQTsKKwlpZiAoKG1hc2sgJiBQR19JU1VQUEVSKSAmJiBwZ191X2lzdXBw ZXIod2MpKQorCQlyZXN1bHQgfD0gUEdfSVNVUFBFUjsKKwlpZiAoKG1hc2sgJiBQR19JU0xPV0VS KSAmJiBwZ191X2lzbG93ZXIod2MpKQorCQlyZXN1bHQgfD0gUEdfSVNMT1dFUjsKKwlpZiAoKG1h c2sgJiBQR19JU0dSQVBIKSAmJiBwZ191X2lzZ3JhcGgod2MpKQorCQlyZXN1bHQgfD0gUEdfSVNH UkFQSDsKKwlpZiAoKG1hc2sgJiBQR19JU1BSSU5UKSAmJiBwZ191X2lzcHJpbnQod2MpKQorCQly ZXN1bHQgfD0gUEdfSVNQUklOVDsKKwlpZiAoKG1hc2sgJiBQR19JU1BVTkNUKSAmJiBwZ191X2lz cHVuY3Qod2MsIHRydWUpKQorCQlyZXN1bHQgfD0gUEdfSVNQVU5DVDsKKwlpZiAoKG1hc2sgJiBQ R19JU1NQQUNFKSAmJiBwZ191X2lzc3BhY2Uod2MpKQorCQlyZXN1bHQgfD0gUEdfSVNTUEFDRTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sCitjaGFyX2lzX2Nhc2VkX2J1aWx0 aW4oY2hhciBjaCwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiBJU19ISUdIQklUX1NF VChjaCkgfHwKKwkJKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8IChjaCA+PSAnYScgJiYgY2gg PD0gJ3onKTsKK30KKworc3RhdGljIHBnX3djaGFyCit3Y190b3VwcGVyX2J1aWx0aW4ocGdfd2No YXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gdW5pY29kZV91cHBlcmNhc2Vf c2ltcGxlKHdjKTsKK30KKworc3RhdGljIHBnX3djaGFyCit3Y190b2xvd2VyX2J1aWx0aW4ocGdf d2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gdW5pY29kZV9sb3dlcmNh c2Vfc2ltcGxlKHdjKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHlwZV9tZXRob2RzIGN0 eXBlX21ldGhvZHNfYnVpbHRpbiA9IHsKKwkuc3RybG93ZXIgPSBzdHJsb3dlcl9idWlsdGluLAor CS5zdHJ0aXRsZSA9IHN0cnRpdGxlX2J1aWx0aW4sCisJLnN0cnVwcGVyID0gc3RydXBwZXJfYnVp bHRpbiwKKwkuY2hhcl9wcm9wZXJ0aWVzID0gY2hhcl9wcm9wZXJ0aWVzX2J1aWx0aW4sCisJLmNo YXJfaXNfY2FzZWQgPSBjaGFyX2lzX2Nhc2VkX2J1aWx0aW4sCisJLndjX3RvbG93ZXIgPSB3Y190 b2xvd2VyX2J1aWx0aW4sCisJLndjX3RvdXBwZXIgPSB3Y190b3VwcGVyX2J1aWx0aW4sCit9Owor CiBwZ19sb2NhbGVfdAogY3JlYXRlX3BnX2xvY2FsZV9idWlsdGluKE9pZCBjb2xsaWQsIE1lbW9y eUNvbnRleHQgY29udGV4dCkKIHsKQEAgLTY1LDYgKzE5Miw4IEBAIGNyZWF0ZV9wZ19sb2NhbGVf YnVpbHRpbihPaWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAJcmVzdWx0LT5kZXRl cm1pbmlzdGljID0gdHJ1ZTsKIAlyZXN1bHQtPmNvbGxhdGVfaXNfYyA9IHRydWU7CiAJcmVzdWx0 LT5jdHlwZV9pc19jID0gKHN0cmNtcChsb2NzdHIsICJDIikgPT0gMCk7CisJaWYgKCFyZXN1bHQt PmN0eXBlX2lzX2MpCisJCXJlc3VsdC0+Y3R5cGUgPSAmY3R5cGVfbWV0aG9kc19idWlsdGluOwog CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z19sb2NhbGVfaWN1LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jCmlu ZGV4IDExZWM5ZDRlNGIuLjUyNTExNjNiMWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGVfaWN1LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2Fs ZV9pY3UuYwpAQCAtNTEsNiArNTEsMTEgQEAgc3RhdGljIHNpemVfdCBzdHJueGZybV9wcmVmaXhf aWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKIAkJCQkJCQkJICBjb25zdCBjaGFyICpz cmMsIHNzaXplX3Qgc3JjbGVuLAogCQkJCQkJCQkgIHBnX2xvY2FsZV90IGxvY2FsZSk7CiAKK3R5 cGVkZWYgaW50MzJfdCAoKklDVV9Db252ZXJ0X0Z1bmMpIChVQ2hhciAqZGVzdCwgaW50MzJfdCBk ZXN0Q2FwYWNpdHksCisJCQkJCQkJCQkgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5n dGgsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJCQkJIFVFcnJvckNvZGUg KnBFcnJvckNvZGUpOworCiAvKgogICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBi ZXR3ZWVuIElDVSdzIFVDaGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncwogICogaW4gZGF0YWJhc2Ug ZW5jb2RpbmcuICBTaW5jZSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgZG9lc24ndCBjaGFuZ2UsIHdl IG9ubHkKQEAgLTYwLDYgKzY1LDE2IEBAIHN0YXRpYyBVQ29udmVydGVyICppY3VfY29udmVydGVy ID0gTlVMTDsKIAogc3RhdGljIFVDb2xsYXRvciAqbWFrZV9pY3VfY29sbGF0b3IoY29uc3QgY2hh ciAqaWN1bG9jc3RyLAogCQkJCQkJCQkJY29uc3QgY2hhciAqaWN1cnVsZXMpOworCitzdGF0aWMg c2l6ZV90IHN0cmxvd2VyX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkg ICBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCQkJICAgcGdfbG9jYWxlX3Qg bG9jYWxlKTsKK3N0YXRpYyBzaXplX3Qgc3RydGl0bGVfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJCQkJ CQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpOworc3RhdGljIHNpemVfdCBzdHJ1cHBlcl9pY3UoY2hh ciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAorCQkJCQkJICAgY29uc3QgY2hhciAqc3JjLCBzc2l6 ZV90IHNyY2xlbiwKKwkJCQkJCSAgIHBnX2xvY2FsZV90IGxvY2FsZSk7CiBzdGF0aWMgaW50CXN0 cm5jb2xsX2ljdShjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCiAJCQkJCQkgY29uc3Qg Y2hhciAqYXJnMiwgc3NpemVfdCBsZW4yLAogCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CkBA IC04MCw4ICs5NSw2MyBAQCBzdGF0aWMgc2l6ZV90IHVjaGFyX2xlbmd0aChVQ29udmVydGVyICpj b252ZXJ0ZXIsCiBzdGF0aWMgaW50MzJfdCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZl cnRlciwKIAkJCQkJCQkgVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdGxlbiwKIAkJCQkJCQkgY29u c3QgY2hhciAqc3JjLCBpbnQzMl90IHNyY2xlbik7CitzdGF0aWMgaW50MzJfdCBpY3VfdG9fdWNo YXIoVUNoYXIgKipidWZmX3VjaGFyLCBjb25zdCBjaGFyICpidWZmLAorCQkJCQkJCXNpemVfdCBu Ynl0ZXMpOworc3RhdGljIHNpemVfdCBpY3VfZnJvbV91Y2hhcihjaGFyICpkZXN0LCBzaXplX3Qg ZGVzdHNpemUsCisJCQkJCQkJIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91 Y2hhcik7CiBzdGF0aWMgdm9pZCBpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKFVDb2xsYXRv ciAqY29sbGF0b3IsIGNvbnN0IGNoYXIgKmxvYywKIAkJCQkJCQkJCQkgVUVycm9yQ29kZSAqc3Rh dHVzKTsKK3N0YXRpYyBpbnQzMl90IGljdV9jb252ZXJ0X2Nhc2UoSUNVX0NvbnZlcnRfRnVuYyBm dW5jLCBwZ19sb2NhbGVfdCBteWxvY2FsZSwKKwkJCQkJCQkJVUNoYXIgKipidWZmX2Rlc3QsIFVD aGFyICpidWZmX3NvdXJjZSwKKwkJCQkJCQkJaW50MzJfdCBsZW5fc291cmNlKTsKK3N0YXRpYyBp bnQzMl90IHVfc3RyVG9UaXRsZV9kZWZhdWx0X0JJKFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RD YXBhY2l0eSwKKwkJCQkJCQkJCSAgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3Ro LAorCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJCQkJICAgVUVycm9yQ29k ZSAqcEVycm9yQ29kZSk7CisKK3N0YXRpYyBpbnQKK2NoYXJfcHJvcGVydGllc19pY3UocGdfd2No YXIgd2MsIGludCBtYXNrLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaW50CQkJcmVzdWx0ID0g MDsKKworCWlmICgobWFzayAmIFBHX0lTRElHSVQpICYmIHVfaXNkaWdpdCh3YykpCisJCXJlc3Vs dCB8PSBQR19JU0RJR0lUOworCWlmICgobWFzayAmIFBHX0lTQUxQSEEpICYmIHVfaXNhbHBoYSh3 YykpCisJCXJlc3VsdCB8PSBQR19JU0FMUEhBOworCWlmICgobWFzayAmIFBHX0lTVVBQRVIpICYm IHVfaXN1cHBlcih3YykpCisJCXJlc3VsdCB8PSBQR19JU1VQUEVSOworCWlmICgobWFzayAmIFBH X0lTTE9XRVIpICYmIHVfaXNsb3dlcih3YykpCisJCXJlc3VsdCB8PSBQR19JU0xPV0VSOworCWlm ICgobWFzayAmIFBHX0lTR1JBUEgpICYmIHVfaXNncmFwaCh3YykpCisJCXJlc3VsdCB8PSBQR19J U0dSQVBIOworCWlmICgobWFzayAmIFBHX0lTUFJJTlQpICYmIHVfaXNwcmludCh3YykpCisJCXJl c3VsdCB8PSBQR19JU1BSSU5UOworCWlmICgobWFzayAmIFBHX0lTUFVOQ1QpICYmIHVfaXNwdW5j dCh3YykpCisJCXJlc3VsdCB8PSBQR19JU1BVTkNUOworCWlmICgobWFzayAmIFBHX0lTU1BBQ0Up ICYmIHVfaXNzcGFjZSh3YykpCisJCXJlc3VsdCB8PSBQR19JU1NQQUNFOworCisJcmV0dXJuIHJl c3VsdDsKK30KKworc3RhdGljIGJvb2wKK2NoYXJfaXNfY2FzZWRfaWN1KGNoYXIgY2gsIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gSVNfSElHSEJJVF9TRVQoY2gpIHx8CisJCShjaCA+ PSAnQScgJiYgY2ggPD0gJ1onKSB8fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6Jyk7Cit9CisKK3N0 YXRpYyBwZ193Y2hhcgordG91cHBlcl9pY3UocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2Fs ZSkKK3sKKwlyZXR1cm4gdV90b3VwcGVyKHdjKTsKK30KKworc3RhdGljIHBnX3djaGFyCit0b2xv d2VyX2ljdShwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiB1X3Rv bG93ZXIod2MpOworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbGxhdGVfbWV0aG9kcyBjb2xs YXRlX21ldGhvZHNfaWN1ID0gewogCS5zdHJuY29sbCA9IHN0cm5jb2xsX2ljdSwKQEAgLTEwMSw2 ICsxNzEsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xsYXRlX21ldGhvZHMgY29sbGF0ZV9t ZXRob2RzX2ljdV91dGY4ID0gewogCS5zdHJ4ZnJtX2lzX3NhZmUgPSB0cnVlLAogfTsKIAorc3Rh dGljIGNvbnN0IHN0cnVjdCBjdHlwZV9tZXRob2RzIGN0eXBlX21ldGhvZHNfaWN1ID0geworCS5z dHJsb3dlciA9IHN0cmxvd2VyX2ljdSwKKwkuc3RydGl0bGUgPSBzdHJ0aXRsZV9pY3UsCisJLnN0 cnVwcGVyID0gc3RydXBwZXJfaWN1LAorCS5jaGFyX3Byb3BlcnRpZXMgPSBjaGFyX3Byb3BlcnRp ZXNfaWN1LAorCS5jaGFyX2lzX2Nhc2VkID0gY2hhcl9pc19jYXNlZF9pY3UsCisJLndjX3RvdXBw ZXIgPSB0b3VwcGVyX2ljdSwKKwkud2NfdG9sb3dlciA9IHRvbG93ZXJfaWN1LAorfTsKICNlbmRp ZgogCiBwZ19sb2NhbGVfdApAQCAtMTcxLDYgKzI1MCw3IEBAIGNyZWF0ZV9wZ19sb2NhbGVfaWN1 KE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAkJcmVzdWx0LT5jb2xsYXRlID0g JmNvbGxhdGVfbWV0aG9kc19pY3VfdXRmODsKIAllbHNlCiAJCXJlc3VsdC0+Y29sbGF0ZSA9ICZj b2xsYXRlX21ldGhvZHNfaWN1OworCXJlc3VsdC0+Y3R5cGUgPSAmY3R5cGVfbWV0aG9kc19pY3U7 CiAKIAlyZXR1cm4gcmVzdWx0OwogI2Vsc2UKQEAgLTM0NCw2ICs0MjQsNjYgQEAgbWFrZV9pY3Vf Y29sbGF0b3IoY29uc3QgY2hhciAqaWN1bG9jc3RyLCBjb25zdCBjaGFyICppY3VydWxlcykKIAl9 CiB9CiAKK3N0YXRpYyBzaXplX3QKK3N0cmxvd2VyX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVz dHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJCQkgcGdfbG9jYWxlX3Qg bG9jYWxlKQoreworCWludDMyX3QJCWxlbl91Y2hhcjsKKwlpbnQzMl90CQlsZW5fY29udjsKKwlV Q2hhcgkgICAqYnVmZl91Y2hhcjsKKwlVQ2hhcgkgICAqYnVmZl9jb252OworCXNpemVfdAkJcmVz dWx0X2xlbjsKKworCWxlbl91Y2hhciA9IGljdV90b191Y2hhcigmYnVmZl91Y2hhciwgc3JjLCBz cmNsZW4pOworCWxlbl9jb252ID0gaWN1X2NvbnZlcnRfY2FzZSh1X3N0clRvTG93ZXIsIGxvY2Fs ZSwKKwkJCQkJCQkJJmJ1ZmZfY29udiwgYnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKKwlyZXN1bHRf bGVuID0gaWN1X2Zyb21fdWNoYXIoZGVzdCwgZGVzdHNpemUsIGJ1ZmZfY29udiwgbGVuX2NvbnYp OworCXBmcmVlKGJ1ZmZfdWNoYXIpOworCXBmcmVlKGJ1ZmZfY29udik7CisKKwlyZXR1cm4gcmVz dWx0X2xlbjsKK30KKworc3RhdGljIHNpemVfdAorc3RydGl0bGVfaWN1KGNoYXIgKmRlc3QsIHNp emVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCSBwZ19s b2NhbGVfdCBsb2NhbGUpCit7CisJaW50MzJfdAkJbGVuX3VjaGFyOworCWludDMyX3QJCWxlbl9j b252OworCVVDaGFyCSAgICpidWZmX3VjaGFyOworCVVDaGFyCSAgICpidWZmX2NvbnY7CisJc2l6 ZV90CQlyZXN1bHRfbGVuOworCisJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFy LCBzcmMsIHNyY2xlbik7CisJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9UaXRs ZV9kZWZhdWx0X0JJLCBsb2NhbGUsCisJCQkJCQkJCSZidWZmX2NvbnYsIGJ1ZmZfdWNoYXIsIGxl bl91Y2hhcik7CisJcmVzdWx0X2xlbiA9IGljdV9mcm9tX3VjaGFyKGRlc3QsIGRlc3RzaXplLCBi dWZmX2NvbnYsIGxlbl9jb252KTsKKwlwZnJlZShidWZmX3VjaGFyKTsKKwlwZnJlZShidWZmX2Nv bnYpOworCisJcmV0dXJuIHJlc3VsdF9sZW47Cit9CisKK3N0YXRpYyBzaXplX3QKK3N0cnVwcGVy X2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVf dCBzcmNsZW4sCisJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWludDMyX3QJCWxlbl91Y2hh cjsKKwlpbnQzMl90CQlsZW5fY29udjsKKwlVQ2hhcgkgICAqYnVmZl91Y2hhcjsKKwlVQ2hhcgkg ICAqYnVmZl9jb252OworCXNpemVfdAkJcmVzdWx0X2xlbjsKKworCWxlbl91Y2hhciA9IGljdV90 b191Y2hhcigmYnVmZl91Y2hhciwgc3JjLCBzcmNsZW4pOworCWxlbl9jb252ID0gaWN1X2NvbnZl cnRfY2FzZSh1X3N0clRvVXBwZXIsIGxvY2FsZSwKKwkJCQkJCQkJJmJ1ZmZfY29udiwgYnVmZl91 Y2hhciwgbGVuX3VjaGFyKTsKKwlyZXN1bHRfbGVuID0gaWN1X2Zyb21fdWNoYXIoZGVzdCwgZGVz dHNpemUsIGJ1ZmZfY29udiwgbGVuX2NvbnYpOworCXBmcmVlKGJ1ZmZfdWNoYXIpOworCXBmcmVl KGJ1ZmZfY29udik7CisKKwlyZXR1cm4gcmVzdWx0X2xlbjsKK30KKwogLyoKICAqIHN0cm5jb2xs X2ljdV91dGY4CiAgKgpAQCAtNDY3LDcgKzYwNyw3IEBAIHN0cm54ZnJtX3ByZWZpeF9pY3VfdXRm OChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCiAgKiBUaGUgcmVzdWx0IHN0cmluZyBpcyBu dWwtdGVybWluYXRlZCwgdGhvdWdoIG1vc3QgY2FsbGVycyByZWx5IG9uIHRoZQogICogcmVzdWx0 IGxlbmd0aCBpbnN0ZWFkLgogICovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogaWN1X3RvX3Vj aGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcykK IHsKIAlpbnQzMl90CQlsZW5fdWNoYXI7CkBAIC00OTQsOCArNjM0LDggQEAgaWN1X3RvX3VjaGFy KFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcykKICAq CiAgKiBUaGUgcmVzdWx0IHN0cmluZyBpcyBudWwtdGVybWluYXRlZC4KICAqLwotaW50MzJfdAot aWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3VsdCwgY29uc3QgVUNoYXIgKmJ1ZmZfdWNoYXIsIGlu dDMyX3QgbGVuX3VjaGFyKQorc3RhdGljIHNpemVfdAoraWN1X2Zyb21fdWNoYXIoY2hhciAqZGVz dCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBVQ2hhciAqYnVmZl91Y2hhciwgaW50MzJfdCBsZW5f dWNoYXIpCiB7CiAJVUVycm9yQ29kZQlzdGF0dXM7CiAJaW50MzJfdAkJbGVuX3Jlc3VsdDsKQEAg LTUxMCwxMCArNjUwLDExIEBAIGljdV9mcm9tX3VjaGFyKGNoYXIgKipyZXN1bHQsIGNvbnN0IFVD aGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcikKIAkJCQkoZXJybXNnKCIlcyBmYWls ZWQ6ICVzIiwgInVjbnZfZnJvbVVDaGFycyIsCiAJCQkJCQl1X2Vycm9yTmFtZShzdGF0dXMpKSkp OwogCi0JKnJlc3VsdCA9IHBhbGxvYyhsZW5fcmVzdWx0ICsgMSk7CisJaWYgKGxlbl9yZXN1bHQg KyAxID4gZGVzdHNpemUpCisJCXJldHVybiBsZW5fcmVzdWx0OwogCiAJc3RhdHVzID0gVV9aRVJP X0VSUk9SOwotCWxlbl9yZXN1bHQgPSB1Y252X2Zyb21VQ2hhcnMoaWN1X2NvbnZlcnRlciwgKnJl c3VsdCwgbGVuX3Jlc3VsdCArIDEsCisJbGVuX3Jlc3VsdCA9IHVjbnZfZnJvbVVDaGFycyhpY3Vf Y29udmVydGVyLCBkZXN0LCBsZW5fcmVzdWx0ICsgMSwKIAkJCQkJCQkJIGJ1ZmZfdWNoYXIsIGxl bl91Y2hhciwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpIHx8CiAJCXN0YXR1cyA9 PSBVX1NUUklOR19OT1RfVEVSTUlOQVRFRF9XQVJOSU5HKQpAQCAtNTI0LDYgKzY2NSw0MyBAQCBp Y3VfZnJvbV91Y2hhcihjaGFyICoqcmVzdWx0LCBjb25zdCBVQ2hhciAqYnVmZl91Y2hhciwgaW50 MzJfdCBsZW5fdWNoYXIpCiAJcmV0dXJuIGxlbl9yZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQzMl90 CitpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXls b2NhbGUsCisJCQkJIFVDaGFyICoqYnVmZl9kZXN0LCBVQ2hhciAqYnVmZl9zb3VyY2UsIGludDMy X3QgbGVuX3NvdXJjZSkKK3sKKwlVRXJyb3JDb2RlCXN0YXR1czsKKwlpbnQzMl90CQlsZW5fZGVz dDsKKworCWxlbl9kZXN0ID0gbGVuX3NvdXJjZTsJCS8qIHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVu Z3RoICovCisJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhsZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVz dCkpOworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVz dCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291cmNlLAorCQkJCQlteWxvY2FsZS0+aW5m by5pY3UubG9jYWxlLCAmc3RhdHVzKTsKKwlpZiAoc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9X X0VSUk9SKQorCXsKKwkJLyogdHJ5IGFnYWluIHdpdGggYWRqdXN0ZWQgbGVuZ3RoICovCisJCXBm cmVlKCpidWZmX2Rlc3QpOworCQkqYnVmZl9kZXN0ID0gcGFsbG9jKGxlbl9kZXN0ICogc2l6ZW9m KCoqYnVmZl9kZXN0KSk7CisJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwkJbGVuX2Rlc3QgPSBm dW5jKCpidWZmX2Rlc3QsIGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3NvdXJjZSwKKwkJCQkJ CW15bG9jYWxlLT5pbmZvLmljdS5sb2NhbGUsICZzdGF0dXMpOworCX0KKwlpZiAoVV9GQUlMVVJF KHN0YXR1cykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY2FzZSBjb252ZXJzaW9u IGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCXJldHVybiBsZW5fZGVzdDsK K30KKworc3RhdGljIGludDMyX3QKK3Vfc3RyVG9UaXRsZV9kZWZhdWx0X0JJKFVDaGFyICpkZXN0 LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCWNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qg c3JjTGVuZ3RoLAorCQkJCQkJY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJVUVycm9yQ29kZSAq cEVycm9yQ29kZSkKK3sKKwlyZXR1cm4gdV9zdHJUb1RpdGxlKGRlc3QsIGRlc3RDYXBhY2l0eSwg c3JjLCBzcmNMZW5ndGgsCisJCQkJCQlOVUxMLCBsb2NhbGUsIHBFcnJvckNvZGUpOworfQorCiAv KgogICogc3RybmNvbGxfaWN1CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3BnX2xvY2FsZV9saWJjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2xpYmMu YwppbmRleCBjN2JlNmRkNGY5Li44NjFjNGY2OGU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlX2xpYmMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlX2xpYmMuYwpAQCAtMTEsNiArMTEsOSBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIK IAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCiAjaW5jbHVkZSAi YWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgpAQCAtNDgsNiArNTEsMzQgQEAgc3Rh dGljIGludAlzdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgc3NpemVf dCBsZW4xLAogCQkJCQkJCQkJIHBnX2xvY2FsZV90IGxvY2FsZSk7CiAjZW5kaWYKIAorc3RhdGlj IHNpemVfdCBzdHJsb3dlcl9saWJjX3NiKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKKwkJ CQkJCQkgICBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCQkJCSAgIHBnX2xv Y2FsZV90IGxvY2FsZSk7CitzdGF0aWMgc2l6ZV90IHN0cmxvd2VyX2xpYmNfbWIoY2hhciAqZGVz dCwgc2l6ZV90IGRlc3RzaXplLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBz cmNsZW4sCisJCQkJCQkJICAgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK3N0YXRpYyBzaXplX3Qgc3Ry dGl0bGVfbGliY19zYihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkJICAgY29u c3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCQkJCQkgICBwZ19sb2NhbGVfdCBsb2Nh bGUpOworc3RhdGljIHNpemVfdCBzdHJ0aXRsZV9saWJjX21iKGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJ CQkJCSAgIHBnX2xvY2FsZV90IGxvY2FsZSk7CitzdGF0aWMgc2l6ZV90IHN0cnVwcGVyX2xpYmNf c2IoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnNy Yywgc3NpemVfdCBzcmNsZW4sCisJCQkJCQkJICAgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK3N0YXRp YyBzaXplX3Qgc3RydXBwZXJfbGliY19tYihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJ CQkJCQkJICAgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCQkJCQkgICBwZ19s b2NhbGVfdCBsb2NhbGUpOworCitzdGF0aWMgaW50CWNoYXJfcHJvcGVydGllc19saWJjX3NiKHBn X3djaGFyIHdjLCBpbnQgbWFzaywKKwkJCQkJCQkJCSAgIHBnX2xvY2FsZV90IGxvY2FsZSk7Citz dGF0aWMgaW50CWNoYXJfcHJvcGVydGllc19saWJjX21iKHBnX3djaGFyIHdjLCBpbnQgbWFzaywK KwkJCQkJCQkJCSAgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK3N0YXRpYyBwZ193Y2hhciB0b3VwcGVy X2xpYmNfc2IocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSk7CitzdGF0aWMgcGdfd2No YXIgdG91cHBlcl9saWJjX21iKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpOworc3Rh dGljIHBnX3djaGFyIHRvbG93ZXJfbGliY19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9j YWxlKTsKK3N0YXRpYyBwZ193Y2hhciB0b2xvd2VyX2xpYmNfbWIocGdfd2NoYXIgd2MsIHBnX2xv Y2FsZV90IGxvY2FsZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sbGF0ZV9tZXRob2RzIGNv bGxhdGVfbWV0aG9kc19saWJjID0gewogCS5zdHJuY29sbCA9IHN0cm5jb2xsX2xpYmMsCiAJLnN0 cm54ZnJtID0gc3Rybnhmcm1fbGliYywKQEAgLTY5LDYgKzEwMCwzMjQgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBjb2xsYXRlX21ldGhvZHMgY29sbGF0ZV9tZXRob2RzX2xpYmMgPSB7CiAjZW5kaWYK IH07CiAKKyNpZmRlZiBXSU4zMgorc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xsYXRlX21ldGhvZHMg Y29sbGF0ZV9tZXRob2RzX2xpYmNfd2luMzJfdXRmOCA9IHsKKwkuc3RybmNvbGwgPSBzdHJuY29s bF9saWJjX3dpbjMyX3V0ZjgsCisJLnN0cm54ZnJtID0gc3Rybnhmcm1fbGliYywKKwkuc3Rybnhm cm1fcHJlZml4ID0gTlVMTCwKKyNpZmRlZiBUUlVTVF9TVFJYRlJNCisJLnN0cnhmcm1faXNfc2Fm ZSA9IHRydWUsCisjZWxzZQorCS5zdHJ4ZnJtX2lzX3NhZmUgPSBmYWxzZSwKKyNlbmRpZgorfTsK KyNlbmRpZgorCitzdGF0aWMgYm9vbAorY2hhcl9pc19jYXNlZF9saWJjKGNoYXIgY2gsIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwlib29sCQlpc19tdWx0aWJ5dGUgPSBwZ19kYXRhYmFzZV9lbmNv ZGluZ19tYXhfbGVuZ3RoKCkgPiAxOworCisJaWYgKGlzX211bHRpYnl0ZSAmJiBJU19ISUdIQklU X1NFVChjaCkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGlzYWxwaGFfbCgodW5z aWduZWQgY2hhcikgY2gsIGxvY2FsZS0+aW5mby5sdCk7Cit9CisKK3N0YXRpYyBjaGFyCitjaGFy X3RvbG93ZXJfbGliYyh1bnNpZ25lZCBjaGFyIGNoLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJ QXNzZXJ0KHBnX2RhdGFiYXNlX2VuY29kaW5nX21heF9sZW5ndGgoKSA9PSAxKTsKKwlyZXR1cm4g dG9sb3dlcl9sKGNoLCBsb2NhbGUtPmluZm8ubHQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGN0eXBlX21ldGhvZHMgY3R5cGVfbWV0aG9kc19saWJjX3NiID0geworCS5zdHJsb3dlciA9IHN0 cmxvd2VyX2xpYmNfc2IsCisJLnN0cnRpdGxlID0gc3RydGl0bGVfbGliY19zYiwKKwkuc3RydXBw ZXIgPSBzdHJ1cHBlcl9saWJjX3NiLAorCS5jaGFyX3Byb3BlcnRpZXMgPSBjaGFyX3Byb3BlcnRp ZXNfbGliY19zYiwKKwkuY2hhcl9pc19jYXNlZCA9IGNoYXJfaXNfY2FzZWRfbGliYywKKwkuY2hh cl90b2xvd2VyID0gY2hhcl90b2xvd2VyX2xpYmMsCisJLndjX3RvdXBwZXIgPSB0b3VwcGVyX2xp YmNfc2IsCisJLndjX3RvbG93ZXIgPSB0b2xvd2VyX2xpYmNfc2IsCisJLm1heF9jaHIgPSBVQ0hB Ul9NQVgsCit9OworCisvKgorICogTm9uLVVURjggbXVsdGlieXRlIGVuY29kaW5ncyB1c2UgbXVs dGlieXRlIHNlbWFudGljcyBmb3IgY2FzZSBtYXBwaW5nLCBidXQKKyAqIHNpbmdsZS1ieXRlIHNl bWFudGljcyBmb3IgcGF0dGVybiBtYXRjaGluZy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBj dHlwZV9tZXRob2RzIGN0eXBlX21ldGhvZHNfbGliY19vdGhlcl9tYiA9IHsKKwkuc3RybG93ZXIg PSBzdHJsb3dlcl9saWJjX21iLAorCS5zdHJ0aXRsZSA9IHN0cnRpdGxlX2xpYmNfbWIsCisJLnN0 cnVwcGVyID0gc3RydXBwZXJfbGliY19tYiwKKwkuY2hhcl9wcm9wZXJ0aWVzID0gY2hhcl9wcm9w ZXJ0aWVzX2xpYmNfc2IsCisJLmNoYXJfaXNfY2FzZWQgPSBjaGFyX2lzX2Nhc2VkX2xpYmMsCisJ LmNoYXJfdG9sb3dlciA9IGNoYXJfdG9sb3dlcl9saWJjLAorCS53Y190b3VwcGVyID0gdG91cHBl cl9saWJjX3NiLAorCS53Y190b2xvd2VyID0gdG9sb3dlcl9saWJjX3NiLAorCS5tYXhfY2hyID0g VUNIQVJfTUFYLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHlwZV9tZXRob2RzIGN0eXBl X21ldGhvZHNfbGliY191dGY4ID0geworCS5zdHJsb3dlciA9IHN0cmxvd2VyX2xpYmNfbWIsCisJ LnN0cnRpdGxlID0gc3RydGl0bGVfbGliY19tYiwKKwkuc3RydXBwZXIgPSBzdHJ1cHBlcl9saWJj X21iLAorCS5jaGFyX3Byb3BlcnRpZXMgPSBjaGFyX3Byb3BlcnRpZXNfbGliY19tYiwKKwkuY2hh cl9pc19jYXNlZCA9IGNoYXJfaXNfY2FzZWRfbGliYywKKwkuY2hhcl90b2xvd2VyID0gY2hhcl90 b2xvd2VyX2xpYmMsCisJLndjX3RvdXBwZXIgPSB0b3VwcGVyX2xpYmNfbWIsCisJLndjX3RvbG93 ZXIgPSB0b2xvd2VyX2xpYmNfbWIsCit9OworCitzdGF0aWMgc2l6ZV90CitzdHJsb3dlcl9saWJj X3NiKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90 IHNyY2xlbiwKKwkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWlmIChzcmNsZW4gPCAwKQor CQlzcmNsZW4gPSBzdHJsZW4oc3JjKTsKKworCWlmIChzcmNsZW4gKyAxIDw9IGRlc3RzaXplKQor CXsKKwkJbG9jYWxlX3QJbG9jID0gbG9jYWxlLT5pbmZvLmx0OworCQljaGFyCSAgICpwOworCisJ CWlmIChzcmNsZW4gKyAxID4gZGVzdHNpemUpCisJCQlyZXR1cm4gc3JjbGVuOworCisJCW1lbWNw eShkZXN0LCBzcmMsIHNyY2xlbik7CisJCWRlc3Rbc3JjbGVuXSA9ICdcMCc7CisKKwkJLyoKKwkJ ICogTm90ZTogd2UgYXNzdW1lIHRoYXQgdG9sb3dlcl9sKCkgd2lsbCBub3QgYmUgc28gYnJva2Vu IGFzIHRvIG5lZWQKKwkJICogYW4gaXN1cHBlcl9sKCkgZ3VhcmQgdGVzdC4gIFdoZW4gdXNpbmcg dGhlIGRlZmF1bHQgY29sbGF0aW9uLCB3ZQorCQkgKiBhcHBseSB0aGUgdHJhZGl0aW9uYWwgUG9z dGdyZXMgYmVoYXZpb3IgdGhhdCBmb3JjZXMgQVNDSUktc3R5bGUKKwkJICogdHJlYXRtZW50IG9m IEkvaSwgYnV0IGluIG5vbi1kZWZhdWx0IGNvbGxhdGlvbnMgeW91IGdldCBleGFjdGx5CisJCSAq IHdoYXQgdGhlIGNvbGxhdGlvbiBzYXlzLgorCQkgKi8KKwkJZm9yIChwID0gZGVzdDsgKnA7IHAr KykKKwkJCSpwID0gdG9sb3dlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbG9jKTsKKwl9CisKKwly ZXR1cm4gc3JjbGVuOworfQorCitzdGF0aWMgc2l6ZV90CitzdHJsb3dlcl9saWJjX21iKGNoYXIg KmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwK KwkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWxvY2FsZV90CWxvYyA9IGxvY2FsZS0+aW5m by5sdDsKKwlzaXplX3QJCXJlc3VsdF9zaXplOworCXdjaGFyX3QgICAgKndvcmtzcGFjZTsKKwlj aGFyCSAgICpyZXN1bHQ7CisJc2l6ZV90CQljdXJyX2NoYXI7CisJc2l6ZV90CQltYXhfc2l6ZTsK KworCWlmIChzcmNsZW4gPCAwKQorCQlzcmNsZW4gPSBzdHJsZW4oc3JjKTsKKworCS8qIE92ZXJm bG93IHBhcmFub2lhICovCisJaWYgKChzcmNsZW4gKyAxKSA+IChJTlRfTUFYIC8gc2l6ZW9mKHdj aGFyX3QpKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9N RU1PUlkpLAorCQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSkpOworCisJLyogT3V0cHV0IHdv cmtzcGFjZSBjYW5ub3QgaGF2ZSBtb3JlIGNvZGVzIHRoYW4gaW5wdXQgYnl0ZXMgKi8KKwl3b3Jr c3BhY2UgPSAod2NoYXJfdCAqKSBwYWxsb2MoKHNyY2xlbiArIDEpICogc2l6ZW9mKHdjaGFyX3Qp KTsKKworCWNoYXIyd2NoYXIod29ya3NwYWNlLCBzcmNsZW4gKyAxLCBzcmMsIHNyY2xlbiwgbG9j YWxlKTsKKworCWZvciAoY3Vycl9jaGFyID0gMDsgd29ya3NwYWNlW2N1cnJfY2hhcl0gIT0gMDsg Y3Vycl9jaGFyKyspCisJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3Bh Y2VbY3Vycl9jaGFyXSwgbG9jKTsKKworCS8qCisJICogTWFrZSByZXN1bHQgbGFyZ2UgZW5vdWdo OyBjYXNlIGNoYW5nZSBtaWdodCBjaGFuZ2UgbnVtYmVyIG9mIGJ5dGVzCisJICovCisJbWF4X3Np emUgPSBjdXJyX2NoYXIgKiBwZ19kYXRhYmFzZV9lbmNvZGluZ19tYXhfbGVuZ3RoKCk7CisJcmVz dWx0ID0gcGFsbG9jKG1heF9zaXplICsgMSk7CisKKwlyZXN1bHRfc2l6ZSA9IHdjaGFyMmNoYXIo cmVzdWx0LCB3b3Jrc3BhY2UsIG1heF9zaXplICsgMSwgbG9jYWxlKTsKKworCWlmIChyZXN1bHRf c2l6ZSArIDEgPiBkZXN0c2l6ZSkKKwkJcmV0dXJuIHJlc3VsdF9zaXplOworCisJbWVtY3B5KGRl c3QsIHJlc3VsdCwgcmVzdWx0X3NpemUpOworCWRlc3RbcmVzdWx0X3NpemVdID0gJ1wwJzsKKwor CXBmcmVlKHdvcmtzcGFjZSk7CisJcGZyZWUocmVzdWx0KTsKKworCXJldHVybiByZXN1bHRfc2l6 ZTsKK30KKworc3RhdGljIHNpemVfdAorc3RydGl0bGVfbGliY19zYihjaGFyICpkZXN0LCBzaXpl X3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJCQkJIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwlpZiAoc3JjbGVuIDwgMCkKKwkJc3JjbGVuID0gc3RybGVuKHNy Yyk7CisKKwlpZiAoc3JjbGVuICsgMSA8PSBkZXN0c2l6ZSkKKwl7CisJCWxvY2FsZV90CWxvYyA9 IGxvY2FsZS0+aW5mby5sdDsKKwkJaW50CQkJd2FzYWxudW0gPSBmYWxzZTsKKwkJY2hhcgkgICAq cDsKKworCQltZW1jcHkoZGVzdCwgc3JjLCBzcmNsZW4pOworCQlkZXN0W3NyY2xlbl0gPSAnXDAn OworCisJCS8qCisJCSAqIE5vdGU6IHdlIGFzc3VtZSB0aGF0IHRvdXBwZXJfbCgpL3RvbG93ZXJf bCgpIHdpbGwgbm90IGJlIHNvIGJyb2tlbgorCQkgKiBhcyB0byBuZWVkIGd1YXJkIHRlc3RzLiAg V2hlbiB1c2luZyB0aGUgZGVmYXVsdCBjb2xsYXRpb24sIHdlIGFwcGx5CisJCSAqIHRoZSB0cmFk aXRpb25hbCBQb3N0Z3JlcyBiZWhhdmlvciB0aGF0IGZvcmNlcyBBU0NJSS1zdHlsZSB0cmVhdG1l bnQKKwkJICogb2YgSS9pLCBidXQgaW4gbm9uLWRlZmF1bHQgY29sbGF0aW9ucyB5b3UgZ2V0IGV4 YWN0bHkgd2hhdCB0aGUKKwkJICogY29sbGF0aW9uIHNheXMuCisJCSAqLworCQlmb3IgKHAgPSBk ZXN0OyAqcDsgcCsrKQorCQl7CisJCQlpZiAod2FzYWxudW0pCisJCQkJKnAgPSB0b2xvd2VyX2wo KHVuc2lnbmVkIGNoYXIpICpwLCBsb2MpOworCQkJZWxzZQorCQkJCSpwID0gdG91cHBlcl9sKCh1 bnNpZ25lZCBjaGFyKSAqcCwgbG9jKTsKKwkJCXdhc2FsbnVtID0gaXNhbG51bV9sKCh1bnNpZ25l ZCBjaGFyKSAqcCwgbG9jKTsKKwkJfQorCX0KKworCXJldHVybiBzcmNsZW47Cit9CisKK3N0YXRp YyBzaXplX3QKK3N0cnRpdGxlX2xpYmNfbWIoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBj b25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUp Cit7CisJbG9jYWxlX3QJbG9jID0gbG9jYWxlLT5pbmZvLmx0OworCWludAkJCXdhc2FsbnVtID0g ZmFsc2U7CisJc2l6ZV90CQlyZXN1bHRfc2l6ZTsKKwl3Y2hhcl90ICAgICp3b3Jrc3BhY2U7CisJ Y2hhcgkgICAqcmVzdWx0OworCXNpemVfdAkJY3Vycl9jaGFyOworCXNpemVfdAkJbWF4X3NpemU7 CisKKwlpZiAoc3JjbGVuIDwgMCkKKwkJc3JjbGVuID0gc3RybGVuKHNyYyk7CisKKwkvKiBPdmVy ZmxvdyBwYXJhbm9pYSAqLworCWlmICgoc3JjbGVuICsgMSkgPiAoSU5UX01BWCAvIHNpemVvZih3 Y2hhcl90KSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0Zf TUVNT1JZKSwKKwkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IikpKTsKKworCS8qIE91dHB1dCB3 b3Jrc3BhY2UgY2Fubm90IGhhdmUgbW9yZSBjb2RlcyB0aGFuIGlucHV0IGJ5dGVzICovCisJd29y a3NwYWNlID0gKHdjaGFyX3QgKikgcGFsbG9jKChzcmNsZW4gKyAxKSAqIHNpemVvZih3Y2hhcl90 KSk7CisKKwljaGFyMndjaGFyKHdvcmtzcGFjZSwgc3JjbGVuICsgMSwgc3JjLCBzcmNsZW4sIGxv Y2FsZSk7CisKKwlmb3IgKGN1cnJfY2hhciA9IDA7IHdvcmtzcGFjZVtjdXJyX2NoYXJdICE9IDA7 IGN1cnJfY2hhcisrKQorCXsKKwkJaWYgKHdhc2FsbnVtKQorCQkJd29ya3NwYWNlW2N1cnJfY2hh cl0gPSB0b3dsb3dlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBsb2MpOworCQllbHNlCisJCQl3 b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxv Yyk7CisJCXdhc2FsbnVtID0gaXN3YWxudW1fbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbG9jKTsK Kwl9CisKKwkvKgorCSAqIE1ha2UgcmVzdWx0IGxhcmdlIGVub3VnaDsgY2FzZSBjaGFuZ2UgbWln aHQgY2hhbmdlIG51bWJlciBvZiBieXRlcworCSAqLworCW1heF9zaXplID0gY3Vycl9jaGFyICog cGdfZGF0YWJhc2VfZW5jb2RpbmdfbWF4X2xlbmd0aCgpOworCXJlc3VsdCA9IHBhbGxvYyhtYXhf c2l6ZSArIDEpOworCisJcmVzdWx0X3NpemUgPSB3Y2hhcjJjaGFyKHJlc3VsdCwgd29ya3NwYWNl LCBtYXhfc2l6ZSArIDEsIGxvY2FsZSk7CisKKwlpZiAocmVzdWx0X3NpemUgKyAxID4gZGVzdHNp emUpCisJCXJldHVybiByZXN1bHRfc2l6ZTsKKworCW1lbWNweShkZXN0LCByZXN1bHQsIHJlc3Vs dF9zaXplKTsKKwlkZXN0W3Jlc3VsdF9zaXplXSA9ICdcMCc7CisKKwlwZnJlZSh3b3Jrc3BhY2Up OworCXBmcmVlKHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0X3NpemU7Cit9CisKK3N0YXRpYyBz aXplX3QKK3N0cnVwcGVyX2xpYmNfc2IoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25z dCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCit7 CisJaWYgKHNyY2xlbiA8IDApCisJCXNyY2xlbiA9IHN0cmxlbihzcmMpOworCisJaWYgKHNyY2xl biArIDEgPD0gZGVzdHNpemUpCisJeworCQlsb2NhbGVfdAlsb2MgPSBsb2NhbGUtPmluZm8ubHQ7 CisJCWNoYXIJICAgKnA7CisKKwkJbWVtY3B5KGRlc3QsIHNyYywgc3JjbGVuKTsKKwkJZGVzdFtz cmNsZW5dID0gJ1wwJzsKKworCQkvKgorCQkgKiBOb3RlOiB3ZSBhc3N1bWUgdGhhdCB0b3VwcGVy X2woKSB3aWxsIG5vdCBiZSBzbyBicm9rZW4gYXMgdG8gbmVlZAorCQkgKiBhbiBpc2xvd2VyX2wo KSBndWFyZCB0ZXN0LiAgV2hlbiB1c2luZyB0aGUgZGVmYXVsdCBjb2xsYXRpb24sIHdlCisJCSAq IGFwcGx5IHRoZSB0cmFkaXRpb25hbCBQb3N0Z3JlcyBiZWhhdmlvciB0aGF0IGZvcmNlcyBBU0NJ SS1zdHlsZQorCQkgKiB0cmVhdG1lbnQgb2YgSS9pLCBidXQgaW4gbm9uLWRlZmF1bHQgY29sbGF0 aW9ucyB5b3UgZ2V0IGV4YWN0bHkKKwkJICogd2hhdCB0aGUgY29sbGF0aW9uIHNheXMuCisJCSAq LworCQlmb3IgKHAgPSBkZXN0OyAqcDsgcCsrKQorCQkJKnAgPSB0b3VwcGVyX2woKHVuc2lnbmVk IGNoYXIpICpwLCBsb2MpOworCX0KKworCXJldHVybiBzcmNsZW47Cit9CisKK3N0YXRpYyBzaXpl X3QKK3N0cnVwcGVyX2xpYmNfbWIoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBj aGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJ bG9jYWxlX3QJbG9jID0gbG9jYWxlLT5pbmZvLmx0OworCXNpemVfdAkJcmVzdWx0X3NpemU7CisJ d2NoYXJfdCAgICAqd29ya3NwYWNlOworCWNoYXIJICAgKnJlc3VsdDsKKwlzaXplX3QJCWN1cnJf Y2hhcjsKKwlzaXplX3QJCW1heF9zaXplOworCisJaWYgKHNyY2xlbiA8IDApCisJCXNyY2xlbiA9 IHN0cmxlbihzcmMpOworCisJLyogT3ZlcmZsb3cgcGFyYW5vaWEgKi8KKwlpZiAoKHNyY2xlbiAr IDEpID4gKElOVF9NQVggLyBzaXplb2Yod2NoYXJfdCkpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJIGVycm1zZygib3V0IG9mIG1l bW9yeSIpKSk7CisKKwkvKiBPdXRwdXQgd29ya3NwYWNlIGNhbm5vdCBoYXZlIG1vcmUgY29kZXMg dGhhbiBpbnB1dCBieXRlcyAqLworCXdvcmtzcGFjZSA9ICh3Y2hhcl90ICopIHBhbGxvYygoc3Jj bGVuICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworCisJY2hhcjJ3Y2hhcih3b3Jrc3BhY2UsIHNy Y2xlbiArIDEsIHNyYywgc3JjbGVuLCBsb2NhbGUpOworCisJZm9yIChjdXJyX2NoYXIgPSAwOyB3 b3Jrc3BhY2VbY3Vycl9jaGFyXSAhPSAwOyBjdXJyX2NoYXIrKykKKwkJd29ya3NwYWNlW2N1cnJf Y2hhcl0gPSB0b3d1cHBlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBsb2MpOworCisJLyoKKwkg KiBNYWtlIHJlc3VsdCBsYXJnZSBlbm91Z2g7IGNhc2UgY2hhbmdlIG1pZ2h0IGNoYW5nZSBudW1i ZXIgb2YgYnl0ZXMKKwkgKi8KKwltYXhfc2l6ZSA9IGN1cnJfY2hhciAqIHBnX2RhdGFiYXNlX2Vu Y29kaW5nX21heF9sZW5ndGgoKTsKKwlyZXN1bHQgPSBwYWxsb2MobWF4X3NpemUgKyAxKTsKKwor CXJlc3VsdF9zaXplID0gd2NoYXIyY2hhcihyZXN1bHQsIHdvcmtzcGFjZSwgbWF4X3NpemUgKyAx LCBsb2NhbGUpOworCisJaWYgKHJlc3VsdF9zaXplICsgMSA+IGRlc3RzaXplKQorCQlyZXR1cm4g cmVzdWx0X3NpemU7CisKKwltZW1jcHkoZGVzdCwgcmVzdWx0LCByZXN1bHRfc2l6ZSk7CisJZGVz dFtyZXN1bHRfc2l6ZV0gPSAnXDAnOworCisJcGZyZWUod29ya3NwYWNlKTsKKwlwZnJlZShyZXN1 bHQpOworCisJcmV0dXJuIHJlc3VsdF9zaXplOworfQorCiBwZ19sb2NhbGVfdAogY3JlYXRlX3Bn X2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkKIHsKQEAgLTEz Myw2ICs0ODIsMTUgQEAgY3JlYXRlX3BnX2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNv bnRleHQgY29udGV4dCkKICNlbmRpZgogCQkJcmVzdWx0LT5jb2xsYXRlID0gJmNvbGxhdGVfbWV0 aG9kc19saWJjOwogCX0KKwlpZiAoIXJlc3VsdC0+Y3R5cGVfaXNfYykKKwl7CisJCWlmIChHZXRE YXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwkJCXJlc3VsdC0+Y3R5cGUgPSAmY3R5cGVf bWV0aG9kc19saWJjX3V0Zjg7CisJCWVsc2UgaWYgKHBnX2RhdGFiYXNlX2VuY29kaW5nX21heF9s ZW5ndGgoKSA+IDEpCisJCQlyZXN1bHQtPmN0eXBlID0gJmN0eXBlX21ldGhvZHNfbGliY19vdGhl cl9tYjsKKwkJZWxzZQorCQkJcmVzdWx0LT5jdHlwZSA9ICZjdHlwZV9tZXRob2RzX2xpYmNfc2I7 CisJfQogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxNiw2ICs3NzQsMTEzIEBAIHJlcG9ydF9u ZXdsb2NhbGVfZmFpbHVyZShjb25zdCBjaGFyICpsb2NhbGVuYW1lKQogCQkJCQkJbG9jYWxlbmFt ZSkgOiAwKSkpOwogfQogCitzdGF0aWMgaW50CitjaGFyX3Byb3BlcnRpZXNfbGliY19zYihwZ193 Y2hhciB3YywgaW50IG1hc2ssIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlpbnQJCQlyZXN1bHQg PSAwOworCisJQXNzZXJ0KCFsb2NhbGUtPmN0eXBlX2lzX2MpOworCUFzc2VydChHZXREYXRhYmFz ZUVuY29kaW5nKCkgIT0gUEdfVVRGOCk7CisKKwlpZiAod2MgPiAocGdfd2NoYXIpIFVDSEFSX01B WCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKG1hc2sgJiBQR19JU0RJR0lUKSAmJiBpc2RpZ2l0X2wo KHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpKQorCQlyZXN1bHQgfD0gUEdfSVNE SUdJVDsKKwlpZiAoKG1hc2sgJiBQR19JU0FMUEhBKSAmJiBpc2FscGhhX2woKHVuc2lnbmVkIGNo YXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpKQorCQlyZXN1bHQgfD0gUEdfSVNBTFBIQTsKKwlpZiAo KG1hc2sgJiBQR19JU1VQUEVSKSAmJiBpc3VwcGVyX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2Nh bGUtPmluZm8ubHQpKQorCQlyZXN1bHQgfD0gUEdfSVNVUFBFUjsKKwlpZiAoKG1hc2sgJiBQR19J U0xPV0VSKSAmJiBpc2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQp KQorCQlyZXN1bHQgfD0gUEdfSVNMT1dFUjsKKwlpZiAoKG1hc2sgJiBQR19JU0dSQVBIKSAmJiBp c2dyYXBoX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpKQorCQlyZXN1bHQg fD0gUEdfSVNHUkFQSDsKKwlpZiAoKG1hc2sgJiBQR19JU1BSSU5UKSAmJiBpc3ByaW50X2woKHVu c2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpKQorCQlyZXN1bHQgfD0gUEdfSVNQUklO VDsKKwlpZiAoKG1hc2sgJiBQR19JU1BVTkNUKSAmJiBpc3B1bmN0X2woKHVuc2lnbmVkIGNoYXIp IHdjLCBsb2NhbGUtPmluZm8ubHQpKQorCQlyZXN1bHQgfD0gUEdfSVNQVU5DVDsKKwlpZiAoKG1h c2sgJiBQR19JU1NQQUNFKSAmJiBpc3NwYWNlX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUt PmluZm8ubHQpKQorCQlyZXN1bHQgfD0gUEdfSVNTUEFDRTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKK3N0YXRpYyBpbnQKK2NoYXJfcHJvcGVydGllc19saWJjX21iKHBnX3djaGFyIHdjLCBpbnQg bWFzaywgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWludAkJCXJlc3VsdCA9IDA7CisKKwlBc3Nl cnQoIWxvY2FsZS0+Y3R5cGVfaXNfYyk7CisJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9 PSBQR19VVEY4KTsKKworCS8qIGlmIHdjaGFyX3QgY2Fubm90IHJlcHJlc2VudCB0aGUgdmFsdWUs IGp1c3QgcmV0dXJuIDAgKi8KKwlpZiAoc2l6ZW9mKHdjaGFyX3QpIDwgNCAmJiB3YyA+IChwZ193 Y2hhcikgMHhGRkZGKQorCQlyZXR1cm4gMDsKKworCWlmICgobWFzayAmIFBHX0lTRElHSVQpICYm IGlzd2RpZ2l0X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJCXJlc3VsdCB8PSBQ R19JU0RJR0lUOworCWlmICgobWFzayAmIFBHX0lTQUxQSEEpICYmIGlzd2FscGhhX2woKHdpbnRf dCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJCXJlc3VsdCB8PSBQR19JU0FMUEhBOworCWlmICgo bWFzayAmIFBHX0lTVVBQRVIpICYmIGlzd3VwcGVyX2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5m by5sdCkpCisJCXJlc3VsdCB8PSBQR19JU1VQUEVSOworCWlmICgobWFzayAmIFBHX0lTTE9XRVIp ICYmIGlzd2xvd2VyX2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJCXJlc3VsdCB8 PSBQR19JU0xPV0VSOworCWlmICgobWFzayAmIFBHX0lTR1JBUEgpICYmIGlzd2dyYXBoX2woKHdp bnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJCXJlc3VsdCB8PSBQR19JU0dSQVBIOworCWlm ICgobWFzayAmIFBHX0lTUFJJTlQpICYmIGlzd3ByaW50X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+ aW5mby5sdCkpCisJCXJlc3VsdCB8PSBQR19JU1BSSU5UOworCWlmICgobWFzayAmIFBHX0lTUFVO Q1QpICYmIGlzd3B1bmN0X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJCXJlc3Vs dCB8PSBQR19JU1BVTkNUOworCWlmICgobWFzayAmIFBHX0lTU1BBQ0UpICYmIGlzd3NwYWNlX2wo KHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJCXJlc3VsdCB8PSBQR19JU1NQQUNFOwor CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHBnX3djaGFyCit0b3VwcGVyX2xpYmNfc2Io cGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQoR2V0RGF0YWJhc2VF bmNvZGluZygpICE9IFBHX1VURjgpOworCisJaWYgKHdjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFY KQorCQlyZXR1cm4gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZvLmx0 KTsKKwllbHNlCisJCXJldHVybiB3YzsKK30KKworc3RhdGljIHBnX3djaGFyCit0b3VwcGVyX2xp YmNfbWIocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQoR2V0RGF0 YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOworCisJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0 IHx8IHdjIDw9IChwZ193Y2hhcikgMHhGRkZGKQorCQlyZXR1cm4gdG93dXBwZXJfbCgod2ludF90 KSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKKwllbHNlCisJCXJldHVybiB3YzsKK30KKworc3RhdGlj IHBnX3djaGFyCit0b2xvd2VyX2xpYmNfc2IocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2Fs ZSkKK3sKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOworCisJaWYg KHdjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYKQorCQlyZXR1cm4gdG9sb3dlcl9sKCh1bnNpZ25l ZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKKwllbHNlCisJCXJldHVybiB3YzsKK30KKwor c3RhdGljIHBnX3djaGFyCit0b2xvd2VyX2xpYmNfbWIocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90 IGxvY2FsZSkKK3sKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOwor CisJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IHdjIDw9IChwZ193Y2hhcikgMHhGRkZGKQor CQlyZXR1cm4gdG93bG93ZXJfbCgod2ludF90KSB3YywgbG9jYWxlLT5pbmZvLmx0KTsKKwllbHNl CisJCXJldHVybiB3YzsKK30KKwogLyoKICAqIFBPU0lYIGRvZXNuJ3QgZGVmaW5lIF9sLXZhcmlh bnRzIG9mIHRoZXNlIGZ1bmN0aW9ucywgYnV0IHNldmVyYWwgc3lzdGVtcwogICogaGF2ZSB0aGVt LiAgV2UgcHJvdmlkZSBvdXIgb3duIHJlcGxhY2VtZW50cyBoZXJlLgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUu aAppbmRleCAyZjA1ZGZmY2RkLi5jNzFjZjM4MDIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9wZ19sb2NhbGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAt MTIsMTAgKzEyLDI1IEBACiAjaWZuZGVmIF9QR19MT0NBTEVfCiAjZGVmaW5lIF9QR19MT0NBTEVf CiAKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorCiAjaWZkZWYgVVNFX0lDVQogI2luY2x1ZGUg PHVuaWNvZGUvdWNvbC5oPgogI2VuZGlmCiAKKy8qCisgKiBDaGFyYWN0ZXIgcHJvcGVydGllcyBm b3IgcmVndWxhciBleHByZXNzaW9ucy4KKyAqLworI2RlZmluZSBQR19JU0RJR0lUICAgICAweDAx CisjZGVmaW5lIFBHX0lTQUxQSEEgICAgIDB4MDIKKyNkZWZpbmUgUEdfSVNBTE5VTSAgICAgKFBH X0lTRElHSVQgfCBQR19JU0FMUEhBKQorI2RlZmluZSBQR19JU1VQUEVSICAgICAweDA0CisjZGVm aW5lIFBHX0lTTE9XRVIgICAgIDB4MDgKKyNkZWZpbmUgUEdfSVNHUkFQSCAgICAgMHgxMAorI2Rl ZmluZSBQR19JU1BSSU5UICAgICAweDIwCisjZGVmaW5lIFBHX0lTUFVOQ1QgICAgIDB4NDAKKyNk ZWZpbmUgUEdfSVNTUEFDRSAgICAgMHg4MAorCiAjaWZkZWYgVVNFX0lDVQogLyoKICAqIHVjb2xf c3RyY29sbFVURjgoKSB3YXMgaW50cm9kdWNlZCBpbiBJQ1UgNTAsIGJ1dCBpdCBpcyBidWdneSBi ZWZvcmUgSUNVIDUzLgpAQCAtOTAsNiArMTA1LDQzIEBAIHN0cnVjdCBjb2xsYXRlX21ldGhvZHMK IAlib29sCQlzdHJ4ZnJtX2lzX3NhZmU7CiB9OwogCitzdHJ1Y3QgY3R5cGVfbWV0aG9kcworewor CS8qIGNhc2UgbWFwcGluZzogTE9XRVIoKS9JTklUQ0FQKCkvVVBQRVIoKSAqLworCXNpemVfdAkJ KCpzdHJsb3dlcikgKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCQkJCQkgY29uc3Qg Y2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCQkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKTsK KwlzaXplX3QJCSgqc3RydGl0bGUpIChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJ CQkJIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJCQkJCQkJIHBnX2xvY2FsZV90 IGxvY2FsZSk7CisJc2l6ZV90CQkoKnN0cnVwcGVyKSAoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3Rz aXplLAorCQkJCQkJCSBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCQkJCSBw Z19sb2NhbGVfdCBsb2NhbGUpOworCisJLyogcmVxdWlyZWQgKi8KKwlpbnQJCQkoKmNoYXJfcHJv cGVydGllcykgKHBnX3djaGFyIHdjLCBpbnQgbWFzaywgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKwor CS8qIHJlcXVpcmVkICovCisJYm9vbAkJKCpjaGFyX2lzX2Nhc2VkKSAoY2hhciBjaCwgcGdfbG9j YWxlX3QgbG9jYWxlKTsKKworCS8qCisJICogT3B0aW9uYWwuIElmIGRlZmluZWQsIHdpbGwgb25s eSBiZSBjYWxsZWQgZm9yIHNpbmdsZS1ieXRlIGVuY29kaW5ncy4gSWYKKwkgKiBub3QgZGVmaW5l ZCwgb3IgaWYgdGhlIGVuY29kaW5nIGlzIG11bHRpYnl0ZSwgd2lsbCBmYWxsIGJhY2sgdG8KKwkg KiBwZ19zdHJsb3dlcigpLgorCSAqLworCWNoYXIJCSgqY2hhcl90b2xvd2VyKSAodW5zaWduZWQg Y2hhciBjaCwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKKworCS8qIHJlcXVpcmVkICovCisJcGdfd2No YXIJKCp3Y190b3VwcGVyKSAocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSk7CisJcGdf d2NoYXIJKCp3Y190b2xvd2VyKSAocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSk7CisK KwkvKgorCSAqIEZvciByZWdleCBhbmQgcGF0dGVybiBtYXRjaGluZyBlZmZpY2llbmN5LCB0aGUg bWF4aW11bSBjaGFyIHZhbHVlCisJICogc3VwcG9ydGVkIGJ5IHRoZSBhYm92ZSBtZXRob2RzLiBJ ZiB6ZXJvLCBsaW1pdCBpcyBzZXQgYnkgcmVnZXggY29kZS4KKwkgKi8KKwlwZ193Y2hhcgltYXhf Y2hyOworfTsKKwogLyoKICAqIFdlIHVzZSBhIGRpc2NyaW1pbmF0ZWQgdW5pb24gdG8gaG9sZCBl aXRoZXIgYSBsb2NhbGVfdCBvciBhbiBJQ1UgY29sbGF0b3IuCiAgKiBwZ19sb2NhbGVfdCBpcyBv Y2Nhc2lvbmFsbHkgY2hlY2tlZCBmb3IgdHJ1dGgsIHNvIG1ha2UgaXQgYSBwb2ludGVyLgpAQCAt MTE0LDYgKzE2Niw3IEBAIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0CiAJYm9vbAkJY3R5cGVfaXNf YzsKIAogCWNvbnN0IHN0cnVjdCBjb2xsYXRlX21ldGhvZHMgKmNvbGxhdGU7CS8qIE5VTEwgaWYg Y29sbGF0ZV9pc19jICovCisJY29uc3Qgc3RydWN0IGN0eXBlX21ldGhvZHMgKmN0eXBlOwkvKiBO VUxMIGlmIGN0eXBlX2lzX2MgKi8KIAogCXVuaW9uCiAJewpAQCAtMTM4LDYgKzE5MSwxOSBAQCBl eHRlcm4gdm9pZCBpbml0X2RhdGFiYXNlX2NvbGxhdGlvbih2b2lkKTsKIGV4dGVybiBwZ19sb2Nh bGVfdCBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oT2lkIGNvbGxpZCk7CiAKIGV4dGVybiBj aGFyICpnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNoYXIgY29sbHByb3ZpZGVyLCBjb25z dCBjaGFyICpjb2xsY29sbGF0ZSk7CitleHRlcm4gaW50CWNoYXJfcHJvcGVydGllcyhwZ193Y2hh ciB3YywgaW50IG1hc2ssIHBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRlcm4gYm9vbCBjaGFyX2lz X2Nhc2VkKGNoYXIgY2gsIHBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRlcm4gYm9vbCBjaGFyX3Rv bG93ZXJfZW5hYmxlZChwZ19sb2NhbGVfdCBsb2NhbGUpOworZXh0ZXJuIGNoYXIgY2hhcl90b2xv d2VyKHVuc2lnbmVkIGNoYXIgY2gsIHBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRlcm4gc2l6ZV90 IHBnX3N0cmxvd2VyKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCQkJCSAgY29uc3Qg Y2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCQkJCSAgcGdfbG9jYWxlX3QgbG9jYWxlKTsK K2V4dGVybiBzaXplX3QgcGdfc3RydGl0bGUoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAor CQkJCQkJICBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJCQkJICBwZ19sb2Nh bGVfdCBsb2NhbGUpOworZXh0ZXJuIHNpemVfdCBwZ19zdHJ1cHBlcihjaGFyICpkZXN0LCBzaXpl X3QgZGVzdHNpemUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCisJ CQkJCQkgIHBnX2xvY2FsZV90IGxvY2FsZSk7CiBleHRlcm4gaW50CXBnX3N0cmNvbGwoY29uc3Qg Y2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKIGV4dGVy biBpbnQJcGdfc3RybmNvbGwoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLAogCQkJCQkJ Y29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4yLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwpAQCAt MTU3LDExICsyMjMsNiBAQCBleHRlcm4gY29uc3QgY2hhciAqYnVpbHRpbl92YWxpZGF0ZV9sb2Nh bGUoaW50IGVuY29kaW5nLCBjb25zdCBjaGFyICpsb2NhbGUpOwogZXh0ZXJuIHZvaWQgaWN1X3Zh bGlkYXRlX2xvY2FsZShjb25zdCBjaGFyICpsb2Nfc3RyKTsKIGV4dGVybiBjaGFyICppY3VfbGFu Z3VhZ2VfdGFnKGNvbnN0IGNoYXIgKmxvY19zdHIsIGludCBlbGV2ZWwpOwogCi0jaWZkZWYgVVNF X0lDVQotZXh0ZXJuIGludDMyX3QgaWN1X3RvX3VjaGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29u c3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7Ci1leHRlcm4gaW50MzJfdCBpY3VfZnJvbV91 Y2hhcihjaGFyICoqcmVzdWx0LCBjb25zdCBVQ2hhciAqYnVmZl91Y2hhciwgaW50MzJfdCBsZW5f dWNoYXIpOwotI2VuZGlmCi0KIC8qIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGZyb20vdG8gbGli YydzIHdjaGFyX3QsICpub3QqIHBnX3djaGFyX3QgKi8KIGV4dGVybiBzaXplX3Qgd2NoYXIyY2hh cihjaGFyICp0bywgY29uc3Qgd2NoYXJfdCAqZnJvbSwgc2l6ZV90IHRvbGVuLAogCQkJCQkJIHBn X2xvY2FsZV90IGxvY2FsZSk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDA4NTIxZDUx YTkuLjQxNmEyY2M3NmIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xODIyLDcgKzE4 MjIsNiBAQCBQR1RhcmdldFNlcnZlclR5cGUKIFBHVGVybmFyeUJvb2wKIFBHVHJhbnNhY3Rpb25T dGF0dXNUeXBlCiBQR1ZlcmJvc2l0eQotUEdfTG9jYWxlX1N0cmF0ZWd5CiBQR19Mb2NrX1N0YXR1 cwogUEdfaW5pdF90CiBQR2NhbmNlbAotLSAKMi4zNC4xCgo= --=-LTFx9IBzSoydfVtEfUQa Content-Disposition: attachment; filename="v8-0004-Remove-provider-field-from-pg_locale_t.patch" Content-Type: text/x-patch; name="v8-0004-Remove-provider-field-from-pg_locale_t.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA3Mjc1Y2QxOGNmYmEzOTM3N2NkYzhlMjJlMzYxYTEzNWM0YzJlYmE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDcgT2N0IDIwMjQgMTI6NTE6MjcgLTA3MDAKU3ViamVjdDogW1BBVENIIHY4IDQvN10gUmVt b3ZlIHByb3ZpZGVyIGZpZWxkIGZyb20gcGdfbG9jYWxlX3QuCgpUaGUgYmVoYXZpb3Igb2YgcGdf bG9jYWxlX3QgaXMgZW50aXJlbHkgc3BlY2lmaWVkIGJ5IG1ldGhvZHMsIHNvIGEKc2VwYXJhdGUg cHJvdmlkZXIgZmllbGQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KLS0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyB8ICAxIC0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ19sb2NhbGVfaWN1LmMgICAgIHwgMTEgLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGVfbGliYy5jICAgIHwgIDYgLS0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy9w Z19sb2NhbGUuaCAgICAgICAgICAgICB8ICAxIC0KIDQgZmlsZXMgY2hhbmdlZCwgMTkgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWls dGluLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYwppbmRleCA1 ZjkwMzU1MzU1Li5iNGFiZGUxYWZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlX2J1aWx0aW4uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxl X2J1aWx0aW4uYwpAQCAtMTg4LDcgKzE4OCw2IEBAIGNyZWF0ZV9wZ19sb2NhbGVfYnVpbHRpbihP aWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAJcmVzdWx0ID0gTWVtb3J5Q29udGV4 dEFsbG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKIAog CXJlc3VsdC0+aW5mby5idWlsdGluLmxvY2FsZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoY29udGV4 dCwgbG9jc3RyKTsKLQlyZXN1bHQtPnByb3ZpZGVyID0gQ09MTFBST1ZJREVSX0JVSUxUSU47CiAJ cmVzdWx0LT5kZXRlcm1pbmlzdGljID0gdHJ1ZTsKIAlyZXN1bHQtPmNvbGxhdGVfaXNfYyA9IHRy dWU7CiAJcmVzdWx0LT5jdHlwZV9pc19jID0gKHN0cmNtcChsb2NzdHIsICJDIikgPT0gMCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwppbmRleCA1MjUxMTYzYjFiLi43YTJjYThh Yzg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMKQEAgLTI0Miw3ICsyNDIs NiBAQCBjcmVhdGVfcGdfbG9jYWxlX2ljdShPaWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRl eHQpCiAJcmVzdWx0ID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3Ry dWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKIAlyZXN1bHQtPmluZm8uaWN1LmxvY2FsZSA9IE1lbW9y eUNvbnRleHRTdHJkdXAoY29udGV4dCwgaWN1bG9jc3RyKTsKIAlyZXN1bHQtPmluZm8uaWN1LnVj b2wgPSBjb2xsYXRvcjsKLQlyZXN1bHQtPnByb3ZpZGVyID0gQ09MTFBST1ZJREVSX0lDVTsKIAly ZXN1bHQtPmRldGVybWluaXN0aWMgPSBkZXRlcm1pbmlzdGljOwogCXJlc3VsdC0+Y29sbGF0ZV9p c19jID0gZmFsc2U7CiAJcmVzdWx0LT5jdHlwZV9pc19jID0gZmFsc2U7CkBAIC00OTksOCArNDk4 LDYgQEAgc3RybmNvbGxfaWN1X3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLCBj b25zdCBjaGFyICphcmcyLCBzc2l6ZV90IGxlbjIKIAlpbnQJCQlyZXN1bHQ7CiAJVUVycm9yQ29k ZQlzdGF0dXM7CiAKLQlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNV KTsKLQogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCk7CiAKIAlzdGF0 dXMgPSBVX1pFUk9fRVJST1I7CkBAIC01MjgsOCArNTI1LDYgQEAgc3Rybnhmcm1faWN1KGNoYXIg KmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwK IAlzaXplX3QJCXVjaGFyX2JzaXplOwogCVNpemUJCXJlc3VsdF9ic2l6ZTsKIAotCUFzc2VydChs b2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOwotCiAJaW5pdF9pY3VfY29udmVy dGVyKCk7CiAKIAl1bGVuID0gdWNoYXJfbGVuZ3RoKGljdV9jb252ZXJ0ZXIsIHNyYywgc3JjbGVu KTsKQEAgLTU3NCw4ICs1NjksNiBAQCBzdHJueGZybV9wcmVmaXhfaWN1X3V0ZjgoY2hhciAqZGVz dCwgc2l6ZV90IGRlc3RzaXplLAogCXVpbnQzMl90CXN0YXRlWzJdOwogCVVFcnJvckNvZGUJc3Rh dHVzOwogCi0JQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7Ci0K IAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOwogCiAJdWl0ZXJfc2V0 VVRGOCgmaXRlciwgc3JjLCBzcmNsZW4pOwpAQCAtNzI2LDggKzcxOSw2IEBAIHN0cm5jb2xsX2lj dShjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCiAJCQkgICAqdWNoYXIyOwogCWludAkJ CXJlc3VsdDsKIAotCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1Up OwotCiAJLyogaWYgZW5jb2RpbmcgaXMgVVRGOCwgdXNlIG1vcmUgZWZmaWNpZW50IHN0cm5jb2xs X2ljdV91dGY4ICovCiAjaWZkZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4CiAJQXNzZXJ0KEdldERh dGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4KTsKQEAgLTc3Niw4ICs3NjcsNiBAQCBzdHJueGZy bV9wcmVmaXhfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwKIAlzaXplX3QJCXVjaGFy X2JzaXplOwogCVNpemUJCXJlc3VsdF9ic2l6ZTsKIAotCUFzc2VydChsb2NhbGUtPnByb3ZpZGVy ID09IENPTExQUk9WSURFUl9JQ1UpOwotCiAJLyogaWYgZW5jb2RpbmcgaXMgVVRGOCwgdXNlIG1v cmUgZWZmaWNpZW50IHN0cm54ZnJtX3ByZWZpeF9pY3VfdXRmOCAqLwogCUFzc2VydChHZXREYXRh YmFzZUVuY29kaW5nKCkgIT0gUEdfVVRGOCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ19sb2NhbGVfbGliYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2Fs ZV9saWJjLmMKaW5kZXggODYxYzRmNjhlNC4uNzcwOGU5ZGU5NiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9saWJjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3BnX2xvY2FsZV9saWJjLmMKQEAgLTQ2Niw3ICs0NjYsNiBAQCBjcmVhdGVfcGdfbG9jYWxl X2xpYmMoT2lkIGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCWxvYyA9IG1ha2VfbGli Y19jb2xsYXRvcihjb2xsYXRlLCBjdHlwZSk7CiAKIAlyZXN1bHQgPSBNZW1vcnlDb250ZXh0QWxs b2NaZXJvKGNvbnRleHQsIHNpemVvZihzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCkpOwotCXJlc3Vs dC0+cHJvdmlkZXIgPSBDT0xMUFJPVklERVJfTElCQzsKIAlyZXN1bHQtPmRldGVybWluaXN0aWMg PSB0cnVlOwogCXJlc3VsdC0+Y29sbGF0ZV9pc19jID0gKHN0cmNtcChjb2xsYXRlLCAiQyIpID09 IDApIHx8CiAJCShzdHJjbXAoY29sbGF0ZSwgIlBPU0lYIikgPT0gMCk7CkBAIC01ODYsOCArNTg1 LDYgQEAgc3RybmNvbGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsIGNvbnN0 IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMiwKIAljb25zdCBjaGFyICphcmcybjsKIAlpbnQJCQly ZXN1bHQ7CiAKLQlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7 Ci0KIAlpZiAoYnVmc2l6ZTEgKyBidWZzaXplMiA+IFRFWFRCVUZMRU4pCiAJCWJ1ZiA9IHBhbGxv YyhidWZzaXplMSArIGJ1ZnNpemUyKTsKIApAQCAtNjQyLDggKzYzOSw2IEBAIHN0cm54ZnJtX2xp YmMoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qg c3JjbGVuLAogCXNpemVfdAkJYnVmc2l6ZSA9IHNyY2xlbiArIDE7CiAJc2l6ZV90CQlyZXN1bHQ7 CiAKLQlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7Ci0KIAlp ZiAoc3JjbGVuID09IC0xKQogCQlyZXR1cm4gc3RyeGZybV9sKGRlc3QsIHNyYywgZGVzdHNpemUs IGxvY2FsZS0+aW5mby5sdCk7CiAKQEAgLTY4Nyw3ICs2ODIsNiBAQCBzdHJuY29sbF9saWJjX3dp bjMyX3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgc3NpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcy LAogCWludAkJCXI7CiAJaW50CQkJcmVzdWx0OwogCi0JQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0xJQkMpOwogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0g UEdfVVRGOCk7CiAKIAlpZiAobGVuMSA9PSAtMSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKaW5kZXggYzcx Y2YzODAyMC4uOThhODYwZDBiMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9j YWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKQEAgLTE2MCw3ICsxNjAs NiBAQCBzdHJ1Y3QgY3R5cGVfbWV0aG9kcwogICovCiBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdAog ewotCWNoYXIJCXByb3ZpZGVyOwogCWJvb2wJCWRldGVybWluaXN0aWM7CiAJYm9vbAkJY29sbGF0 ZV9pc19jOwogCWJvb2wJCWN0eXBlX2lzX2M7Ci0tIAoyLjM0LjEKCg== --=-LTFx9IBzSoydfVtEfUQa Content-Disposition: attachment; filename*0=v8-0005-Make-provider-data-in-pg_locale_t-an-opaque-point.pat; filename*1=ch Content-Type: text/x-patch; name="v8-0005-Make-provider-data-in-pg_locale_t-an-opaque-point.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBlMWM2NDE0ZmNhYmQwNzViMzNhNGVlMWVkYmQzMjMxYjY1N2M5ZTY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDcgT2N0IDIwMjQgMTM6MzY6NDQgLTA3MDAKU3ViamVjdDogW1BBVENIIHY4IDUvN10gTWFr ZSBwcm92aWRlciBkYXRhIGluIHBnX2xvY2FsZV90IGFuIG9wYXF1ZSBwb2ludGVyLgoKLS0tCiBz cmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyB8ICAxMSArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYyAgICAgfCAgNDAgKysrKystLQogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9saWJjLmMgICAgfCAxMzEgKysrKysrKysrKysrKyst LS0tLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgICAgICAgICAgfCAgMTYg Ky0tCiA0IGZpbGVzIGNoYW5nZWQsIDEyNyBpbnNlcnRpb25zKCspLCA3MSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCmluZGV4IGI0YWJkZTFh ZmQuLmExZWIwZTQ1OWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2Nh bGVfYnVpbHRpbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRp bi5jCkBAIC0yNSw2ICsyNSwxMSBAQAogZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19sb2Nh bGVfYnVpbHRpbihPaWQgY29sbGlkLAogCQkJCQkJCQkJCQlNZW1vcnlDb250ZXh0IGNvbnRleHQp OwogCitzdHJ1Y3QgYnVpbHRpbl9wcm92aWRlcgoreworCWNvbnN0IGNoYXIgKmxvY2FsZTsKK307 CisKIHN0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZQogewogCWNvbnN0IGNoYXIgKnN0cjsKQEAgLTE1 NCw2ICsxNTksNyBAQCBwZ19sb2NhbGVfdAogY3JlYXRlX3BnX2xvY2FsZV9idWlsdGluKE9pZCBj b2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkKIHsKIAljb25zdCBjaGFyICpsb2NzdHI7CisJ c3RydWN0IGJ1aWx0aW5fcHJvdmlkZXIgKmJ1aWx0aW47CiAJcGdfbG9jYWxlX3QgcmVzdWx0Owog CiAJaWYgKGNvbGxpZCA9PSBERUZBVUxUX0NPTExBVElPTl9PSUQpCkBAIC0xODcsNyArMTkzLDEw IEBAIGNyZWF0ZV9wZ19sb2NhbGVfYnVpbHRpbihPaWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNv bnRleHQpCiAKIAlyZXN1bHQgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKGNvbnRleHQsIHNpemVv ZihzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCkpOwogCi0JcmVzdWx0LT5pbmZvLmJ1aWx0aW4ubG9j YWxlID0gTWVtb3J5Q29udGV4dFN0cmR1cChjb250ZXh0LCBsb2NzdHIpOworCWJ1aWx0aW4gPSBN ZW1vcnlDb250ZXh0QWxsb2NaZXJvKGNvbnRleHQsIHNpemVvZihzdHJ1Y3QgYnVpbHRpbl9wcm92 aWRlcikpOworCWJ1aWx0aW4tPmxvY2FsZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoY29udGV4dCwg bG9jc3RyKTsKKwlyZXN1bHQtPnByb3ZpZGVyX2RhdGEgPSAodm9pZCAqKSBidWlsdGluOworCiAJ cmVzdWx0LT5kZXRlcm1pbmlzdGljID0gdHJ1ZTsKIAlyZXN1bHQtPmNvbGxhdGVfaXNfYyA9IHRy dWU7CiAJcmVzdWx0LT5jdHlwZV9pc19jID0gKHN0cmNtcChsb2NzdHIsICJDIikgPT0gMCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYwppbmRleCA3YTJjYThhYzg0Li41N2YzNjZm NzQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMKQEAgLTM5LDYgKzM5LDEy IEBAIGV4dGVybiBwZ19sb2NhbGVfdCBjcmVhdGVfcGdfbG9jYWxlX2ljdShPaWQgY29sbGlkLCBN ZW1vcnlDb250ZXh0IGNvbnRleHQpOwogCiAjaWZkZWYgVVNFX0lDVQogCitzdHJ1Y3QgaWN1X3By b3ZpZGVyCit7CisJY29uc3QgY2hhciAqbG9jYWxlOworCVVDb2xsYXRvciAgKnVjb2w7Cit9Owor CiBleHRlcm4gVUNvbGxhdG9yICpwZ191Y29sX29wZW4oY29uc3QgY2hhciAqbG9jX3N0cik7CiAK IHN0YXRpYyBpbnQJc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVuMSwK QEAgLTE4OSw2ICsxOTUsNyBAQCBjcmVhdGVfcGdfbG9jYWxlX2ljdShPaWQgY29sbGlkLCBNZW1v cnlDb250ZXh0IGNvbnRleHQpCiAJYm9vbAkJZGV0ZXJtaW5pc3RpYzsKIAljb25zdCBjaGFyICpp Y3Vsb2NzdHI7CiAJY29uc3QgY2hhciAqaWN1cnVsZXMgPSBOVUxMOworCXN0cnVjdCBpY3VfcHJv dmlkZXIgKmljdTsKIAlVQ29sbGF0b3IgICpjb2xsYXRvcjsKIAlwZ19sb2NhbGVfdCByZXN1bHQ7 CiAKQEAgLTI0MCw4ICsyNDcsMTIgQEAgY3JlYXRlX3BnX2xvY2FsZV9pY3UoT2lkIGNvbGxpZCwg TWVtb3J5Q29udGV4dCBjb250ZXh0KQogCWNvbGxhdG9yID0gbWFrZV9pY3VfY29sbGF0b3IoaWN1 bG9jc3RyLCBpY3VydWxlcyk7CiAKIAlyZXN1bHQgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKGNv bnRleHQsIHNpemVvZihzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCkpOwotCXJlc3VsdC0+aW5mby5p Y3UubG9jYWxlID0gTWVtb3J5Q29udGV4dFN0cmR1cChjb250ZXh0LCBpY3Vsb2NzdHIpOwotCXJl c3VsdC0+aW5mby5pY3UudWNvbCA9IGNvbGxhdG9yOworCisJaWN1ID0gTWVtb3J5Q29udGV4dEFs bG9jWmVybyhjb250ZXh0LCBzaXplb2Yoc3RydWN0IGljdV9wcm92aWRlcikpOworCWljdS0+bG9j YWxlID0gTWVtb3J5Q29udGV4dFN0cmR1cChjb250ZXh0LCBpY3Vsb2NzdHIpOworCWljdS0+dWNv bCA9IGNvbGxhdG9yOworCXJlc3VsdC0+cHJvdmlkZXJfZGF0YSA9ICh2b2lkICopIGljdTsKKwog CXJlc3VsdC0+ZGV0ZXJtaW5pc3RpYyA9IGRldGVybWluaXN0aWM7CiAJcmVzdWx0LT5jb2xsYXRl X2lzX2MgPSBmYWxzZTsKIAlyZXN1bHQtPmN0eXBlX2lzX2MgPSBmYWxzZTsKQEAgLTQ5NywxMSAr NTA4LDEyIEBAIHN0cm5jb2xsX2ljdV91dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3QgbGVu MSwgY29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4yCiB7CiAJaW50CQkJcmVzdWx0OwogCVVF cnJvckNvZGUJc3RhdHVzOworCXN0cnVjdCBpY3VfcHJvdmlkZXIgKmljdSA9IChzdHJ1Y3QgaWN1 X3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKIAogCUFzc2VydChHZXREYXRhYmFz ZUVuY29kaW5nKCkgPT0gUEdfVVRGOCk7CiAKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JcmVz dWx0ID0gdWNvbF9zdHJjb2xsVVRGOChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJcmVzdWx0ID0g dWNvbF9zdHJjb2xsVVRGOChpY3UtPnVjb2wsCiAJCQkJCQkJICBhcmcxLCBsZW4xLAogCQkJCQkJ CSAgYXJnMiwgbGVuMiwKIAkJCQkJCQkgICZzdGF0dXMpOwpAQCAtNTI1LDYgKzUzNyw4IEBAIHN0 cm54ZnJtX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywg c3NpemVfdCBzcmNsZW4sCiAJc2l6ZV90CQl1Y2hhcl9ic2l6ZTsKIAlTaXplCQlyZXN1bHRfYnNp emU7CiAKKwlzdHJ1Y3QgaWN1X3Byb3ZpZGVyICppY3UgPSAoc3RydWN0IGljdV9wcm92aWRlciAq KSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKIAogCXVs ZW4gPSB1Y2hhcl9sZW5ndGgoaWN1X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOwpAQCAtNTM4LDcg KzU1Miw3IEBAIHN0cm54ZnJtX2ljdShjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAKIAl1bGVuID0gdWNoYXJfY29udmVydChpY3Vf Y29udmVydGVyLCB1Y2hhciwgdWxlbiArIDEsIHNyYywgc3JjbGVuKTsKIAotCXJlc3VsdF9ic2l6 ZSA9IHVjb2xfZ2V0U29ydEtleShsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJcmVzdWx0X2JzaXpl ID0gdWNvbF9nZXRTb3J0S2V5KGljdS0+dWNvbCwKIAkJCQkJCQkJICAgdWNoYXIsIHVsZW4sCiAJ CQkJCQkJCSAgICh1aW50OF90ICopIGRlc3QsIGRlc3RzaXplKTsKIApAQCAtNTY5LDEyICs1ODMs MTQgQEAgc3Rybnhmcm1fcHJlZml4X2ljdV91dGY4KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6 ZSwKIAl1aW50MzJfdAlzdGF0ZVsyXTsKIAlVRXJyb3JDb2RlCXN0YXR1czsKIAorCXN0cnVjdCBp Y3VfcHJvdmlkZXIgKmljdSA9IChzdHJ1Y3QgaWN1X3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlk ZXJfZGF0YTsKKwogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCk7CiAK IAl1aXRlcl9zZXRVVEY4KCZpdGVyLCBzcmMsIHNyY2xlbik7CiAJc3RhdGVbMF0gPSBzdGF0ZVsx XSA9IDA7CS8qIHdvbid0IG5lZWQgdGhhdCBhZ2FpbiAqLwogCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKLQlyZXN1bHQgPSB1Y29sX25leHRTb3J0S2V5UGFydChsb2NhbGUtPmluZm8uaWN1LnVjb2ws CisJcmVzdWx0ID0gdWNvbF9uZXh0U29ydEtleVBhcnQoaWN1LT51Y29sLAogCQkJCQkJCQkgICZp dGVyLAogCQkJCQkJCQkgIHN0YXRlLAogCQkJCQkJCQkgICh1aW50OF90ICopIGRlc3QsCkBAIC02 NjUsMTEgKzY4MSwxMyBAQCBpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVuYywg cGdfbG9jYWxlX3QgbXlsb2NhbGUsCiAJVUVycm9yQ29kZQlzdGF0dXM7CiAJaW50MzJfdAkJbGVu X2Rlc3Q7CiAKKwlzdHJ1Y3QgaWN1X3Byb3ZpZGVyICppY3UgPSAoc3RydWN0IGljdV9wcm92aWRl ciAqKSBteWxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCWxlbl9kZXN0ID0gbGVuX3NvdXJjZTsJ CS8qIHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVuZ3RoICovCiAJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhs ZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOwogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsK IAlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5f c291cmNlLAotCQkJCQlteWxvY2FsZS0+aW5mby5pY3UubG9jYWxlLCAmc3RhdHVzKTsKKwkJCQkJ aWN1LT5sb2NhbGUsICZzdGF0dXMpOwogCWlmIChzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1df RVJST1IpCiAJewogCQkvKiB0cnkgYWdhaW4gd2l0aCBhZGp1c3RlZCBsZW5ndGggKi8KQEAgLTY3 Nyw3ICs2OTUsNyBAQCBpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVuYywgcGdf bG9jYWxlX3QgbXlsb2NhbGUsCiAJCSpidWZmX2Rlc3QgPSBwYWxsb2MobGVuX2Rlc3QgKiBzaXpl b2YoKipidWZmX2Rlc3QpKTsKIAkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCQlsZW5fZGVzdCA9 IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291cmNlLAotCQkJ CQkJbXlsb2NhbGUtPmluZm8uaWN1LmxvY2FsZSwgJnN0YXR1cyk7CisJCQkJCQlpY3UtPmxvY2Fs ZSwgJnN0YXR1cyk7CiAJfQogCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJP UiwKQEAgLTcxOSw2ICs3MzcsOCBAQCBzdHJuY29sbF9pY3UoY29uc3QgY2hhciAqYXJnMSwgc3Np emVfdCBsZW4xLAogCQkJICAgKnVjaGFyMjsKIAlpbnQJCQlyZXN1bHQ7CiAKKwlzdHJ1Y3QgaWN1 X3Byb3ZpZGVyICppY3UgPSAoc3RydWN0IGljdV9wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVy X2RhdGE7CisKIAkvKiBpZiBlbmNvZGluZyBpcyBVVEY4LCB1c2UgbW9yZSBlZmZpY2llbnQgc3Ry bmNvbGxfaWN1X3V0ZjggKi8KICNpZmRlZiBIQVZFX1VDT0xfU1RSQ09MTFVURjgKIAlBc3NlcnQo R2V0RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOwpAQCAtNzQxLDcgKzc2MSw3IEBAIHN0 cm5jb2xsX2ljdShjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCiAJdWxlbjEgPSB1Y2hh cl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyMSwgdWxlbjEgKyAxLCBhcmcxLCBsZW4xKTsK IAl1bGVuMiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwgdWNoYXIyLCB1bGVuMiArIDEs IGFyZzIsIGxlbjIpOwogCi0JcmVzdWx0ID0gdWNvbF9zdHJjb2xsKGxvY2FsZS0+aW5mby5pY3Uu dWNvbCwKKwlyZXN1bHQgPSB1Y29sX3N0cmNvbGwoaWN1LT51Y29sLAogCQkJCQkJICB1Y2hhcjEs IHVsZW4xLAogCQkJCQkJICB1Y2hhcjIsIHVsZW4yKTsKIApAQCAtNzY3LDYgKzc4Nyw4IEBAIHN0 cm54ZnJtX3ByZWZpeF9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLAogCXNpemVfdAkJ dWNoYXJfYnNpemU7CiAJU2l6ZQkJcmVzdWx0X2JzaXplOwogCisJc3RydWN0IGljdV9wcm92aWRl ciAqaWN1ID0gKHN0cnVjdCBpY3VfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOwor CiAJLyogaWYgZW5jb2RpbmcgaXMgVVRGOCwgdXNlIG1vcmUgZWZmaWNpZW50IHN0cm54ZnJtX3By ZWZpeF9pY3VfdXRmOCAqLwogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgIT0gUEdfVVRG OCk7CiAKQEAgLTc4Niw3ICs4MDgsNyBAQCBzdHJueGZybV9wcmVmaXhfaWN1KGNoYXIgKmRlc3Qs IHNpemVfdCBkZXN0c2l6ZSwKIAl1aXRlcl9zZXRTdHJpbmcoJml0ZXIsIHVjaGFyLCB1bGVuKTsK IAlzdGF0ZVswXSA9IHN0YXRlWzFdID0gMDsJLyogd29uJ3QgbmVlZCB0aGF0IGFnYWluICovCiAJ c3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCXJlc3VsdF9ic2l6ZSA9IHVjb2xfbmV4dFNvcnRLZXlQ YXJ0KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwlyZXN1bHRfYnNpemUgPSB1Y29sX25leHRTb3J0 S2V5UGFydChpY3UtPnVjb2wsCiAJCQkJCQkJCQkJJml0ZXIsCiAJCQkJCQkJCQkJc3RhdGUsCiAJ CQkJCQkJCQkJKHVpbnQ4X3QgKikgZGVzdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGVfbGliYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9s aWJjLmMKaW5kZXggNzcwOGU5ZGU5Ni4uODczOGEwMjIxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9saWJjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3BnX2xvY2FsZV9saWJjLmMKQEAgLTEsMyArMSw0IEBACisKIC8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq CiAgKiBQb3N0Z3JlU1FMIGxvY2FsZSB1dGlsaXRpZXMgZm9yIGxpYmMKQEAgLTMzLDYgKzM0LDEx IEBACiAgKi8KICNkZWZpbmUJCVRFWFRCVUZMRU4JCQkxMDI0CiAKK3N0cnVjdCBsaWJjX3Byb3Zp ZGVyCit7CisJbG9jYWxlX3QJbHQ7Cit9OworCiBleHRlcm4gcGdfbG9jYWxlX3QgY3JlYXRlX3Bn X2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAKIHN0YXRp YyBpbnQJc3RybmNvbGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsCkBAIC0x MTgsMTcgKzEyNCwyMSBAQCBjaGFyX2lzX2Nhc2VkX2xpYmMoY2hhciBjaCwgcGdfbG9jYWxlX3Qg bG9jYWxlKQogewogCWJvb2wJCWlzX211bHRpYnl0ZSA9IHBnX2RhdGFiYXNlX2VuY29kaW5nX21h eF9sZW5ndGgoKSA+IDE7CiAKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3Qg bGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlpZiAoaXNfbXVsdGli eXRlICYmIElTX0hJR0hCSVRfU0VUKGNoKSkKIAkJcmV0dXJuIHRydWU7CiAJZWxzZQotCQlyZXR1 cm4gaXNhbHBoYV9sKCh1bnNpZ25lZCBjaGFyKSBjaCwgbG9jYWxlLT5pbmZvLmx0KTsKKwkJcmV0 dXJuIGlzYWxwaGFfbCgodW5zaWduZWQgY2hhcikgY2gsIGxpYmMtPmx0KTsKIH0KIAogc3RhdGlj IGNoYXIKIGNoYXJfdG9sb3dlcl9saWJjKHVuc2lnbmVkIGNoYXIgY2gsIHBnX2xvY2FsZV90IGxv Y2FsZSkKIHsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3QgbGliY19wcm92 aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlBc3NlcnQocGdfZGF0YWJhc2VfZW5j b2RpbmdfbWF4X2xlbmd0aCgpID09IDEpOwotCXJldHVybiB0b2xvd2VyX2woY2gsIGxvY2FsZS0+ aW5mby5sdCk7CisJcmV0dXJuIHRvbG93ZXJfbChjaCwgbGliYy0+bHQpOwogfQogCiBzdGF0aWMg Y29uc3Qgc3RydWN0IGN0eXBlX21ldGhvZHMgY3R5cGVfbWV0aG9kc19saWJjX3NiID0gewpAQCAt MTc5LDcgKzE4OSw3IEBAIHN0cmxvd2VyX2xpYmNfc2IoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3Rz aXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCiAJaWYgKHNyY2xlbiArIDEg PD0gZGVzdHNpemUpCiAJewotCQlsb2NhbGVfdAlsb2MgPSBsb2NhbGUtPmluZm8ubHQ7CisJCXN0 cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2Fs ZS0+cHJvdmlkZXJfZGF0YTsKIAkJY2hhcgkgICAqcDsKIAogCQlpZiAoc3JjbGVuICsgMSA+IGRl c3RzaXplKQpAQCAtMTk2LDcgKzIwNiw3IEBAIHN0cmxvd2VyX2xpYmNfc2IoY2hhciAqZGVzdCwg c2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCQkgKiB3 aGF0IHRoZSBjb2xsYXRpb24gc2F5cy4KIAkJICovCiAJCWZvciAocCA9IGRlc3Q7ICpwOyBwKysp Ci0JCQkqcCA9IHRvbG93ZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIGxvYyk7CisJCQkqcCA9IHRv bG93ZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIGxpYmMtPmx0KTsKIAl9CiAKIAlyZXR1cm4gc3Jj bGVuOwpAQCAtMjA2LDcgKzIxNiw4IEBAIHN0YXRpYyBzaXplX3QKIHN0cmxvd2VyX2xpYmNfbWIo Y2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3Jj bGVuLAogCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JbG9jYWxlX3QJbG9jID0gbG9jYWxl LT5pbmZvLmx0OworCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3By b3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCXNpemVfdAkJcmVzdWx0X3NpemU7 CiAJd2NoYXJfdCAgICAqd29ya3NwYWNlOwogCWNoYXIJICAgKnJlc3VsdDsKQEAgLTIyOCw3ICsy MzksNyBAQCBzdHJsb3dlcl9saWJjX21iKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29u c3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAljaGFyMndjaGFyKHdvcmtzcGFjZSwgc3Jj bGVuICsgMSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7CiAKIAlmb3IgKGN1cnJfY2hhciA9IDA7IHdv cmtzcGFjZVtjdXJyX2NoYXJdICE9IDA7IGN1cnJfY2hhcisrKQotCQl3b3Jrc3BhY2VbY3Vycl9j aGFyXSA9IHRvd2xvd2VyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxvYyk7CisJCXdvcmtzcGFj ZVtjdXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbGliYy0+bHQp OwogCiAJLyoKIAkgKiBNYWtlIHJlc3VsdCBsYXJnZSBlbm91Z2g7IGNhc2UgY2hhbmdlIG1pZ2h0 IGNoYW5nZSBudW1iZXIgb2YgYnl0ZXMKQEAgLTI1OSw3ICsyNzAsNyBAQCBzdHJ0aXRsZV9saWJj X3NiKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90 IHNyY2xlbiwKIAogCWlmIChzcmNsZW4gKyAxIDw9IGRlc3RzaXplKQogCXsKLQkJbG9jYWxlX3QJ bG9jID0gbG9jYWxlLT5pbmZvLmx0OworCQlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChz dHJ1Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CiAJCWludAkJCXdh c2FsbnVtID0gZmFsc2U7CiAJCWNoYXIJICAgKnA7CiAKQEAgLTI3NiwxMCArMjg3LDEwIEBAIHN0 cnRpdGxlX2xpYmNfc2IoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpz cmMsIHNzaXplX3Qgc3JjbGVuLAogCQlmb3IgKHAgPSBkZXN0OyAqcDsgcCsrKQogCQl7CiAJCQlp ZiAod2FzYWxudW0pCi0JCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBsb2Mp OworCQkJCSpwID0gdG9sb3dlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbGliYy0+bHQpOwogCQkJ ZWxzZQotCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbG9jKTsKLQkJCXdh c2FsbnVtID0gaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbG9jKTsKKwkJCQkqcCA9IHRv dXBwZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIGxpYmMtPmx0KTsKKwkJCXdhc2FsbnVtID0gaXNh bG51bV9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbGliYy0+bHQpOwogCQl9CiAJfQogCkBAIC0yOTAs NyArMzAxLDggQEAgc3RhdGljIHNpemVfdAogc3RydGl0bGVfbGliY19tYihjaGFyICpkZXN0LCBz aXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJCQkJIHBn X2xvY2FsZV90IGxvY2FsZSkKIHsKLQlsb2NhbGVfdAlsb2MgPSBsb2NhbGUtPmluZm8ubHQ7CisJ c3RydWN0IGxpYmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9j YWxlLT5wcm92aWRlcl9kYXRhOworCiAJaW50CQkJd2FzYWxudW0gPSBmYWxzZTsKIAlzaXplX3QJ CXJlc3VsdF9zaXplOwogCXdjaGFyX3QgICAgKndvcmtzcGFjZTsKQEAgLTMxNSwxMCArMzI3LDEw IEBAIHN0cnRpdGxlX2xpYmNfbWIoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBj aGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCWZvciAoY3Vycl9jaGFyID0gMDsgd29ya3NwYWNl W2N1cnJfY2hhcl0gIT0gMDsgY3Vycl9jaGFyKyspCiAJewogCQlpZiAod2FzYWxudW0pCi0JCQl3 b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd2xvd2VyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxv Yyk7CisJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd2xvd2VyX2wod29ya3NwYWNlW2N1cnJf Y2hhcl0sIGxpYmMtPmx0KTsKIAkJZWxzZQotCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1 cHBlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBsb2MpOwotCQl3YXNhbG51bSA9IGlzd2FsbnVt X2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxvYyk7CisJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9 IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxpYmMtPmx0KTsKKwkJd2FzYWxudW0g PSBpc3dhbG51bV9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBsaWJjLT5sdCk7CiAJfQogCiAJLyoK QEAgLTM1MCw3ICszNjIsNyBAQCBzdHJ1cHBlcl9saWJjX3NiKGNoYXIgKmRlc3QsIHNpemVfdCBk ZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAogCWlmIChzcmNsZW4g KyAxIDw9IGRlc3RzaXplKQogCXsKLQkJbG9jYWxlX3QJbG9jID0gbG9jYWxlLT5pbmZvLmx0Owor CQlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3QgbGliY19wcm92aWRlciAqKSBs b2NhbGUtPnByb3ZpZGVyX2RhdGE7CiAJCWNoYXIJICAgKnA7CiAKIAkJbWVtY3B5KGRlc3QsIHNy Yywgc3JjbGVuKTsKQEAgLTM2NCw3ICszNzYsNyBAQCBzdHJ1cHBlcl9saWJjX3NiKGNoYXIgKmRl c3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJ ICogd2hhdCB0aGUgY29sbGF0aW9uIHNheXMuCiAJCSAqLwogCQlmb3IgKHAgPSBkZXN0OyAqcDsg cCsrKQotCQkJKnAgPSB0b3VwcGVyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBsb2MpOworCQkJKnAg PSB0b3VwcGVyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBsaWJjLT5sdCk7CiAJfQogCiAJcmV0dXJu IHNyY2xlbjsKQEAgLTM3NCw3ICszODYsOCBAQCBzdGF0aWMgc2l6ZV90CiBzdHJ1cHBlcl9saWJj X21iKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90 IHNyY2xlbiwKIAkJCQkgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCWxvY2FsZV90CWxvYyA9IGxv Y2FsZS0+aW5mby5sdDsKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1Y3QgbGli Y19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlzaXplX3QJCXJlc3VsdF9z aXplOwogCXdjaGFyX3QgICAgKndvcmtzcGFjZTsKIAljaGFyCSAgICpyZXN1bHQ7CkBAIC0zOTYs NyArNDA5LDcgQEAgc3RydXBwZXJfbGliY19tYihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUs IGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJY2hhcjJ3Y2hhcih3b3Jrc3BhY2Us IHNyY2xlbiArIDEsIHNyYywgc3JjbGVuLCBsb2NhbGUpOwogCiAJZm9yIChjdXJyX2NoYXIgPSAw OyB3b3Jrc3BhY2VbY3Vycl9jaGFyXSAhPSAwOyBjdXJyX2NoYXIrKykKLQkJd29ya3NwYWNlW2N1 cnJfY2hhcl0gPSB0b3d1cHBlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBsb2MpOworCQl3b3Jr c3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIGxpYmMt Pmx0KTsKIAogCS8qCiAJICogTWFrZSByZXN1bHQgbGFyZ2UgZW5vdWdoOyBjYXNlIGNoYW5nZSBt aWdodCBjaGFuZ2UgbnVtYmVyIG9mIGJ5dGVzCkBAIC00MjQsNiArNDM3LDcgQEAgY3JlYXRlX3Bn X2xvY2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAljb25zdCBj aGFyICpjb2xsYXRlOwogCWNvbnN0IGNoYXIgKmN0eXBlOwogCWxvY2FsZV90CWxvYzsKKwlzdHJ1 Y3QgbGliY19wcm92aWRlciAqbGliYzsKIAlwZ19sb2NhbGVfdCByZXN1bHQ7CiAKIAlpZiAoY29s bGlkID09IERFRkFVTFRfQ09MTEFUSU9OX09JRCkKQEAgLTQ2MiwxNiArNDc2LDE5IEBAIGNyZWF0 ZV9wZ19sb2NhbGVfbGliYyhPaWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpCiAJCVJl bGVhc2VTeXNDYWNoZSh0cCk7CiAJfQogCi0KIAlsb2MgPSBtYWtlX2xpYmNfY29sbGF0b3IoY29s bGF0ZSwgY3R5cGUpOwogCiAJcmVzdWx0ID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhjb250ZXh0 LCBzaXplb2Yoc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKKworCWxpYmMgPSBNZW1vcnlDb250 ZXh0QWxsb2NaZXJvKGNvbnRleHQsIHNpemVvZihzdHJ1Y3QgbGliY19wcm92aWRlcikpOworCWxp YmMtPmx0ID0gbG9jOworCXJlc3VsdC0+cHJvdmlkZXJfZGF0YSA9ICh2b2lkICopIGxpYmM7CisK IAlyZXN1bHQtPmRldGVybWluaXN0aWMgPSB0cnVlOwogCXJlc3VsdC0+Y29sbGF0ZV9pc19jID0g KHN0cmNtcChjb2xsYXRlLCAiQyIpID09IDApIHx8CiAJCShzdHJjbXAoY29sbGF0ZSwgIlBPU0lY IikgPT0gMCk7CiAJcmVzdWx0LT5jdHlwZV9pc19jID0gKHN0cmNtcChjdHlwZSwgIkMiKSA9PSAw KSB8fAogCQkoc3RyY21wKGN0eXBlLCAiUE9TSVgiKSA9PSAwKTsKLQlyZXN1bHQtPmluZm8ubHQg PSBsb2M7CiAJaWYgKCFyZXN1bHQtPmNvbGxhdGVfaXNfYykKIAl7CiAjaWZkZWYgV0lOMzIKQEAg LTU4NSw2ICs2MDIsOCBAQCBzdHJuY29sbF9saWJjKGNvbnN0IGNoYXIgKmFyZzEsIHNzaXplX3Qg bGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc3NpemVfdCBsZW4yLAogCWNvbnN0IGNoYXIgKmFyZzJu OwogCWludAkJCXJlc3VsdDsKIAorCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVj dCBsaWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCWlmIChidWZzaXpl MSArIGJ1ZnNpemUyID4gVEVYVEJVRkxFTikKIAkJYnVmID0gcGFsbG9jKGJ1ZnNpemUxICsgYnVm c2l6ZTIpOwogCkBAIC02MTUsNyArNjM0LDcgQEAgc3RybmNvbGxfbGliYyhjb25zdCBjaGFyICph cmcxLCBzc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMiwKIAkJYXJn Mm4gPSBidWYyOwogCX0KIAotCXJlc3VsdCA9IHN0cmNvbGxfbChhcmcxbiwgYXJnMm4sIGxvY2Fs ZS0+aW5mby5sdCk7CisJcmVzdWx0ID0gc3RyY29sbF9sKGFyZzFuLCBhcmcybiwgbGliYy0+bHQp OwogCiAJaWYgKGJ1ZiAhPSBzYnVmKQogCQlwZnJlZShidWYpOwpAQCAtNjM5LDggKzY1OCwxMCBA QCBzdHJueGZybV9saWJjKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAq c3JjLCBzc2l6ZV90IHNyY2xlbiwKIAlzaXplX3QJCWJ1ZnNpemUgPSBzcmNsZW4gKyAxOwogCXNp emVfdAkJcmVzdWx0OwogCisJc3RydWN0IGxpYmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxp YmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOworCiAJaWYgKHNyY2xlbiA9PSAt MSkKLQkJcmV0dXJuIHN0cnhmcm1fbChkZXN0LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUtPmluZm8u bHQpOworCQlyZXR1cm4gc3RyeGZybV9sKGRlc3QsIHNyYywgZGVzdHNpemUsIGxpYmMtPmx0KTsK IAogCWlmIChidWZzaXplID4gVEVYVEJVRkxFTikKIAkJYnVmID0gcGFsbG9jKGJ1ZnNpemUpOwpA QCAtNjQ5LDcgKzY3MCw3IEBAIHN0cm54ZnJtX2xpYmMoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3Rz aXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCW1lbWNweShidWYsIHNyYywg c3JjbGVuKTsKIAlidWZbc3JjbGVuXSA9ICdcMCc7CiAKLQlyZXN1bHQgPSBzdHJ4ZnJtX2woZGVz dCwgYnVmLCBkZXN0c2l6ZSwgbG9jYWxlLT5pbmZvLmx0KTsKKwlyZXN1bHQgPSBzdHJ4ZnJtX2wo ZGVzdCwgYnVmLCBkZXN0c2l6ZSwgbGliYy0+bHQpOwogCiAJaWYgKGJ1ZiAhPSBzYnVmKQogCQlw ZnJlZShidWYpOwpAQCAtNjgyLDYgKzcwMyw4IEBAIHN0cm5jb2xsX2xpYmNfd2luMzJfdXRmOChj b25zdCBjaGFyICphcmcxLCBzc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsCiAJaW50CQkJ cjsKIAlpbnQJCQlyZXN1bHQ7CiAKKwlzdHJ1Y3QgbGliY19wcm92aWRlciAqbGliYyA9IChzdHJ1 Y3QgbGliY19wcm92aWRlciAqKSBsb2NhbGUtPnByb3ZpZGVyX2RhdGE7CisKIAlBc3NlcnQoR2V0 RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOwogCiAJaWYgKGxlbjEgPT0gLTEpCkBAIC03 MjYsNyArNzQ5LDcgQEAgc3RybmNvbGxfbGliY193aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFyZzEs IHNzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwKIAkoKExQV1NUUikgYTJwKVtyXSA9IDA7 CiAKIAllcnJubyA9IDA7Ci0JcmVzdWx0ID0gd2NzY29sbF9sKChMUFdTVFIpIGExcCwgKExQV1NU UikgYTJwLCBsb2NhbGUtPmluZm8ubHQpOworCXJlc3VsdCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBh MXAsIChMUFdTVFIpIGEycCwgbGliYy0+bHQpOwogCWlmIChyZXN1bHQgPT0gMjE0NzQ4MzY0NykJ LyogX05MU0NNUEVSUk9SOyBtaXNzaW5nIGZyb20gbWluZ3cgaGVhZGVycyAqLwogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb21wYXJlIFVuaWNvZGUgc3RyaW5nczog JW0iKSkpOwpAQCAtNzczLDI3ICs3OTYsMjkgQEAgY2hhcl9wcm9wZXJ0aWVzX2xpYmNfc2IocGdf d2NoYXIgd2MsIGludCBtYXNrLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7CiAJaW50CQkJcmVzdWx0 ID0gMDsKIAorCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3Zp ZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCUFzc2VydCghbG9jYWxlLT5jdHlwZV9p c19jKTsKIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOwogCiAJaWYg KHdjID4gKHBnX3djaGFyKSBVQ0hBUl9NQVgpCiAJCXJldHVybiAwOwogCi0JaWYgKChtYXNrICYg UEdfSVNESUdJVCkgJiYgaXNkaWdpdF9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbG9jYWxlLT5pbmZv Lmx0KSkKKwlpZiAoKG1hc2sgJiBQR19JU0RJR0lUKSAmJiBpc2RpZ2l0X2woKHVuc2lnbmVkIGNo YXIpIHdjLCBsaWJjLT5sdCkpCiAJCXJlc3VsdCB8PSBQR19JU0RJR0lUOwotCWlmICgobWFzayAm IFBHX0lTQUxQSEEpICYmIGlzYWxwaGFfbCgodW5zaWduZWQgY2hhcikgd2MsIGxvY2FsZS0+aW5m by5sdCkpCisJaWYgKChtYXNrICYgUEdfSVNBTFBIQSkgJiYgaXNhbHBoYV9sKCh1bnNpZ25lZCBj aGFyKSB3YywgbGliYy0+bHQpKQogCQlyZXN1bHQgfD0gUEdfSVNBTFBIQTsKLQlpZiAoKG1hc2sg JiBQR19JU1VQUEVSKSAmJiBpc3VwcGVyX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmlu Zm8ubHQpKQorCWlmICgobWFzayAmIFBHX0lTVVBQRVIpICYmIGlzdXBwZXJfbCgodW5zaWduZWQg Y2hhcikgd2MsIGxpYmMtPmx0KSkKIAkJcmVzdWx0IHw9IFBHX0lTVVBQRVI7Ci0JaWYgKChtYXNr ICYgUEdfSVNMT1dFUikgJiYgaXNsb3dlcl9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbG9jYWxlLT5p bmZvLmx0KSkKKwlpZiAoKG1hc2sgJiBQR19JU0xPV0VSKSAmJiBpc2xvd2VyX2woKHVuc2lnbmVk IGNoYXIpIHdjLCBsaWJjLT5sdCkpCiAJCXJlc3VsdCB8PSBQR19JU0xPV0VSOwotCWlmICgobWFz ayAmIFBHX0lTR1JBUEgpICYmIGlzZ3JhcGhfbCgodW5zaWduZWQgY2hhcikgd2MsIGxvY2FsZS0+ aW5mby5sdCkpCisJaWYgKChtYXNrICYgUEdfSVNHUkFQSCkgJiYgaXNncmFwaF9sKCh1bnNpZ25l ZCBjaGFyKSB3YywgbGliYy0+bHQpKQogCQlyZXN1bHQgfD0gUEdfSVNHUkFQSDsKLQlpZiAoKG1h c2sgJiBQR19JU1BSSU5UKSAmJiBpc3ByaW50X2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUt PmluZm8ubHQpKQorCWlmICgobWFzayAmIFBHX0lTUFJJTlQpICYmIGlzcHJpbnRfbCgodW5zaWdu ZWQgY2hhcikgd2MsIGxpYmMtPmx0KSkKIAkJcmVzdWx0IHw9IFBHX0lTUFJJTlQ7Ci0JaWYgKCht YXNrICYgUEdfSVNQVU5DVCkgJiYgaXNwdW5jdF9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbG9jYWxl LT5pbmZvLmx0KSkKKwlpZiAoKG1hc2sgJiBQR19JU1BVTkNUKSAmJiBpc3B1bmN0X2woKHVuc2ln bmVkIGNoYXIpIHdjLCBsaWJjLT5sdCkpCiAJCXJlc3VsdCB8PSBQR19JU1BVTkNUOwotCWlmICgo bWFzayAmIFBHX0lTU1BBQ0UpICYmIGlzc3BhY2VfbCgodW5zaWduZWQgY2hhcikgd2MsIGxvY2Fs ZS0+aW5mby5sdCkpCisJaWYgKChtYXNrICYgUEdfSVNTUEFDRSkgJiYgaXNzcGFjZV9sKCh1bnNp Z25lZCBjaGFyKSB3YywgbGliYy0+bHQpKQogCQlyZXN1bHQgfD0gUEdfSVNTUEFDRTsKIAogCXJl dHVybiByZXN1bHQ7CkBAIC04MDQsNiArODI5LDggQEAgY2hhcl9wcm9wZXJ0aWVzX2xpYmNfbWIo cGdfd2NoYXIgd2MsIGludCBtYXNrLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7CiAJaW50CQkJcmVz dWx0ID0gMDsKIAorCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3By b3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCUFzc2VydCghbG9jYWxlLT5jdHlw ZV9pc19jKTsKIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOwogCkBA IC04MTEsMjEgKzgzOCwyMSBAQCBjaGFyX3Byb3BlcnRpZXNfbGliY19tYihwZ193Y2hhciB3Yywg aW50IG1hc2ssIHBnX2xvY2FsZV90IGxvY2FsZSkKIAlpZiAoc2l6ZW9mKHdjaGFyX3QpIDwgNCAm JiB3YyA+IChwZ193Y2hhcikgMHhGRkZGKQogCQlyZXR1cm4gMDsKIAotCWlmICgobWFzayAmIFBH X0lTRElHSVQpICYmIGlzd2RpZ2l0X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJ aWYgKChtYXNrICYgUEdfSVNESUdJVCkgJiYgaXN3ZGlnaXRfbCgod2ludF90KSB3YywgbGliYy0+ bHQpKQogCQlyZXN1bHQgfD0gUEdfSVNESUdJVDsKLQlpZiAoKG1hc2sgJiBQR19JU0FMUEhBKSAm JiBpc3dhbHBoYV9sKCh3aW50X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQpKQorCWlmICgobWFzayAm IFBHX0lTQUxQSEEpICYmIGlzd2FscGhhX2woKHdpbnRfdCkgd2MsIGxpYmMtPmx0KSkKIAkJcmVz dWx0IHw9IFBHX0lTQUxQSEE7Ci0JaWYgKChtYXNrICYgUEdfSVNVUFBFUikgJiYgaXN3dXBwZXJf bCgod2ludF90KSB3YywgbG9jYWxlLT5pbmZvLmx0KSkKKwlpZiAoKG1hc2sgJiBQR19JU1VQUEVS KSAmJiBpc3d1cHBlcl9sKCh3aW50X3QpIHdjLCBsaWJjLT5sdCkpCiAJCXJlc3VsdCB8PSBQR19J U1VQUEVSOwotCWlmICgobWFzayAmIFBHX0lTTE9XRVIpICYmIGlzd2xvd2VyX2woKHdpbnRfdCkg d2MsIGxvY2FsZS0+aW5mby5sdCkpCisJaWYgKChtYXNrICYgUEdfSVNMT1dFUikgJiYgaXN3bG93 ZXJfbCgod2ludF90KSB3YywgbGliYy0+bHQpKQogCQlyZXN1bHQgfD0gUEdfSVNMT1dFUjsKLQlp ZiAoKG1hc2sgJiBQR19JU0dSQVBIKSAmJiBpc3dncmFwaF9sKCh3aW50X3QpIHdjLCBsb2NhbGUt PmluZm8ubHQpKQorCWlmICgobWFzayAmIFBHX0lTR1JBUEgpICYmIGlzd2dyYXBoX2woKHdpbnRf dCkgd2MsIGxpYmMtPmx0KSkKIAkJcmVzdWx0IHw9IFBHX0lTR1JBUEg7Ci0JaWYgKChtYXNrICYg UEdfSVNQUklOVCkgJiYgaXN3cHJpbnRfbCgod2ludF90KSB3YywgbG9jYWxlLT5pbmZvLmx0KSkK KwlpZiAoKG1hc2sgJiBQR19JU1BSSU5UKSAmJiBpc3dwcmludF9sKCh3aW50X3QpIHdjLCBsaWJj LT5sdCkpCiAJCXJlc3VsdCB8PSBQR19JU1BSSU5UOwotCWlmICgobWFzayAmIFBHX0lTUFVOQ1Qp ICYmIGlzd3B1bmN0X2woKHdpbnRfdCkgd2MsIGxvY2FsZS0+aW5mby5sdCkpCisJaWYgKChtYXNr ICYgUEdfSVNQVU5DVCkgJiYgaXN3cHVuY3RfbCgod2ludF90KSB3YywgbGliYy0+bHQpKQogCQly ZXN1bHQgfD0gUEdfSVNQVU5DVDsKLQlpZiAoKG1hc2sgJiBQR19JU1NQQUNFKSAmJiBpc3dzcGFj ZV9sKCh3aW50X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQpKQorCWlmICgobWFzayAmIFBHX0lTU1BB Q0UpICYmIGlzd3NwYWNlX2woKHdpbnRfdCkgd2MsIGxpYmMtPmx0KSkKIAkJcmVzdWx0IHw9IFBH X0lTU1BBQ0U7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtODM0LDEwICs4NjEsMTIgQEAgY2hhcl9w cm9wZXJ0aWVzX2xpYmNfbWIocGdfd2NoYXIgd2MsIGludCBtYXNrLCBwZ19sb2NhbGVfdCBsb2Nh bGUpCiBzdGF0aWMgcGdfd2NoYXIKIHRvdXBwZXJfbGliY19zYihwZ193Y2hhciB3YywgcGdfbG9j YWxlX3QgbG9jYWxlKQogeworCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBs aWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCUFzc2VydChHZXREYXRh YmFzZUVuY29kaW5nKCkgIT0gUEdfVVRGOCk7CiAKIAlpZiAod2MgPD0gKHBnX3djaGFyKSBVQ0hB Ul9NQVgpCi0JCXJldHVybiB0b3VwcGVyX2woKHVuc2lnbmVkIGNoYXIpIHdjLCBsb2NhbGUtPmlu Zm8ubHQpOworCQlyZXR1cm4gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSB3YywgbGliYy0+bHQp OwogCWVsc2UKIAkJcmV0dXJuIHdjOwogfQpAQCAtODQ1LDEwICs4NzQsMTIgQEAgdG91cHBlcl9s aWJjX3NiKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiBzdGF0aWMgcGdfd2NoYXIK IHRvdXBwZXJfbGliY19tYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogeworCXN0 cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2Fs ZS0+cHJvdmlkZXJfZGF0YTsKKwogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdf VVRGOCk7CiAKIAlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgd2MgPD0gKHBnX3djaGFyKSAw eEZGRkYpCi0JCXJldHVybiB0b3d1cHBlcl9sKCh3aW50X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQp OworCQlyZXR1cm4gdG93dXBwZXJfbCgod2ludF90KSB3YywgbGliYy0+bHQpOwogCWVsc2UKIAkJ cmV0dXJuIHdjOwogfQpAQCAtODU2LDEwICs4ODcsMTIgQEAgdG91cHBlcl9saWJjX21iKHBnX3dj aGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiBzdGF0aWMgcGdfd2NoYXIKIHRvbG93ZXJfbGli Y19zYihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogeworCXN0cnVjdCBsaWJjX3By b3ZpZGVyICpsaWJjID0gKHN0cnVjdCBsaWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJf ZGF0YTsKKwogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgIT0gUEdfVVRGOCk7CiAKIAlp ZiAod2MgPD0gKHBnX3djaGFyKSBVQ0hBUl9NQVgpCi0JCXJldHVybiB0b2xvd2VyX2woKHVuc2ln bmVkIGNoYXIpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gdG9sb3dlcl9sKCh1bnNp Z25lZCBjaGFyKSB3YywgbGliYy0+bHQpOwogCWVsc2UKIAkJcmV0dXJuIHdjOwogfQpAQCAtODY3 LDEwICs5MDAsMTIgQEAgdG9sb3dlcl9saWJjX3NiKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBs b2NhbGUpCiBzdGF0aWMgcGdfd2NoYXIKIHRvbG93ZXJfbGliY19tYihwZ193Y2hhciB3YywgcGdf bG9jYWxlX3QgbG9jYWxlKQogeworCXN0cnVjdCBsaWJjX3Byb3ZpZGVyICpsaWJjID0gKHN0cnVj dCBsaWJjX3Byb3ZpZGVyICopIGxvY2FsZS0+cHJvdmlkZXJfZGF0YTsKKwogCUFzc2VydChHZXRE YXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCk7CiAKIAlpZiAoc2l6ZW9mKHdjaGFyX3QpID49 IDQgfHwgd2MgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCXJldHVybiB0b3dsb3dlcl9sKCh3aW50 X3QpIHdjLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gdG93bG93ZXJfbCgod2ludF90KSB3 YywgbGliYy0+bHQpOwogCWVsc2UKIAkJcmV0dXJuIHdjOwogfQpAQCAtOTYyLDggKzk5NywxMCBA QCB3Y2hhcjJjaGFyKGNoYXIgKnRvLCBjb25zdCB3Y2hhcl90ICpmcm9tLCBzaXplX3QgdG9sZW4s IHBnX2xvY2FsZV90IGxvY2FsZSkKIAl9CiAJZWxzZQogCXsKKwkJc3RydWN0IGxpYmNfcHJvdmlk ZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNfcHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRh OworCiAJCS8qIFVzZSB3Y3N0b21ic19sIGZvciBub25kZWZhdWx0IGxvY2FsZXMgKi8KLQkJcmVz dWx0ID0gd2NzdG9tYnNfbCh0bywgZnJvbSwgdG9sZW4sIGxvY2FsZS0+aW5mby5sdCk7CisJCXJl c3VsdCA9IHdjc3RvbWJzX2wodG8sIGZyb20sIHRvbGVuLCBsaWJjLT5sdCk7CiAJfQogCiAJcmV0 dXJuIHJlc3VsdDsKQEAgLTEwMjIsOCArMTA1OSwxMCBAQCBjaGFyMndjaGFyKHdjaGFyX3QgKnRv LCBzaXplX3QgdG9sZW4sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBmcm9tbGVuLAogCQl9CiAJ CWVsc2UKIAkJeworCQkJc3RydWN0IGxpYmNfcHJvdmlkZXIgKmxpYmMgPSAoc3RydWN0IGxpYmNf cHJvdmlkZXIgKikgbG9jYWxlLT5wcm92aWRlcl9kYXRhOworCiAJCQkvKiBVc2UgbWJzdG93Y3Nf bCBmb3Igbm9uZGVmYXVsdCBsb2NhbGVzICovCi0JCQlyZXN1bHQgPSBtYnN0b3djc19sKHRvLCBz dHIsIHRvbGVuLCBsb2NhbGUtPmluZm8ubHQpOworCQkJcmVzdWx0ID0gbWJzdG93Y3NfbCh0bywg c3RyLCB0b2xlbiwgbGliYy0+bHQpOwogCQl9CiAKIAkJcGZyZWUoc3RyKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9j YWxlLmgKaW5kZXggOThhODYwZDBiMy4uYzRjMTlhM2M4MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvcGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgK QEAgLTE2NywyMSArMTY3LDcgQEAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QKIAljb25zdCBzdHJ1 Y3QgY29sbGF0ZV9tZXRob2RzICpjb2xsYXRlOwkvKiBOVUxMIGlmIGNvbGxhdGVfaXNfYyAqLwog CWNvbnN0IHN0cnVjdCBjdHlwZV9tZXRob2RzICpjdHlwZTsJLyogTlVMTCBpZiBjdHlwZV9pc19j ICovCiAKLQl1bmlvbgotCXsKLQkJc3RydWN0Ci0JCXsKLQkJCWNvbnN0IGNoYXIgKmxvY2FsZTsK LQkJfQkJCWJ1aWx0aW47Ci0JCWxvY2FsZV90CWx0OwotI2lmZGVmIFVTRV9JQ1UKLQkJc3RydWN0 Ci0JCXsKLQkJCWNvbnN0IGNoYXIgKmxvY2FsZTsKLQkJCVVDb2xsYXRvciAgKnVjb2w7Ci0JCX0J CQlpY3U7Ci0jZW5kaWYKLQl9CQkJaW5mbzsKKwl2b2lkCSAgICpwcm92aWRlcl9kYXRhOwogfTsK IAogdHlwZWRlZiBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCAqcGdfbG9jYWxlX3Q7Ci0tIAoyLjM0 LjEKCg== --=-LTFx9IBzSoydfVtEfUQa Content-Disposition: attachment; filename="v8-0006-Don-t-include-ICU-headers-in-pg_locale.h.patch" Content-Type: text/x-patch; name="v8-0006-Don-t-include-ICU-headers-in-pg_locale.h.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA4NWY1YjVmMmJiOTE0OGU1MTQxODE1MjdjMDNlOWQ5NmJhZDY4YTVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDkgT2N0IDIwMjQgMTA6MDA6NTggLTA3MDAKU3ViamVjdDogW1BBVENIIHY4IDYvN10gRG9u J3QgaW5jbHVkZSBJQ1UgaGVhZGVycyBpbiBwZ19sb2NhbGUuaC4KCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29sbGF0aW9uY21kcy5jICB8ICA0ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9mb3JtYXR0aW5nLmMgICAgfCAgNCAtLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9j YWxlLmMgICAgIHwgIDQgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3Uu YyB8IDEzICsrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgICAg ICAgfCAgNCArKysrCiBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCAgICAgICAgIHwgMTcg LS0tLS0tLS0tLS0tLS0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMjEg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IDUzYjZh NDc5YWEuLmFmYzIzMzBmNTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAg LTE0LDYgKzE0LDEwIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaWZkZWYgVVNF X0lDVQorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhY2Nl c3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3hhY3QuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0 aW5nLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDZhMDU3MWY5 M2UuLjM4NzAwOWE0YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0 aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNzEsMTAg KzcxLDYgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3Y3R5cGUuaD4KIAotI2lm ZGVmIFVTRV9JQ1UKLSNpbmNsdWRlIDx1bmljb2RlL3VzdHJpbmcuaD4KLSNlbmRpZgotCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUu aCIKICNpbmNsdWRlICJjb21tb24vdW5pY29kZV9jYXNlLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9j YWxlLmMKaW5kZXggMmViZTRjMDBiZi4uZDQwZWNmMjM1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19s b2NhbGUuYwpAQCAtNTQsNiArNTQsMTAgQEAKIAogI2luY2x1ZGUgPHRpbWUuaD4KIAorI2lmZGVm IFVTRV9JQ1UKKyNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAi YWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19s b2NhbGVfaWN1LmMKaW5kZXggNTdmMzY2Zjc0MS4uYjhhNDU1ZDczMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdfbG9jYWxlX2ljdS5jCkBAIC0xMyw3ICsxMywyMCBAQAogCiAjaWZkZWYgVVNFX0lD VQogI2luY2x1ZGUgPHVuaWNvZGUvdWNudi5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgog I2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgorCisvKgorICogdWNvbF9zdHJjb2xsVVRGOCgp IHdhcyBpbnRyb2R1Y2VkIGluIElDVSA1MCwgYnV0IGl0IGlzIGJ1Z2d5IGJlZm9yZSBJQ1UgNTMu CisgKiAoc2VlCisgKiA8aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0 L2YxNDM4ZWM2LTIyYWEtNDAyOS05YTNiLTI2Zjc5ZDMzMGU3MiU0MG1hbml0b3UtbWFpbC5vcmc+ KQorICovCisjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTMKKyNkZWZpbmUgSEFWRV9V Q09MX1NUUkNPTExVVEY4IDEKKyNlbHNlCisjdW5kZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4Cisj ZW5kaWYKKwogI2VuZGlmCiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3ZhcmxlbmEuYwppbmRleCA1MzNiZWJjMWM3Li4zN2IzNTA2ZjA2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC92YXJsZW5hLmMKQEAgLTE3LDYgKzE3LDEwIEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNp bmNsdWRlIDxsaW1pdHMuaD4KIAorI2lmZGVmIFVTRV9JQ1UKKyNpbmNsdWRlIDx1bmljb2RlL3Vj aGFyLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAjaW5jbHVkZSAi YWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRp b24uaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKaW5kZXggYzRjMTlhM2M4Mi4uMjRmN2VlNGI2MSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvcGdfbG9jYWxlLmgKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJtYi9wZ193 Y2hhci5oIgogCi0jaWZkZWYgVVNFX0lDVQotI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgotI2Vu ZGlmCi0KIC8qCiAgKiBDaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgcmVndWxhciBleHByZXNzaW9u cy4KICAqLwpAQCAtMzEsMTkgKzI3LDYgQEAKICNkZWZpbmUgUEdfSVNQVU5DVCAgICAgMHg0MAog I2RlZmluZSBQR19JU1NQQUNFICAgICAweDgwCiAKLSNpZmRlZiBVU0VfSUNVCi0vKgotICogdWNv bF9zdHJjb2xsVVRGOCgpIHdhcyBpbnRyb2R1Y2VkIGluIElDVSA1MCwgYnV0IGl0IGlzIGJ1Z2d5 IGJlZm9yZSBJQ1UgNTMuCi0gKiAoc2VlCi0gKiA8aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcv bWVzc2FnZS1pZC9mbGF0L2YxNDM4ZWM2LTIyYWEtNDAyOS05YTNiLTI2Zjc5ZDMzMGU3MiU0MG1h bml0b3UtbWFpbC5vcmc+KQotICovCi0jaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTMK LSNkZWZpbmUgSEFWRV9VQ09MX1NUUkNPTExVVEY4IDEKLSNlbHNlCi0jdW5kZWYgSEFWRV9VQ09M X1NUUkNPTExVVEY4Ci0jZW5kaWYKLSNlbmRpZgotCiAvKiB1c2UgZm9yIGxpYmMgbG9jYWxlIG5h bWVzICovCiAjZGVmaW5lIExPQ0FMRV9OQU1FX0JVRkxFTiAxMjgKIAotLSAKMi4zNC4xCgo= --=-LTFx9IBzSoydfVtEfUQa Content-Disposition: attachment; filename="v8-0007-Introduce-hooks-for-creating-custom-pg_locale_t.patch" Content-Type: text/x-patch; name="v8-0007-Introduce-hooks-for-creating-custom-pg_locale_t.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAwZGIzOGUzYTJmMjlhMzYzOGVhZDY3ZWJjZDk4YTBhNDE0YzJhZDFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDI1IFNlcCAyMDI0IDE2OjEwOjI4IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2OCA3LzddIElu dHJvZHVjZSBob29rcyBmb3IgY3JlYXRpbmcgY3VzdG9tIHBnX2xvY2FsZV90LgoKTm93IHRoYXQg Y29sbGF0aW9uLCBjYXNlIG1hcHBpbmcsIGFuZCBjdHlwZSBiZWhhdmlvciBpcyBjb250cm9sbGVk CndpdGggYSBtZXRob2QgdGFibGUsIHdlIGNhbiBob29rIHRoZSBiZWhhdmlvci4KClRoZSBob29r cyBjYW4gcHJvdmlkZSB0aGVpciBvd24gYXJiaXRyYXJ5IG1ldGhvZCB0YWJsZSwgd2hpY2ggbWF5 IGJlCmJhc2VkIG9uIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgSUNVIHRoYW4gd2hhdCBQb3N0Z3Jl cyB3YXMgYnVpbHQgd2l0aCwKb3IgZW50aXJlbHkgdW5yZWxhdGVkIHRvIElDVS9saWJjLgotLS0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyB8IDY4ICsrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oICAgICB8IDI0ICsr KysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgfCAgMiArCiAzIGZp bGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGUuYwppbmRleCBkNDBlY2YyMzU3Li5jM2ZhNjhlYWQ1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3BnX2xvY2FsZS5jCkBAIC0xMDMsNiArMTAzLDkgQEAgZXh0ZXJuIHBnX2xvY2FsZV90 IGNyZWF0ZV9wZ19sb2NhbGVfYnVpbHRpbihPaWQgY29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRl eHQpOwogZXh0ZXJuIHBnX2xvY2FsZV90IGNyZWF0ZV9wZ19sb2NhbGVfaWN1KE9pZCBjb2xsaWQs IE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiBleHRlcm4gcGdfbG9jYWxlX3QgY3JlYXRlX3BnX2xv Y2FsZV9saWJjKE9pZCBjb2xsaWQsIE1lbW9yeUNvbnRleHQgY29udGV4dCk7CiAKK2NyZWF0ZV9w Z19sb2NhbGVfaG9va190eXBlIGNyZWF0ZV9wZ19sb2NhbGVfaG9vayA9IE5VTEw7Citjb2xsYXRp b25fdmVyc2lvbl9ob29rX3R5cGUgY29sbGF0aW9uX3ZlcnNpb25faG9vayA9IE5VTEw7CisKIC8q IEdVQyBzZXR0aW5ncyAqLwogY2hhcgkgICAqbG9jYWxlX21lc3NhZ2VzOwogY2hhcgkgICAqbG9j YWxlX21vbmV0YXJ5OwpAQCAtMTIwOSw3ICsxMjEyLDcgQEAgY3JlYXRlX3BnX2xvY2FsZShPaWQg Y29sbGlkLCBNZW1vcnlDb250ZXh0IGNvbnRleHQpCiB7CiAJSGVhcFR1cGxlCXRwOwogCUZvcm1f cGdfY29sbGF0aW9uIGNvbGxmb3JtOwotCXBnX2xvY2FsZV90IHJlc3VsdDsKKwlwZ19sb2NhbGVf dCByZXN1bHQgPSBOVUxMOwogCURhdHVtCQlkYXR1bTsKIAlib29sCQlpc251bGw7CiAKQEAgLTEy MTgsMTUgKzEyMjEsMjEgQEAgY3JlYXRlX3BnX2xvY2FsZShPaWQgY29sbGlkLCBNZW1vcnlDb250 ZXh0IGNvbnRleHQpCiAJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xs YXRpb24gJXUiLCBjb2xsaWQpOwogCWNvbGxmb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRT VFJVQ1QodHApOwogCi0JaWYgKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVS X0JVSUxUSU4pCi0JCXJlc3VsdCA9IGNyZWF0ZV9wZ19sb2NhbGVfYnVpbHRpbihjb2xsaWQsIGNv bnRleHQpOwotCWVsc2UgaWYgKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVS X0lDVSkKLQkJcmVzdWx0ID0gY3JlYXRlX3BnX2xvY2FsZV9pY3UoY29sbGlkLCBjb250ZXh0KTsK LQllbHNlIGlmIChjb2xsZm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQot CQlyZXN1bHQgPSBjcmVhdGVfcGdfbG9jYWxlX2xpYmMoY29sbGlkLCBjb250ZXh0KTsKLQllbHNl Ci0JCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJUEdMT0NBTEVfU1VQUE9SVF9FUlJPUihjb2xs Zm9ybS0+Y29sbHByb3ZpZGVyKTsKKwlpZiAoY3JlYXRlX3BnX2xvY2FsZV9ob29rICE9IE5VTEwp CisJCXJlc3VsdCA9IGNyZWF0ZV9wZ19sb2NhbGVfaG9vayhjb2xsaWQsIGNvbnRleHQpOworCisJ aWYgKHJlc3VsdCA9PSBOVUxMKQorCXsKKwkJaWYgKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIgPT0g Q09MTFBST1ZJREVSX0JVSUxUSU4pCisJCQlyZXN1bHQgPSBjcmVhdGVfcGdfbG9jYWxlX2J1aWx0 aW4oY29sbGlkLCBjb250ZXh0KTsKKwkJZWxzZSBpZiAoY29sbGZvcm0tPmNvbGxwcm92aWRlciA9 PSBDT0xMUFJPVklERVJfSUNVKQorCQkJcmVzdWx0ID0gY3JlYXRlX3BnX2xvY2FsZV9pY3UoY29s bGlkLCBjb250ZXh0KTsKKwkJZWxzZSBpZiAoY29sbGZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xM UFJPVklERVJfTElCQykKKwkJCXJlc3VsdCA9IGNyZWF0ZV9wZ19sb2NhbGVfbGliYyhjb2xsaWQs IGNvbnRleHQpOworCQllbHNlCisJCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCQlQR0xPQ0FM RV9TVVBQT1JUX0VSUk9SKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIpOworCX0KIAogCUFzc2VydCgo cmVzdWx0LT5jb2xsYXRlX2lzX2MgJiYgcmVzdWx0LT5jb2xsYXRlID09IE5VTEwpIHx8CiAJCSAg ICghcmVzdWx0LT5jb2xsYXRlX2lzX2MgJiYgcmVzdWx0LT5jb2xsYXRlICE9IE5VTEwpKTsKQEAg LTEyODksNyArMTI5OCw3IEBAIGluaXRfZGF0YWJhc2VfY29sbGF0aW9uKHZvaWQpCiB7CiAJSGVh cFR1cGxlCXR1cDsKIAlGb3JtX3BnX2RhdGFiYXNlIGRiZm9ybTsKLQlwZ19sb2NhbGVfdCByZXN1 bHQ7CisJcGdfbG9jYWxlX3QgcmVzdWx0ID0gTlVMTDsKIAogCUFzc2VydChkZWZhdWx0X2xvY2Fs ZSA9PSBOVUxMKTsKIApAQCAtMTI5OSwxOCArMTMwOCwyNSBAQCBpbml0X2RhdGFiYXNlX2NvbGxh dGlvbih2b2lkKQogCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZGF0YWJh c2UgJXUiLCBNeURhdGFiYXNlSWQpOwogCWRiZm9ybSA9IChGb3JtX3BnX2RhdGFiYXNlKSBHRVRT VFJVQ1QodHVwKTsKIAotCWlmIChkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURF Ul9CVUlMVElOKQotCQlyZXN1bHQgPSBjcmVhdGVfcGdfbG9jYWxlX2J1aWx0aW4oREVGQVVMVF9D T0xMQVRJT05fT0lELAotCQkJCQkJCQkJCSAgVG9wTWVtb3J5Q29udGV4dCk7Ci0JZWxzZSBpZiAo ZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQlyZXN1bHQgPSBj cmVhdGVfcGdfbG9jYWxlX2ljdShERUZBVUxUX0NPTExBVElPTl9PSUQsCi0JCQkJCQkJCQkgIFRv cE1lbW9yeUNvbnRleHQpOwotCWVsc2UgaWYgKGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0xJQkMpCi0JCXJlc3VsdCA9IGNyZWF0ZV9wZ19sb2NhbGVfbGliYyhERUZBVUxU X0NPTExBVElPTl9PSUQsCisJaWYgKGNyZWF0ZV9wZ19sb2NhbGVfaG9vayAhPSBOVUxMKQorCQly ZXN1bHQgPSBjcmVhdGVfcGdfbG9jYWxlX2hvb2soREVGQVVMVF9DT0xMQVRJT05fT0lELAogCQkJ CQkJCQkJICAgVG9wTWVtb3J5Q29udGV4dCk7Ci0JZWxzZQotCQkvKiBzaG91bGRuJ3QgaGFwcGVu ICovCi0JCVBHTE9DQUxFX1NVUFBPUlRfRVJST1IoZGJmb3JtLT5kYXRsb2Nwcm92aWRlcik7CisK KwlpZiAocmVzdWx0ID09IE5VTEwpCisJeworCQlpZiAoZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9 PSBDT0xMUFJPVklERVJfQlVJTFRJTikKKwkJCXJlc3VsdCA9IGNyZWF0ZV9wZ19sb2NhbGVfYnVp bHRpbihERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJCQkJCSAgVG9wTWVtb3J5Q29udGV4 dCk7CisJCWVsc2UgaWYgKGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lD VSkKKwkJCXJlc3VsdCA9IGNyZWF0ZV9wZ19sb2NhbGVfaWN1KERFRkFVTFRfQ09MTEFUSU9OX09J RCwKKwkJCQkJCQkJCQkgIFRvcE1lbW9yeUNvbnRleHQpOworCQllbHNlIGlmIChkYmZvcm0tPmRh dGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCQkJcmVzdWx0ID0gY3JlYXRlX3Bn X2xvY2FsZV9saWJjKERFRkFVTFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJCQkJCQkgICBUb3BNZW1v cnlDb250ZXh0KTsKKwkJZWxzZQorCQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQkJUEdMT0NB TEVfU1VQUE9SVF9FUlJPUihkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyKTsKKwl9CiAKIAlSZWxlYXNl U3lzQ2FjaGUodHVwKTsKIApAQCAtMTM3OSw2ICsxMzk1LDE0IEBAIGdldF9jb2xsYXRpb25fYWN0 dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKQog ewogCWNoYXIJICAgKmNvbGx2ZXJzaW9uID0gTlVMTDsKIAorCWlmIChjb2xsYXRpb25fdmVyc2lv bl9ob29rICE9IE5VTEwpCisJeworCQljaGFyCSAgICp2ZXJzaW9uOworCisJCWlmIChjb2xsYXRp b25fdmVyc2lvbl9ob29rKGNvbGxwcm92aWRlciwgY29sbGNvbGxhdGUsICZ2ZXJzaW9uKSkKKwkJ CXJldHVybiB2ZXJzaW9uOworCX0KKwogCS8qCiAJICogVGhlIG9ubHkgdHdvIHN1cHBvcnRlZCBs b2NhbGVzIChDIGFuZCBDLlVURi04KSBhcmUgYm90aCBiYXNlZCBvbiBtZW1jbXAKIAkgKiBhbmQg YXJlIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UsIGJ1dCB0cmFjayB0aGUgdmVyc2lvbiBhbnl3YXku CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL3BnX2xvY2FsZS5oCmluZGV4IDI0ZjdlZTRiNjEuLjdiZDAwYTE2YTYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L3BnX2xvY2FsZS5oCkBAIC0xNTUsNiArMTU1LDMwIEBAIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0 CiAKIHR5cGVkZWYgc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QgKnBnX2xvY2FsZV90OwogCisvKgor ICogSG9va3MgdG8gZW5hYmxlIGN1c3RvbSBsb2NhbGUgcHJvdmlkZXJzLgorICovCisKKy8qCisg KiBIb29rIGNyZWF0ZV9wZ19sb2NhbGUoKS4gUmV0dXJuIHJlc3VsdCAoYWxsb2NhdGVkIGluIHRo ZSBnaXZlbiBjb250ZXh0KSB0bworICogb3ZlcnJpZGU7IG9yIHJldHVybiBOVUxMIHRvIHJldHVy biBjb250cm9sIHRvIGNyZWF0ZV9wZ19sb2NhbGUoKS4gV2hlbgorICogY3JlYXRpbmcgdGhlIGRl ZmF1bHQgZGF0YWJhc2UgY29sbGF0aW9uLCBjb2xsaWQgaXMgREVGQVVMVF9DT0xMQVRJT05fT0lE LgorICovCit0eXBlZGVmIHBnX2xvY2FsZV90ICgqY3JlYXRlX3BnX2xvY2FsZV9ob29rX3R5cGUp IChPaWQgY29sbGlkLAorCQkJCQkJCQkJCQkJICAgTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKKwor LyoKKyAqIEhvb2sgZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbigpLiBTZXQgKnZlcnNpb24g b3V0IHBhcmFtZXRlciBhbmQgcmV0dXJuCisgKiB0cnVlIHRvIG92ZXJyaWRlOyBvciByZXR1cm4g ZmFsc2UgdG8gcmV0dXJuIGNvbnRyb2wgdG8KKyAqIGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNp b24oKS4KKyAqLwordHlwZWRlZiBib29sICgqY29sbGF0aW9uX3ZlcnNpb25faG9va190eXBlKSAo Y2hhciBjb2xscHJvdmlkZXIsCisJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpjb2xsY29sbGF0ZSwK KwkJCQkJCQkJCQkJIGNoYXIgKip2ZXJzaW9uKTsKKworZXh0ZXJuIFBHRExMSU1QT1JUIGNyZWF0 ZV9wZ19sb2NhbGVfaG9va190eXBlIGNyZWF0ZV9wZ19sb2NhbGVfaG9vazsKK2V4dGVybiBQR0RM TElNUE9SVCBjb2xsYXRpb25fdmVyc2lvbl9ob29rX3R5cGUgY29sbGF0aW9uX3ZlcnNpb25faG9v azsKKwogZXh0ZXJuIHZvaWQgaW5pdF9kYXRhYmFzZV9jb2xsYXRpb24odm9pZCk7CiBleHRlcm4g cGdfbG9jYWxlX3QgcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQpOwogCmRp ZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQxNmEyY2M3NmIuLjFkNDI0NzI2N2IgMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zMzc1LDYgKzMzNzUsNyBAQCBjbXBFbnRyaWVzQXJn CiBjb2Rlc190CiBjb2xsYXRpb25fY2FjaGVfZW50cnkKIGNvbGxhdGlvbl9jYWNoZV9oYXNoCitj b2xsYXRpb25fdmVyc2lvbl9ob29rX3R5cGUKIGNvbG9yCiBjb2xvcm1hcHJhbmdlCiBjb21wYXJl X2NvbnRleHQKQEAgLTMzOTEsNiArMzM5Miw3IEBAIGNvcmVfeXlzY2FuX3QKIGNvcnJ1cHRfaXRl bXMKIGNvc3RfcXVhbF9ldmFsX2NvbnRleHQKIGNwX2hhc2hfZnVuYworY3JlYXRlX3BnX2xvY2Fs ZV9ob29rX3R5cGUKIGNyZWF0ZV91cHBlcl9wYXRoc19ob29rX3R5cGUKIGNyZWF0ZWRiX2ZhaWx1 cmVfcGFyYW1zCiBjcm9zc3RhYl9IYXNoRW50Ci0tIAoyLjM0LjEKCg== --=-LTFx9IBzSoydfVtEfUQa--