Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 04 Jul 2011 22:39:05 +0200
From:      Stefan Esser <se@freebsd.org>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        Garrett Wollman <wollman@csail.mit.edu>, freebsd-standards@FreeBSD.org
Subject:   Re: New patches for expr
Message-ID:  <4E1224E9.1050600@freebsd.org>
In-Reply-To: <20110704195515.A1938@besplex.bde.org>
References:  <4E09AF8E.5010509@freebsd.org> <4E0B860E.50504@freebsd.org> <20110630164653.GA82980@zim.MIT.EDU> <4E0CACFB.8040906@freebsd.org> <19980.47094.184089.398324@khavrinen.csail.mit.edu> <20110701092909.F1164@besplex.bde.org> <4E0E2535.1060204@freebsd.org> <20110704195515.A1938@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------000109010508020704090904
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Am 04.07.2011 12:48, schrieb Bruce Evans:
> On Fri, 1 Jul 2011, Stefan Esser wrote:
>> On 01.07.2011 01:58, Bruce Evans wrote:
>> <<<<<< Aside: Is check_utility_compat() still used at all?
>>
>> It provides compatibility with FreeBSD-4 if the environment variable
>> _COMPAT_FreeBSD_4 exists and contains "expr" as member of a comma
>> separated list, or if the following symlink exists in /etc:
>>
>>     compat-FreeBSD-4-util -> expr
>>
>> In fact, the symlink is also parsed as comma separated list, but expr is
>> the only program in FreeBSD that calls check_utility_compat() ...
>>
>> Since expr is the only user of check_utility_compat() and the same
>> effect can be had by specifying EXPR_COMPAT, the check_utility_compat
>> function should be considered deprecated and only be kept in libc for
>> backwards compatibility of old binaries, IMHO. This function adds one
>> unnecessary call of getenv() and one of readlink() per invocation of
>> expr and adds complexity to the man-page for expr.
> 
> I'd like to remove the symlink.  The symlink for malloc() annoys me
> too.  It pessimizes and bloats malloc() a little, and on FreeBSD cluster
> machines, it breaks support for old binaries by being misconfigured
> to contain flags that are incompatible with ones recognized by old
> versions of malloc().  And there is no way to prevent even current
> malloc() from examining the symlink.  It examines the symlink first
> and spams stderr with messages about any invalid flags in the symlink.
> Then it examines the environment variable, and the environment variable
> can be used to cancel any unportable or otherwise unwanted flags in
> the symlink, but the messages cannot be canceled, and more bogus
> messages may be printed to defeat the next stage.  Then it examines
> the compile-time variable, and this can't completely cancel the previous
> stages, due to the messages.

If there is no opposition to this change, I'd like to remove the call of
check_utility_compat() from expr in a separate patch (to the source file
and the man page), which would make this function obsolete except to
support binaries from older releases that contain the call to this
function (but it could just return 0 without checking for the symlink or
environment variable and it should be made invisible for new code).

If the symlinks exists for "expr" compatibility, then any script using
"expr -e" or "expr --" will break, since there is no way to override the
effect of that symlink (neither a command line option nor an environment
setting will help). The man page of check_utility_compat() describes the
function as a temporary work-around to enforce backwards compatibility
with FreeBSD-4 (but as I said, that function appears to be unused,
except for the one case of "expr").

> The patches seem OK, except:
> - I don't like reversing the semantics of the -e option from "extension"
>   to "compatible"

Hmmm, yes, I can understand your reasoning. But EXPR_COMPAT is meant to
make "expr" backwards compatible with pre-POSIX versions, which did not
accept options and had less strict number syntax rules. Now, the word
compat could be understood to indicate compatibility with POSIX, not
with the old version that was not compliant with POSIX ...

I do consider the non-conflicting extension of the numeric range (in the
sense of making "POSIX undefined" situations return sensible and defined
results in FreeBSD) an "extension", but the backwards compatible mode is
just that (and in conflict with POSIX, when enabled).

Is there some other wording that might be acceptable for the backwards
compatible mode of operation enabled by "EXPR_COMPAT" or the "-e" option?

I thought about "backward-compatible" or "old mode operation", but both
do not really appeal ...

I have renamed the variable "eflag" to "nonposix" to better describe its
meaning.

> - '+<integer>' is now not accepted even in compatibility mode.  Accepting
>   '+<integer>' wasn't documented, but was a side effect of using strto*()
>   for parsing

Well, "+<integer>" is accepted in my local version, which has evolved a
little beyond the files attached to my previous mail.

> - the changes to the man page aren't in the patches.

Yes, I already wrote, that I'd like to have consensus at the
functionality before I submit patches to the man-page.

>> I also include a SHAR of regression tests meant to be committed to
>> /usr/src/tools/regression/bin/expr. All tests pass with the current
>> patched version of expr (while the currently shipped version dumps core
>> in one test case).
> 
> I ran the regression tests on a 2005 version of NetBSD expr and a 2002
> version of Linux expr.  There were the following failures:
> 
> NetBSD:
> % not ok 10 - - (got 0, expected 2)

NetBSD seems to accept "-" as string; POSIX declares the behaviour
undefined if a string argument is identical to one of the operators.
We flag this as "syntax error".

> % not ok 11 -1 - (got 0, expected 2)

NetBSD expr does not support command line options and thus just accepts
the decimal number as valid operand.
We enable POSIX option processing by default (unless EXPR_COMPAT is set
in the environment). This leads to "-1" being treated as unsupported
option.
This command line processing is only needed to support the "-e" option
introduced to return from 64bit arithmetic with overflow checks to 32bit
arithmetic with silent overflow. But we cannot easily go back and
unsupport "-e", since it has been used in scripts that needed the
extended numeric range. Too bad!!!

BTW: NetBSD does support POSIX "option end" specified with "--" in a
special way, which is meant to be backwards compatible: If after removal
of a first argument of "--" the rest still parses, then "--" is
considered as POSIX end of options marker. Else, "--" is the first
string argument of the expression to evaluate.

> % not ok 12 -1 + 1 - (got 1, expected 2)

Same as above. NetBSD just adds -1 to 1 and returns with "0" and an exit
code of 1.

> % not ok 14 "       1" + 1 - (got 0, expected 2)

NetBSD skips leading white space. They do not try to enforce POSIX
compatible arguments (even without the equivalent of EXPR_COMPAT or the
"-e" option). I checked the latest sources, this is still the case,
although there had been an attempt to add POSIX options parsing in 2009
(which was immediatly backed-out again).

> % not ok 15 -e "       1" + 1 - (got 2, expected 0)

NetBSD does not support "-e" and considers it a valid string argument,
but then the expression does not parse.

> % not ok 29 -- -9223372036854775808 / -1 - (got 0, expected 2)
> 
> NetBSD does sloppy parsing using strtoll(), and does all numeric operations
> in type int64_t, and does primitive range checking.  Most of the failures
> are from the sloppy parsing.  #29 is from the range checking being too
> primitive for the delicate case INTMAX_MIN / -1.

Yes, I special cased division of INTMAX_MIN / -1, since this is the only
case of overflow in division (besides the div 0 case).

The NetBSD range checks are incomplete for the sole reason, that they
use one wrong comparison operator (i.e. "a < 0 && b < 0 && r > 0", while
the final test should be "r >= 0" to catch "INTMAX_MIN + INTMAX_MIN).

> Linux:
> % not ok 10 - - (got 0, expected 2)
> % not ok 11 -1 - (got 0, expected 2)
> % not ok 12 -1 + 1 - (got 1, expected 2)
> 
> I don't understand these 3.  Linux expr gives the error when run directly.
> Now I'm confused by the results of NetBSD expr for these tests too.

I just remember that have Linux emulation installed ...

The version I have identifies itself as "expr (GNU coreutils) 6.12" with
Copyright 2008.

Linux expr seems to be as forgiving with regard to strings that look
like command options as NetBSD. "-" is just a string, "-1" a valid first
argument (not an unsupported option) and the expression also just works.

> % not ok 15 -e "       1" + 1 - (got 2, expected 0)
> 
> No -e in Linux.

Same as in NetBSD and about every other POSIX system in the world ;-)

> % not ok 16 "" + 1 - (got 2, expected 0)
> 
> The test seems to be wrong here.  The empty string should only be accepted
> in compat mode, but this test seems to use the default mode.

This was with an earlier version of my patches. I have made the program
and the test case reject interpretation of "" as zero (unless
EXPR_COMPAT or "-e" are given).

> % not ok 18 9223372036854775807 + 1 - (got 0, expected 2)
> % not ok 21 -- -9223372036854775808 \* -1 - (got 0, expected 2)
> % not ok 24 10000000000000000000 + 0 - (got 0, expected 2)
> % not ok 29 -- -9223372036854775808 / -1 - (got 0, expected 2)
> % not ok 32 4611686018427387904 \* 2 - (got 0, expected 2)
> % not ok 35 4611686018427387905 \* -2 - (got 0, expected 2)
> 
> Since Linux does no range checking.

Obviously ...

BTW: Linux "expr" does give "match", "substr", "index" and "length"
special meaning (these are no valid string arguments). And they use "+"
as an escape mechanism to support string these values, anyway.

Thus the token "+" is a valid prefix for any string operand, and
considered an identity operator. This does not lead to ambiguities,
since "+" is not defined as operator on strings. But I do not think that
we should follow that precedent, of course.

> % not ok 55 " 1" + 1 - (got 2, expected 0)
> 
> Since Linux doesn't support EXPR_COMPAT=1 (to allow leading spaces and
> no digits).  This shows an evil of environment variables -- it is not
> obvious what is tested since the environment variable has a critical
> effect but is not mentioned in the test output.

Hmmm, I'll add a marker to the output of the regression test script to
indicate whether EXPR_COMPAT had been set in the environment.

New versions (3 diffs for expr.y, as planned to be committed one after
the other - all relative to the latest version currently in SVN, a patch
for the man page, and the regression tests expr/regress.sh) are attached.

Please let me know, if there is anything else that needs to be changed
before the commit.

Best regards, STefan

--------------000109010508020704090904
Content-Type: text/plain;
 name="expr.1.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="expr.1.diff"

LS0tIGV4cHIuMQkyMDExLTA3LTAxIDIwOjIyOjI5LjIxMzEzMzUyMSArMDIwMAorKysgZXhw
ci4xLkZJTkFMCTIwMTEtMDctMDIgMTg6NTc6MjcuMTYxOTk4NTYzICswMjAwCkBAIC01MCwy
NSArNTAsMjAgQEAKIEFsbCBvcGVyYXRvcnMgYW5kIG9wZXJhbmRzIG11c3QgYmUgcGFzc2Vk
IGFzIHNlcGFyYXRlIGFyZ3VtZW50cy4KIFNldmVyYWwgb2YgdGhlIG9wZXJhdG9ycyBoYXZl
IHNwZWNpYWwgbWVhbmluZyB0byBjb21tYW5kIGludGVycHJldGVycwogYW5kIG11c3QgdGhl
cmVmb3JlIGJlIHF1b3RlZCBhcHByb3ByaWF0ZWx5LgotQWxsIGludGVnZXIgb3BlcmFuZHMg
YXJlIGludGVycHJldGVkIGluIGJhc2UgMTAuCitBbGwgaW50ZWdlciBvcGVyYW5kcyBhcmUg
aW50ZXJwcmV0ZWQgaW4gYmFzZSAxMCBhbmQgbXVzdCBjb25zaXN0IG9mIG9ubHkKK2FuIG9w
dGlvbmFsIGxlYWRpbmcgbWludXMgc2lnbiBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBkaWdp
dHMuCiAuUHAKLUFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHVzaW5nIHNp
Z25lZCBpbnRlZ2VyIG1hdGguCi1JZiB0aGUKLS5GbCBlCi1mbGFnIGlzIHNwZWNpZmllZCwg
YXJpdGhtZXRpYyB1c2VzIHRoZSBDCitBcml0aG1ldGljIG9wZXJhdGlvbnMgYXJlIHBlcmZv
cm1lZCB1c2luZyBzaWduZWQgaW50ZWdlciBtYXRoIHdpdGggYQorcmFuZ2UgYWNjb3JkaW5n
IHRvIHRoZSBDCiAuVnQgaW50bWF4X3QKLWRhdGEgdHlwZSAodGhlIGxhcmdlc3QgaW50ZWdy
YWwgdHlwZSBhdmFpbGFibGUpLCBhbmQKLS5ObQotd2lsbCBkZXRlY3QgYXJpdGhtZXRpYyBv
dmVyZmxvdyBhbmQgcmV0dXJuIGFuIGVycm9yIGluZGljYXRpb24uCi1JZiBhIG51bWVyaWMg
b3BlcmFuZCBpcyBzcGVjaWZpZWQgd2hpY2ggaXMgc28gbGFyZ2UgYXMgdG8gb3ZlcmZsb3cK
LWNvbnZlcnNpb24gdG8gYW4gaW50ZWdlciwgaXQgaXMgcGFyc2VkIGFzIGEgc3RyaW5nIGlu
c3RlYWQuCi1JZgorZGF0YSB0eXBlICh0aGUgbGFyZ2VzdCBzaWduZWQgaW50ZWdyYWwgdHlw
ZSBhdmFpbGFibGUpLgorQWxsIGNvbnZlcnNpb25zIGFuZCBvcGVyYXRpb25zIGFyZSBjaGVj
a2VkIGZvciBvdmVyZmxvdy4KK092ZXJmbG93IHJlc3VsdHMgaW4gcHJvZ3JhbSB0ZXJtaW5h
dGlvbiB3aXRoIGFuIGVycm9yIG1lc3NhZ2Ugb24gc3Rkb3V0CithbmQgd2l0aCBhbiBlcnJv
ciBzdGF0dXMuCisuUHAKK1RoZQogLkZsIGUKLWlzIG5vdCBzcGVjaWZpZWQsIGFyaXRobWV0
aWMgb3BlcmF0aW9ucyBhbmQgcGFyc2luZyBvZiBpbnRlZ2VyCi1hcmd1bWVudHMgd2lsbCBv
dmVyZmxvdyBzaWxlbnRseSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBDCi1zdGFu
ZGFyZCwgdXNpbmcgdGhlCi0uVnQgbG9uZwotZGF0YSB0eXBlLgorb3B0aW9uIGlzIGFjY2Vw
dGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBidXQgaGFzIG5vIGVmZmVjdC4KIC5Q
cAogT3BlcmF0b3JzIGFyZSBsaXN0ZWQgYmVsb3cgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBw
cmVjZWRlbmNlOyBhbGwKIGFyZSBsZWZ0LWFzc29jaWF0aXZlLgpAQCAtODIsNyArNzcsOSBA
QAogLkFyIGV4cHIxCiBpZiBpdCBpcyBuZWl0aGVyIGFuIGVtcHR5IHN0cmluZyBub3IgemVy
bzsKIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgZXZhbHVhdGlvbiBvZgotLkFyIGV4cHIyIC4K
Ky5BciBleHByMgoraWYgaXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZzsKK290aGVyd2lzZSwg
cmV0dXJucyB6ZXJvLgogLkl0IEFyIGV4cHIxIExpICYgQXIgZXhwcjIKIFJldHVybiB0aGUg
ZXZhbHVhdGlvbiBvZgogLkFyIGV4cHIxCkBAIC0yNzAsOCArMjY3LDM1IEBACiBUaGUKIC5O
bQogdXRpbGl0eSBjb25mb3JtcyB0bwotLlN0IC1wMTAwMy4xLTIwMDEgLAorLlN0IC1wMTAw
My4xICwKIHByb3ZpZGVkIHRoYXQgY29tcGF0aWJpbGl0eSBtb2RlIGlzIG5vdCBlbmFibGVk
LgorLlBwCitDb21wYXRpYmlsaXR5IG1vZGUgcGVyZm9ybXMgbGVzcyBzdHJpY3QgY2hlY2tz
IG9mIG51bWVyaWMgYXJndW1lbnRzOgorLkJsIC1idWxsZXQKKy5JdAorQW4gZW1wdHkgb3Bl
cmFuZCBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgMC4KKy5FbAorLkJsIC1idWxsZXQKKy5J
dAorTGVhZGluZyB3aGl0ZSBzcGFjZSBhbmQvb3IgYSBwbHVzIHNpZ24gYmVmb3JlIGFuIG90
aGVyd2lzZSB2YWxpZCBwb3NpdGl2ZQorbnVtYmVyaWMgb3BlcmFuZCBhcmUgYWxsb3dlZCBh
bmQgd2lsbCBiZSBpZ25vcmVkLgorLkVsCisuUHAKK1RoZSBleHRlbmRlZCBhcml0aG1ldGlj
IHJhbmdlIGFuZCBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGNvbmZsaWN0IHdpdGgKK1BPU0lY
J3MgcmVxdWlyZW1lbnQgdGhhdCBhcml0aG1ldGljIGJlIGRvbmUgdXNpbmcgc2lnbmVkIGxv
bmdzLCBzaW5jZQordGhleSBvbmx5IG1ha2UgYSBkaWZmZXJlbmNlIHRvIHRoZSByZXN1bHQg
aW4gY2FzZXMgd2hlcmUgdXNpbmcgc2lnbmVkCitsb25ncyB3b3VsZCBnaXZlIHVuZGVmaW5l
ZCBiZWhhdmlvci4KKy5QcAorQWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCwgdGhlIHVzZSBv
ZiBzdHJpbmcgYXJndW1lbnRzCisuVmEgbGVuZ3RoICwKKy5WYSBzdWJzdHIgLAorLlZhIGlu
ZGV4ICwKK29yCisuVmEgbWF0Y2gKK3Byb2R1Y2VzIHVuc3BlY2lmaWVkIHJlc3VsdHMuIElu
IHRoaXMgdmVyc2lvbiBvZgorLk5tICwKK3RoZXNlIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBq
dXN0IGFzIHRoZWlyIHJlc3BlY3RpdmUgc3RyaW5nIHZhbHVlcy4KKy5QcAogVGhlCiAuRmwg
ZQogZmxhZyBpcyBhbiBleHRlbnNpb24uCg==
--------------000109010508020704090904
Content-Type: text/plain;
 name="expr.y.diff1"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="expr.y.diff1"

LS0tIGV4cHIueS5PUklHCTIwMTEtMDctMDEgMjA6MjI6MjkuMTE5NjA3MjY5ICswMjAwCisr
KyBleHByLnkuTkVXMQkyMDExLTA3LTA0IDE3OjA0OjM2LjEyMDk2NzUyNyArMDIwMApAQCAt
NDIsMTMgKzQyLDE1IEBACiAKIHN0cnVjdCB2YWwgKnJlc3VsdDsKIAordm9pZAkJYXNzZXJ0
X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKIGludAkJY2hrX2RpdihpbnRtYXhfdCwgaW50
bWF4X3QpOwogaW50CQljaGtfbWludXMoaW50bWF4X3QsIGludG1heF90LCBpbnRtYXhfdCk7
CiBpbnQJCWNoa19wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3QpOwogaW50CQlj
aGtfdGltZXMoaW50bWF4X3QsIGludG1heF90LCBpbnRtYXhfdCk7CiB2b2lkCQlmcmVlX3Zh
bHVlKHN0cnVjdCB2YWwgKik7Ci1pbnQJCWlzX3plcm9fb3JfbnVsbChzdHJ1Y3QgdmFsICop
OworaW50CQlpc19pbnRlZ2VyKGNvbnN0IGNoYXIgKik7CiBpbnQJCWlzc3RyaW5nKHN0cnVj
dCB2YWwgKik7CitpbnQJCWlzX3plcm9fb3JfbnVsbChzdHJ1Y3QgdmFsICopOwogc3RydWN0
IHZhbAkqbWFrZV9pbnRlZ2VyKGludG1heF90KTsKIHN0cnVjdCB2YWwJKm1ha2Vfc3RyKGNv
bnN0IGNoYXIgKik7CiBzdHJ1Y3QgdmFsCSpvcF9hbmQoc3RydWN0IHZhbCAqLCBzdHJ1Y3Qg
dmFsICopOwpAQCAtNjUsMTMgKzY3LDEzIEBACiBzdHJ1Y3QgdmFsCSpvcF9wbHVzKHN0cnVj
dCB2YWwgKiwgc3RydWN0IHZhbCAqKTsKIHN0cnVjdCB2YWwJKm9wX3JlbShzdHJ1Y3QgdmFs
ICosIHN0cnVjdCB2YWwgKik7CiBzdHJ1Y3QgdmFsCSpvcF90aW1lcyhzdHJ1Y3QgdmFsICos
IHN0cnVjdCB2YWwgKik7Ci1pbnRtYXhfdAl0b19pbnRlZ2VyKHN0cnVjdCB2YWwgKik7Citp
bnQJCXRvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKIHZvaWQJCXRvX3N0cmluZyhzdHJ1Y3Qg
dmFsICopOwogaW50CQl5eWVycm9yKGNvbnN0IGNoYXIgKik7CiBpbnQJCXl5bGV4KHZvaWQp
OwogaW50CQl5eXBhcnNlKHZvaWQpOwogCi1zdGF0aWMgaW50CWVmbGFnOworc3RhdGljIGlu
dAlub25wb3NpeDsKIGNoYXIgKiphdjsKICV9CiAKQEAgLTEzNCwzNyArMTM2LDE2IEBACiBt
YWtlX3N0cihjb25zdCBjaGFyICpzKQogewogCXN0cnVjdCB2YWwgKnZwOwotCWNoYXIgKmVw
OwogCiAJdnAgPSAoc3RydWN0IHZhbCAqKSBtYWxsb2MgKHNpemVvZiAoKnZwKSk7CiAJaWYg
KHZwID09IE5VTEwgfHwgKCh2cC0+dS5zID0gc3RyZHVwIChzKSkgPT0gTlVMTCkpIHsKIAkJ
ZXJyeChFUlJfRVhJVCwgIm1hbGxvYygpIGZhaWxlZCIpOwogCX0KIAotCS8qCi0JICogUHJl
dmlvdXNseSB3ZSB0cmllZCB0byBzY2FuIHRoZSBzdHJpbmcgdG8gc2VlIGlmIGl0IGBgbG9v
a2VkIGxpa2UnJwotCSAqIGFuIGludGVnZXIgKGVycm9uZW91c2x5LCBhcyBpdCBoYXBwZW5l
ZCkuICBMZXQgc3RydG9pbWF4KCkgZG8gdGhlCi0JICogZGlydHkgd29yay4gIFdlIGNvdWxk
IGNhY2hlIHRoZSB2YWx1ZSwgZXhjZXB0IHRoYXQgd2UgYXJlIHVzaW5nCi0JICogYSB1bmlv
biBhbmQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RyaW5nIGZvcm0gdW50aWwg
d2UKLQkgKiBhcmUgY2VydGFpbiB0aGF0IGl0IGlzIG5vdCBuZWVkZWQuCi0JICoKLQkgKiBJ
RUVFIFN0ZC4xMDAzLjEtMjAwMSBzYXlzOgotCSAqIC9pbnRlZ2VyLyBBbiBhcmd1bWVudCBj
b25zaXN0aW5nIG9ubHkgb2YgYW4gKG9wdGlvbmFsKSB1bmFyeSBtaW51cyAgCi0JICoJICAg
ICBmb2xsb3dlZCBieSBkaWdpdHMuICAgICAgICAgIAotCSAqCi0JICogVGhpcyBtZWFucyB0
aGF0IGFyZ3VtZW50cyB3aGljaCBjb25zaXN0IG9mIGRpZ2l0cyBmb2xsb3dlZCBieQotCSAq
IG5vbi1kaWdpdHMgTVVTVCBOT1QgYmUgY29uc2lkZXJlZCBpbnRlZ2Vycy4gIHN0cnRvaW1h
eCgpIHdpbGwKLQkgKiBmaWd1cmUgdGhpcyBvdXQgZm9yIHVzLgotCSAqLwotCWlmIChlZmxh
ZykKLQkJKHZvaWQpc3RydG9pbWF4KHMsICZlcCwgMTApOworCWlmIChpc19pbnRlZ2VyKHMp
KQorCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCWVsc2UKLQkJKHZvaWQpc3RydG9s
KHMsICZlcCwgMTApOwotCi0JaWYgKCplcCAhPSAnXDAnKQogCQl2cC0+dHlwZSA9IHN0cmlu
ZzsKLQllbHNlCQotCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCiAJcmV0dXJuIHZw
OwogfQpAQCAtMTc4LDMxICsxNTksMzMgQEAKIH0KIAogCi1pbnRtYXhfdAoraW50CiB0b19p
bnRlZ2VyKHN0cnVjdCB2YWwgKnZwKQogewogCWludG1heF90IGk7CiAKLQlpZiAodnAtPnR5
cGUgPT0gaW50ZWdlcikKLQkJcmV0dXJuIDE7Ci0KLQlpZiAodnAtPnR5cGUgPT0gc3RyaW5n
KQotCQlyZXR1cm4gMDsKLQotCS8qIHZwLT50eXBlID09IG51bWVyaWNfc3RyaW5nLCBtYWtl
IGl0IG51bWVyaWMgKi8KLQllcnJubyA9IDA7Ci0JaWYgKGVmbGFnKSB7CisJLyogd2UgY2Fu
IG9ubHkgY29udmVydCBudW1lcmljX3N0cmluZyB0byBpbnRlZ2VyLCBoZXJlICovCisJaWYg
KHZwLT50eXBlID09IG51bWVyaWNfc3RyaW5nKSB7CisJCWVycm5vID0gMDsKIAkJaSAgPSBz
dHJ0b2ltYXgodnAtPnUucywgKGNoYXIgKiopTlVMTCwgMTApOwotCQlpZiAoZXJybm8gPT0g
RVJBTkdFKQotCQkJZXJyKEVSUl9FWElULCBOVUxMKTsKLQl9IGVsc2UgewotCQlpID0gc3Ry
dG9sKHZwLT51LnMsIChjaGFyICoqKU5VTEwsIDEwKTsKKwkJLyoganVzdCBrZWVwIGFzIG51
bWVyaWNfc3RyaW5nLCBpZiB0aGUgY29udmVyc2lvbiBmYWlscyAqLworCQlpZiAoZXJybm8g
IT0gRVJBTkdFKSB7CisJCQlmcmVlICh2cC0+dS5zKTsKKwkJCXZwLT51LmkgPSBpOworCQkJ
dnAtPnR5cGUgPSBpbnRlZ2VyOworCQl9CiAJfQorCXJldHVybiAodnAtPnR5cGUgPT0gaW50
ZWdlcik7Cit9CiAKLQlmcmVlICh2cC0+dS5zKTsKLQl2cC0+dS5pID0gaTsKLQl2cC0+dHlw
ZSA9IGludGVnZXI7Ci0JcmV0dXJuIDE7CisKK3ZvaWQKK2Fzc2VydF90b19pbnRlZ2VyKHN0
cnVjdCB2YWwgKnZwKQoreworCWlmICh2cC0+dHlwZSA9PSBzdHJpbmcpCisJCWVycngoRVJS
X0VYSVQsICJub3QgYSBkZWNpbWFsIG51bWJlcjogJyVzJyIsIHZwLT51LnMpOworCWlmICgh
dG9faW50ZWdlcih2cCkpCisJCWVycngoRVJSX0VYSVQsICJvcGVyYW5kIHRvbyBsYXJnZTog
JyVzJyIsIHZwLT51LnMpOwogfQogCiB2b2lkCkBAIC0yMzAsNiArMjEzLDI1IEBACiAKIAog
aW50Citpc19pbnRlZ2VyKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKG5vbnBvc2l4KSB7CisJ
CWlmICgqcyA9PSAnXDAnKQorCQkJcmV0dXJuICgxKTsKKwkJd2hpbGUgKGlzc3BhY2UoKHVu
c2lnbmVkIGNoYXIpKnMpKQorCQkJcysrOworCX0KKwlpZiAoKnMgPT0gJy0nIHx8IChub25w
b3NpeCAmJiAqcyA9PSAnKycpKQorCQlzKys7CisJaWYgKCpzID09ICdcMCcpCisJCXJldHVy
biAoMCk7CisJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnMpKQorCQlzKys7CisJ
cmV0dXJuICgqcyA9PSAnXDAnKTsKK30KKworCitpbnQKIGlzc3RyaW5nKHN0cnVjdCB2YWwg
KnZwKQogewogCS8qIG9ubHkgVFJVRSBpZiB0aGlzIHN0cmluZyBpcyBub3QgYSB2YWxpZCBp
bnRlZ2VyICovCkBAIC0yODIsMTIgKzI4NCwxMiBAQAogCWlmIChnZXRlbnYoIkVYUFJfQ09N
UEFUIikgIT0gTlVMTAogCSAgICB8fCBjaGVja191dGlsaXR5X2NvbXBhdCgiZXhwciIpKSB7
CiAJCWF2ID0gYXJndiArIDE7Ci0JCWVmbGFnID0gMTsKKwkJbm9ucG9zaXggPSAxOwogCX0g
ZWxzZSB7CiAJCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZSIpKSAhPSAtMSkK
IAkJCXN3aXRjaCAoYykgewogCQkJY2FzZSAnZSc6Ci0JCQkJZWZsYWcgPSAxOworCQkJCW5v
bnBvc2l4ID0gMTsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKQEAgLTMxOCwxNSArMzIw
LDE3IEBACiBzdHJ1Y3QgdmFsICoKIG9wX29yKHN0cnVjdCB2YWwgKmEsIHN0cnVjdCB2YWwg
KmIpCiB7Ci0JaWYgKGlzX3plcm9fb3JfbnVsbCAoYSkpIHsKLQkJZnJlZV92YWx1ZSAoYSk7
Ci0JCXJldHVybiAoYik7Ci0JfSBlbHNlIHsKLQkJZnJlZV92YWx1ZSAoYik7CisJaWYgKCFp
c196ZXJvX29yX251bGwoYSkpIHsKKwkJZnJlZV92YWx1ZShiKTsKIAkJcmV0dXJuIChhKTsK
IAl9CisJZnJlZV92YWx1ZShhKTsKKwlpZiAoIWlzX3plcm9fb3JfbnVsbChiKSkKKwkJcmV0
dXJuIChiKTsKKwlmcmVlX3ZhbHVlKGIpOworCXJldHVybiAobWFrZV9pbnRlZ2VyKChpbnRt
YXhfdCkwKSk7CiB9Ci0JCQorCiBzdHJ1Y3QgdmFsICoKIG9wX2FuZChzdHJ1Y3QgdmFsICph
LCBzdHJ1Y3QgdmFsICpiKQogewpAQCAtMzUwLDggKzM1NCw4IEBACiAJCXRvX3N0cmluZyAo
Yik7CQogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywg
Yi0+dS5zKSA9PSAwKSk7CiAJfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJ
KHZvaWQpdG9faW50ZWdlcihiKTsKKwkJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJCWFzc2Vy
dF90b19pbnRlZ2VyKGIpOwogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUu
aSA9PSBiLT51LmkpKTsKIAl9CiAKQEAgLTM3MCw4ICszNzQsOCBAQAogCQl0b19zdHJpbmcg
KGIpOwogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywg
Yi0+dS5zKSA+IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQko
dm9pZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0
X3RvX2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5p
ID4gYi0+dS5pKSk7CiAJfQogCkBAIC0zOTAsOCArMzk0LDggQEAKIAkJdG9fc3RyaW5nIChi
KTsKIAkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShzdHJjb2xsIChhLT51LnMsIGIt
PnUucykgPCAwKSk7CiAJfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZv
aWQpdG9faW50ZWdlcihiKTsKKwkJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJCWFzc2VydF90
b19pbnRlZ2VyKGIpOwogCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUuaSA8
IGItPnUuaSkpOwogCX0KIApAQCAtNDEwLDggKzQxNCw4IEBACiAJCXRvX3N0cmluZyAoYik7
CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoc3RyY29sbCAoYS0+dS5zLCBiLT51
LnMpID49IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9p
ZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3Rv
X2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5pID49
IGItPnUuaSkpOwogCX0KIApAQCAtNDMwLDggKzQzNCw4IEBACiAJCXRvX3N0cmluZyAoYik7
CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoc3RyY29sbCAoYS0+dS5zLCBiLT51
LnMpIDw9IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9p
ZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3Rv
X2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5pIDw9
IGItPnUuaSkpOwogCX0KIApAQCAtNDUwLDggKzQ1NCw4IEBACiAJCXRvX3N0cmluZyAoYik7
CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoc3RyY29sbCAoYS0+dS5zLCBiLT51
LnMpICE9IDApKTsKIAl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9p
ZCl0b19pbnRlZ2VyKGIpOworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3Rv
X2ludGVnZXIoYik7CiAJCXIgPSBtYWtlX2ludGVnZXIgKChpbnRtYXhfdCkoYS0+dS5pICE9
IGItPnUuaSkpOwogCX0KIApAQCAtNDc5LDE3ICs0ODMsMTMgQEAKIHsKIAlzdHJ1Y3QgdmFs
ICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVy
cngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KKwlhc3NlcnRfdG9f
aW50ZWdlcihhKTsKKwlhc3NlcnRfdG9faW50ZWdlcihiKTsKIAotCWlmIChlZmxhZykgewot
CQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSArIGItPnUuaSk7Ci0JCWlmIChjaGtfcGx1cyhh
LT51LmksIGItPnUuaSwgci0+dS5pKSkgewotCQkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93
Iik7Ci0JCX0KLQl9IGVsc2UKLQkJciA9IG1ha2VfaW50ZWdlcigobG9uZylhLT51LmkgKyAo
bG9uZyliLT51LmkpOworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pICsgYi0+dS5pKTsKKwlp
ZiAoY2hrX3BsdXMoYS0+dS5pLCBiLT51LmksIHItPnUuaSkpIHsKKwkJZXJyeChFUlJfRVhJ
VCwgIm92ZXJmbG93Iik7CisJfQogCiAJZnJlZV92YWx1ZSAoYSk7CiAJZnJlZV92YWx1ZSAo
Yik7CkBAIC01MTYsMTcgKzUxNiwxMyBAQAogewogCXN0cnVjdCB2YWwgKnI7CiAKLQlpZiAo
IXRvX2ludGVnZXIoYSkgfHwgIXRvX2ludGVnZXIoYikpIHsKLQkJZXJyeChFUlJfRVhJVCwg
Im5vbi1udW1lcmljIGFyZ3VtZW50Iik7Ci0JfQorCWFzc2VydF90b19pbnRlZ2VyKGEpOwor
CWFzc2VydF90b19pbnRlZ2VyKGIpOwogCi0JaWYgKGVmbGFnKSB7Ci0JCXIgPSBtYWtlX2lu
dGVnZXIoYS0+dS5pIC0gYi0+dS5pKTsKLQkJaWYgKGNoa19taW51cyhhLT51LmksIGItPnUu
aSwgci0+dS5pKSkgewotCQkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7Ci0JCX0KLQl9
IGVsc2UKLQkJciA9IG1ha2VfaW50ZWdlcigobG9uZylhLT51LmkgLSAobG9uZyliLT51Lmkp
OworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pIC0gYi0+dS5pKTsKKwlpZiAoY2hrX21pbnVz
KGEtPnUuaSwgYi0+dS5pLCByLT51LmkpKSB7CisJCWVycngoRVJSX0VYSVQsICJvdmVyZmxv
dyIpOworCX0KIAogCWZyZWVfdmFsdWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwpAQCAtNTUw
LDE3ICs1NDYsMTMgQEAKIHsKIAlzdHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2Vy
KGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJp
YyBhcmd1bWVudCIpOwotCX0KKwlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwlhc3NlcnRfdG9f
aW50ZWdlcihiKTsKIAotCWlmIChlZmxhZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUu
aSAqIGItPnUuaSk7Ci0JCWlmIChjaGtfdGltZXMoYS0+dS5pLCBiLT51LmksIHItPnUuaSkp
IHsKLQkJCWVycngoRVJSX0VYSVQsICJvdmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIg
PSBtYWtlX2ludGVnZXIoKGxvbmcpYS0+dS5pICogKGxvbmcpYi0+dS5pKTsKKwlyID0gbWFr
ZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7CisJaWYgKGNoa190aW1lcyhhLT51LmksIGIt
PnUuaSwgci0+dS5pKSkgeworCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKKwl9CiAK
IAlmcmVlX3ZhbHVlIChhKTsKIAlmcmVlX3ZhbHVlIChiKTsKQEAgLTU4MywyMSArNTc1LDE2
IEBACiB7CiAJc3RydWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9f
aW50ZWdlcihiKSkgewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQi
KTsKLQl9CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7
CiAKIAlpZiAoYi0+dS5pID09IDApIHsKIAkJZXJyeChFUlJfRVhJVCwgImRpdmlzaW9uIGJ5
IHplcm8iKTsKIAl9Ci0KLQlpZiAoZWZsYWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51
LmkgLyBiLT51LmkpOwotCQlpZiAoY2hrX2RpdihhLT51LmksIGItPnUuaSkpIHsKLQkJCWVy
cngoRVJSX0VYSVQsICJvdmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2lu
dGVnZXIoKGxvbmcpYS0+dS5pIC8gKGxvbmcpYi0+dS5pKTsKKwlpZiAoY2hrX2RpdihhLT51
LmksIGItPnUuaSkpIHsKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7CisJfQorCXIg
PSBtYWtlX2ludGVnZXIoYS0+dS5pIC8gYi0+dS5pKTsKIAogCWZyZWVfdmFsdWUgKGEpOwog
CWZyZWVfdmFsdWUgKGIpOwpAQCAtNjA5LDE5ICs1OTYsMTIgQEAKIHsKIAlzdHJ1Y3QgdmFs
ICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVy
cngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQorCWFzc2VydF90
b19pbnRlZ2VyKGEpOworCWFzc2VydF90b19pbnRlZ2VyKGIpOwogCWlmIChiLT51LmkgPT0g
MCkgewogCQllcnJ4KEVSUl9FWElULCAiZGl2aXNpb24gYnkgemVybyIpOwogCX0KLQotCWlm
IChlZmxhZykKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBiLT51LmkpOwotCSAgICAg
ICAgLyogY2hrX3JlbSBuZWNlc3NhcnkgPz8/ICovCi0JZWxzZQotCQlyID0gbWFrZV9pbnRl
Z2VyKChsb25nKWEtPnUuaSAlIChsb25nKWItPnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihh
LT51LmkgJSBiLT51LmkpOwogCiAJZnJlZV92YWx1ZSAoYSk7CiAJZnJlZV92YWx1ZSAoYik7
Cg==
--------------000109010508020704090904
Content-Type: text/plain;
 name="expr.y.diff2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="expr.y.diff2"

LS0tIGV4cHIueS5PUklHCTIwMTEtMDctMDEgMjA6MjI6MjkuMTE5NjA3MjY5ICswMjAwCisr
KyBleHByLnkuTkVXMgkyMDExLTA3LTA0IDE3OjA0OjU0Ljc0OTk2ODI1MCArMDIwMApAQCAt
NDAsMTUgKzQwLDIwIEBACiAJfSB1OwogfSA7CiAKK2NoYXIJCSoqYXY7CitpbnQJCW5vbnBv
c2l4Owogc3RydWN0IHZhbCAqcmVzdWx0OwogCi1pbnQJCWNoa19kaXYoaW50bWF4X3QsIGlu
dG1heF90KTsKLWludAkJY2hrX21pbnVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3Qp
OwotaW50CQljaGtfcGx1cyhpbnRtYXhfdCwgaW50bWF4X3QsIGludG1heF90KTsKLWludAkJ
Y2hrX3RpbWVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3QpOwordm9pZAkJYXNzZXJ0
X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKK3ZvaWQJCWFzc2VydF9kaXYoaW50bWF4X3Qs
IGludG1heF90KTsKK3ZvaWQJCWFzc2VydF9taW51cyhpbnRtYXhfdCwgaW50bWF4X3QsIGlu
dG1heF90KTsKK3ZvaWQJCWFzc2VydF9wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4
X3QpOwordm9pZAkJYXNzZXJ0X3RpbWVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3Qp
OworaW50CQljb21wYXJlX3ZhbHMoc3RydWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwogdm9p
ZAkJZnJlZV92YWx1ZShzdHJ1Y3QgdmFsICopOwotaW50CQlpc196ZXJvX29yX251bGwoc3Ry
dWN0IHZhbCAqKTsKK2ludAkJaXNfaW50ZWdlcihjb25zdCBjaGFyICopOwogaW50CQlpc3N0
cmluZyhzdHJ1Y3QgdmFsICopOworaW50CQlpc196ZXJvX29yX251bGwoc3RydWN0IHZhbCAq
KTsKIHN0cnVjdCB2YWwJKm1ha2VfaW50ZWdlcihpbnRtYXhfdCk7CiBzdHJ1Y3QgdmFsCSpt
YWtlX3N0cihjb25zdCBjaGFyICopOwogc3RydWN0IHZhbAkqb3BfYW5kKHN0cnVjdCB2YWwg
Kiwgc3RydWN0IHZhbCAqKTsKQEAgLTY1LDE0ICs3MCwxMiBAQAogc3RydWN0IHZhbAkqb3Bf
cGx1cyhzdHJ1Y3QgdmFsICosIHN0cnVjdCB2YWwgKik7CiBzdHJ1Y3QgdmFsCSpvcF9yZW0o
c3RydWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwogc3RydWN0IHZhbAkqb3BfdGltZXMoc3Ry
dWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwotaW50bWF4X3QJdG9faW50ZWdlcihzdHJ1Y3Qg
dmFsICopOworaW50CQl0b19pbnRlZ2VyKHN0cnVjdCB2YWwgKik7CiB2b2lkCQl0b19zdHJp
bmcoc3RydWN0IHZhbCAqKTsKIGludAkJeXllcnJvcihjb25zdCBjaGFyICopOwogaW50CQl5
eWxleCh2b2lkKTsKIGludAkJeXlwYXJzZSh2b2lkKTsKIAotc3RhdGljIGludAllZmxhZzsK
LWNoYXIgKiphdjsKICV9CiAKICV1bmlvbgpAQCAtMTM0LDM3ICsxMzcsMTYgQEAKIG1ha2Vf
c3RyKGNvbnN0IGNoYXIgKnMpCiB7CiAJc3RydWN0IHZhbCAqdnA7Ci0JY2hhciAqZXA7CiAK
IAl2cCA9IChzdHJ1Y3QgdmFsICopIG1hbGxvYyAoc2l6ZW9mICgqdnApKTsKIAlpZiAodnAg
PT0gTlVMTCB8fCAoKHZwLT51LnMgPSBzdHJkdXAgKHMpKSA9PSBOVUxMKSkgewogCQllcnJ4
KEVSUl9FWElULCAibWFsbG9jKCkgZmFpbGVkIik7CiAJfQogCi0JLyoKLQkgKiBQcmV2aW91
c2x5IHdlIHRyaWVkIHRvIHNjYW4gdGhlIHN0cmluZyB0byBzZWUgaWYgaXQgYGBsb29rZWQg
bGlrZScnCi0JICogYW4gaW50ZWdlciAoZXJyb25lb3VzbHksIGFzIGl0IGhhcHBlbmVkKS4g
IExldCBzdHJ0b2ltYXgoKSBkbyB0aGUKLQkgKiBkaXJ0eSB3b3JrLiAgV2UgY291bGQgY2Fj
aGUgdGhlIHZhbHVlLCBleGNlcHQgdGhhdCB3ZSBhcmUgdXNpbmcKLQkgKiBhIHVuaW9uIGFu
ZCBuZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJpbmcgZm9ybSB1bnRpbCB3ZQot
CSAqIGFyZSBjZXJ0YWluIHRoYXQgaXQgaXMgbm90IG5lZWRlZC4KLQkgKgotCSAqIElFRUUg
U3RkLjEwMDMuMS0yMDAxIHNheXM6Ci0JICogL2ludGVnZXIvIEFuIGFyZ3VtZW50IGNvbnNp
c3Rpbmcgb25seSBvZiBhbiAob3B0aW9uYWwpIHVuYXJ5IG1pbnVzICAKLQkgKgkgICAgIGZv
bGxvd2VkIGJ5IGRpZ2l0cy4gICAgICAgICAgCi0JICoKLQkgKiBUaGlzIG1lYW5zIHRoYXQg
YXJndW1lbnRzIHdoaWNoIGNvbnNpc3Qgb2YgZGlnaXRzIGZvbGxvd2VkIGJ5Ci0JICogbm9u
LWRpZ2l0cyBNVVNUIE5PVCBiZSBjb25zaWRlcmVkIGludGVnZXJzLiAgc3RydG9pbWF4KCkg
d2lsbAotCSAqIGZpZ3VyZSB0aGlzIG91dCBmb3IgdXMuCi0JICovCi0JaWYgKGVmbGFnKQot
CQkodm9pZClzdHJ0b2ltYXgocywgJmVwLCAxMCk7CisJaWYgKGlzX2ludGVnZXIocykpCisJ
CXZwLT50eXBlID0gbnVtZXJpY19zdHJpbmc7CiAJZWxzZQotCQkodm9pZClzdHJ0b2wocywg
JmVwLCAxMCk7Ci0KLQlpZiAoKmVwICE9ICdcMCcpCiAJCXZwLT50eXBlID0gc3RyaW5nOwot
CWVsc2UJCi0JCXZwLT50eXBlID0gbnVtZXJpY19zdHJpbmc7CiAKIAlyZXR1cm4gdnA7CiB9
CkBAIC0xNzgsMzEgKzE2MCwzMyBAQAogfQogCiAKLWludG1heF90CitpbnQKIHRvX2ludGVn
ZXIoc3RydWN0IHZhbCAqdnApCiB7CiAJaW50bWF4X3QgaTsKIAotCWlmICh2cC0+dHlwZSA9
PSBpbnRlZ2VyKQotCQlyZXR1cm4gMTsKLQotCWlmICh2cC0+dHlwZSA9PSBzdHJpbmcpCi0J
CXJldHVybiAwOwotCi0JLyogdnAtPnR5cGUgPT0gbnVtZXJpY19zdHJpbmcsIG1ha2UgaXQg
bnVtZXJpYyAqLwotCWVycm5vID0gMDsKLQlpZiAoZWZsYWcpIHsKKwkvKiB3ZSBjYW4gb25s
eSBjb252ZXJ0IG51bWVyaWNfc3RyaW5nIHRvIGludGVnZXIsIGhlcmUgKi8KKwlpZiAodnAt
PnR5cGUgPT0gbnVtZXJpY19zdHJpbmcpIHsKKwkJZXJybm8gPSAwOwogCQlpICA9IHN0cnRv
aW1heCh2cC0+dS5zLCAoY2hhciAqKilOVUxMLCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFO
R0UpCi0JCQllcnIoRVJSX0VYSVQsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCWkgPSBzdHJ0b2wo
dnAtPnUucywgKGNoYXIgKiopTlVMTCwgMTApOworCQkvKiBqdXN0IGtlZXAgYXMgbnVtZXJp
Y19zdHJpbmcsIGlmIHRoZSBjb252ZXJzaW9uIGZhaWxzICovCisJCWlmIChlcnJubyAhPSBF
UkFOR0UpIHsKKwkJCWZyZWUgKHZwLT51LnMpOworCQkJdnAtPnUuaSA9IGk7CisJCQl2cC0+
dHlwZSA9IGludGVnZXI7CisJCX0KIAl9CisJcmV0dXJuICh2cC0+dHlwZSA9PSBpbnRlZ2Vy
KTsKK30KIAotCWZyZWUgKHZwLT51LnMpOwotCXZwLT51LmkgPSBpOwotCXZwLT50eXBlID0g
aW50ZWdlcjsKLQlyZXR1cm4gMTsKKwordm9pZAorYXNzZXJ0X3RvX2ludGVnZXIoc3RydWN0
IHZhbCAqdnApCit7CisJaWYgKHZwLT50eXBlID09IHN0cmluZykKKwkJZXJyeChFUlJfRVhJ
VCwgIm5vdCBhIGRlY2ltYWwgbnVtYmVyOiAnJXMnIiwgdnAtPnUucyk7CisJaWYgKCF0b19p
bnRlZ2VyKHZwKSkKKwkJZXJyeChFUlJfRVhJVCwgIm9wZXJhbmQgdG9vIGxhcmdlOiAnJXMn
IiwgdnAtPnUucyk7CiB9CiAKIHZvaWQKQEAgLTIzMCw2ICsyMTQsMjUgQEAKIAogCiBpbnQK
K2lzX2ludGVnZXIoY29uc3QgY2hhciAqcykKK3sKKwlpZiAobm9ucG9zaXgpIHsKKwkJaWYg
KCpzID09ICdcMCcpCisJCQlyZXR1cm4gKDEpOworCQl3aGlsZSAoaXNzcGFjZSgodW5zaWdu
ZWQgY2hhcikqcykpCisJCQlzKys7CisJfQorCWlmICgqcyA9PSAnLScgfHwgKG5vbnBvc2l4
ICYmICpzID09ICcrJykpCisJCXMrKzsKKwlpZiAoKnMgPT0gJ1wwJykKKwkJcmV0dXJuICgw
KTsKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqcykpCisJCXMrKzsKKwlyZXR1
cm4gKCpzID09ICdcMCcpOworfQorCisKK2ludAogaXNzdHJpbmcoc3RydWN0IHZhbCAqdnAp
CiB7CiAJLyogb25seSBUUlVFIGlmIHRoaXMgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGludGVn
ZXIgKi8KQEAgLTI4MiwxMiArMjg1LDEyIEBACiAJaWYgKGdldGVudigiRVhQUl9DT01QQVQi
KSAhPSBOVUxMCiAJICAgIHx8IGNoZWNrX3V0aWxpdHlfY29tcGF0KCJleHByIikpIHsKIAkJ
YXYgPSBhcmd2ICsgMTsKLQkJZWZsYWcgPSAxOworCQlub25wb3NpeCA9IDE7CiAJfSBlbHNl
IHsKIAkJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJlIikpICE9IC0xKQogCQkJ
c3dpdGNoIChjKSB7CiAJCQljYXNlICdlJzoKLQkJCQllZmxhZyA9IDE7CisJCQkJbm9ucG9z
aXggPSAxOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtMzE4LDE1ICszMjEsMTcg
QEAKIHN0cnVjdCB2YWwgKgogb3Bfb3Ioc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAqYikK
IHsKLQlpZiAoaXNfemVyb19vcl9udWxsIChhKSkgewotCQlmcmVlX3ZhbHVlIChhKTsKLQkJ
cmV0dXJuIChiKTsKLQl9IGVsc2UgewotCQlmcmVlX3ZhbHVlIChiKTsKKwlpZiAoIWlzX3pl
cm9fb3JfbnVsbChhKSkgeworCQlmcmVlX3ZhbHVlKGIpOwogCQlyZXR1cm4gKGEpOwogCX0K
KwlmcmVlX3ZhbHVlKGEpOworCWlmICghaXNfemVyb19vcl9udWxsKGIpKQorCQlyZXR1cm4g
KGIpOworCWZyZWVfdmFsdWUoYik7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90
KTApKTsKIH0KLQkJCisKIHN0cnVjdCB2YWwgKgogb3BfYW5kKHN0cnVjdCB2YWwgKmEsIHN0
cnVjdCB2YWwgKmIpCiB7CkBAIC0zNDAsMTM4ICszNDUsNzcgQEAKIAl9CiB9CiAKLXN0cnVj
dCB2YWwgKgotb3BfZXEoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAqYikKK2ludAorY29t
cGFyZV92YWxzKHN0cnVjdCB2YWwgKmEsIHN0cnVjdCB2YWwgKmIpCiB7Ci0Jc3RydWN0IHZh
bCAqcjsKKwlpbnQgcjsKIAotCWlmIChpc3N0cmluZyAoYSkgfHwgaXNzdHJpbmcgKGIpKSB7
Ci0JCXRvX3N0cmluZyAoYSk7Ci0JCXRvX3N0cmluZyAoYik7CQotCQlyID0gbWFrZV9pbnRl
Z2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA9PSAwKSk7Ci0JfSBl
bHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsK
LQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51LmkgPT0gYi0+dS5pKSk7CisJ
aWYgKGlzX3N0cmluZyhhKSB8fCBpc19zdHJpbmcoYikpIHsKKwkJdG9fc3RyaW5nKGEpOwor
CQl0b19zdHJpbmcoYik7CisJCXIgPSBzdHJjb2xsKGEtPnUucywgYi0+dS5zKTsKKwl9IGVs
c2UgeworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0X3RvX2ludGVnZXIoYik7
CisJCWlmIChhLT51LmkgPiBiLT51LmkpCisJCQlyID0gMTsKKwkJZWxzZSBpZiAoYS0+dS5p
IDwgYi0+dS5pKQorCQkJciA9IC0xOworCQllbHNlCisJCQlyID0gMDsKIAl9CiAKLQlmcmVl
X3ZhbHVlIChhKTsKLQlmcmVlX3ZhbHVlIChiKTsKLQlyZXR1cm4gcjsKKwlmcmVlX3ZhbHVl
KGEpOworCWZyZWVfdmFsdWUoYik7CisJcmV0dXJuIChyKTsKIH0KIAogc3RydWN0IHZhbCAq
Ci1vcF9ndChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQorb3BfZXEoc3RydWN0IHZh
bCAqYSwgc3RydWN0IHZhbCAqYikKIHsKLQlzdHJ1Y3QgdmFsICpyOwotCi0JaWYgKGlzc3Ry
aW5nIChhKSB8fCBpc3N0cmluZyAoYikpIHsKLQkJdG9fc3RyaW5nIChhKTsKLQkJdG9fc3Ry
aW5nIChiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShzdHJjb2xsIChhLT51
LnMsIGItPnUucykgPiAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsK
LQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90
KShhLT51LmkgPiBiLT51LmkpKTsKLQl9CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1h
eF90KShjb21wYXJlX3ZhbHMoYSwgYikgPT0gMCkpKTsKK30KIAotCWZyZWVfdmFsdWUgKGEp
OwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworc3RydWN0IHZhbCAqCitvcF9ndChz
dHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQoreworCXJldHVybiAobWFrZV9pbnRlZ2Vy
KChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIpID4gMCkpKTsKIH0KIAogc3RydWN0IHZh
bCAqCiBvcF9sdChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2
YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19z
dHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50
bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA8IDApKTsKLQl9IGVsc2UgewotCQko
dm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9pZCl0b19pbnRlZ2VyKGIpOwotCQlyID0gbWFr
ZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUuaSA8IGItPnUuaSkpOwotCX0KLQotCWZyZWVf
dmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworCXJldHVybiAobWFr
ZV9pbnRlZ2VyKChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIpIDwgMCkpKTsKIH0KIAog
c3RydWN0IHZhbCAqCiBvcF9nZShzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewot
CXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkg
ewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRl
Z2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA+PSAwKSk7Ci0JfSBl
bHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsK
LQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51LmkgPj0gYi0+dS5pKSk7Ci0J
fQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJ
cmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KShjb21wYXJlX3ZhbHMoYSwgYikgPj0g
MCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9sZShzdHJ1Y3QgdmFsICphLCBzdHJ1Y3Qg
dmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlz
c3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQly
ID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA8
PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9f
aW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51LmkgPD0g
Yi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7Ci0J
cmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KShjb21wYXJlX3Zh
bHMoYSwgYikgPD0gMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9uZShzdHJ1Y3QgdmFs
ICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJp
bmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJp
bmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUu
cywgYi0+dS5zKSAhPSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsK
LQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90
KShhLT51LmkgIT0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92
YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90
KShjb21wYXJlX3ZhbHMoYSwgYikgIT0gMCkpKTsKIH0KIAotaW50Ci1jaGtfcGx1cyhpbnRt
YXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAorYXNzZXJ0X3BsdXMoaW50
bWF4X3QgYSwgaW50bWF4X3QgYiwgaW50bWF4X3QgcikKIHsKLQotCS8qIHN1bSBvZiB0d28g
cG9zaXRpdmUgbnVtYmVycyBtdXN0IGJlIHBvc2l0aXZlICovCi0JaWYgKGEgPiAwICYmIGIg
PiAwICYmIHIgPD0gMCkKLQkJcmV0dXJuIDE7Ci0JLyogc3VtIG9mIHR3byBuZWdhdGl2ZSBu
dW1iZXJzIG11c3QgYmUgbmVnYXRpdmUgKi8KLQlpZiAoYSA8IDAgJiYgYiA8IDAgJiYgciA+
PSAwKQotCQlyZXR1cm4gMTsKLQkvKiBhbGwgb3RoZXIgY2FzZXMgYXJlIE9LICovCi0JcmV0
dXJuIDA7CisJLyoKKwkgKiBzdW0gb2YgdHdvIHBvc2l0aXZlIG51bWJlcnMgbXVzdCBiZSBw
b3NpdGl2ZSwKKwkgKiBzdW0gb2YgdHdvIG5lZ2F0aXZlIG51bWJlcnMgbXVzdCBiZSBuZWdh
dGl2ZQorCSAqLworCWlmICgoYSA+IDAgJiYgYiA+IDAgJiYgciA8PSAwKSB8fAorCSAgICAo
YSA8IDAgJiYgYiA8IDAgJiYgciA+PSAwKSkKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93
Iik7CiB9CiAKIHN0cnVjdCB2YWwgKgpAQCAtNDc5LDM2ICs0MjMsMjYgQEAKIHsKIAlzdHJ1
Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7
Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KKwlhc3Nl
cnRfdG9faW50ZWdlcihhKTsKKwlhc3NlcnRfdG9faW50ZWdlcihiKTsKIAotCWlmIChlZmxh
ZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSArIGItPnUuaSk7Ci0JCWlmIChjaGtf
cGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5pKSkgewotCQkJZXJyeChFUlJfRVhJVCwgIm92
ZXJmbG93Iik7Ci0JCX0KLQl9IGVsc2UKLQkJciA9IG1ha2VfaW50ZWdlcigobG9uZylhLT51
LmkgKyAobG9uZyliLT51LmkpOworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pICsgYi0+dS5p
KTsKKwlhc3NlcnRfcGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5pKTsKIAogCWZyZWVfdmFs
dWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwogCXJldHVybiByOwogfQogCi1pbnQKLWNoa19t
aW51cyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAorYXNzZXJ0
X21pbnVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7CiAKIAkvKiBz
cGVjaWFsIGNhc2Ugc3VidHJhY3Rpb24gb2YgSU5UTUFYX01JTiAqLwotCWlmIChiID09IElO
VE1BWF9NSU4pIHsKLQkJaWYgKGEgPj0gMCkKLQkJCXJldHVybiAxOwotCQllbHNlCi0JCQly
ZXR1cm4gMDsKLQl9Ci0JLyogdGhpcyBpcyBhbGxvd2VkIGZvciBiICE9IElOVE1BWF9NSU4g
Ki8KLQlyZXR1cm4gY2hrX3BsdXMgKGEsIC1iLCByKTsKKwlpZiAoYiA9PSBJTlRNQVhfTUlO
ICYmIGEgPCAwKQorCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKKwkvKiBjaGVjayBh
ZGRpdGlvbiBvZiBuZWdhdGl2ZSBzdWJ0cmFoZW5kICovCisJYXNzZXJ0X3BsdXMoYSwgLWIs
IHIpOwogfQogCiBzdHJ1Y3QgdmFsICoKQEAgLTUxNiwzMyArNDUwLDI2IEBACiB7CiAJc3Ry
dWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9faW50ZWdlcihiKSkg
ewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQiKTsKLQl9CisJYXNz
ZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7CiAKLQlpZiAoZWZs
YWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLSBiLT51LmkpOwotCQlpZiAoY2hr
X21pbnVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpKSB7Ci0JCQllcnJ4KEVSUl9FWElULCAi
b3ZlcmZsb3ciKTsKLQkJfQotCX0gZWxzZQotCQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEt
PnUuaSAtIChsb25nKWItPnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLSBiLT51
LmkpOworCWFzc2VydF9taW51cyhhLT51LmksIGItPnUuaSwgci0+dS5pKTsKIAogCWZyZWVf
dmFsdWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwogCXJldHVybiByOwogfQogCi1pbnQKLWNo
a190aW1lcyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAorYXNz
ZXJ0X3RpbWVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7Ci0JLyog
c3BlY2lhbCBjYXNlOiBmaXJzdCBvcGVyYW5kIGlzIDAsIG5vIG92ZXJmbG93IHBvc3NpYmxl
ICovCi0JaWYgKGEgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JLyogdmVyaWZ5IHRoYXQgcmVzdWx0
IG9mIGRpdmlzaW9uIG1hdGNoZXMgc2Vjb25kIG9wZXJhbmQgKi8KLQlpZiAociAvIGEgIT0g
YikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJLyoKKwkgKiBpZiBmaXJzdCBvcGVyYW5k
IGlzIDAsIG5vIG92ZXJmbG93IGlzIHBvc3NpYmxlLAorCSAqIGVsc2UgcmVzdWx0IG9mIGRp
dmlzaW9uIHRlc3QgbXVzdCBtYXRjaCBzZWNvbmQgb3BlcmFuZAorCSAqLworCWlmIChhICE9
IDAgJiYgciAvIGEgIT0gYikKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7CiB9CiAK
IHN0cnVjdCB2YWwgKgpAQCAtNTUwLDMyICs0NzcsMjUgQEAKIHsKIAlzdHJ1Y3QgdmFsICpy
OwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngo
RVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KKwlhc3NlcnRfdG9faW50
ZWdlcihhKTsKKwlhc3NlcnRfdG9faW50ZWdlcihiKTsKIAotCWlmIChlZmxhZykgewotCQly
ID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7Ci0JCWlmIChjaGtfdGltZXMoYS0+
dS5pLCBiLT51LmksIHItPnUuaSkpIHsKLQkJCWVycngoRVJSX0VYSVQsICJvdmVyZmxvdyIp
OwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2ludGVnZXIoKGxvbmcpYS0+dS5pICogKGxv
bmcpYi0+dS5pKTsKKwlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7CisJYXNz
ZXJ0X3RpbWVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpOwogCiAJZnJlZV92YWx1ZSAoYSk7
CiAJZnJlZV92YWx1ZSAoYik7CiAJcmV0dXJuIChyKTsKIH0KIAotaW50Ci1jaGtfZGl2KGlu
dG1heF90IGEsIGludG1heF90IGIpCit2b2lkCithc3NlcnRfZGl2KGludG1heF90IGEsIGlu
dG1heF90IGIpCiB7Ci0JLyogZGl2IGJ5IHplcm8gaGFzIGJlZW4gdGFrZW4gY2FyZSBvZiBi
ZWZvcmUgKi8KKwlpZiAoYiA9PSAwKQorCQllcnJ4KEVSUl9FWElULCAiZGl2aXNpb24gYnkg
emVybyIpOwogCS8qIG9ubHkgSU5UTUFYX01JTiAvIC0xIGNhdXNlcyBvdmVyZmxvdyAqLwog
CWlmIChhID09IElOVE1BWF9NSU4gJiYgYiA9PSAtMSkKLQkJcmV0dXJuIDE7Ci0JLyogZXZl
cnl0aGluZyBlbHNlIGlzIE9LICovCi0JcmV0dXJuIDA7CisJCWVycngoRVJSX0VYSVQsICJv
dmVyZmxvdyIpOwogfQogCiBzdHJ1Y3QgdmFsICoKQEAgLTU4MywyMSArNTAzLDEyIEBACiB7
CiAJc3RydWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9faW50ZWdl
cihiKSkgewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQiKTsKLQl9
Ci0KLQlpZiAoYi0+dS5pID09IDApIHsKLQkJZXJyeChFUlJfRVhJVCwgImRpdmlzaW9uIGJ5
IHplcm8iKTsKLQl9CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVn
ZXIoYik7CiAKLQlpZiAoZWZsYWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLyBi
LT51LmkpOwotCQlpZiAoY2hrX2RpdihhLT51LmksIGItPnUuaSkpIHsKLQkJCWVycngoRVJS
X0VYSVQsICJvdmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2ludGVnZXIo
KGxvbmcpYS0+dS5pIC8gKGxvbmcpYi0+dS5pKTsKKwkvKiBhc3NlcnQgYmFzZWQgb24gb3Bl
cmFuZHMgb25seSwgbm90IG9uIHJlc3VsdCAqLworCWFzc2VydF9kaXYoYS0+dS5pLCBiLT51
LmkpOworCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pIC8gYi0+dS5pKTsKIAogCWZyZWVfdmFs
dWUgKGEpOwogCWZyZWVfdmFsdWUgKGIpOwpAQCAtNjA5LDE5ICs1MjAsMTEgQEAKIHsKIAlz
dHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIp
KSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQot
CWlmIChiLT51LmkgPT0gMCkgewotCQllcnJ4KEVSUl9FWElULCAiZGl2aXNpb24gYnkgemVy
byIpOwotCX0KLQotCWlmIChlZmxhZykKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBi
LT51LmkpOwotCSAgICAgICAgLyogY2hrX3JlbSBuZWNlc3NhcnkgPz8/ICovCi0JZWxzZQot
CQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEtPnUuaSAlIChsb25nKWItPnUuaSk7CisJYXNz
ZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7CisJLyogcGFzcyBh
PTEgdG8gb25seSBjaGVjayBmb3IgZGl2IGJ5IHplcm8gKi8KKwlhc3NlcnRfZGl2KDEsIGIt
PnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBiLT51LmkpOwogCiAJZnJlZV92
YWx1ZSAoYSk7CiAJZnJlZV92YWx1ZSAoYik7Cg==
--------------000109010508020704090904
Content-Type: text/plain;
 name="expr.y.diff3"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="expr.y.diff3"

LS0tIGV4cHIueS5PUklHCTIwMTEtMDctMDEgMjA6MjI6MjkuMTE5NjA3MjY5ICswMjAwCisr
KyBleHByLnkuRklOQUwJMjAxMS0wNy0wNCAxNzowNDowOC42Nzc5NjgwNjYgKzAyMDAKQEAg
LTEsNiArMSw2IEBACiAlewogLyotCi0gKiBXcml0dGVuIGJ5IFBhY2UgV2lsbGlzc29uIChw
YWNlQGJsaXR6LmNvbSkgCisgKiBXcml0dGVuIGJ5IFBhY2UgV2lsbGlzc29uIChwYWNlQGJs
aXR6LmNvbSkKICAqIGFuZCBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCiAgKgogICog
TGFyZ2VseSByZXdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSkKQEAg
LTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxyZWdleC5o
PgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotICAKKwogLyoKICAqIFBPU0lYIHNwZWNpZmllcyBh
IHNwZWNpZmljIGVycm9yIGNvZGUgZm9yIHN5bnRheCBlcnJvcnMuICBXZSBleGl0CiAgKiB3
aXRoIHRoaXMgY29kZSBmb3IgYWxsIGVycm9ycy4KQEAgLTQwLDE1ICs0MCwyMCBAQAogCX0g
dTsKIH0gOwogCi1zdHJ1Y3QgdmFsICpyZXN1bHQ7Ci0KLWludAkJY2hrX2RpdihpbnRtYXhf
dCwgaW50bWF4X3QpOwotaW50CQljaGtfbWludXMoaW50bWF4X3QsIGludG1heF90LCBpbnRt
YXhfdCk7Ci1pbnQJCWNoa19wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4X3QpOwot
aW50CQljaGtfdGltZXMoaW50bWF4X3QsIGludG1heF90LCBpbnRtYXhfdCk7CitjaGFyCQkq
KmF2OworaW50CQlub25wb3NpeDsKK3N0cnVjdCB2YWwJKnJlc3VsdDsKKwordm9pZAkJYXNz
ZXJ0X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqKTsKK3ZvaWQJCWFzc2VydF9kaXYoaW50bWF4
X3QsIGludG1heF90KTsKK3ZvaWQJCWFzc2VydF9taW51cyhpbnRtYXhfdCwgaW50bWF4X3Qs
IGludG1heF90KTsKK3ZvaWQJCWFzc2VydF9wbHVzKGludG1heF90LCBpbnRtYXhfdCwgaW50
bWF4X3QpOwordm9pZAkJYXNzZXJ0X3RpbWVzKGludG1heF90LCBpbnRtYXhfdCwgaW50bWF4
X3QpOworaW50CQljb21wYXJlX3ZhbHMoc3RydWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwog
dm9pZAkJZnJlZV92YWx1ZShzdHJ1Y3QgdmFsICopOworaW50CQlpc19pbnRlZ2VyKGNvbnN0
IGNoYXIgKik7CitpbnQJCWlzX3N0cmluZyhzdHJ1Y3QgdmFsICopOwogaW50CQlpc196ZXJv
X29yX251bGwoc3RydWN0IHZhbCAqKTsKLWludAkJaXNzdHJpbmcoc3RydWN0IHZhbCAqKTsK
IHN0cnVjdCB2YWwJKm1ha2VfaW50ZWdlcihpbnRtYXhfdCk7CiBzdHJ1Y3QgdmFsCSptYWtl
X3N0cihjb25zdCBjaGFyICopOwogc3RydWN0IHZhbAkqb3BfYW5kKHN0cnVjdCB2YWwgKiwg
c3RydWN0IHZhbCAqKTsKQEAgLTY1LDE0ICs3MCwxMiBAQAogc3RydWN0IHZhbAkqb3BfcGx1
cyhzdHJ1Y3QgdmFsICosIHN0cnVjdCB2YWwgKik7CiBzdHJ1Y3QgdmFsCSpvcF9yZW0oc3Ry
dWN0IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwogc3RydWN0IHZhbAkqb3BfdGltZXMoc3RydWN0
IHZhbCAqLCBzdHJ1Y3QgdmFsICopOwotaW50bWF4X3QJdG9faW50ZWdlcihzdHJ1Y3QgdmFs
ICopOworaW50CQl0b19pbnRlZ2VyKHN0cnVjdCB2YWwgKik7CiB2b2lkCQl0b19zdHJpbmco
c3RydWN0IHZhbCAqKTsKIGludAkJeXllcnJvcihjb25zdCBjaGFyICopOwogaW50CQl5eWxl
eCh2b2lkKTsKIGludAkJeXlwYXJzZSh2b2lkKTsKIAotc3RhdGljIGludAllZmxhZzsKLWNo
YXIgKiphdjsKICV9CiAKICV1bmlvbgpAQCAtOTYsMjMgKzk5LDIyIEBACiAKIGV4cHI6CVRP
S0VOCiAJfCAnKCcgZXhwciAnKScgeyAkJCA9ICQyOyB9Ci0JfCBleHByICd8JyBleHByIHsg
JCQgPSBvcF9vciAoJDEsICQzKTsgfQotCXwgZXhwciAnJicgZXhwciB7ICQkID0gb3BfYW5k
ICgkMSwgJDMpOyB9Ci0JfCBleHByICc9JyBleHByIHsgJCQgPSBvcF9lcSAoJDEsICQzKTsg
fQotCXwgZXhwciAnPicgZXhwciB7ICQkID0gb3BfZ3QgKCQxLCAkMyk7IH0KLQl8IGV4cHIg
JzwnIGV4cHIgeyAkJCA9IG9wX2x0ICgkMSwgJDMpOyB9Ci0JfCBleHByIEdFIGV4cHIgIHsg
JCQgPSBvcF9nZSAoJDEsICQzKTsgfQotCXwgZXhwciBMRSBleHByICB7ICQkID0gb3BfbGUg
KCQxLCAkMyk7IH0KLQl8IGV4cHIgTkUgZXhwciAgeyAkJCA9IG9wX25lICgkMSwgJDMpOyB9
Ci0JfCBleHByICcrJyBleHByIHsgJCQgPSBvcF9wbHVzICgkMSwgJDMpOyB9Ci0JfCBleHBy
ICctJyBleHByIHsgJCQgPSBvcF9taW51cyAoJDEsICQzKTsgfQotCXwgZXhwciAnKicgZXhw
ciB7ICQkID0gb3BfdGltZXMgKCQxLCAkMyk7IH0KLQl8IGV4cHIgJy8nIGV4cHIgeyAkJCA9
IG9wX2RpdiAoJDEsICQzKTsgfQotCXwgZXhwciAnJScgZXhwciB7ICQkID0gb3BfcmVtICgk
MSwgJDMpOyB9Ci0JfCBleHByICc6JyBleHByIHsgJCQgPSBvcF9jb2xvbiAoJDEsICQzKTsg
fQorCXwgZXhwciAnfCcgZXhwciB7ICQkID0gb3Bfb3IoJDEsICQzKTsgfQorCXwgZXhwciAn
JicgZXhwciB7ICQkID0gb3BfYW5kKCQxLCAkMyk7IH0KKwl8IGV4cHIgJz0nIGV4cHIgeyAk
JCA9IG9wX2VxKCQxLCAkMyk7IH0KKwl8IGV4cHIgJz4nIGV4cHIgeyAkJCA9IG9wX2d0KCQx
LCAkMyk7IH0KKwl8IGV4cHIgJzwnIGV4cHIgeyAkJCA9IG9wX2x0KCQxLCAkMyk7IH0KKwl8
IGV4cHIgR0UgZXhwciAgeyAkJCA9IG9wX2dlKCQxLCAkMyk7IH0KKwl8IGV4cHIgTEUgZXhw
ciAgeyAkJCA9IG9wX2xlKCQxLCAkMyk7IH0KKwl8IGV4cHIgTkUgZXhwciAgeyAkJCA9IG9w
X25lKCQxLCAkMyk7IH0KKwl8IGV4cHIgJysnIGV4cHIgeyAkJCA9IG9wX3BsdXMoJDEsICQz
KTsgfQorCXwgZXhwciAnLScgZXhwciB7ICQkID0gb3BfbWludXMoJDEsICQzKTsgfQorCXwg
ZXhwciAnKicgZXhwciB7ICQkID0gb3BfdGltZXMoJDEsICQzKTsgfQorCXwgZXhwciAnLycg
ZXhwciB7ICQkID0gb3BfZGl2KCQxLCAkMyk7IH0KKwl8IGV4cHIgJyUnIGV4cHIgeyAkJCA9
IG9wX3JlbSgkMSwgJDMpOyB9CisJfCBleHByICc6JyBleHByIHsgJCQgPSBvcF9jb2xvbigk
MSwgJDMpOyB9CiAJOwogCi0KICUlCiAKIHN0cnVjdCB2YWwgKgpAQCAtMTIwLDg5ICsxMjIs
NjUgQEAKIHsKIAlzdHJ1Y3QgdmFsICp2cDsKIAotCXZwID0gKHN0cnVjdCB2YWwgKikgbWFs
bG9jIChzaXplb2YgKCp2cCkpOwotCWlmICh2cCA9PSBOVUxMKSB7CisJdnAgPSAoc3RydWN0
IHZhbCAqKW1hbGxvYyhzaXplb2YoKnZwKSk7CisJaWYgKHZwID09IE5VTEwpCiAJCWVycngo
RVJSX0VYSVQsICJtYWxsb2MoKSBmYWlsZWQiKTsKLQl9CiAKIAl2cC0+dHlwZSA9IGludGVn
ZXI7CiAJdnAtPnUuaSAgPSBpOwotCXJldHVybiB2cDsgCisJcmV0dXJuICh2cCk7CiB9CiAK
IHN0cnVjdCB2YWwgKgogbWFrZV9zdHIoY29uc3QgY2hhciAqcykKIHsKIAlzdHJ1Y3QgdmFs
ICp2cDsKLQljaGFyICplcDsKIAotCXZwID0gKHN0cnVjdCB2YWwgKikgbWFsbG9jIChzaXpl
b2YgKCp2cCkpOwotCWlmICh2cCA9PSBOVUxMIHx8ICgodnAtPnUucyA9IHN0cmR1cCAocykp
ID09IE5VTEwpKSB7CisJdnAgPSAoc3RydWN0IHZhbCAqKW1hbGxvYyhzaXplb2YoKnZwKSk7
CisJaWYgKHZwID09IE5VTEwgfHwgKCh2cC0+dS5zID0gc3RyZHVwKHMpKSA9PSBOVUxMKSkK
IAkJZXJyeChFUlJfRVhJVCwgIm1hbGxvYygpIGZhaWxlZCIpOwotCX0KIAotCS8qCi0JICog
UHJldmlvdXNseSB3ZSB0cmllZCB0byBzY2FuIHRoZSBzdHJpbmcgdG8gc2VlIGlmIGl0IGBg
bG9va2VkIGxpa2UnJwotCSAqIGFuIGludGVnZXIgKGVycm9uZW91c2x5LCBhcyBpdCBoYXBw
ZW5lZCkuICBMZXQgc3RydG9pbWF4KCkgZG8gdGhlCi0JICogZGlydHkgd29yay4gIFdlIGNv
dWxkIGNhY2hlIHRoZSB2YWx1ZSwgZXhjZXB0IHRoYXQgd2UgYXJlIHVzaW5nCi0JICogYSB1
bmlvbiBhbmQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgc3RyaW5nIGZvcm0gdW50
aWwgd2UKLQkgKiBhcmUgY2VydGFpbiB0aGF0IGl0IGlzIG5vdCBuZWVkZWQuCi0JICoKLQkg
KiBJRUVFIFN0ZC4xMDAzLjEtMjAwMSBzYXlzOgotCSAqIC9pbnRlZ2VyLyBBbiBhcmd1bWVu
dCBjb25zaXN0aW5nIG9ubHkgb2YgYW4gKG9wdGlvbmFsKSB1bmFyeSBtaW51cyAgCi0JICoJ
ICAgICBmb2xsb3dlZCBieSBkaWdpdHMuICAgICAgICAgIAotCSAqCi0JICogVGhpcyBtZWFu
cyB0aGF0IGFyZ3VtZW50cyB3aGljaCBjb25zaXN0IG9mIGRpZ2l0cyBmb2xsb3dlZCBieQot
CSAqIG5vbi1kaWdpdHMgTVVTVCBOT1QgYmUgY29uc2lkZXJlZCBpbnRlZ2Vycy4gIHN0cnRv
aW1heCgpIHdpbGwKLQkgKiBmaWd1cmUgdGhpcyBvdXQgZm9yIHVzLgotCSAqLwotCWlmIChl
ZmxhZykKLQkJKHZvaWQpc3RydG9pbWF4KHMsICZlcCwgMTApOworCWlmIChpc19pbnRlZ2Vy
KHMpKQorCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCWVsc2UKLQkJKHZvaWQpc3Ry
dG9sKHMsICZlcCwgMTApOwotCi0JaWYgKCplcCAhPSAnXDAnKQogCQl2cC0+dHlwZSA9IHN0
cmluZzsKLQllbHNlCQotCQl2cC0+dHlwZSA9IG51bWVyaWNfc3RyaW5nOwogCi0JcmV0dXJu
IHZwOworCXJldHVybiAodnApOwogfQogCi0KIHZvaWQKIGZyZWVfdmFsdWUoc3RydWN0IHZh
bCAqdnApCiB7CiAJaWYgKHZwLT50eXBlID09IHN0cmluZyB8fCB2cC0+dHlwZSA9PSBudW1l
cmljX3N0cmluZykKLQkJZnJlZSAodnAtPnUucyk7CQorCQlmcmVlKHZwLT51LnMpOwogfQog
Ci0KLWludG1heF90CitpbnQKIHRvX2ludGVnZXIoc3RydWN0IHZhbCAqdnApCiB7CiAJaW50
bWF4X3QgaTsKIAotCWlmICh2cC0+dHlwZSA9PSBpbnRlZ2VyKQotCQlyZXR1cm4gMTsKLQot
CWlmICh2cC0+dHlwZSA9PSBzdHJpbmcpCi0JCXJldHVybiAwOwotCi0JLyogdnAtPnR5cGUg
PT0gbnVtZXJpY19zdHJpbmcsIG1ha2UgaXQgbnVtZXJpYyAqLwotCWVycm5vID0gMDsKLQlp
ZiAoZWZsYWcpIHsKKwkvKiB3ZSBjYW4gb25seSBjb252ZXJ0IG51bWVyaWNfc3RyaW5nIHRv
IGludGVnZXIsIGhlcmUgKi8KKwlpZiAodnAtPnR5cGUgPT0gbnVtZXJpY19zdHJpbmcpIHsK
KwkJZXJybm8gPSAwOwogCQlpICA9IHN0cnRvaW1heCh2cC0+dS5zLCAoY2hhciAqKilOVUxM
LCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFOR0UpCi0JCQllcnIoRVJSX0VYSVQsIE5VTEwp
OwotCX0gZWxzZSB7Ci0JCWkgPSBzdHJ0b2wodnAtPnUucywgKGNoYXIgKiopTlVMTCwgMTAp
OworCQkvKiBqdXN0IGtlZXAgYXMgbnVtZXJpY19zdHJpbmcsIGlmIHRoZSBjb252ZXJzaW9u
IGZhaWxzICovCisJCWlmIChlcnJubyAhPSBFUkFOR0UpIHsKKwkJCWZyZWUodnAtPnUucyk7
CisJCQl2cC0+dS5pID0gaTsKKwkJCXZwLT50eXBlID0gaW50ZWdlcjsKKwkJfQogCX0KKwly
ZXR1cm4gKHZwLT50eXBlID09IGludGVnZXIpOworfQogCi0JZnJlZSAodnAtPnUucyk7Ci0J
dnAtPnUuaSA9IGk7Ci0JdnAtPnR5cGUgPSBpbnRlZ2VyOwotCXJldHVybiAxOwordm9pZAor
YXNzZXJ0X3RvX2ludGVnZXIoc3RydWN0IHZhbCAqdnApCit7CisJaWYgKHZwLT50eXBlID09
IHN0cmluZykKKwkJZXJyeChFUlJfRVhJVCwgIm5vdCBhIGRlY2ltYWwgbnVtYmVyOiAnJXMn
IiwgdnAtPnUucyk7CisJaWYgKCF0b19pbnRlZ2VyKHZwKSkKKwkJZXJyeChFUlJfRVhJVCwg
Im9wZXJhbmQgdG9vIGxhcmdlOiAnJXMnIiwgdnAtPnUucyk7CiB9CiAKIHZvaWQKQEAgLTIy
OCwxNSArMjA2LDMxIEBACiAJdnAtPnUucyAgPSB0bXA7CiB9CiAKK2ludAoraXNfaW50ZWdl
cihjb25zdCBjaGFyICpzKQoreworCWlmIChub25wb3NpeCkgeworCQlpZiAoKnMgPT0gJ1ww
JykKKwkJCXJldHVybiAoMSk7CisJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpz
KSkKKwkJCXMrKzsKKwl9CisJaWYgKCpzID09ICctJyB8fCAobm9ucG9zaXggJiYgKnMgPT0g
JysnKSkKKwkJcysrOworCWlmICgqcyA9PSAnXDAnKQorCQlyZXR1cm4gKDApOworCXdoaWxl
IChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpzKSkKKwkJcysrOworCXJldHVybiAoKnMgPT0g
J1wwJyk7Cit9CiAKIGludAotaXNzdHJpbmcoc3RydWN0IHZhbCAqdnApCitpc19zdHJpbmco
c3RydWN0IHZhbCAqdnApCiB7CiAJLyogb25seSBUUlVFIGlmIHRoaXMgc3RyaW5nIGlzIG5v
dCBhIHZhbGlkIGludGVnZXIgKi8KIAlyZXR1cm4gKHZwLT50eXBlID09IHN0cmluZyk7CiB9
CiAKLQogaW50CiB5eWxleCh2b2lkKQogewpAQCAtMjQ3LDEwICsyNDEsMTAgQEAKIAogCXAg
PSAqYXYrKzsKIAotCWlmIChzdHJsZW4gKHApID09IDEpIHsKLQkJaWYgKHN0cmNociAoInwm
PTw+Ky0qLyU6KCkiLCAqcCkpCisJaWYgKHN0cmxlbihwKSA9PSAxKSB7CisJCWlmIChzdHJj
aHIoInwmPTw+Ky0qLyU6KCkiLCAqcCkpCiAJCQlyZXR1cm4gKCpwKTsKLQl9IGVsc2UgaWYg
KHN0cmxlbiAocCkgPT0gMiAmJiBwWzFdID09ICc9JykgeworCX0gZWxzZSBpZiAoc3RybGVu
KHApID09IDIgJiYgcFsxXSA9PSAnPScpIHsKIAkJc3dpdGNoICgqcCkgewogCQljYXNlICc+
JzogcmV0dXJuIChHRSk7CiAJCWNhc2UgJzwnOiByZXR1cm4gKExFKTsKQEAgLTI1OCwxOSAr
MjUyLDE3IEBACiAJCX0KIAl9CiAKLQl5eWx2YWwudmFsID0gbWFrZV9zdHIgKHApOworCXl5
bHZhbC52YWwgPSBtYWtlX3N0cihwKTsKIAlyZXR1cm4gKFRPS0VOKTsKIH0KIAogaW50CiBp
c196ZXJvX29yX251bGwoc3RydWN0IHZhbCAqdnApCiB7Ci0JaWYgKHZwLT50eXBlID09IGlu
dGVnZXIpIHsKKwlpZiAodnAtPnR5cGUgPT0gaW50ZWdlcikKIAkJcmV0dXJuICh2cC0+dS5p
ID09IDApOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoKnZwLT51LnMgPT0gMCB8fCAodG9faW50
ZWdlciAodnApICYmIHZwLT51LmkgPT0gMCkpOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCisK
KwlyZXR1cm4gKCp2cC0+dS5zID09IDAgfHwgKHRvX2ludGVnZXIodnApICYmIHZwLT51Lmkg
PT0gMCkpOwogfQogCiBpbnQKQEAgLTI3OCwyMyArMjcwLDIyIEBACiB7CiAJaW50IGM7CiAK
LQlzZXRsb2NhbGUgKExDX0FMTCwgIiIpOworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKIAlp
ZiAoZ2V0ZW52KCJFWFBSX0NPTVBBVCIpICE9IE5VTEwKIAkgICAgfHwgY2hlY2tfdXRpbGl0
eV9jb21wYXQoImV4cHIiKSkgewogCQlhdiA9IGFyZ3YgKyAxOwotCQllZmxhZyA9IDE7CisJ
CW5vbnBvc2l4ID0gMTsKIAl9IGVsc2UgewotCQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywg
YXJndiwgImUiKSkgIT0gLTEpCisJCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAi
ZSIpKSAhPSAtMSkgewogCQkJc3dpdGNoIChjKSB7CiAJCQljYXNlICdlJzoKLQkJCQllZmxh
ZyA9IDE7CisJCQkJbm9ucG9zaXggPSAxOwogCQkJCWJyZWFrOwotCiAJCQlkZWZhdWx0Ogot
CQkJCWZwcmludGYoc3RkZXJyLAorCQkJCWVycngoRVJSX0VYSVQsCiAJCQkJICAgICJ1c2Fn
ZTogZXhwciBbLWVdIGV4cHJlc3Npb25cbiIpOwotCQkJCWV4aXQoRVJSX0VYSVQpOwogCQkJ
fQorCQl9CiAJCWF2ID0gYXJndiArIG9wdGluZDsKIAl9CiAKQEAgLTMxNCwxNjQgKzMwNSwx
MDQgQEAKIAllcnJ4KEVSUl9FWElULCAic3ludGF4IGVycm9yIik7CiB9CiAKLQogc3RydWN0
IHZhbCAqCiBvcF9vcihzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCWlmIChp
c196ZXJvX29yX251bGwgKGEpKSB7Ci0JCWZyZWVfdmFsdWUgKGEpOwotCQlyZXR1cm4gKGIp
OwotCX0gZWxzZSB7Ci0JCWZyZWVfdmFsdWUgKGIpOworCWlmICghaXNfemVyb19vcl9udWxs
KGEpKSB7CisJCWZyZWVfdmFsdWUoYik7CiAJCXJldHVybiAoYSk7CiAJfQorCWZyZWVfdmFs
dWUoYSk7CisJaWYgKCFpc196ZXJvX29yX251bGwoYikpCisJCXJldHVybiAoYik7CisJZnJl
ZV92YWx1ZShiKTsKKwlyZXR1cm4gKG1ha2VfaW50ZWdlcigoaW50bWF4X3QpMCkpOwogfQot
CQkKKwogc3RydWN0IHZhbCAqCiBvcF9hbmQoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAq
YikKIHsKLQlpZiAoaXNfemVyb19vcl9udWxsIChhKSB8fCBpc196ZXJvX29yX251bGwgKGIp
KSB7Ci0JCWZyZWVfdmFsdWUgKGEpOwotCQlmcmVlX3ZhbHVlIChiKTsKLQkJcmV0dXJuICht
YWtlX2ludGVnZXIgKChpbnRtYXhfdCkwKSk7CisJaWYgKGlzX3plcm9fb3JfbnVsbChhKSB8
fCBpc196ZXJvX29yX251bGwoYikpIHsKKwkJZnJlZV92YWx1ZShhKTsKKwkJZnJlZV92YWx1
ZShiKTsKKwkJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KTApKTsKIAl9IGVsc2Ug
ewotCQlmcmVlX3ZhbHVlIChiKTsKKwkJZnJlZV92YWx1ZShiKTsKIAkJcmV0dXJuIChhKTsK
IAl9CiB9CiAKLXN0cnVjdCB2YWwgKgotb3BfZXEoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZh
bCAqYikKK2ludAorY29tcGFyZV92YWxzKHN0cnVjdCB2YWwgKmEsIHN0cnVjdCB2YWwgKmIp
CiB7Ci0Jc3RydWN0IHZhbCAqcjsKKwlpbnQgcjsKIAotCWlmIChpc3N0cmluZyAoYSkgfHwg
aXNzdHJpbmcgKGIpKSB7Ci0JCXRvX3N0cmluZyAoYSk7Ci0JCXRvX3N0cmluZyAoYik7CQot
CQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5z
KSA9PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQp
dG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51Lmkg
PT0gYi0+dS5pKSk7CisJaWYgKGlzX3N0cmluZyhhKSB8fCBpc19zdHJpbmcoYikpIHsKKwkJ
dG9fc3RyaW5nKGEpOworCQl0b19zdHJpbmcoYik7CisJCXIgPSBzdHJjb2xsKGEtPnUucywg
Yi0+dS5zKTsKKwl9IGVsc2UgeworCQlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwkJYXNzZXJ0
X3RvX2ludGVnZXIoYik7CisJCWlmIChhLT51LmkgPiBiLT51LmkpCisJCQlyID0gMTsKKwkJ
ZWxzZSBpZiAoYS0+dS5pIDwgYi0+dS5pKQorCQkJciA9IC0xOworCQllbHNlCisJCQlyID0g
MDsKIAl9CiAKLQlmcmVlX3ZhbHVlIChhKTsKLQlmcmVlX3ZhbHVlIChiKTsKLQlyZXR1cm4g
cjsKKwlmcmVlX3ZhbHVlKGEpOworCWZyZWVfdmFsdWUoYik7CisJcmV0dXJuIChyKTsKIH0K
IAogc3RydWN0IHZhbCAqCi1vcF9ndChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQor
b3BfZXEoc3RydWN0IHZhbCAqYSwgc3RydWN0IHZhbCAqYikKIHsKLQlzdHJ1Y3QgdmFsICpy
OwotCi0JaWYgKGlzc3RyaW5nIChhKSB8fCBpc3N0cmluZyAoYikpIHsKLQkJdG9fc3RyaW5n
IChhKTsKLQkJdG9fc3RyaW5nIChiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90
KShzdHJjb2xsIChhLT51LnMsIGItPnUucykgPiAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQp
dG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50
ZWdlciAoKGludG1heF90KShhLT51LmkgPiBiLT51LmkpKTsKLQl9CisJcmV0dXJuIChtYWtl
X2ludGVnZXIoKGludG1heF90KShjb21wYXJlX3ZhbHMoYSwgYikgPT0gMCkpKTsKK30KIAot
CWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworc3RydWN0
IHZhbCAqCitvcF9ndChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQoreworCXJldHVy
biAobWFrZV9pbnRlZ2VyKChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIpID4gMCkpKTsK
IH0KIAogc3RydWN0IHZhbCAqCiBvcF9sdChzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpi
KQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5n
IChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFr
ZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSA8IDApKTsK
LQl9IGVsc2UgewotCQkodm9pZCl0b19pbnRlZ2VyKGEpOwotCQkodm9pZCl0b19pbnRlZ2Vy
KGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKGEtPnUuaSA8IGItPnUuaSkp
OwotCX0KLQotCWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiBy
OworCXJldHVybiAobWFrZV9pbnRlZ2VyKChpbnRtYXhfdCkoY29tcGFyZV92YWxzKGEsIGIp
IDwgMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9nZShzdHJ1Y3QgdmFsICphLCBzdHJ1
Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8
IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19zdHJpbmcgKGIpOwot
CQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEtPnUucywgYi0+dS5z
KSA+PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihhKTsKLQkJKHZvaWQp
dG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1heF90KShhLT51Lmkg
Pj0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7
Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1heF90KShjb21wYXJl
X3ZhbHMoYSwgYikgPj0gMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBvcF9sZShzdHJ1Y3Qg
dmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7Ci0KLQlpZiAoaXNz
dHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcgKGEpOwotCQl0b19z
dHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3QpKHN0cmNvbGwgKGEt
PnUucywgYi0+dS5zKSA8PSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQpdG9faW50ZWdlcihh
KTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50ZWdlciAoKGludG1h
eF90KShhLT51LmkgPD0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJl
ZV92YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2ludGVnZXIoKGludG1h
eF90KShjb21wYXJlX3ZhbHMoYSwgYikgPD0gMCkpKTsKIH0KIAogc3RydWN0IHZhbCAqCiBv
cF9uZShzdHJ1Y3QgdmFsICphLCBzdHJ1Y3QgdmFsICpiKQogewotCXN0cnVjdCB2YWwgKnI7
Ci0KLQlpZiAoaXNzdHJpbmcgKGEpIHx8IGlzc3RyaW5nIChiKSkgewotCQl0b19zdHJpbmcg
KGEpOwotCQl0b19zdHJpbmcgKGIpOwotCQlyID0gbWFrZV9pbnRlZ2VyICgoaW50bWF4X3Qp
KHN0cmNvbGwgKGEtPnUucywgYi0+dS5zKSAhPSAwKSk7Ci0JfSBlbHNlIHsKLQkJKHZvaWQp
dG9faW50ZWdlcihhKTsKLQkJKHZvaWQpdG9faW50ZWdlcihiKTsKLQkJciA9IG1ha2VfaW50
ZWdlciAoKGludG1heF90KShhLT51LmkgIT0gYi0+dS5pKSk7Ci0JfQotCi0JZnJlZV92YWx1
ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChtYWtlX2lu
dGVnZXIoKGludG1heF90KShjb21wYXJlX3ZhbHMoYSwgYikgIT0gMCkpKTsKIH0KIAotaW50
Ci1jaGtfcGx1cyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAor
YXNzZXJ0X3BsdXMoaW50bWF4X3QgYSwgaW50bWF4X3QgYiwgaW50bWF4X3QgcikKIHsKLQot
CS8qIHN1bSBvZiB0d28gcG9zaXRpdmUgbnVtYmVycyBtdXN0IGJlIHBvc2l0aXZlICovCi0J
aWYgKGEgPiAwICYmIGIgPiAwICYmIHIgPD0gMCkKLQkJcmV0dXJuIDE7Ci0JLyogc3VtIG9m
IHR3byBuZWdhdGl2ZSBudW1iZXJzIG11c3QgYmUgbmVnYXRpdmUgKi8KLQlpZiAoYSA8IDAg
JiYgYiA8IDAgJiYgciA+PSAwKQotCQlyZXR1cm4gMTsKLQkvKiBhbGwgb3RoZXIgY2FzZXMg
YXJlIE9LICovCi0JcmV0dXJuIDA7CisJLyoKKwkgKiBzdW0gb2YgdHdvIHBvc2l0aXZlIG51
bWJlcnMgbXVzdCBiZSBwb3NpdGl2ZSwKKwkgKiBzdW0gb2YgdHdvIG5lZ2F0aXZlIG51bWJl
cnMgbXVzdCBiZSBuZWdhdGl2ZQorCSAqLworCWlmICgoYSA+IDAgJiYgYiA+IDAgJiYgciA8
PSAwKSB8fAorCSAgICAoYSA8IDAgJiYgYiA8IDAgJiYgciA+PSAwKSkKKwkJZXJyeChFUlJf
RVhJVCwgIm92ZXJmbG93Iik7CiB9CiAKIHN0cnVjdCB2YWwgKgpAQCAtNDc5LDM2ICs0MTAs
MjQgQEAKIHsKIAlzdHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0
b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVu
dCIpOwotCX0KLQotCWlmIChlZmxhZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAr
IGItPnUuaSk7Ci0JCWlmIChjaGtfcGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5pKSkgewot
CQkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7Ci0JCX0KLQl9IGVsc2UKLQkJciA9IG1h
a2VfaW50ZWdlcigobG9uZylhLT51LmkgKyAobG9uZyliLT51LmkpOworCWFzc2VydF90b19p
bnRlZ2VyKGEpOworCWFzc2VydF90b19pbnRlZ2VyKGIpOworCXIgPSBtYWtlX2ludGVnZXIo
YS0+dS5pICsgYi0+dS5pKTsKKwlhc3NlcnRfcGx1cyhhLT51LmksIGItPnUuaSwgci0+dS5p
KTsKIAotCWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOwor
CWZyZWVfdmFsdWUoYSk7CisJZnJlZV92YWx1ZShiKTsKKwlyZXR1cm4gKHIpOwogfQogCi1p
bnQKLWNoa19taW51cyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9p
ZAorYXNzZXJ0X21pbnVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7
Ci0KIAkvKiBzcGVjaWFsIGNhc2Ugc3VidHJhY3Rpb24gb2YgSU5UTUFYX01JTiAqLwotCWlm
IChiID09IElOVE1BWF9NSU4pIHsKLQkJaWYgKGEgPj0gMCkKLQkJCXJldHVybiAxOwotCQll
bHNlCi0JCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhpcyBpcyBhbGxvd2VkIGZvciBiICE9IElO
VE1BWF9NSU4gKi8KLQlyZXR1cm4gY2hrX3BsdXMgKGEsIC1iLCByKTsKKwlpZiAoYiA9PSBJ
TlRNQVhfTUlOICYmIGEgPCAwKQorCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKKwkv
KiBjaGVjayBhZGRpdGlvbiBvZiBuZWdhdGl2ZSBzdWJ0cmFoZW5kICovCisJYXNzZXJ0X3Bs
dXMoYSwgLWIsIHIpOwogfQogCiBzdHJ1Y3QgdmFsICoKQEAgLTUxNiwzMyArNDM1LDI1IEBA
CiB7CiAJc3RydWN0IHZhbCAqcjsKIAotCWlmICghdG9faW50ZWdlcihhKSB8fCAhdG9faW50
ZWdlcihiKSkgewotCQllcnJ4KEVSUl9FWElULCAibm9uLW51bWVyaWMgYXJndW1lbnQiKTsK
LQl9Ci0KLQlpZiAoZWZsYWcpIHsKLQkJciA9IG1ha2VfaW50ZWdlcihhLT51LmkgLSBiLT51
LmkpOwotCQlpZiAoY2hrX21pbnVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpKSB7Ci0JCQll
cnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKLQkJfQotCX0gZWxzZQotCQlyID0gbWFrZV9p
bnRlZ2VyKChsb25nKWEtPnUuaSAtIChsb25nKWItPnUuaSk7CisJYXNzZXJ0X3RvX2ludGVn
ZXIoYSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYik7CisJciA9IG1ha2VfaW50ZWdlcihhLT51
LmkgLSBiLT51LmkpOworCWFzc2VydF9taW51cyhhLT51LmksIGItPnUuaSwgci0+dS5pKTsK
IAotCWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJldHVybiByOworCWZy
ZWVfdmFsdWUoYSk7CisJZnJlZV92YWx1ZShiKTsKKwlyZXR1cm4gKHIpOwogfQogCi1pbnQK
LWNoa190aW1lcyhpbnRtYXhfdCBhLCBpbnRtYXhfdCBiLCBpbnRtYXhfdCByKQordm9pZAor
YXNzZXJ0X3RpbWVzKGludG1heF90IGEsIGludG1heF90IGIsIGludG1heF90IHIpCiB7Ci0J
Lyogc3BlY2lhbCBjYXNlOiBmaXJzdCBvcGVyYW5kIGlzIDAsIG5vIG92ZXJmbG93IHBvc3Np
YmxlICovCi0JaWYgKGEgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JLyogdmVyaWZ5IHRoYXQgcmVz
dWx0IG9mIGRpdmlzaW9uIG1hdGNoZXMgc2Vjb25kIG9wZXJhbmQgKi8KLQlpZiAociAvIGEg
IT0gYikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJLyoKKwkgKiBpZiBmaXJzdCBvcGVy
YW5kIGlzIDAsIG5vIG92ZXJmbG93IGlzIHBvc3NpYmxlLAorCSAqIGVsc2UgcmVzdWx0IG9m
IGRpdmlzaW9uIHRlc3QgbXVzdCBtYXRjaCBzZWNvbmQgb3BlcmFuZAorCSAqLworCWlmIChh
ICE9IDAgJiYgciAvIGEgIT0gYikKKwkJZXJyeChFUlJfRVhJVCwgIm92ZXJmbG93Iik7CiB9
CiAKIHN0cnVjdCB2YWwgKgpAQCAtNTUwLDMyICs0NjEsMjQgQEAKIHsKIAlzdHJ1Y3QgdmFs
ICpyOwogCi0JaWYgKCF0b19pbnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVy
cngoRVJSX0VYSVQsICJub24tbnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQotCWlmIChlZmxh
ZykgewotCQlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7Ci0JCWlmIChjaGtf
dGltZXMoYS0+dS5pLCBiLT51LmksIHItPnUuaSkpIHsKLQkJCWVycngoRVJSX0VYSVQsICJv
dmVyZmxvdyIpOwotCQl9Ci0JfSBlbHNlCi0JCXIgPSBtYWtlX2ludGVnZXIoKGxvbmcpYS0+
dS5pICogKGxvbmcpYi0+dS5pKTsKKwlhc3NlcnRfdG9faW50ZWdlcihhKTsKKwlhc3NlcnRf
dG9faW50ZWdlcihiKTsKKwlyID0gbWFrZV9pbnRlZ2VyKGEtPnUuaSAqIGItPnUuaSk7CisJ
YXNzZXJ0X3RpbWVzKGEtPnUuaSwgYi0+dS5pLCByLT51LmkpOwogCi0JZnJlZV92YWx1ZSAo
YSk7Ci0JZnJlZV92YWx1ZSAoYik7CisJZnJlZV92YWx1ZShhKTsKKwlmcmVlX3ZhbHVlKGIp
OwogCXJldHVybiAocik7CiB9CiAKLWludAotY2hrX2RpdihpbnRtYXhfdCBhLCBpbnRtYXhf
dCBiKQordm9pZAorYXNzZXJ0X2RpdihpbnRtYXhfdCBhLCBpbnRtYXhfdCBiKQogewotCS8q
IGRpdiBieSB6ZXJvIGhhcyBiZWVuIHRha2VuIGNhcmUgb2YgYmVmb3JlICovCisJaWYgKGIg
PT0gMCkKKwkJZXJyeChFUlJfRVhJVCwgImRpdmlzaW9uIGJ5IHplcm8iKTsKIAkvKiBvbmx5
IElOVE1BWF9NSU4gLyAtMSBjYXVzZXMgb3ZlcmZsb3cgKi8KIAlpZiAoYSA9PSBJTlRNQVhf
TUlOICYmIGIgPT0gLTEpCi0JCXJldHVybiAxOwotCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyBP
SyAqLwotCXJldHVybiAwOworCQllcnJ4KEVSUl9FWElULCAib3ZlcmZsb3ciKTsKIH0KIAog
c3RydWN0IHZhbCAqCkBAIC01ODMsNTEgKzQ4NiwzMyBAQAogewogCXN0cnVjdCB2YWwgKnI7
CiAKLQlpZiAoIXRvX2ludGVnZXIoYSkgfHwgIXRvX2ludGVnZXIoYikpIHsKLQkJZXJyeChF
UlJfRVhJVCwgIm5vbi1udW1lcmljIGFyZ3VtZW50Iik7Ci0JfQotCi0JaWYgKGItPnUuaSA9
PSAwKSB7Ci0JCWVycngoRVJSX0VYSVQsICJkaXZpc2lvbiBieSB6ZXJvIik7Ci0JfQotCi0J
aWYgKGVmbGFnKSB7Ci0JCXIgPSBtYWtlX2ludGVnZXIoYS0+dS5pIC8gYi0+dS5pKTsKLQkJ
aWYgKGNoa19kaXYoYS0+dS5pLCBiLT51LmkpKSB7Ci0JCQllcnJ4KEVSUl9FWElULCAib3Zl
cmZsb3ciKTsKLQkJfQotCX0gZWxzZQotCQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEtPnUu
aSAvIChsb25nKWItPnUuaSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0X3Rv
X2ludGVnZXIoYik7CisJLyogYXNzZXJ0IGJhc2VkIG9uIG9wZXJhbmRzIG9ubHksIG5vdCBv
biByZXN1bHQgKi8KKwlhc3NlcnRfZGl2KGEtPnUuaSwgYi0+dS5pKTsKKwlyID0gbWFrZV9p
bnRlZ2VyKGEtPnUuaSAvIGItPnUuaSk7CiAKLQlmcmVlX3ZhbHVlIChhKTsKLQlmcmVlX3Zh
bHVlIChiKTsKLQlyZXR1cm4gcjsKKwlmcmVlX3ZhbHVlKGEpOworCWZyZWVfdmFsdWUoYik7
CisJcmV0dXJuIChyKTsKIH0KLQkKKwogc3RydWN0IHZhbCAqCiBvcF9yZW0oc3RydWN0IHZh
bCAqYSwgc3RydWN0IHZhbCAqYikKIHsKIAlzdHJ1Y3QgdmFsICpyOwogCi0JaWYgKCF0b19p
bnRlZ2VyKGEpIHx8ICF0b19pbnRlZ2VyKGIpKSB7Ci0JCWVycngoRVJSX0VYSVQsICJub24t
bnVtZXJpYyBhcmd1bWVudCIpOwotCX0KLQotCWlmIChiLT51LmkgPT0gMCkgewotCQllcnJ4
KEVSUl9FWElULCAiZGl2aXNpb24gYnkgemVybyIpOwotCX0KLQotCWlmIChlZmxhZykKLQkJ
ciA9IG1ha2VfaW50ZWdlcihhLT51LmkgJSBiLT51LmkpOwotCSAgICAgICAgLyogY2hrX3Jl
bSBuZWNlc3NhcnkgPz8/ICovCi0JZWxzZQotCQlyID0gbWFrZV9pbnRlZ2VyKChsb25nKWEt
PnUuaSAlIChsb25nKWItPnUuaSk7CisJYXNzZXJ0X3RvX2ludGVnZXIoYSk7CisJYXNzZXJ0
X3RvX2ludGVnZXIoYik7CisJLyogcGFzcyBhPTEgdG8gb25seSBjaGVjayBmb3IgZGl2IGJ5
IHplcm8gKi8KKwlhc3NlcnRfZGl2KDEsIGItPnUuaSk7CisJciA9IG1ha2VfaW50ZWdlcihh
LT51LmkgJSBiLT51LmkpOwogCi0JZnJlZV92YWx1ZSAoYSk7Ci0JZnJlZV92YWx1ZSAoYik7
Ci0JcmV0dXJuIHI7CisJZnJlZV92YWx1ZShhKTsKKwlmcmVlX3ZhbHVlKGIpOworCXJldHVy
biAocik7CiB9Ci0JCisKIHN0cnVjdCB2YWwgKgogb3BfY29sb24oc3RydWN0IHZhbCAqYSwg
c3RydWN0IHZhbCAqYikKIHsKQEAgLTY0MiwzMyArNTI3LDMwIEBACiAJdG9fc3RyaW5nKGIp
OwogCiAJLyogY29tcGlsZSByZWd1bGFyIGV4cHJlc3Npb24gKi8KLQlpZiAoKGV2YWwgPSBy
ZWdjb21wICgmcnAsIGItPnUucywgMCkpICE9IDApIHsKLQkJcmVnZXJyb3IgKGV2YWwsICZy
cCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJaWYgKChldmFsID0gcmVnY29tcCgmcnAs
IGItPnUucywgMCkpICE9IDApIHsKKwkJcmVnZXJyb3IoZXZhbCwgJnJwLCBlcnJidWYsIHNp
emVvZihlcnJidWYpKTsKIAkJZXJyeChFUlJfRVhJVCwgIiVzIiwgZXJyYnVmKTsKIAl9CiAK
IAkvKiBjb21wYXJlIHN0cmluZyBhZ2FpbnN0IHBhdHRlcm4gKi8KIAkvKiByZW1lbWJlciB0
aGF0IHBhdHRlcm5zIGFyZSBhbmNob3JlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5l
ICovCi0JaWYgKHJlZ2V4ZWMoJnJwLCBhLT51LnMsIChzaXplX3QpMiwgcm0sIDApID09IDAg
JiYgcm1bMF0ucm1fc28gPT0gMCkgeworCWlmIChyZWdleGVjKCZycCwgYS0+dS5zLCAoc2l6
ZV90KTIsIHJtLCAwKSA9PSAwICYmIHJtWzBdLnJtX3NvID09IDApCiAJCWlmIChybVsxXS5y
bV9zbyA+PSAwKSB7CiAJCQkqKGEtPnUucyArIHJtWzFdLnJtX2VvKSA9ICdcMCc7Ci0JCQl2
ID0gbWFrZV9zdHIgKGEtPnUucyArIHJtWzFdLnJtX3NvKTsKKwkJCXYgPSBtYWtlX3N0cihh
LT51LnMgKyBybVsxXS5ybV9zbyk7CiAKLQkJfSBlbHNlIHsKLQkJCXYgPSBtYWtlX2ludGVn
ZXIgKChpbnRtYXhfdCkocm1bMF0ucm1fZW8gLSBybVswXS5ybV9zbykpOwotCQl9Ci0JfSBl
bHNlIHsKLQkJaWYgKHJwLnJlX25zdWIgPT0gMCkgewotCQkJdiA9IG1ha2VfaW50ZWdlciAo
KGludG1heF90KTApOwotCQl9IGVsc2UgewotCQkJdiA9IG1ha2Vfc3RyICgiIik7Ci0JCX0K
LQl9CisJCX0gZWxzZQorCQkJdiA9IG1ha2VfaW50ZWdlcigoaW50bWF4X3QpKHJtWzBdLnJt
X2VvIC0gcm1bMF0ucm1fc28pKTsKKwllbHNlCisJCWlmIChycC5yZV9uc3ViID09IDApCisJ
CQl2ID0gbWFrZV9pbnRlZ2VyKChpbnRtYXhfdCkwKTsKKwkJZWxzZQorCQkJdiA9IG1ha2Vf
c3RyKCIiKTsKIAogCS8qIGZyZWUgYXJndW1lbnRzIGFuZCBwYXR0ZXJuIGJ1ZmZlciAqLwot
CWZyZWVfdmFsdWUgKGEpOwotCWZyZWVfdmFsdWUgKGIpOwotCXJlZ2ZyZWUgKCZycCk7CisJ
ZnJlZV92YWx1ZShhKTsKKwlmcmVlX3ZhbHVlKGIpOworCXJlZ2ZyZWUoJnJwKTsKIAotCXJl
dHVybiB2OworCXJldHVybiAodik7CiB9Cg==
--------------000109010508020704090904
Content-Type: text/plain;
 name="regress.sh"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="regress.sh"

IyEvYmluL3NoCgojLQojIENvcHlyaWdodCAoYykgMjAxMSBTdGVmYW4gRXNzZXIgPHNlQGZy
ZWVic2Qub3JnPgojIEFsbCByaWdodHMgcmVzZXJ2ZWQuIAojCiMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoj
CiMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAojIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQojIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCiMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAojIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCiMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiMgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgojIFNVQ0ggREFN
QUdFLgoKIwojIGV4cHIuc2ggLSBjaGVjayBpZiB0ZXN0KDEpIG9yIGJ1aWx0aW4gdGVzdCB3
b3JrcwojCiMgJEZyZWVCU0Q6JAoKIyBmb3JjZSBhIHNwZWNpZmllZCB0ZXN0IHByb2dyYW0s
IGUuZy4gYGVudiB0ZXN0PS9iaW4vZXhwciBzaCByZWdyZXNzLnNoJwo6ICR7dGVzdD1leHBy
fQoKdCAoKQp7CgkjICQxIC0+IGV4aXQgY29kZQoJIyAkMiAtPiByZXN1bHQgd3JpdHRlbiB0
byBzdGRvdXQKCSMgJDMgLT4gJHRlc3QgZXhwcmVzc2lvbgoKCWNvdW50PSQoKGNvdW50KzEp
KQoJY29tcGF0PSR7RVhQUl9DT01QQVQ6KyAoQ09NUEFUKX0KCSMgY2hlY2sgZm9yIHN5bnRh
eCBlcnJvcnMKCW91dHB1dD0iYGV2YWwgJHRlc3QgJDMgMj4vZGV2L251bGxgIgoJcmV0PSQ/
CglpZiBbICIkcmV0IiAtbmUgIiQxIiBdOyB0aGVuCgkJcHJpbnRmICJub3Qgb2sgJWQgJXMg
JXMgIC0gKGdvdCAlcywgZXhwZWN0ZWQgJXMpJXNcbiIgXAoJCQkiJGNvdW50IiAiJHRlc3Qi
ICIkMyIgIiRyZXQiICIkMSIgIiRjb21wYXQiCgllbGlmIFsgIiRvdXRwdXQiICE9ICIkMiIg
XTsgdGhlbgoJCXByaW50ZiAibm90IG9rICVkICVzICVzICAtICh1bmV4cGVjdGVkIG91dHB1
dCwgZ290ICclcycsIGV4cGVjdGVkICclcycpJXNcbiIgXAoJCQkiJGNvdW50IiAiJHRlc3Qi
ICIkMyIgIiRvdXRwdXQiICIkMiIgIiRjb21wYXQiCgllbGlmIFsgIiRyZXQiIC1nZSAyIF07
IHRoZW4KCQlwcmludGYgIm9rICVkICVzICVzICAtIGlzIGNvcnJlY3RseSBkZXRlY3RlZCBh
cyBlcnJvciVzXG4iIFwKCQkJIiRjb3VudCIgIiR0ZXN0IiAiJDMiICIkY29tcGF0IgoJZWxz
ZQoJCXByaW50ZiAib2sgJWQgJXMgJXMgIC0gaXMgY29ycmVjdCByZXN1bHQlc1xuIiBcCgkJ
CSIkY291bnQiICIkdGVzdCIgIiQzID0gJyRvdXRwdXQnIiAiJGNvbXBhdCIKCWZpCn0KCiMg
ZGVjaW1hbCBjb25zdGFudHMgKGFzc3VtaW5nIHR5cGUgb2YgImludG1heF90IiBpcyAic2ln
bmVkIDY0IGJpdCBpbnRlZ2VyIikKTUFYSU5UX1BMVVMxPTkyMjMzNzIwMzY4NTQ3NzU4MDgK
TUFYSU5UPTkyMjMzNzIwMzY4NTQ3NzU4MDcKTUFYSU5UX01JTlVTMT05MjIzMzcyMDM2ODU0
Nzc1ODA2Ck1BWElOVF9IQUxGPTQ2MTE2ODYwMTg0MjczODc5MDMKTUlOSU5UX0hBTEY9LTQ2
MTE2ODYwMTg0MjczODc5MDQKTUlOSU5UX1BMVVMyPS05MjIzMzcyMDM2ODU0Nzc1ODA2Ck1J
TklOVF9QTFVTMT0tOTIyMzM3MjAzNjg1NDc3NTgwNwpNSU5JTlQ9LTkyMjMzNzIwMzY4NTQ3
NzU4MDgKTUlOSU5UX01JTlVTMT0tOTIyMzM3MjAzNjg1NDc3NTgwOQoKY291bnQ9MAplY2hv
ICIxLi4xNTUiCgojIEVYUFJfQ09NUEFUIGlzIGVxdWl2YWxlbnQgdG8gIi1lIiBhbmQgIi0t
IiBiZWluZyBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnRzLgojIElmIEVYUFJfQ09NUEFUIHdh
cyBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50LCAiLWUiIHByb2Nlc3Npbmcgd291bGQK
IyBicmVhayBpbiB0aGUgZm9sbG93aW5nIHRlc3RzLgp1bnNldCBFWFBSX0NPTVBBVAoKIyBC
YXNpYyB0ZXN0cyBmb3Igc3RyaW5nIG9wZXJhbmRzCnQgMCAnICcJCQkJJyIgIicKdCAwIDAw
MDEwMDAwMAkJCScwMDAxMDAwMDAnCnQgMCAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMAknMDAw
MTAwMDAwMDAwMDAwMDAwMDAwMDAnCnQgMCB4eXp6eQkJCSdcKCB4eXp6eSBcKScKdCAyICcn
CQkJCSd4eXp6eSArIDAnCnQgMiAnJwkJCQknLScJCSMgc3ludGF4IGVycm9yIChzdHJpbmcg
PT0gb3ApCnQgMiAnJwkJCQknLS0nCQkjIG5vIGV4cHJlc3Npb24gYXJndW1lbnRzCnQgMiAn
JwkJCQknLWUnCQkjIG5vIGV4cHJlc3Npb24gYXJndW1lbnRzCnQgMiAnJwkJCQknLWUgLS0n
CQkjIG5vIGV4cHJlc3Npb24gYXJndW1lbnRzCnQgMCAnLS0nCQkJJy0tIC0tJwp0IDAgJy0t
JwkJCSctZSAtLSAtLScKCiMgU2ltcGxlIGFyaXRobWV0aWMgb3BlcmF0aW9ucwp0IDAgMQkJ
JzAgKyAxJwp0IDEgMAkJJzAgKyAwJwp0IDAgMgkJJzEgKyAxJwp0IDAgLTIJCSctLSAtMSAr
IC0xJwp0IDEgMAkJJy0tIC0xICsgMScKdCAyICcnCQknLScJCSMgc3ludGF4IGVycm9yCnQg
MiAnJwkJJy0xJwkJIyBzeW50YXggZXJyb3IKdCAyICcnCQknLTEgKyAxJwkjIHN5bnRheCBl
cnJvcgp0IDEgMAkJJy0tIC0xICsgMScKdCAyICcnCQknIiAxIiArIDEnCSMgc3ludGF4IGVy
cm9yCnQgMiAnJwkJJyIJMSIgKyAxJwkjIHN5bnRheCBlcnJvcgp0IDIgJycJCSciMSAiICsg
MScJIyBzeW50YXggZXJyb3IKdCAyICcnCQknIjEJIiArIDEnCSMgc3ludGF4IGVycm9yCnQg
MiAnJwkJJyIxIDEiICsgMScJIyBzeW50YXggZXJyb3IKdCAyICcnCQknIjEJMSIgKyAxJwkj
IHN5bnRheCBlcnJvcgp0IDAgJzEgMScJJyIxIDEiJwkJIyBzeW50YXggZXJyb3IKdCAyICcn
CQknLSA6IC0nCQkjICItIiBpcyBhbiBvcGVyYXRvciBhbmQgbm90IGEgdmFsaWQgInN0cmlu
ZyIhCnQgMiAnJwkJJy0tIC0gOiAtJwkjICItIiBpcyBhbiBvcGVyYXRvciBhbmQgbm90IGEg
dmFsaWQgInN0cmluZyIhCnQgMCAyCQknLS0gLS0gOiAtLScJIyBwZXJmZWN0bHkgbGVnYWws
IHJldHVybnMgbGVuZ3RoIG9mICItLSIKCiMgU29tZSB0ZXN0cyBmb3IgbW9yZSBsZW5pZW50
IG51bWJlciBzeW50YXggaW4gY29tcGF0IG1vZGUgKC1lIG9wdGlvbikKdCAyICcnCQknLWUn
CQkjIG5vIGV4cHJlc3Npb24gZ2l2ZW4KdCAwIDIJCSctZSAiIDEiICsgMScJIyBhbGxvdyBs
ZWFkaW5nIHdoaXRlIHNwYWNlIHdpdGggLWUKdCAwIDIJCSctZSAiCTEiICsgMScgIyBhbGxv
dyBsZWFkaW5nIHdoaXRlIHNwYWNlIHdpdGggLWUKdCAwIDEJCSctZSAiIiArIDEnCSMgZW1w
dHkgc3RyaW5nIGlzIGludGVycHJldGVkIGFzIDAKdCAyICcnCQknLWUgIiAiICsgMScJIyB3
aGl0ZSBzcGFjZSB3aXRob3V0IGRpZ2l0cyBpcyBub3QgYSBudW1iZXIKCiMgVGhlIGZvbGxv
d2luZyBhcmUgYWxsb3dlZCB0byBmYWlsIGJ5IFBPU0lYLjEsIGJ1dCB3ZSBkb24ndCB0cmVh
dCB0aGVtIHNwZWNpYWwKdCAwIDEJJ3N1YnN0ciA9IHN1YnN0cicJIyB3ZSBkbyBub3Qgc3Bl
Y2lhbCBjYXNlICJzdWJzdHIiCnQgMCAxCSdsZW5ndGggPSBsZW5ndGgnCSMgd2UgZG8gbm90
IHNwZWNpYWwgY2FzZSAibGVuZ3RoIgp0IDAgMQknbWF0Y2ggPSBtYXRjaCcJCSMgd2UgZG8g
bm90IHNwZWNpYWwgY2FzZSAibWF0Y2giCnQgMCAxCSdpbmRleCA9IGluZGV4JwkJIyB3ZSBk
byBub3Qgc3BlY2lhbCBjYXNlICJpbmRleCIKCiMgQ2hlY2sgbnVtZXJpYyByYW5nZSBhbmQg
b3ZlcmZsb3cgZGV0ZWN0aW9uCnQgMCAkTUFYSU5UCQknJE1BWElOVCArIDAnCnQgMiAnJwkJ
CSckTUFYSU5UICsgMScKdCAwICRNSU5JTlQJCSctLSAkTUlOSU5UX1BMVVMxIC0gMScKdCAw
ICRNSU5JTlQJCSctLSAkTUlOSU5UIFwqIDEnCnQgMiAnJwkJCSctLSAkTUlOSU5UIFwqIC0x
Jwp0IDAgJE1BWElOVAkJJy0tICRNSU5JTlRfUExVUzEgXCogLTEnCnQgMCAkTUFYSU5UX1BM
VVMxCSckTUFYSU5UX1BMVVMxJwp0IDIgJycJCQknJE1BWElOVF9QTFVTMSArIDAnCnQgMCAx
MDAwMDEJCScwMDAxMDAwMDAgKyAxJwp0IDAgJE1BWElOVAkJJy0tICRNSU5JTlRfSEFMRiBc
KiAtMSAtIDEgLSAkTUlOSU5UX0hBTEYnCnQgMCAkTUlOSU5UCQknLS0gJE1JTklOVF9IQUxG
ICsgJE1JTklOVF9IQUxGJwp0IDAgJE1JTklOVAkJJy0tICRNSU5JTlQgLyAxJwp0IDIgJycJ
CQknLS0gJE1JTklOVCAvIC0xJwp0IDAgJE1JTklOVF9QTFVTMQknJE1BWElOVCAvIC0xJwp0
IDAgJE1BWElOVF9NSU5VUzEJJyRNQVhJTlRfSEFMRiBcKiAyJwp0IDIgJycJCQknXCggJE1B
WElOVF9IQUxGICsgMSBcKSBcKiAyJwp0IDAgJE1JTklOVF9QTFVTMgknJE1BWElOVF9IQUxG
IFwqIC0yJwp0IDAgJE1JTklOVAkJJ1woICRNQVhJTlRfSEFMRiArIDEgXCkgXCogLTInCnQg
MiAnJwkJCSdcKCAkTUFYSU5UX0hBTEYgKyAyIFwpIFwqIC0yJwp0IDAgLTcJCQknLS0gJE1J
TklOVF9QTFVTMSAlIDEwJwp0IDAgLTcJCQknLS0gJE1JTklOVF9QTFVTMSAlIC0xMCcKdCAw
IDcJCQknJE1BWElOVCAlIDEwJwp0IDAgNwkJCSckTUFYSU5UICUgLTEwJwp0IDIgJycJCQkn
JE1JTklOVCArICRNSU5JTlQnCgojIFNpbXBsZSBjb21wYXJpc29uIGV4cHJlc3Npb25zCnQg
MSAwCQkJJzIgKyAwICI8IiAxJwp0IDAgMQkJCScwICI8IiAxICsgMicKdCAwIDMJCQknXCgg
MCAiPCIgMSBcKSArIDInCgojIENvbXBhcmlzb24gb3BlcmF0b3JzIGFwcGxpZWQgdG8gYm91
bmRhcnkgdmFsdWVzCnQgMCAxCQkJJy0tICRNSU5JTlQgIjwiICRNQVhJTlQnCnQgMiAnJwkJ
CSctLSAkTUlOSU5UICI8IiAkTUFYSU5UICsgMScKdCAwIDEJCQknLS0gJE1JTklOVCAiPD0i
ICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICI8PSIgJE1BWElOVCArIDEnCnQgMSAw
CQkJJy0tICRNSU5JTlQgIj4iICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICI+IiAk
TUFYSU5UICsgMScKdCAxIDAJCQknLS0gJE1JTklOVCAiPj0iICRNQVhJTlQnCnQgMiAnJwkJ
CSctLSAkTUlOSU5UICI+PSIgJE1BWElOVCArIDEnCnQgMSAwCQkJJy0tICRNSU5JTlQgIj0i
ICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICI9IiAkTUFYSU5UICsgMScKdCAwIDEJ
CQknLS0gJE1JTklOVCAiIT0iICRNQVhJTlQnCnQgMiAnJwkJCSctLSAkTUlOSU5UICIhPSIg
JE1BWElOVCArIDEnCgojIFBhdHRlcm4gbWF0Y2ggb3BlcmF0b3IKdCAwIGFiYwkJCScxMjNh
YmMxMjMgOiAiLipcKGFbXjAtOV0qXCkiJwp0IDAgMTI0CQkJJzEyM2FiYzEyMyA6ICIuKmFb
XjAtOV0qXCguKlwpIiArIDEnCnQgMCAxCQkJJzEyM2FiYzEyMyA6ICIuKmFbXjAtOV0qXCgu
KlwpIiA9IDEyMycKdCAwIDcJCQknMTIzYWJjMTIzIDogIi4qYVteMC05XSoiICsgMScKdCAx
IDAJCQknMTIzQWJjMTIzIDogIi4qYVteMC05XSoiJwp0IDAgMQkJCScxMjNBYmMxMjMgOiAi
LiphW14wLTldKiIgKyAxJwp0IDAgMQkJCScxMjNBYmMxMjMgOiAiLiphW14wLTldKiIgPSAw
JwoKIyBMb2dpY2FsIG9wZXJhdG9ycwp0IDAgYQkJCSdhICImIiBiJwp0IDEgMAkJCSdhICIm
IiAiIicKdCAxIDAJCQknIiIgIiYiIGInCnQgMSAwCQkJJyIiICImIiAiIicKdCAxIDAJCQkn
YSAiJiIgMCcKdCAxIDAJCQknMCAiJiIgYicKdCAxIDAJCQknMCAiJiIgMCcKCgp0IDAgYQkJ
CSdhICJ8IiBiJwp0IDAgYQkJCSdhICJ8IiAiIicKdCAwIGIJCQknIiIgInwiIGInCnQgMSAw
CQkJJyIiICJ8IiAiIicKdCAwIGEJCQknYSAifCIgMCcKdCAwIGIJCQknMCAifCIgYicKdCAx
IDAJCQknMCAifCIgMCcKdCAwIC0xCQkJJzAgInwiIC0xJwoKdCAxIDAJCQknIigiIDAgInwi
IDEgIikiICI8IiAiKCIgMCAiJiIgMSAiKSInCnQgMCAxCQkJJyIoIiBhICJ8IiBiICIpIiAi
PSIgIigiIGEgIiYiIGIgIikiJwoKIyBDb21wYXJpc29uIHJlc3VsdHMgZGVwZW5kIG9uIGFy
Z3VtZW50cyBiZWluZyBhY2NlcHRlZCBhcyBkZWNpbWFsIG51bWJlcnMKdCAwIDEJCQknIiAy
IiAiPCIgIjIiJwp0IDAgMQkJCSciMiIgIjwiICIxMSInCnQgMSAwCQkJJy0tICItMiIgIjwi
ICItMTEiJwp0IDEgMAkJCSciIDIiICI8IiAiIDExIicKdCAxIDAJCQknIiAtMiIgIjwiICIg
LTExIicKdCAxIDAJCQknIjIgIiAiPCIgIjExICInCnQgMSAwCQkJJy0tICItMiAiICI8IiAi
LTExICInCnQgMSAwCQkJJyIgMiAiICI8IiAiIDExICInCnQgMSAwCQkJJyIgLTIgIiAiPCIg
IiAtMTEgIicKdCAxIDAJCQknIisyIiAiPCIgIisxMSInCnQgMSAwCQkJJyIgKzIiICI8IiAi
ICsxMSInCgojIE9wZXJhdG9yIHByZWNlZGVuY2U6ICB8ICAmICA9ICA+ICA+PSAgPCAgPD0g
ICE9ICArICAtICAqICAvICAlICA6ICggKQp0IDAgJ3RydWUnCQkndHJ1ZSAifCIgMCAiJiIg
MScKdCAwICd0cnVlJwkJJ3RydWUgInwiIDAgKyAxJwp0IDIgJycJCQknIigiIHRydWUgInwi
IDAgIikiICsgMScKdCAwIDEJCQkndHJ1ZSAiPiIgMCArIDEnCnQgMCAyCQkJJyIoIiB0cnVl
ICI+IiAwICIpIiArIDEnCnQgMSAwCQkJJzAgInwiIDEgPSAwICImIiAxJwp0IDEgMAkJCScy
IC0gMSAiKiIgMicKdCAwIDQJCQknMiArIDEgIioiIDInCnQgMSAwCQkJJzIgLSA0ICIvIiAy
Jwp0IDAgMQkJCSc0IC0gNSArIDInCnQgMCAxCQkJJzIgXCogNCAvIDcnCnQgMCAxCQkJJzIg
XCogNCAlIDcnCnQgMCA4CQkJJ3RydWUgOiAuXCogXCogMicKdCAwIDIwCQkJJ1woIDIgXCog
MiBcKSArIFwoIDIgXCogMiBcKSBcKiBcKCAyIFwqIDIgXCknCnQgMCAxMAkJCSc1IFwqIDcg
LSA1IFwqIDUnCnQgMCA1MAkJCSc1IFwqIFwoIDcgLSA1IFwpIFwqIDUnCgojIFNvbWUgdGVz
dHMgZm9yIGNvbXBhdCBtb2RlLCBleHBlY3RpbmcgaXQgb25seSBjaGFuZ2VzIHRoZQojIHN1
cHBvcnRlZCBzeW50YXggb2YgbnVtZXJpYyBhcmd1bWVudHMgYW5kIHRoZSBvcHRpb24gcHJv
Y2Vzc2luZwpFWFBSX0NPTVBBVD0xOyBleHBvcnQgRVhQUl9DT01QQVQKCiMgQXJndW1lbnRz
IHByb2Nlc3NpbmcKdCAwICctZScJCSctZScKdCAwICctLScJCSctLScKdCAyICcnCQkJJy1l
IC0tJwp0IDIgJycJCQknLS0gLS0nCnQgMiAnJwkJCSctZSAtLSAtLScKdCAwIDEJCQknLWUg
IT0gLS0nCnQgMSAwCQkJJy1lICE9IC1lJwp0IDAgLTEJCQknLTEnCgojIE1vcmUgbGVuaWVu
dCBudW1iZXIgcGFyc2luZyBsZWFkcyB0byBtb3JlIGNvbXBhcmlzb25zIGJ5IG51bWVyaWMg
dmFsdWUKdCAwIC0yCQkJJy0xICsgLTEnCnQgMSAwCQkJJy0xICsgMScKdCAwIDIJCQknIiAx
IiArIDEnCnQgMCAyCQkJJysxICsgMScKdCAwIDIJCQknIiArMSIgKyAxJwp0IDIgJycJCQkn
IiAtIiArIDEnCnQgMiAnJwkJCSciICsiICsgMScKdCAxIDAJCQknIiAyIiAiPCIgIjIiJwp0
IDAgMQkJCSciMiIgIjwiICIxMSInCnQgMSAwCQkJJyItMiIgIjwiICItMTEiJwp0IDAgMQkJ
CSciIDIiICI8IiAiIDExIicKdCAxIDAJCQknIiAtMiIgIjwiICIgLTExIicKdCAxIDAJCQkn
IjIgIiAiPCIgIjExICInCnQgMSAwCQkJJyItMiAiICI8IiAiLTExICInCnQgMSAwCQkJJyIg
MiAiICI8IiAiIDExICInCnQgMSAwCQkJJyIgLTIgIiAiPCIgIiAtMTEgIicKdCAwIDEJCQkn
IisyIiAiPCIgIisxMSInCnQgMCAxCQkJJyIgKzIiICI8IiAiICsxMSInCg==
--------------000109010508020704090904--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E1224E9.1050600>