From debbugs-submit-bounces@debbugs.gnu.org Sun Mar 23 09:19:58 2014 Received: (at submit) by debbugs.gnu.org; 23 Mar 2014 13:19:58 +0000 Received: from localhost ([127.0.0.1]:45468 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WRiJh-00050O-0I for submit@debbugs.gnu.org; Sun, 23 Mar 2014 09:19:57 -0400 Received: from pbsg500.nifty.com ([202.248.238.70]:43783) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WRiJb-000502-01 for submit@debbugs.gnu.org; Sun, 23 Mar 2014 09:19:54 -0400 Received: from [10.120.1.63] (i118-21-128-66.s30.a048.ap.plala.or.jp [118.21.128.66]) (authenticated) by pbsg500.nifty.com with ESMTP id s2NDJZcR001145 for ; Sun, 23 Mar 2014 22:19:36 +0900 X-Nifty-SrcIP: [118.21.128.66] Date: Sun, 23 Mar 2014 22:19:36 +0900 From: Norihiro Tanaka To: submit@debbugs.gnu.org Subject: [PATCH] grep: optimization of DFA by reuse of multi-byte buffers in non-UTF8 locales Message-Id: <20140323221557.0464.27F6AC2D@kcn.ne.jp> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_531AAC47000000000212_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.65.07 [ja] X-Spam-Score: 2.2 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Package: grep Tags: patch dfaexec() allocates and deallocates many buffers in non-UTF8 locales, but it's very inefficient. If put them on struct dfa and reuse them, when use not regex but DFA for ANYCHAR, it will speed up about 20-30% in non-UTF8 locales. [...] Content analysis details: (2.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [202.248.238.70 listed in psbl.surriel.com] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.5 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.2 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Package: grep Tags: patch dfaexec() allocates and deallocates many buffers in non-UTF8 locales, but it's very inefficient. If put them on struct dfa and reuse them, when use not regex but DFA for ANYCHAR, it will speed up about 20-30% in non-UTF8 locales. [...] Content analysis details: (2.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [202.248.238.70 listed in psbl.surriel.com] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.5 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain --------_531AAC47000000000212_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Package: grep Tags: patch dfaexec() allocates and deallocates many buffers in non-UTF8 locales, but it's very inefficient. If put them on struct dfa and reuse them, when use not regex but DFA for ANYCHAR, it will speed up about 20-30% in non-UTF8 locales. Norihiro --------_531AAC47000000000212_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: 7bit >From e56992c4bfdb2e02a114b14c34780672a9c8cee9 Mon Sep 17 00:00:00 2001 From: Norihiro Tanaka Date: Sun, 23 Mar 2014 20:14:33 +0900 Subject: [PATCH] grep: optimization of DFA by reuse of multi-byte buffers in non-UTF8 locales * src/dfa.c (struct dfa): New members `mblen_buf', `nmblen_buf', `inputwcs', `ninputwcs', `mb_follows' and `mb_match_lens'. (SKIP_REMAINS_MB_IF_INITIAL_STATE): Use them instead of global variables. (match_anychar): Use them instead of global variables. (match_mb_charset): Use them instead of global variables. (check_matching_with_multibyte_ops): Use it instead of new allocation. (transit_state_consume_1char): Use them instead of global variables. (transit_state): Use them instead of global variables. (prepare_wc_buf): Use them instead of global variables. (dfaexec): Initializations of new members. (free_mbdata): Memory Deallocations for new members. --- src/dfa.c | 124 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 63 insertions(+), 61 deletions(-) diff --git a/src/dfa.c b/src/dfa.c index 5e60cd5..73e2432 100644 --- a/src/dfa.c +++ b/src/dfa.c @@ -424,6 +424,30 @@ struct dfa struct dfamust *musts; /* List of strings, at least one of which is known to appear in any r.e. matching the dfa. */ + unsigned char *mblen_buf; /* Correspond to the input buffer in dfaexec. + Each element stores the number of remaining + bytes of the corresponding multibyte + character in the input string. A element's + value is 0 if the corresponding character is + single-byte. + e.g., input : 'a', , , + mblen_buf : 0, 3, 2, 1 + */ + size_t nmblen_buf; /* Length of the mblen buffer currently + allocated. */ + wchar_t *inputwcs; /* Wide character representation of the input + string in dfaexec. + The length of this array is the same as + the length of input string (char array). + inputstring[i] is a single-byte char, + or the first byte of a multibyte char; + inputwcs[i] is the codepoint. */ + size_t ninputwcs; /* Length of the input wide characters + currently allocated. */ + position_set *mb_follows; /* Follow set added by ANYCHAR and/or MBCSET + on demand. */ + int *mb_match_lens; /* Array of length reduced by ANYCHAR and/or + MBCSET. */ }; /* Some macros for user access to dfa internals. */ @@ -806,22 +830,6 @@ static int cur_mb_len = 1; /* Length of the multibyte representation of static mbstate_t mbs; /* Mbstate for mbrlen. */ static wchar_t wctok; /* Wide character representation of the current multibyte character. */ -static unsigned char *mblen_buf;/* Correspond to the input buffer in dfaexec. - Each element stores the number of remaining - bytes of the corresponding multibyte - character in the input string. A element's - value is 0 if the corresponding character is - single-byte. - e.g., input : 'a', , , - mblen_buf : 0, 3, 2, 1 - */ -static wchar_t *inputwcs; /* Wide character representation of the input - string in dfaexec. - The length of this array is the same as - the length of input string (char array). - inputstring[i] is a single-byte char, - or the first byte of a multibyte char; - inputwcs[i] is the codepoint. */ static unsigned char const *buf_begin; /* reference to begin in dfaexec. */ static unsigned char const *buf_end; /* reference to end in dfaexec. */ @@ -2907,14 +2915,12 @@ build_state_zero (struct dfa *d) #define SKIP_REMAINS_MB_IF_INITIAL_STATE(s, p) \ if (s == 0) \ { \ - while (inputwcs[p - buf_begin] == 0 \ - && mblen_buf[p - buf_begin] > 0 \ + while (d->inputwcs[p - buf_begin] == 0 \ + && d->mblen_buf[p - buf_begin] > 0 \ && (unsigned char const *) p < buf_end) \ ++p; \ if ((char *) p >= end) \ { \ - free (mblen_buf); \ - free (inputwcs); \ *end = saved_end; \ return NULL; \ } \ @@ -3008,8 +3014,8 @@ match_anychar (struct dfa *d, state_num s, position pos, size_t idx) wchar_t wc; int mbclen; - wc = inputwcs[idx]; - mbclen = (mblen_buf[idx] == 0) ? 1 : mblen_buf[idx]; + wc = d->inputwcs[idx]; + mbclen = (d->mblen_buf[idx] == 0) ? 1 : d->mblen_buf[idx]; /* Check syntax bits. */ if (wc == (wchar_t) eolbyte) @@ -3050,7 +3056,7 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) int context; wchar_t wc; /* Current referring character. */ - wc = inputwcs[idx]; + wc = d->inputwcs[idx]; /* Check syntax bits. */ if (wc == (wchar_t) eolbyte) @@ -3071,7 +3077,7 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) /* Assign the current referring operator to work_mbc. */ work_mbc = &(d->mbcsets[(d->multibyte_prop[pos.index]) >> 2]); match = !work_mbc->invert; - match_len = (mblen_buf[idx] == 0) ? 1 : mblen_buf[idx]; + match_len = (d->mblen_buf[idx] == 0) ? 1 : d->mblen_buf[idx]; /* Match in range 0-255? */ if (wc < NOTCHAR && work_mbc->cset != -1 @@ -3149,7 +3155,7 @@ check_matching_with_multibyte_ops (struct dfa *d, state_num s, size_t idx) size_t i; int *rarray; - MALLOC (rarray, d->states[s].mbps.nelem); + rarray = d->mb_match_lens; for (i = 0; i < d->states[s].mbps.nelem; ++i) { position pos = d->states[s].mbps.elems[i]; @@ -3189,7 +3195,7 @@ transit_state_consume_1char (struct dfa *d, state_num s, /* Calculate the length of the (single/multi byte) character to which p points. */ - *mbclen = (mblen_buf[*pp - buf_begin] == 0) ? 1 : mblen_buf[*pp - buf_begin]; + *mbclen = (d->mblen_buf[*pp - buf_begin] == 0) ? 1 : d->mblen_buf[*pp - buf_begin]; /* Calculate the state which can be reached from the state 's' by consuming '*mbclen' single bytes from the buffer. */ @@ -3218,9 +3224,6 @@ transit_state_consume_1char (struct dfa *d, state_num s, insert (d->follows[d->states[s].mbps.elems[i].index].elems[j], pps); } - if (match_lens == NULL && work_mbls != NULL) - free (work_mbls); - /* FIXME: this return value is always ignored. */ return rs; } @@ -3268,12 +3271,11 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) if (rs == TRANSIT_STATE_DONE) ++*pp; - free (match_lens); return s1; } /* This state has some operators which can match a multibyte character. */ - alloc_position_set (&follows, d->nleaves); + follows = *d->mb_follows; /* 'maxlen' may be longer than the length of a character, because it may not be a character but a (multi character) collating element. @@ -3281,7 +3283,7 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) 'maxlen' bytes. */ transit_state_consume_1char (d, s, pp, match_lens, &mbclen, &follows); - wc = inputwcs[*pp - mbclen - buf_begin]; + wc = d->inputwcs[*pp - mbclen - buf_begin]; s1 = state_index (d, &follows, wchar_context (wc)); realloc_trans_if_necessary (d, s1); @@ -3298,12 +3300,10 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) &follows); } - wc = inputwcs[*pp - mbclen - buf_begin]; + wc = d->inputwcs[*pp - mbclen - buf_begin]; s1 = state_index (d, &follows, wchar_context (wc)); realloc_trans_if_necessary (d, s1); } - free (match_lens); - free (follows.elems); return s1; } @@ -3311,7 +3311,7 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) /* Initialize mblen_buf and inputwcs with data from the next line. */ static void -prepare_wc_buf (const char *begin, const char *end) +prepare_wc_buf (struct dfa *d, const char *begin, const char *end) { #if MBS_SUPPORT unsigned char eol = eolbyte; @@ -3325,35 +3325,35 @@ prepare_wc_buf (const char *begin, const char *end) if (remain_bytes == 0) { remain_bytes - = mbrtowc (inputwcs + i, begin + i, end - begin - i + 1, &mbs); + = mbrtowc (d->inputwcs + i, begin + i, end - begin - i + 1, &mbs); if (remain_bytes < 1 || remain_bytes == (size_t) -1 || remain_bytes == (size_t) -2 - || (remain_bytes == 1 && inputwcs[i] == (wchar_t) begin[i])) + || (remain_bytes == 1 && d->inputwcs[i] == (wchar_t) begin[i])) { remain_bytes = 0; - inputwcs[i] = (wchar_t) begin[i]; - mblen_buf[i] = 0; + d->inputwcs[i] = (wchar_t) begin[i]; + d->mblen_buf[i] = 0; if (begin[i] == eol) break; } else { - mblen_buf[i] = remain_bytes; + d->mblen_buf[i] = remain_bytes; remain_bytes--; } } else { - mblen_buf[i] = remain_bytes; - inputwcs[i] = 0; + d->mblen_buf[i] = remain_bytes; + d->inputwcs[i] = 0; remain_bytes--; } } buf_end = (unsigned char *) (begin + i); - mblen_buf[i] = 0; - inputwcs[i] = 0; /* sentinel */ + d->mblen_buf[i] = 0; + d->inputwcs[i] = 0; /* sentinel */ #endif /* MBS_SUPPORT */ } @@ -3391,10 +3391,18 @@ dfaexec (struct dfa *d, char const *begin, char *end, if (d->mb_cur_max > 1) { - MALLOC (mblen_buf, end - begin + 2); - MALLOC (inputwcs, end - begin + 2); + static bool mb_alloc = false; + REALLOC_IF_NECESSARY (d->mblen_buf, d->nmblen_buf, end - begin + 2); + REALLOC_IF_NECESSARY (d->inputwcs, d->ninputwcs, end - begin + 2); memset (&mbs, 0, sizeof (mbstate_t)); - prepare_wc_buf ((const char *) p, end); + prepare_wc_buf (d, (const char *) p, end); + if (!mb_alloc) + { + MALLOC (d->mb_match_lens, d->nleaves); + MALLOC (d->mb_follows, 1); + alloc_position_set (d->mb_follows, d->nleaves); + mb_alloc = true; + } } for (;;) @@ -3421,8 +3429,6 @@ dfaexec (struct dfa *d, char const *begin, char *end, if (backref) { *backref = 1; - free (mblen_buf); - free (inputwcs); *end = saved_end; return (char *) p; } @@ -3455,11 +3461,6 @@ dfaexec (struct dfa *d, char const *begin, char *end, { if (backref) *backref = (d->states[s].backref != 0); - if (d->mb_cur_max > 1) - { - free (mblen_buf); - free (inputwcs); - } *end = saved_end; return (char *) p; } @@ -3484,17 +3485,12 @@ dfaexec (struct dfa *d, char const *begin, char *end, ++*count; if (d->mb_cur_max > 1) - prepare_wc_buf ((const char *) p, end); + prepare_wc_buf (d, (const char *) p, end); } /* Check if we've run off the end of the buffer. */ if ((char *) p > end) { - if (d->mb_cur_max > 1) - { - free (mblen_buf); - free (inputwcs); - } *end = saved_end; return NULL; } @@ -3545,6 +3541,12 @@ free_mbdata (struct dfa *d) free (d->mbcsets); d->mbcsets = NULL; d->nmbcsets = 0; + + free (d->inputwcs); + if (d->mb_follows != NULL) + free (d->mb_follows->elems); + free (d->mb_follows); + free (d->mb_match_lens); } /* Initialize the components of a dfa that the other routines don't -- 1.9.1 --------_531AAC47000000000212_MULTIPART_MIXED_-- From debbugs-submit-bounces@debbugs.gnu.org Fri Mar 28 13:35:08 2014 Received: (at 17070) by debbugs.gnu.org; 28 Mar 2014 17:35:08 +0000 Received: from localhost ([127.0.0.1]:55079 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WTagM-0002BN-Fe for submit@debbugs.gnu.org; Fri, 28 Mar 2014 13:35:07 -0400 Received: from pbsg501.nifty.com ([202.248.238.71]:29642) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WTagH-0002As-4N for 17070@debbugs.gnu.org; Fri, 28 Mar 2014 13:35:03 -0400 Received: from [10.120.1.56] (i118-21-128-66.s30.a048.ap.plala.or.jp [118.21.128.66]) (authenticated) by pbsg501.nifty.com with ESMTP id s2SHYwQF021883; Sat, 29 Mar 2014 02:34:58 +0900 X-Nifty-SrcIP: [118.21.128.66] Date: Sat, 29 Mar 2014 02:34:59 +0900 From: Norihiro Tanaka To: Norihiro Tanaka Subject: Re: bug#17070: [PATCH] grep: optimization of DFA by reuse of multi-byte buffers in non-UTF8 locales In-Reply-To: <20140323221557.0464.27F6AC2D@kcn.ne.jp> References: <20140323221557.0464.27F6AC2D@kcn.ne.jp> Message-Id: <20140329023458.063E.27F6AC2D@kcn.ne.jp> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_5335B11D000000000670_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.65.07 [ja] X-Spam-Score: -0.4 (/) X-Debbugs-Envelope-To: 17070 Cc: 17070@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.4 (/) --------_5335B11D000000000670_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit I rebased this patch, and add a bug fix to it. If `elems' of `follows' is re-allocated in transit_state(), It may cause a segfault. So, I changed so that don't copy d->mb_follows to `follows' variable. --------_5335B11D000000000670_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 RnJvbSA5MmFiZDgyZjBkMWQ0MmRhN2M2OGEzYmIzZDJkNjA3OTA3MzEyMGFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBXZWQsIDI2IE1hciAyMDE0IDIyOjE0OjE5ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gZ3Jl cDogb3B0aW1pemF0aW9uIG9mIERGQSBieSByZXVzZSBvZiBtdWx0aS1ieXRlIGJ1ZmZlcnMgaW4K IG5vbi1VVEY4IGxvY2FsZXMKCiogc3JjL2RmYS5jIChzdHJ1Y3QgZGZhKTogTmV3IG1lbWJlcnMg YG1ibGVuX2J1ZicsIGBubWJsZW5fYnVmJywKYGlucHV0d2NzJywgYG5pbnB1dHdjcycsIGBtYl9m b2xsb3dzJyBhbmQgYG1iX21hdGNoX2xlbnMnLgooU0tJUF9SRU1BSU5TX01CX0lGX0lOSVRJQUxf U1RBVEUpOiBVc2UgdGhlbSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCihtYXRjaF9hbnlj aGFyKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoobWF0Y2hfbWJfY2hh cnNldCk6IFVzZSB0aGVtIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKGNoZWNrX21hdGNo aW5nX3dpdGhfbXVsdGlieXRlX29wcyk6IFVzZSBpdCBpbnN0ZWFkIG9mIG5ldyBhbGxvY2F0aW9u LgoodHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBnbG9i YWwgdmFyaWFibGVzLgoodHJhbnNpdF9zdGF0ZSk6IFVzZSB0aGVtIGluc3RlYWQgb2YgZ2xvYmFs IHZhcmlhYmxlcy4KKHByZXBhcmVfd2NfYnVmKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBnbG9iYWwg dmFyaWFibGVzLgooZGZhZXhlYyk6IEluaXRpYWxpemF0aW9ucyBvZiBuZXcgbWVtYmVycy4KKGZy ZWVfbWJkYXRhKTogTWVtb3J5IERlYWxsb2NhdGlvbnMgZm9yIG5ldyBtZW1iZXJzLgotLS0KIHNy Yy9kZmEuYyB8IDEzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDY1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9kZmEuYyBiL3NyYy9kZmEuYwppbmRleCA0 ZWQyMTg5Li4zOWZmMTk3IDEwMDY0NAotLS0gYS9zcmMvZGZhLmMKKysrIGIvc3JjL2RmYS5jCkBA IC00MzYsNiArNDM2LDMwIEBAIHN0cnVjdCBkZmEKICAgc3RydWN0IGRmYW11c3QgKm11c3RzOyAg ICAgICAgLyogTGlzdCBvZiBzdHJpbmdzLCBhdCBsZWFzdCBvbmUgb2Ygd2hpY2gKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMga25vd24gdG8gYXBwZWFyIGluIGFueSByLmUu IG1hdGNoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZmEuICAq LworICB1bnNpZ25lZCBjaGFyICptYmxlbl9idWY7ICAgICAvKiBDb3JyZXNwb25kIHRvIHRoZSBp bnB1dCBidWZmZXIgaW4gZGZhZXhlYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRWFjaCBlbGVtZW50IHN0b3JlcyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBtdWx0 aWJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRo ZSBpbnB1dCBzdHJpbmcuICBBIGVsZW1lbnQncworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YWx1ZSBpcyAwIGlmIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBpcworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGUtYnl0ZS4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZS5nLiwgaW5wdXQgOiAnYScsIDxtYigwKT4sIDxtYigx KT4sIDxtYigyKT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJsZW5fYnVm ICAgOiAgMCwgICAgICAgMywgICAgICAgMiwgICAgICAgMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KKyAgc2l6ZV90IG5tYmxlbl9idWY7ICAgICAgICAgICAgLyogTGVuZ3Ro IG9mIHRoZSBtYmxlbiBidWZmZXIgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFsbG9jYXRlZC4gICovCisgIHdjaGFyX3QgKmlucHV0d2NzOyAgICAgICAgICAg IC8qIFdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW4gZGZhZXhlYy4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5IGlzIHRoZSBz YW1lIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsZW5ndGggb2Yg aW5wdXQgc3RyaW5nIChjaGFyIGFycmF5KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRzdHJpbmdbaV0gaXMgYSBzaW5nbGUtYnl0ZSBjaGFyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZSBj aGFyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHdjc1tpXSBpcyB0 aGUgY29kZXBvaW50LiAgKi8KKyAgc2l6ZV90IG5pbnB1dHdjczsgICAgICAgICAgICAgLyogTGVu Z3RoIG9mIHRoZSBpbnB1dCB3aWRlIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3VycmVudGx5IGFsbG9jYXRlZC4gICovCisgIHBvc2l0aW9uX3NldCAqbWJf Zm9sbG93czsgICAgIC8qIEZvbGxvdyBzZXQgYWRkZWQgYnkgQU5ZQ0hBUiBhbmQvb3IgTUJDU0VU CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGRlbWFuZC4gICovCisgIGlu dCAqbWJfbWF0Y2hfbGVuczsgICAgICAgICAgIC8qIEFycmF5IG9mIGxlbmd0aCByZWR1Y2VkIGJ5 IEFOWUNIQVIgYW5kL29yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CQ1NF VC4gICovCiB9OwogCiAvKiBTb21lIG1hY3JvcyBmb3IgdXNlciBhY2Nlc3MgdG8gZGZhIGludGVy bmFscy4gICovCkBAIC04NzYsMjIgKzkwMCw2IEBAIHN0YXRpYyBpbnQgY3VyX21iX2xlbiA9IDE7 ICAgICAgLyogTGVuZ3RoIG9mIHRoZSBtdWx0aWJ5dGUgcmVwcmVzZW50YXRpb24gb2YKIHN0YXRp YyBtYnN0YXRlX3QgbWJzOyAgICAgICAgICAgLyogbWJzdGF0ZSBmb3IgbWJydG93Yy4gICovCiBz dGF0aWMgd2NoYXJfdCB3Y3RvazsgICAgICAgICAgIC8qIFdpZGUgY2hhcmFjdGVyIHJlcHJlc2Vu dGF0aW9uIG9mIHRoZSBjdXJyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgKm1ibGVuX2J1 ZjsvKiBDb3JyZXNwb25kIHRvIHRoZSBpbnB1dCBidWZmZXIgaW4gZGZhZXhlYy4KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBlbGVtZW50IHN0b3JlcyB0aGUgbnVtYmVy IG9mIHJlbWFpbmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyBv ZiB0aGUgY29ycmVzcG9uZGluZyBtdWx0aWJ5dGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBzdHJpbmcuICBBIGVsZW1lbnQncwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyAwIGlmIHRoZSBjb3JyZXNw b25kaW5nIGNoYXJhY3RlciBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aW5nbGUtYnl0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nLiwgaW5w dXQgOiAnYScsIDxtYigwKT4sIDxtYigxKT4sIDxtYigyKT4KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWJsZW5fYnVmICAgOiAgMCwgICAgICAgMywgICAgICAgMiwgICAgICAg MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXN0YXRpYyB3Y2hhcl90ICpp bnB1dHdjczsgICAgICAgLyogV2lkZSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlu cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBpbiBkZmFleGVj LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoaXMg YXJyYXkgaXMgdGhlIHNhbWUgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGhlIGxlbmd0aCBvZiBpbnB1dCBzdHJpbmcgKGNoYXIgYXJyYXkpLgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dHN0cmluZ1tpXSBpcyBhIHNpbmdsZS1ieXRlIGNoYXIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaXJzdCBieXRlIG9m IGEgbXVsdGlieXRlIGNoYXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu cHV0d2NzW2ldIGlzIHRoZSBjb2RlcG9pbnQuICAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgY29u c3QgKmJ1Zl9iZWdpbjsgIC8qIHJlZmVyZW5jZSB0byBiZWdpbiBpbiBkZmFleGVjLiAgKi8KIHN0 YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0ICpidWZfZW5kOyAgICAvKiByZWZlcmVuY2UgdG8gZW5k IGluIGRmYWV4ZWMuICAqLwogCkBAIC0yOTU5LDE0ICsyOTY3LDEyIEBAIGJ1aWxkX3N0YXRlX3pl cm8gKHN0cnVjdCBkZmEgKmQpCiAjZGVmaW5lIFNLSVBfUkVNQUlOU19NQl9JRl9JTklUSUFMX1NU QVRFKHMsIHApCQlcCiAgIGlmIChzID09IDApCQkJCQkJXAogICAgIHsJCQkJCQkJXAotICAgICAg d2hpbGUgKGlucHV0d2NzW3AgLSBidWZfYmVnaW5dID09IDAJCVwKLSAgICAgICAgICAgICYmIG1i bGVuX2J1ZltwIC0gYnVmX2JlZ2luXSA+IDAJCVwKKyAgICAgIHdoaWxlIChkLT5pbnB1dHdjc1tw IC0gYnVmX2JlZ2luXSA9PSAwCQlcCisgICAgICAgICAgICAmJiBkLT5tYmxlbl9idWZbcCAtIGJ1 Zl9iZWdpbl0gPiAwCQlcCiAgICAgICAgICAgICAmJiAodW5zaWduZWQgY2hhciBjb25zdCAqKSBw IDwgYnVmX2VuZCkJXAogICAgICAgICArK3A7CQkJCQkJXAogICAgICAgaWYgKChjaGFyICopIHAg Pj0gZW5kKQkJCQlcCiAgICAgICAgIHsJCQkJCQlcCi0gICAgICAgICAgZnJlZSAobWJsZW5fYnVm KTsJCQkJXAotICAgICAgICAgIGZyZWUgKGlucHV0d2NzKTsJCQkJXAogICAgICAgICAgICplbmQg PSBzYXZlZF9lbmQ7CQkJCVwKICAgICAgICAgICByZXR1cm4gTlVMTDsJCQkJCVwKICAgICAgICAg fQkJCQkJCVwKQEAgLTMwNjAsOCArMzA2Niw4IEBAIG1hdGNoX2FueWNoYXIgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLCBwb3NpdGlvbiBwb3MsIHNpemVfdCBpZHgpCiAgIHdjaGFyX3Qgd2M7 CiAgIGludCBtYmNsZW47CiAKLSAgd2MgPSBpbnB1dHdjc1tpZHhdOwotICBtYmNsZW4gPSAobWJs ZW5fYnVmW2lkeF0gPT0gMCkgPyAxIDogbWJsZW5fYnVmW2lkeF07CisgIHdjID0gZC0+aW5wdXR3 Y3NbaWR4XTsKKyAgbWJjbGVuID0gKGQtPm1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IGQtPm1i bGVuX2J1ZltpZHhdOwogCiAgIC8qIENoZWNrIHN5bnRheCBiaXRzLiAgKi8KICAgaWYgKHdjID09 ICh3Y2hhcl90KSBlb2xieXRlKQpAQCAtMzEwMiw3ICszMTA4LDcgQEAgbWF0Y2hfbWJfY2hhcnNl dCAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHBvc2l0aW9uIHBvcywgc2l6ZV90IGlkeCkK ICAgaW50IGNvbnRleHQ7CiAgIHdjaGFyX3Qgd2M7ICAgICAgICAgICAgICAgICAgIC8qIEN1cnJl bnQgcmVmZXJyaW5nIGNoYXJhY3Rlci4gICovCiAKLSAgd2MgPSBpbnB1dHdjc1tpZHhdOworICB3 YyA9IGQtPmlucHV0d2NzW2lkeF07CiAKICAgLyogQ2hlY2sgc3ludGF4IGJpdHMuICAqLwogICBp ZiAod2MgPT0gKHdjaGFyX3QpIGVvbGJ5dGUpCkBAIC0zMTIzLDcgKzMxMjksNyBAQCBtYXRjaF9t Yl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXpl X3QgaWR4KQogICAvKiBBc3NpZ24gdGhlIGN1cnJlbnQgcmVmZXJyaW5nIG9wZXJhdG9yIHRvIHdv cmtfbWJjLiAgKi8KICAgd29ya19tYmMgPSAmKGQtPm1iY3NldHNbKGQtPm11bHRpYnl0ZV9wcm9w W3Bvcy5pbmRleF0pID4+IDJdKTsKICAgbWF0Y2ggPSAhd29ya19tYmMtPmludmVydDsKLSAgbWF0 Y2hfbGVuID0gKG1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IG1ibGVuX2J1ZltpZHhdOworICBt YXRjaF9sZW4gPSAoZC0+bWJsZW5fYnVmW2lkeF0gPT0gMCkgPyAxIDogZC0+bWJsZW5fYnVmW2lk eF07CiAKICAgLyogTWF0Y2ggaW4gcmFuZ2UgMC0yNTU/ICAqLwogICBpZiAod2MgPCBOT1RDSEFS ICYmIHdvcmtfbWJjLT5jc2V0ICE9IC0xCkBAIC0zMjAxLDcgKzMyMDcsNyBAQCBjaGVja19tYXRj aGluZ193aXRoX211bHRpYnl0ZV9vcHMgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBzaXpl X3QgaWR4KQogICBzaXplX3QgaTsKICAgaW50ICpyYXJyYXk7CiAKLSAgTUFMTE9DIChyYXJyYXks IGQtPnN0YXRlc1tzXS5tYnBzLm5lbGVtKTsKKyAgcmFycmF5ID0gZC0+bWJfbWF0Y2hfbGVuczsK ICAgZm9yIChpID0gMDsgaSA8IGQtPnN0YXRlc1tzXS5tYnBzLm5lbGVtOyArK2kpCiAgICAgewog ICAgICAgcG9zaXRpb24gcG9zID0gZC0+c3RhdGVzW3NdLm1icHMuZWxlbXNbaV07CkBAIC0zMjMx LDcgKzMyMzcsNyBAQCBjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKHN0cnVjdCBk ZmEgKmQsIHN0YXRlX251bSBzLCBzaXplX3QgaWR4KQogc3RhdGljIHN0YXR1c190cmFuc2l0X3N0 YXRlCiB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251 bSBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICoq cHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF0Y2hfbGVucywgaW50ICpt YmNsZW4sIHBvc2l0aW9uX3NldCAqIHBwcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICptYXRjaF9sZW5zLCBpbnQgKm1iY2xlbikKIHsKICAgc2l6ZV90IGksIGo7CiAgIGludCBr OwpAQCAtMzI0MSw3ICszMjQ3LDcgQEAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1 Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywKIAogICAvKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0 aGUgKHNpbmdsZS9tdWx0aSBieXRlKSBjaGFyYWN0ZXIKICAgICAgdG8gd2hpY2ggcCBwb2ludHMu ICAqLwotICAqbWJjbGVuID0gKG1ibGVuX2J1ZlsqcHAgLSBidWZfYmVnaW5dID09IDApID8gMSA6 IG1ibGVuX2J1ZlsqcHAgLSBidWZfYmVnaW5dOworICAqbWJjbGVuID0gKGQtPm1ibGVuX2J1Zlsq cHAgLSBidWZfYmVnaW5dID09IDApID8gMSA6IGQtPm1ibGVuX2J1ZlsqcHAgLSBidWZfYmVnaW5d OwogCiAgIC8qIENhbGN1bGF0ZSB0aGUgc3RhdGUgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB0 aGUgc3RhdGUgJ3MnIGJ5CiAgICAgIGNvbnN1bWluZyAnKm1iY2xlbicgc2luZ2xlIGJ5dGVzIGZy b20gdGhlIGJ1ZmZlci4gICovCkBAIC0zMjUxLDggKzMyNTcsOCBAQCB0cmFuc2l0X3N0YXRlX2Nv bnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLAogICAgICAgczIgPSBzMTsK ICAgICAgIHJzID0gdHJhbnNpdF9zdGF0ZV9zaW5nbGVieXRlIChkLCBzMiwgKCpwcCkrKywgJnMx KTsKICAgICB9Ci0gIC8qIENvcHkgdGhlIHBvc2l0aW9ucyBjb250YWluZWQgYnkgJ3MxJyB0byB0 aGUgc2V0ICdwcHMnLiAgKi8KLSAgY29weSAoJihkLT5zdGF0ZXNbczFdLmVsZW1zKSwgcHBzKTsK KyAgLyogQ29weSB0aGUgcG9zaXRpb25zIGNvbnRhaW5lZCBieSAnczEnIHRvIHRoZSBzZXQgJ2Qt Pm1iX2ZvbGxvd3MnLiAgKi8KKyAgY29weSAoJihkLT5zdGF0ZXNbczFdLmVsZW1zKSwgZC0+bWJf Zm9sbG93cyk7CiAKICAgLyogQ2hlY2sgKGlucHV0KSBtYXRjaF9sZW5zLCBhbmQgaW5pdGlhbGl6 ZSBpZiBpdCBpcyBOVUxMLiAgKi8KICAgaWYgKG1hdGNoX2xlbnMgPT0gTlVMTCAmJiBkLT5zdGF0 ZXNbc10ubWJwcy5uZWxlbSAhPSAwKQpAQCAtMzI2NywxMiArMzI3MywxMCBAQCB0cmFuc2l0X3N0 YXRlX2NvbnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLAogICAgICAgaWYg KHdvcmtfbWJsc1tpXSA9PSAqbWJjbGVuKQogICAgICAgICBmb3IgKGogPSAwOyBqIDwgZC0+Zm9s bG93c1tkLT5zdGF0ZXNbc10ubWJwcy5lbGVtc1tpXS5pbmRleF0ubmVsZW07CiAgICAgICAgICAg ICAgaisrKQotICAgICAgICAgIGluc2VydCAoZC0+Zm9sbG93c1tkLT5zdGF0ZXNbc10ubWJwcy5l bGVtc1tpXS5pbmRleF0uZWxlbXNbal0sIHBwcyk7CisgICAgICAgICAgaW5zZXJ0IChkLT5mb2xs b3dzW2QtPnN0YXRlc1tzXS5tYnBzLmVsZW1zW2ldLmluZGV4XS5lbGVtc1tqXSwKKyAgICAgICAg ICAgIGQtPm1iX2ZvbGxvd3MpOwogICAgIH0KIAotICBpZiAobWF0Y2hfbGVucyA9PSBOVUxMICYm IHdvcmtfbWJscyAhPSBOVUxMKQotICAgIGZyZWUgKHdvcmtfbWJscyk7Ci0KICAgLyogRklYTUU6 IHRoaXMgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBpZ25vcmVkLiAgKi8KICAgcmV0dXJuIHJzOwog fQpAQCAtMzI4OSw3ICszMjkzLDYgQEAgdHJhbnNpdF9zdGF0ZSAoc3RydWN0IGRmYSAqZCwgc3Rh dGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCkKICAgc2l6ZV90IGksIGo7CiAgIGlu dCAqbWF0Y2hfbGVucyA9IE5VTEw7CiAgIHNpemVfdCBuZWxlbSA9IGQtPnN0YXRlc1tzXS5tYnBz Lm5lbGVtOyAgICAgICAvKiBKdXN0IGEgYWxpYXMuICAqLwotICBwb3NpdGlvbl9zZXQgZm9sbG93 czsKICAgdW5zaWduZWQgY2hhciBjb25zdCAqcDEgPSAqcHA7CiAgIHdjaGFyX3Qgd2M7CiAKQEAg LTMzMjAsMjYgKzMzMjMsMjUgQEAgdHJhbnNpdF9zdGF0ZSAoc3RydWN0IGRmYSAqZCwgc3RhdGVf bnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCkKICAgICAgIGlmIChycyA9PSBUUkFOU0lU X1NUQVRFX0RPTkUpCiAgICAgICAgICsrKnBwOwogCi0gICAgICBmcmVlIChtYXRjaF9sZW5zKTsK ICAgICAgIHJldHVybiBzMTsKICAgICB9CiAKICAgLyogVGhpcyBzdGF0ZSBoYXMgc29tZSBvcGVy YXRvcnMgd2hpY2ggY2FuIG1hdGNoIGEgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCi0gIGFsbG9j X3Bvc2l0aW9uX3NldCAoJmZvbGxvd3MsIGQtPm5sZWF2ZXMpOworICBkLT5tYl9mb2xsb3dzLT5u ZWxlbSA9IDA7CiAKICAgLyogJ21heGxlbicgbWF5IGJlIGxvbmdlciB0aGFuIHRoZSBsZW5ndGgg b2YgYSBjaGFyYWN0ZXIsIGJlY2F1c2UgaXQgbWF5CiAgICAgIG5vdCBiZSBhIGNoYXJhY3RlciBi dXQgYSAobXVsdGkgY2hhcmFjdGVyKSBjb2xsYXRpbmcgZWxlbWVudC4KICAgICAgV2UgZW51bWVy YXRlIGFsbCBvZiB0aGUgcG9zaXRpb25zIHdoaWNoICdzJyBjYW4gcmVhY2ggYnkgY29uc3VtaW5n CiAgICAgICdtYXhsZW4nIGJ5dGVzLiAgKi8KLSAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFy IChkLCBzLCBwcCwgbWF0Y2hfbGVucywgJm1iY2xlbiwgJmZvbGxvd3MpOworICB0cmFuc2l0X3N0 YXRlX2NvbnN1bWVfMWNoYXIgKGQsIHMsIHBwLCBtYXRjaF9sZW5zLCAmbWJjbGVuKTsKIAotICB3 YyA9IGlucHV0d2NzWypwcCAtIG1iY2xlbiAtIGJ1Zl9iZWdpbl07Ci0gIHMxID0gc3RhdGVfaW5k ZXggKGQsICZmb2xsb3dzLCB3Y2hhcl9jb250ZXh0ICh3YykpOworICB3YyA9IGQtPmlucHV0d2Nz WypwcCAtIG1iY2xlbiAtIGJ1Zl9iZWdpbl07CisgIHMxID0gc3RhdGVfaW5kZXggKGQsIGQtPm1i X2ZvbGxvd3MsIHdjaGFyX2NvbnRleHQgKHdjKSk7CiAgIHJlYWxsb2NfdHJhbnNfaWZfbmVjZXNz YXJ5IChkLCBzMSk7CiAKICAgd2hpbGUgKCpwcCAtIHAxIDwgbWF4bGVuKQogICAgIHsKLSAgICAg IHRyYW5zaXRfc3RhdGVfY29uc3VtZV8xY2hhciAoZCwgczEsIHBwLCBOVUxMLCAmbWJjbGVuLCAm Zm9sbG93cyk7CisgICAgICB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKGQsIHMxLCBwcCwg TlVMTCwgJm1iY2xlbik7CiAKICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZWxlbTsgaSsrKQogICAg ICAgICB7CkBAIC0zMzQ3LDE1ICszMzQ5LDEzIEBAIHRyYW5zaXRfc3RhdGUgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICoqcHApCiAgICAgICAgICAgICBm b3IgKGogPSAwOwogICAgICAgICAgICAgICAgICBqIDwgZC0+Zm9sbG93c1tkLT5zdGF0ZXNbczFd Lm1icHMuZWxlbXNbaV0uaW5kZXhdLm5lbGVtOyBqKyspCiAgICAgICAgICAgICAgIGluc2VydCAo ZC0+Zm9sbG93c1tkLT5zdGF0ZXNbczFdLm1icHMuZWxlbXNbaV0uaW5kZXhdLmVsZW1zW2pdLAot ICAgICAgICAgICAgICAgICAgICAgICZmb2xsb3dzKTsKKyAgICAgICAgICAgICAgICAgICAgICBk LT5tYl9mb2xsb3dzKTsKICAgICAgICAgfQogCi0gICAgICB3YyA9IGlucHV0d2NzWypwcCAtIG1i Y2xlbiAtIGJ1Zl9iZWdpbl07Ci0gICAgICBzMSA9IHN0YXRlX2luZGV4IChkLCAmZm9sbG93cywg d2NoYXJfY29udGV4dCAod2MpKTsKKyAgICAgIHdjID0gZC0+aW5wdXR3Y3NbKnBwIC0gbWJjbGVu IC0gYnVmX2JlZ2luXTsKKyAgICAgIHMxID0gc3RhdGVfaW5kZXggKGQsIGQtPm1iX2ZvbGxvd3Ms IHdjaGFyX2NvbnRleHQgKHdjKSk7CiAgICAgICByZWFsbG9jX3RyYW5zX2lmX25lY2Vzc2FyeSAo ZCwgczEpOwogICAgIH0KLSAgZnJlZSAobWF0Y2hfbGVucyk7Ci0gIGZyZWUgKGZvbGxvd3MuZWxl bXMpOwogICByZXR1cm4gczE7CiB9CiAKQEAgLTMzNzQsMjEgKzMzNzQsMjEgQEAgcHJlcGFyZV93 Y19idWYgKHN0cnVjdCBkZmEgKmQsIGNvbnN0IGNoYXIgKmJlZ2luLCBjb25zdCBjaGFyICplbmQp CiAKICAgZm9yIChpID0gMDsgaSA8IGlsaW07IGkrKykKICAgICB7Ci0gICAgICBzaXplX3QgbmJ5 dGVzID0gbWJzX3RvX3djaGFyIChkLCBpbnB1dHdjcyArIGksIGJlZ2luICsgaSwgaWxpbSAtIGks ICZtYnMpOwotICAgICAgbWJsZW5fYnVmW2ldID0gbmJ5dGVzIC0gKG5ieXRlcyA9PSAxKTsKKyAg ICAgIHNpemVfdCBuYnl0ZXMgPSBtYnNfdG9fd2NoYXIgKGQsIGQtPmlucHV0d2NzICsgaSwgYmVn aW4gKyBpLCBpbGltIC0gaSwgJm1icyk7CisgICAgICBkLT5tYmxlbl9idWZbaV0gPSBuYnl0ZXMg LSAobmJ5dGVzID09IDEpOwogICAgICAgaWYgKGJlZ2luW2ldID09IGVvbCkKICAgICAgICAgYnJl YWs7CiAgICAgICB3aGlsZSAoLS1uYnl0ZXMgIT0gMCkKICAgICAgICAgewogICAgICAgICAgIGkr KzsKLSAgICAgICAgICBtYmxlbl9idWZbaV0gPSBuYnl0ZXM7Ci0gICAgICAgICAgaW5wdXR3Y3Nb aV0gPSAwOworICAgICAgICAgIGQtPm1ibGVuX2J1ZltpXSA9IG5ieXRlczsKKyAgICAgICAgICBk LT5pbnB1dHdjc1tpXSA9IDA7CiAgICAgICAgIH0KICAgICB9CiAKICAgYnVmX2VuZCA9ICh1bnNp Z25lZCBjaGFyICopIChiZWdpbiArIGkpOwotICBtYmxlbl9idWZbaV0gPSAwOwotICBpbnB1dHdj c1tpXSA9IDA7ICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICBkLT5tYmxlbl9idWZbaV0g PSAwOworICBkLT5pbnB1dHdjc1tpXSA9IDA7ICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwog I2VuZGlmIC8qIE1CU19TVVBQT1JUICovCiB9CiAKQEAgLTM0MjYsMTAgKzM0MjYsMTggQEAgZGZh ZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4sIGNoYXIgKmVuZCwKIAogICBp ZiAoZC0+bWJfY3VyX21heCA+IDEpCiAgICAgewotICAgICAgTUFMTE9DIChtYmxlbl9idWYsIGVu ZCAtIGJlZ2luICsgMik7Ci0gICAgICBNQUxMT0MgKGlucHV0d2NzLCBlbmQgLSBiZWdpbiArIDIp OworICAgICAgc3RhdGljIGJvb2wgbWJfYWxsb2MgPSBmYWxzZTsKKyAgICAgIFJFQUxMT0NfSUZf TkVDRVNTQVJZIChkLT5tYmxlbl9idWYsIGQtPm5tYmxlbl9idWYsIGVuZCAtIGJlZ2luICsgMik7 CisgICAgICBSRUFMTE9DX0lGX05FQ0VTU0FSWSAoZC0+aW5wdXR3Y3MsIGQtPm5pbnB1dHdjcywg ZW5kIC0gYmVnaW4gKyAyKTsKICAgICAgIG1lbXNldCAoJm1icywgMCwgc2l6ZW9mIChtYnN0YXRl X3QpKTsKICAgICAgIHByZXBhcmVfd2NfYnVmIChkLCAoY29uc3QgY2hhciAqKSBwLCBlbmQpOwor ICAgICAgaWYgKCFtYl9hbGxvYykKKyAgICAgICAgeworICAgICAgICAgIE1BTExPQyAoZC0+bWJf bWF0Y2hfbGVucywgZC0+bmxlYXZlcyk7CisgICAgICAgICAgTUFMTE9DIChkLT5tYl9mb2xsb3dz LCAxKTsKKyAgICAgICAgICBhbGxvY19wb3NpdGlvbl9zZXQgKGQtPm1iX2ZvbGxvd3MsIGQtPm5s ZWF2ZXMpOworICAgICAgICAgIG1iX2FsbG9jID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KIAog ICBmb3IgKDs7KQpAQCAtMzQ1Niw4ICszNDY0LDYgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwg Y2hhciBjb25zdCAqYmVnaW4sIGNoYXIgKmVuZCwKICAgICAgICAgICAgICAgaWYgKGJhY2tyZWYp CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgKmJhY2tyZWYgPSAxOwotICAg ICAgICAgICAgICAgICAgZnJlZSAobWJsZW5fYnVmKTsKLSAgICAgICAgICAgICAgICAgIGZyZWUg KGlucHV0d2NzKTsKICAgICAgICAgICAgICAgICAgICplbmQgPSBzYXZlZF9lbmQ7CiAgICAgICAg ICAgICAgICAgICByZXR1cm4gKGNoYXIgKikgcDsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDkw LDExICszNDk2LDYgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4s IGNoYXIgKmVuZCwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKGJhY2tyZWYpCiAg ICAgICAgICAgICAgICAgKmJhY2tyZWYgPSAoZC0+c3RhdGVzW3NdLmJhY2tyZWYgIT0gMCk7Ci0g ICAgICAgICAgICAgIGlmIChkLT5tYl9jdXJfbWF4ID4gMSkKLSAgICAgICAgICAgICAgICB7Ci0g ICAgICAgICAgICAgICAgICBmcmVlIChtYmxlbl9idWYpOwotICAgICAgICAgICAgICAgICAgZnJl ZSAoaW5wdXR3Y3MpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgKmVuZCA9IHNh dmVkX2VuZDsKICAgICAgICAgICAgICAgcmV0dXJuIChjaGFyICopIHA7CiAgICAgICAgICAgICB9 CkBAIC0zNTI1LDExICszNTI2LDYgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25z dCAqYmVnaW4sIGNoYXIgKmVuZCwKICAgICAgIC8qIENoZWNrIGlmIHdlJ3ZlIHJ1biBvZmYgdGhl IGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KICAgICAgIGlmICgoY2hhciAqKSBwID4gZW5kKQogICAg ICAgICB7Ci0gICAgICAgICAgaWYgKGQtPm1iX2N1cl9tYXggPiAxKQotICAgICAgICAgICAgewot ICAgICAgICAgICAgICBmcmVlIChtYmxlbl9idWYpOwotICAgICAgICAgICAgICBmcmVlIChpbnB1 dHdjcyk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgKmVuZCA9IHNhdmVkX2VuZDsKICAgICAg ICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMzU4MCw2ICszNTc2LDEzIEBAIGZyZWVf bWJkYXRhIChzdHJ1Y3QgZGZhICpkKQogICBmcmVlIChkLT5tYmNzZXRzKTsKICAgZC0+bWJjc2V0 cyA9IE5VTEw7CiAgIGQtPm5tYmNzZXRzID0gMDsKKworICBmcmVlIChkLT5tYmxlbl9idWYpOwor ICBmcmVlIChkLT5pbnB1dHdjcyk7CisgIGlmIChkLT5tYl9mb2xsb3dzICE9IE5VTEwpCisgICAg ZnJlZSAoZC0+bWJfZm9sbG93cy0+ZWxlbXMpOworICBmcmVlIChkLT5tYl9mb2xsb3dzKTsKKyAg ZnJlZSAoZC0+bWJfbWF0Y2hfbGVucyk7CiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIGNvbXBvbmVu dHMgb2YgYSBkZmEgdGhhdCB0aGUgb3RoZXIgcm91dGluZXMgZG9uJ3QKLS0gCjEuOS4xCgo= --------_5335B11D000000000670_MULTIPART_MIXED_-- From debbugs-submit-bounces@debbugs.gnu.org Sat Mar 29 18:11:44 2014 Received: (at 17070) by debbugs.gnu.org; 29 Mar 2014 22:11:45 +0000 Received: from localhost ([127.0.0.1]:56502 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WU1Ta-0000Lb-7D for submit@debbugs.gnu.org; Sat, 29 Mar 2014 18:11:44 -0400 Received: from pbsg501.nifty.com ([202.248.238.71]:28137) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WU1TT-0000LL-1c for 17070@debbugs.gnu.org; Sat, 29 Mar 2014 18:11:40 -0400 Received: from [10.120.1.39] (i118-21-128-66.s30.a048.ap.plala.or.jp [118.21.128.66]) (authenticated) by pbsg501.nifty.com with ESMTP id s2TMBKGR022743 for <17070@debbugs.gnu.org>; Sun, 30 Mar 2014 07:11:20 +0900 X-Nifty-SrcIP: [118.21.128.66] Date: Sun, 30 Mar 2014 07:11:22 +0900 From: Norihiro Tanaka To: 17070@debbugs.gnu.org Subject: bug#17070: [PATCH] grep: optimization of DFA by reuse of multi-byte buffers in non-UTF8 locales In-Reply-To: <20140329023458.063E.27F6AC2D@kcn.ne.jp> References: <20140323221557.0464.27F6AC2D@kcn.ne.jp> <20140329023458.063E.27F6AC2D@kcn.ne.jp> Message-Id: <20140330071122.3F2D.27F6AC2D@kcn.ne.jp> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_5337434D000000003F21_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.65.07 [ja] X-Spam-Score: 2.3 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: I added further improvement to previous patch. If dfaexec() runs in non-UTF8 locales, length and wide character representation are checked for all characters of a line in a input string. However, if matched early in the line, results for remaining characters are wasted. [...] Content analysis details: (2.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [202.248.238.71 listed in psbl.surriel.com] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.4 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain X-Debbugs-Envelope-To: 17070 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.3 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: I added further improvement to previous patch. If dfaexec() runs in non-UTF8 locales, length and wide character representation are checked for all characters of a line in a input string. However, if matched early in the line, results for remaining characters are wasted. [...] Content analysis details: (2.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [202.248.238.71 listed in psbl.surriel.com] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.4 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain --------_5337434D000000003F21_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit I added further improvement to previous patch. If dfaexec() runs in non-UTF8 locales, length and wide character representation are checked for all characters of a line in a input string. However, if matched early in the line, results for remaining characters are wasted. The new patch doesn't reuse both `mblen_buf' and `inputwcs' but stops using them, and checks multibyte characters on demand. It enables to accomplish to speed-up for matched early and reduce required memories. Norihiro --------_5337434D000000003F21_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 RnJvbSA2ZGU0MTM3YmY4YzVjMjM3Y2MzNWMyZWVjZjZmZTE0OWRiNDc4YmNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBXZWQsIDI2IE1hciAyMDE0IDIyOjE0OjE5ICswOTAwClN1YmplY3Q6IFtQQVRDSCAxLzJd IGdyZXA6IG9wdGltaXphdGlvbiBvZiBERkEgYnkgcmV1c2Ugb2YgbXVsdGktYnl0ZSBidWZmZXJz CiBpbiBub24tVVRGOCBsb2NhbGVzCgoqIHNyYy9kZmEuYyAoc3RydWN0IGRmYSk6IE5ldyBtZW1i ZXJzIGBtYmxlbl9idWYnLCBgbm1ibGVuX2J1ZicsCmBpbnB1dHdjcycsIGBuaW5wdXR3Y3MnLCBg bWJfZm9sbG93cycgYW5kIGBtYl9tYXRjaF9sZW5zJy4KKFNLSVBfUkVNQUlOU19NQl9JRl9JTklU SUFMX1NUQVRFKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoobWF0Y2hf YW55Y2hhcik6IFVzZSB0aGVtIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKG1hdGNoX21i X2NoYXJzZXQpOiBVc2UgdGhlbSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCihjaGVja19t YXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMpOiBVc2UgaXQgaW5zdGVhZCBvZiBuZXcgYWxsb2Nh dGlvbi4KKHRyYW5zaXRfc3RhdGVfY29uc3VtZV8xY2hhcik6IFVzZSB0aGVtIGluc3RlYWQgb2Yg Z2xvYmFsIHZhcmlhYmxlcy4KKHRyYW5zaXRfc3RhdGUpOiBVc2UgdGhlbSBpbnN0ZWFkIG9mIGds b2JhbCB2YXJpYWJsZXMuCihwcmVwYXJlX3djX2J1Zik6IFVzZSB0aGVtIGluc3RlYWQgb2YgZ2xv YmFsIHZhcmlhYmxlcy4KKGRmYWV4ZWMpOiBJbml0aWFsaXphdGlvbnMgb2YgbmV3IG1lbWJlcnMu CihmcmVlX21iZGF0YSk6IE1lbW9yeSBEZWFsbG9jYXRpb25zIGZvciBuZXcgbWVtYmVycy4KLS0t CiBzcmMvZGZhLmMgfCAxMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCsp LCA2NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvZGZhLmMgYi9zcmMvZGZhLmMKaW5k ZXggYjIyZmU5Ny4uYWRmZTQ1MCAxMDA2NDQKLS0tIGEvc3JjL2RmYS5jCisrKyBiL3NyYy9kZmEu YwpAQCAtNDM2LDYgKzQzNiwzMCBAQCBzdHJ1Y3QgZGZhCiAgIHN0cnVjdCBkZmFtdXN0ICptdXN0 czsgICAgICAgIC8qIExpc3Qgb2Ygc3RyaW5ncywgYXQgbGVhc3Qgb25lIG9mIHdoaWNoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGtub3duIHRvIGFwcGVhciBpbiBhbnkg ci5lLiBtYXRjaGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGZh LiAgKi8KKyAgdW5zaWduZWQgY2hhciAqbWJsZW5fYnVmOyAgICAgLyogQ29ycmVzcG9uZCB0byB0 aGUgaW5wdXQgYnVmZmVyIGluIGRmYWV4ZWMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVhY2ggZWxlbWVudCBzdG9yZXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcg bXVsdGlieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBp biB0aGUgaW5wdXQgc3RyaW5nLiAgQSBlbGVtZW50J3MKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgaXMgMCBpZiB0aGUgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIgaXMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlLWJ5dGUuCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4sIGlucHV0IDogJ2EnLCA8bWIoMCk+LCA8 bWIoMSk+LCA8bWIoMik+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ibGVu X2J1ZiAgIDogIDAsICAgICAgIDMsICAgICAgIDIsICAgICAgIDEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisgIHNpemVfdCBubWJsZW5fYnVmOyAgICAgICAgICAgIC8qIExl bmd0aCBvZiB0aGUgbWJsZW4gYnVmZmVyIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhbGxvY2F0ZWQuICAqLworICB3Y2hhcl90ICppbnB1dHdjczsgICAgICAg ICAgICAvKiBXaWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGluIGRmYWV4ZWMuCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhpcyBhcnJheSBpcyB0 aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGVuZ3Ro IG9mIGlucHV0IHN0cmluZyAoY2hhciBhcnJheSkuCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlucHV0c3RyaW5nW2ldIGlzIGEgc2luZ2xlLWJ5dGUgY2hhciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5 dGUgY2hhcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXR3Y3NbaV0g aXMgdGhlIGNvZGVwb2ludC4gICovCisgIHNpemVfdCBuaW5wdXR3Y3M7ICAgICAgICAgICAgIC8q IExlbmd0aCBvZiB0aGUgaW5wdXQgd2lkZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRseSBhbGxvY2F0ZWQuICAqLworICBwb3NpdGlvbl9zZXQg Km1iX2ZvbGxvd3M7ICAgICAvKiBGb2xsb3cgc2V0IGFkZGVkIGJ5IEFOWUNIQVIgYW5kL29yIE1C Q1NFVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBkZW1hbmQuICAqLwor ICBpbnQgKm1iX21hdGNoX2xlbnM7ICAgICAgICAgICAvKiBBcnJheSBvZiBsZW5ndGggcmVkdWNl ZCBieSBBTllDSEFSIGFuZC9vcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN QkNTRVQuICAqLwogfTsKIAogLyogU29tZSBtYWNyb3MgZm9yIHVzZXIgYWNjZXNzIHRvIGRmYSBp bnRlcm5hbHMuICAqLwpAQCAtODc3LDIyICs5MDEsNiBAQCBzdGF0aWMgaW50IGN1cl9tYl9sZW4g PSAxOyAgICAgIC8qIExlbmd0aCBvZiB0aGUgbXVsdGlieXRlIHJlcHJlc2VudGF0aW9uIG9mCiBz dGF0aWMgbWJzdGF0ZV90IG1iczsgICAgICAgICAgIC8qIG1ic3RhdGUgZm9yIG1icnRvd2MuICAq Lwogc3RhdGljIHdjaGFyX3Qgd2N0b2s7ICAgICAgICAgICAvKiBXaWRlIGNoYXJhY3RlciByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyICptYmxl bl9idWY7LyogQ29ycmVzcG9uZCB0byB0aGUgaW5wdXQgYnVmZmVyIGluIGRmYWV4ZWMuCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggZWxlbWVudCBzdG9yZXMgdGhlIG51 bWJlciBvZiByZW1haW5pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0 ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbXVsdGlieXRlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgc3RyaW5nLiAgQSBlbGVtZW50J3MK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgMCBpZiB0aGUgY29y cmVzcG9uZGluZyBjaGFyYWN0ZXIgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2luZ2xlLWJ5dGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4s IGlucHV0IDogJ2EnLCA8bWIoMCk+LCA8bWIoMSk+LCA8bWIoMik+Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ibGVuX2J1ZiAgIDogIDAsICAgICAgIDMsICAgICAgIDIsICAg ICAgIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1zdGF0aWMgd2NoYXJf dCAqaW5wdXR3Y3M7ICAgICAgIC8qIFdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uIG9mIHRo ZSBpbnB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW4gZGZh ZXhlYy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0 aGlzIGFycmF5IGlzIHRoZSBzYW1lIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoZSBsZW5ndGggb2YgaW5wdXQgc3RyaW5nIChjaGFyIGFycmF5KS4KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzdHJpbmdbaV0gaXMgYSBzaW5nbGUtYnl0ZSBj aGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgZmlyc3QgYnl0 ZSBvZiBhIG11bHRpYnl0ZSBjaGFyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dHdjc1tpXSBpcyB0aGUgY29kZXBvaW50LiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFy IGNvbnN0ICpidWZfYmVnaW47ICAvKiByZWZlcmVuY2UgdG8gYmVnaW4gaW4gZGZhZXhlYy4gICov CiBzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmX2VuZDsgICAgLyogcmVmZXJlbmNlIHRv IGVuZCBpbiBkZmFleGVjLiAgKi8KIApAQCAtMjk2MCwxNCArMjk2OCwxMiBAQCBidWlsZF9zdGF0 ZV96ZXJvIChzdHJ1Y3QgZGZhICpkKQogI2RlZmluZSBTS0lQX1JFTUFJTlNfTUJfSUZfSU5JVElB TF9TVEFURShzLCBwKQkJXAogICBpZiAocyA9PSAwKQkJCQkJCVwKICAgICB7CQkJCQkJCVwKLSAg ICAgIHdoaWxlIChpbnB1dHdjc1twIC0gYnVmX2JlZ2luXSA9PSAwCQlcCi0gICAgICAgICAgICAm JiBtYmxlbl9idWZbcCAtIGJ1Zl9iZWdpbl0gPiAwCQlcCisgICAgICB3aGlsZSAoZC0+aW5wdXR3 Y3NbcCAtIGJ1Zl9iZWdpbl0gPT0gMAkJXAorICAgICAgICAgICAgJiYgZC0+bWJsZW5fYnVmW3Ag LSBidWZfYmVnaW5dID4gMAkJXAogICAgICAgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIgY29uc3Qg KikgcCA8IGJ1Zl9lbmQpCVwKICAgICAgICAgKytwOwkJCQkJCVwKICAgICAgIGlmICgoY2hhciAq KSBwID49IGVuZCkJCQkJXAogICAgICAgICB7CQkJCQkJXAotICAgICAgICAgIGZyZWUgKG1ibGVu X2J1Zik7CQkJCVwKLSAgICAgICAgICBmcmVlIChpbnB1dHdjcyk7CQkJCVwKICAgICAgICAgICAq ZW5kID0gc2F2ZWRfZW5kOwkJCQlcCiAgICAgICAgICAgcmV0dXJuIE5VTEw7CQkJCQlcCiAgICAg ICAgIH0JCQkJCQlcCkBAIC0zMDYxLDggKzMwNjcsOCBAQCBtYXRjaF9hbnljaGFyIChzdHJ1Y3Qg ZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICB3Y2hhcl90 IHdjOwogICBpbnQgbWJjbGVuOwogCi0gIHdjID0gaW5wdXR3Y3NbaWR4XTsKLSAgbWJjbGVuID0g KG1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IG1ibGVuX2J1ZltpZHhdOworICB3YyA9IGQtPmlu cHV0d2NzW2lkeF07CisgIG1iY2xlbiA9IChkLT5tYmxlbl9idWZbaWR4XSA9PSAwKSA/IDEgOiBk LT5tYmxlbl9idWZbaWR4XTsKIAogICAvKiBDaGVjayBzeW50YXggYml0cy4gICovCiAgIGlmICh3 YyA9PSAod2NoYXJfdCkgZW9sYnl0ZSkKQEAgLTMxMDMsNyArMzEwOSw3IEBAIG1hdGNoX21iX2No YXJzZXQgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBwb3NpdGlvbiBwb3MsIHNpemVfdCBp ZHgpCiAgIGludCBjb250ZXh0OwogICB3Y2hhcl90IHdjOyAgICAgICAgICAgICAgICAgICAvKiBD dXJyZW50IHJlZmVycmluZyBjaGFyYWN0ZXIuICAqLwogCi0gIHdjID0gaW5wdXR3Y3NbaWR4XTsK KyAgd2MgPSBkLT5pbnB1dHdjc1tpZHhdOwogCiAgIC8qIENoZWNrIHN5bnRheCBiaXRzLiAgKi8K ICAgaWYgKHdjID09ICh3Y2hhcl90KSBlb2xieXRlKQpAQCAtMzEyNCw3ICszMTMwLDcgQEAgbWF0 Y2hfbWJfY2hhcnNldCAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHBvc2l0aW9uIHBvcywg c2l6ZV90IGlkeCkKICAgLyogQXNzaWduIHRoZSBjdXJyZW50IHJlZmVycmluZyBvcGVyYXRvciB0 byB3b3JrX21iYy4gICovCiAgIHdvcmtfbWJjID0gJihkLT5tYmNzZXRzWyhkLT5tdWx0aWJ5dGVf cHJvcFtwb3MuaW5kZXhdKSA+PiAyXSk7CiAgIG1hdGNoID0gIXdvcmtfbWJjLT5pbnZlcnQ7Ci0g IG1hdGNoX2xlbiA9IChtYmxlbl9idWZbaWR4XSA9PSAwKSA/IDEgOiBtYmxlbl9idWZbaWR4XTsK KyAgbWF0Y2hfbGVuID0gKGQtPm1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IGQtPm1ibGVuX2J1 ZltpZHhdOwogCiAgIC8qIE1hdGNoIGluIHJhbmdlIDAtMjU1PyAgKi8KICAgaWYgKHdjIDwgTk9U Q0hBUiAmJiB3b3JrX21iYy0+Y3NldCAhPSAtMQpAQCAtMzIwMiw3ICszMjA4LDcgQEAgY2hlY2tf bWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywg c2l6ZV90IGlkeCkKICAgc2l6ZV90IGk7CiAgIGludCAqcmFycmF5OwogCi0gIE1BTExPQyAocmFy cmF5LCBkLT5zdGF0ZXNbc10ubWJwcy5uZWxlbSk7CisgIHJhcnJheSA9IGQtPm1iX21hdGNoX2xl bnM7CiAgIGZvciAoaSA9IDA7IGkgPCBkLT5zdGF0ZXNbc10ubWJwcy5uZWxlbTsgKytpKQogICAg IHsKICAgICAgIHBvc2l0aW9uIHBvcyA9IGQtPnN0YXRlc1tzXS5tYnBzLmVsZW1zW2ldOwpAQCAt MzIzMiw3ICszMjM4LDcgQEAgY2hlY2tfbWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzIChzdHJ1 Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgc2l6ZV90IGlkeCkKIHN0YXRpYyBzdGF0dXNfdHJhbnNp dF9zdGF0ZQogdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0 ZV9udW0gcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjb25z dCAqKnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1hdGNoX2xlbnMsIGlu dCAqbWJjbGVuLCBwb3NpdGlvbl9zZXQgKiBwcHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqbWF0Y2hfbGVucywgaW50ICptYmNsZW4pCiB7CiAgIHNpemVfdCBpLCBqOwogICBp bnQgazsKQEAgLTMyNDIsNyArMzI0OCw3IEBAIHRyYW5zaXRfc3RhdGVfY29uc3VtZV8xY2hhciAo c3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsCiAKICAgLyogQ2FsY3VsYXRlIHRoZSBsZW5ndGgg b2YgdGhlIChzaW5nbGUvbXVsdGkgYnl0ZSkgY2hhcmFjdGVyCiAgICAgIHRvIHdoaWNoIHAgcG9p bnRzLiAgKi8KLSAgKm1iY2xlbiA9IChtYmxlbl9idWZbKnBwIC0gYnVmX2JlZ2luXSA9PSAwKSA/ IDEgOiBtYmxlbl9idWZbKnBwIC0gYnVmX2JlZ2luXTsKKyAgKm1iY2xlbiA9IChkLT5tYmxlbl9i dWZbKnBwIC0gYnVmX2JlZ2luXSA9PSAwKSA/IDEgOiBkLT5tYmxlbl9idWZbKnBwIC0gYnVmX2Jl Z2luXTsKIAogICAvKiBDYWxjdWxhdGUgdGhlIHN0YXRlIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZy b20gdGhlIHN0YXRlICdzJyBieQogICAgICBjb25zdW1pbmcgJyptYmNsZW4nIHNpbmdsZSBieXRl cyBmcm9tIHRoZSBidWZmZXIuICAqLwpAQCAtMzI1Miw4ICszMjU4LDggQEAgdHJhbnNpdF9zdGF0 ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywKICAgICAgIHMyID0g czE7CiAgICAgICBycyA9IHRyYW5zaXRfc3RhdGVfc2luZ2xlYnl0ZSAoZCwgczIsICgqcHApKyss ICZzMSk7CiAgICAgfQotICAvKiBDb3B5IHRoZSBwb3NpdGlvbnMgY29udGFpbmVkIGJ5ICdzMScg dG8gdGhlIHNldCAncHBzJy4gICovCi0gIGNvcHkgKCYoZC0+c3RhdGVzW3MxXS5lbGVtcyksIHBw cyk7CisgIC8qIENvcHkgdGhlIHBvc2l0aW9ucyBjb250YWluZWQgYnkgJ3MxJyB0byB0aGUgc2V0 ICdkLT5tYl9mb2xsb3dzJy4gICovCisgIGNvcHkgKCYoZC0+c3RhdGVzW3MxXS5lbGVtcyksIGQt Pm1iX2ZvbGxvd3MpOwogCiAgIC8qIENoZWNrIChpbnB1dCkgbWF0Y2hfbGVucywgYW5kIGluaXRp YWxpemUgaWYgaXQgaXMgTlVMTC4gICovCiAgIGlmIChtYXRjaF9sZW5zID09IE5VTEwgJiYgZC0+ c3RhdGVzW3NdLm1icHMubmVsZW0gIT0gMCkKQEAgLTMyNjgsMTIgKzMyNzQsMTAgQEAgdHJhbnNp dF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywKICAgICAg IGlmICh3b3JrX21ibHNbaV0gPT0gKm1iY2xlbikKICAgICAgICAgZm9yIChqID0gMDsgaiA8IGQt PmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1icHMuZWxlbXNbaV0uaW5kZXhdLm5lbGVtOwogICAgICAg ICAgICAgIGorKykKLSAgICAgICAgICBpbnNlcnQgKGQtPmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1i cHMuZWxlbXNbaV0uaW5kZXhdLmVsZW1zW2pdLCBwcHMpOworICAgICAgICAgIGluc2VydCAoZC0+ Zm9sbG93c1tkLT5zdGF0ZXNbc10ubWJwcy5lbGVtc1tpXS5pbmRleF0uZWxlbXNbal0sCisgICAg ICAgICAgICBkLT5tYl9mb2xsb3dzKTsKICAgICB9CiAKLSAgaWYgKG1hdGNoX2xlbnMgPT0gTlVM TCAmJiB3b3JrX21ibHMgIT0gTlVMTCkKLSAgICBmcmVlICh3b3JrX21ibHMpOwotCiAgIC8qIEZJ WE1FOiB0aGlzIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgaWdub3JlZC4gICovCiAgIHJldHVybiBy czsKIH0KQEAgLTMyOTAsNyArMzI5NCw2IEBAIHRyYW5zaXRfc3RhdGUgKHN0cnVjdCBkZmEgKmQs IHN0YXRlX251bSBzLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICoqcHApCiAgIHNpemVfdCBpLCBqOwog ICBpbnQgKm1hdGNoX2xlbnMgPSBOVUxMOwogICBzaXplX3QgbmVsZW0gPSBkLT5zdGF0ZXNbc10u bWJwcy5uZWxlbTsgICAgICAgLyogSnVzdCBhIGFsaWFzLiAgKi8KLSAgcG9zaXRpb25fc2V0IGZv bGxvd3M7CiAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAxID0gKnBwOwogICB3Y2hhcl90IHdjOwog CkBAIC0zMzIxLDI2ICszMzI0LDI1IEBAIHRyYW5zaXRfc3RhdGUgKHN0cnVjdCBkZmEgKmQsIHN0 YXRlX251bSBzLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICoqcHApCiAgICAgICBpZiAocnMgPT0gVFJB TlNJVF9TVEFURV9ET05FKQogICAgICAgICArKypwcDsKIAotICAgICAgZnJlZSAobWF0Y2hfbGVu cyk7CiAgICAgICByZXR1cm4gczE7CiAgICAgfQogCiAgIC8qIFRoaXMgc3RhdGUgaGFzIHNvbWUg b3BlcmF0b3JzIHdoaWNoIGNhbiBtYXRjaCBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLwotICBh bGxvY19wb3NpdGlvbl9zZXQgKCZmb2xsb3dzLCBkLT5ubGVhdmVzKTsKKyAgZC0+bWJfZm9sbG93 cy0+bmVsZW0gPSAwOwogCiAgIC8qICdtYXhsZW4nIG1heSBiZSBsb25nZXIgdGhhbiB0aGUgbGVu Z3RoIG9mIGEgY2hhcmFjdGVyLCBiZWNhdXNlIGl0IG1heQogICAgICBub3QgYmUgYSBjaGFyYWN0 ZXIgYnV0IGEgKG11bHRpIGNoYXJhY3RlcikgY29sbGF0aW5nIGVsZW1lbnQuCiAgICAgIFdlIGVu dW1lcmF0ZSBhbGwgb2YgdGhlIHBvc2l0aW9ucyB3aGljaCAncycgY2FuIHJlYWNoIGJ5IGNvbnN1 bWluZwogICAgICAnbWF4bGVuJyBieXRlcy4gICovCi0gIHRyYW5zaXRfc3RhdGVfY29uc3VtZV8x Y2hhciAoZCwgcywgcHAsIG1hdGNoX2xlbnMsICZtYmNsZW4sICZmb2xsb3dzKTsKKyAgdHJhbnNp dF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzLCBwcCwgbWF0Y2hfbGVucywgJm1iY2xlbik7CiAK LSAgd2MgPSBpbnB1dHdjc1sqcHAgLSBtYmNsZW4gLSBidWZfYmVnaW5dOwotICBzMSA9IHN0YXRl X2luZGV4IChkLCAmZm9sbG93cywgd2NoYXJfY29udGV4dCAod2MpKTsKKyAgd2MgPSBkLT5pbnB1 dHdjc1sqcHAgLSBtYmNsZW4gLSBidWZfYmVnaW5dOworICBzMSA9IHN0YXRlX2luZGV4IChkLCBk LT5tYl9mb2xsb3dzLCB3Y2hhcl9jb250ZXh0ICh3YykpOwogICByZWFsbG9jX3RyYW5zX2lmX25l Y2Vzc2FyeSAoZCwgczEpOwogCiAgIHdoaWxlICgqcHAgLSBwMSA8IG1heGxlbikKICAgICB7Ci0g ICAgICB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKGQsIHMxLCBwcCwgTlVMTCwgJm1iY2xl biwgJmZvbGxvd3MpOworICAgICAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzMSwg cHAsIE5VTEwsICZtYmNsZW4pOwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmVsZW07IGkrKykK ICAgICAgICAgewpAQCAtMzM0OCwxNSArMzM1MCwxMyBAQCB0cmFuc2l0X3N0YXRlIChzdHJ1Y3Qg ZGZhICpkLCBzdGF0ZV9udW0gcywgdW5zaWduZWQgY2hhciBjb25zdCAqKnBwKQogICAgICAgICAg ICAgZm9yIChqID0gMDsKICAgICAgICAgICAgICAgICAgaiA8IGQtPmZvbGxvd3NbZC0+c3RhdGVz W3MxXS5tYnBzLmVsZW1zW2ldLmluZGV4XS5uZWxlbTsgaisrKQogICAgICAgICAgICAgICBpbnNl cnQgKGQtPmZvbGxvd3NbZC0+c3RhdGVzW3MxXS5tYnBzLmVsZW1zW2ldLmluZGV4XS5lbGVtc1tq XSwKLSAgICAgICAgICAgICAgICAgICAgICAmZm9sbG93cyk7CisgICAgICAgICAgICAgICAgICAg ICAgZC0+bWJfZm9sbG93cyk7CiAgICAgICAgIH0KIAotICAgICAgd2MgPSBpbnB1dHdjc1sqcHAg LSBtYmNsZW4gLSBidWZfYmVnaW5dOwotICAgICAgczEgPSBzdGF0ZV9pbmRleCAoZCwgJmZvbGxv d3MsIHdjaGFyX2NvbnRleHQgKHdjKSk7CisgICAgICB3YyA9IGQtPmlucHV0d2NzWypwcCAtIG1i Y2xlbiAtIGJ1Zl9iZWdpbl07CisgICAgICBzMSA9IHN0YXRlX2luZGV4IChkLCBkLT5tYl9mb2xs b3dzLCB3Y2hhcl9jb250ZXh0ICh3YykpOwogICAgICAgcmVhbGxvY190cmFuc19pZl9uZWNlc3Nh cnkgKGQsIHMxKTsKICAgICB9Ci0gIGZyZWUgKG1hdGNoX2xlbnMpOwotICBmcmVlIChmb2xsb3dz LmVsZW1zKTsKICAgcmV0dXJuIHMxOwogfQogCkBAIC0zMzc1LDIxICszMzc1LDIxIEBAIHByZXBh cmVfd2NfYnVmIChzdHJ1Y3QgZGZhICpkLCBjb25zdCBjaGFyICpiZWdpbiwgY29uc3QgY2hhciAq ZW5kKQogCiAgIGZvciAoaSA9IDA7IGkgPCBpbGltOyBpKyspCiAgICAgewotICAgICAgc2l6ZV90 IG5ieXRlcyA9IG1ic190b193Y2hhciAoZCwgaW5wdXR3Y3MgKyBpLCBiZWdpbiArIGksIGlsaW0g LSBpLCAmbWJzKTsKLSAgICAgIG1ibGVuX2J1ZltpXSA9IG5ieXRlcyAtIChuYnl0ZXMgPT0gMSk7 CisgICAgICBzaXplX3QgbmJ5dGVzID0gbWJzX3RvX3djaGFyIChkLCBkLT5pbnB1dHdjcyArIGks IGJlZ2luICsgaSwgaWxpbSAtIGksICZtYnMpOworICAgICAgZC0+bWJsZW5fYnVmW2ldID0gbmJ5 dGVzIC0gKG5ieXRlcyA9PSAxKTsKICAgICAgIGlmIChiZWdpbltpXSA9PSBlb2wpCiAgICAgICAg IGJyZWFrOwogICAgICAgd2hpbGUgKC0tbmJ5dGVzICE9IDApCiAgICAgICAgIHsKICAgICAgICAg ICBpKys7Ci0gICAgICAgICAgbWJsZW5fYnVmW2ldID0gbmJ5dGVzOwotICAgICAgICAgIGlucHV0 d2NzW2ldID0gMDsKKyAgICAgICAgICBkLT5tYmxlbl9idWZbaV0gPSBuYnl0ZXM7CisgICAgICAg ICAgZC0+aW5wdXR3Y3NbaV0gPSAwOwogICAgICAgICB9CiAgICAgfQogCiAgIGJ1Zl9lbmQgPSAo dW5zaWduZWQgY2hhciAqKSAoYmVnaW4gKyBpKTsKLSAgbWJsZW5fYnVmW2ldID0gMDsKLSAgaW5w dXR3Y3NbaV0gPSAwOyAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgZC0+bWJsZW5fYnVm W2ldID0gMDsKKyAgZC0+aW5wdXR3Y3NbaV0gPSAwOyAgICAgICAgICAgICAgLyogc2VudGluZWwg Ki8KICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLwogfQogCkBAIC0zNDI3LDEwICszNDI3LDE4IEBA IGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAK ICAgaWYgKGQtPm1iX2N1cl9tYXggPiAxKQogICAgIHsKLSAgICAgIE1BTExPQyAobWJsZW5fYnVm LCBlbmQgLSBiZWdpbiArIDIpOwotICAgICAgTUFMTE9DIChpbnB1dHdjcywgZW5kIC0gYmVnaW4g KyAyKTsKKyAgICAgIHN0YXRpYyBib29sIG1iX2FsbG9jID0gZmFsc2U7CisgICAgICBSRUFMTE9D X0lGX05FQ0VTU0FSWSAoZC0+bWJsZW5fYnVmLCBkLT5ubWJsZW5fYnVmLCBlbmQgLSBiZWdpbiAr IDIpOworICAgICAgUkVBTExPQ19JRl9ORUNFU1NBUlkgKGQtPmlucHV0d2NzLCBkLT5uaW5wdXR3 Y3MsIGVuZCAtIGJlZ2luICsgMik7CiAgICAgICBtZW1zZXQgKCZtYnMsIDAsIHNpemVvZiAobWJz dGF0ZV90KSk7CiAgICAgICBwcmVwYXJlX3djX2J1ZiAoZCwgKGNvbnN0IGNoYXIgKikgcCwgZW5k KTsKKyAgICAgIGlmICghbWJfYWxsb2MpCisgICAgICAgIHsKKyAgICAgICAgICBNQUxMT0MgKGQt Pm1iX21hdGNoX2xlbnMsIGQtPm5sZWF2ZXMpOworICAgICAgICAgIE1BTExPQyAoZC0+bWJfZm9s bG93cywgMSk7CisgICAgICAgICAgYWxsb2NfcG9zaXRpb25fc2V0IChkLT5tYl9mb2xsb3dzLCBk LT5ubGVhdmVzKTsKKyAgICAgICAgICBtYl9hbGxvYyA9IHRydWU7CisgICAgICAgIH0KICAgICB9 CiAKICAgZm9yICg7OykKQEAgLTM0NTcsOCArMzQ2NSw2IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEg KmQsIGNoYXIgY29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAgICAgICAgICAgICAgIGlmIChiYWNr cmVmKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICpiYWNrcmVmID0gMTsK LSAgICAgICAgICAgICAgICAgIGZyZWUgKG1ibGVuX2J1Zik7Ci0gICAgICAgICAgICAgICAgICBm cmVlIChpbnB1dHdjcyk7CiAgICAgICAgICAgICAgICAgICAqZW5kID0gc2F2ZWRfZW5kOwogICAg ICAgICAgICAgICAgICAgcmV0dXJuIChjaGFyICopIHA7CiAgICAgICAgICAgICAgICAgfQpAQCAt MzQ5MSwxMSArMzQ5Nyw2IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJl Z2luLCBjaGFyICplbmQsCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChiYWNrcmVm KQogICAgICAgICAgICAgICAgICpiYWNrcmVmID0gKGQtPnN0YXRlc1tzXS5iYWNrcmVmICE9IDAp OwotICAgICAgICAgICAgICBpZiAoZC0+bWJfY3VyX21heCA+IDEpCi0gICAgICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgICAgZnJlZSAobWJsZW5fYnVmKTsKLSAgICAgICAgICAgICAgICAg IGZyZWUgKGlucHV0d2NzKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICplbmQg PSBzYXZlZF9lbmQ7CiAgICAgICAgICAgICAgIHJldHVybiAoY2hhciAqKSBwOwogICAgICAgICAg ICAgfQpAQCAtMzUyNiwxMSArMzUyNyw2IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIg Y29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAgICAgICAvKiBDaGVjayBpZiB3ZSd2ZSBydW4gb2Zm IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCiAgICAgICBpZiAoKGNoYXIgKikgcCA+IGVuZCkK ICAgICAgICAgewotICAgICAgICAgIGlmIChkLT5tYl9jdXJfbWF4ID4gMSkKLSAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgZnJlZSAobWJsZW5fYnVmKTsKLSAgICAgICAgICAgICAgZnJlZSAo aW5wdXR3Y3MpOwotICAgICAgICAgICAgfQogICAgICAgICAgICplbmQgPSBzYXZlZF9lbmQ7CiAg ICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTM1ODEsNiArMzU3NywxMyBAQCBm cmVlX21iZGF0YSAoc3RydWN0IGRmYSAqZCkKICAgZnJlZSAoZC0+bWJjc2V0cyk7CiAgIGQtPm1i Y3NldHMgPSBOVUxMOwogICBkLT5ubWJjc2V0cyA9IDA7CisKKyAgZnJlZSAoZC0+bWJsZW5fYnVm KTsKKyAgZnJlZSAoZC0+aW5wdXR3Y3MpOworICBpZiAoZC0+bWJfZm9sbG93cyAhPSBOVUxMKQor ICAgIGZyZWUgKGQtPm1iX2ZvbGxvd3MtPmVsZW1zKTsKKyAgZnJlZSAoZC0+bWJfZm9sbG93cyk7 CisgIGZyZWUgKGQtPm1iX21hdGNoX2xlbnMpOwogfQogCiAvKiBJbml0aWFsaXplIHRoZSBjb21w b25lbnRzIG9mIGEgZGZhIHRoYXQgdGhlIG90aGVyIHJvdXRpbmVzIGRvbid0Ci0tIAoxLjkuMQoK CkZyb20gZDkzNmQ4MThkOGY1NzM1ZjE1ZTY3YjNiNWYwZjNkZjNkN2U3YjVlMSBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKRnJvbTogTm9yaWhpcm8gVGFuYWthIDxub3JpdG5rQGtjbi5uZS5qcD4K RGF0ZTogU2F0LCAyOSBNYXIgMjAxNCAyMDo1OTo1MyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggMi8y XSBncmVwOiBzcGVlZC11cCBvZiBERkEgYnkgY2hlY2tpbmcgbXVsdGlieXRlIGNoYXJhY3RlcnMg b24KIGRlbWFuZAoKSWYgZGZhZXhlYygpIHJ1bnMgaW4gbm9uLVVURjggbG9jYWxlcywgbGVuZ3Ro IGFuZCB3aWRlIGNoYXJhY3RlcgpyZXByZXNlbnRhdGlvbiBhcmUgY2hlY2tlZCBmb3IgYWxsIGNo YXJhY3RlcnMgb2YgYSBsaW5lIGluIGEgaW5wdXQKc3RyaW5nLiAgSG93ZXZlciwgaWYgbWF0Y2hl ZCBlYXJseSBpbiB0aGUgbGluZSwgcmVzdWx0cyBmb3IgcmVtYWluaW5nCmNoYXJhY3RlcnMgYXJl IHdhc3RlZC4KClRoaXMgcGF0Y2ggY2hlY2tzIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIG9uIGRlbWFu ZC4gIEl0IGVuYWJsZXMgdG8KYWNjb21wbGlzaCB0byBzcGVlZC11cCBmb3IgbWF0Y2hlZCBlYXJs eSBhbmQgcmVkdWNlIHJlcXVpcmVkIG1lbW9yaWVzLgoKKiBzcmMvZGZhLmMgKHN0cnVjdCBkZmEp OiBSZW1vdmUgbWVtYmVycy4KKGJ1Zl9iZWdpbiwgYnVmX2VuZCk6IE5vIGxvbmdlciB0aGV5IGFy ZSB1c2VkLiAgUmVtb3ZlIHRoZW0uCihTS0lQX1JFTUFJTlNfTUJfSUZfSU5JVElBTF9TVEFURSk6 IE5vdywgdGhlIGNvbnRlbnQgb2YgdGhlIG1hY3JvIGlzCmV4dGVuZGVkIGluIGRmYWV4ZWMoKS4K KHRyYW5zaXRfc3RhdGVfc2luZ2xlYnl0ZSk6IHNlbSBjaGVjayBpcyByZW1vdmVkLgoobWF0Y2hf YW55Y2hhcik6IERvZXNuJ3QgdXNlIGBtYmxlbl9idWYgYW5kJyBgaW5wdXR3Y3MnLgoobWF0Y2hf bWJfY2hhcnNldCk6IERvZXNuJ3QgdXNlIGBtYmxlbl9idWYgYW5kJyBgaW5wdXR3Y3MnLgooY2hl Y2tfbWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzKTogTW9kaWZ5IGFyZ3VtZW50cy4KKHRyYW5z aXRfc3RhdGVfY29uc3VtZV8xY2hhcik6IE1vZGlmeSBhcmd1bWVudHMuCih0cmFuc2l0X3N0YXRl KTogRG9lc24ndCB1c2UgYG1ibGVuX2J1ZiBhbmQnIGBpbnB1dHdjcycuCihwcmVwYXJlX3djX2J1 Zik6IFJlbW92ZSBpdC4KKGRmYWV4ZWMpOiBEb2Vzbid0IHVzZSBgbWJsZW5fYnVmIGFuZCcgYGlu cHV0d2NzJy4KLS0tCiBzcmMvZGZhLmMgfCAyMTIgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2MiBp bnNlcnRpb25zKCspLCAxNTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2RmYS5jIGIv c3JjL2RmYS5jCmluZGV4IGFkZmU0NTAuLjgxNDY3MDAgMTAwNjQ0Ci0tLSBhL3NyYy9kZmEuYwor KysgYi9zcmMvZGZhLmMKQEAgLTQzNiwyNiArNDM2LDYgQEAgc3RydWN0IGRmYQogICBzdHJ1Y3Qg ZGZhbXVzdCAqbXVzdHM7ICAgICAgICAvKiBMaXN0IG9mIHN0cmluZ3MsIGF0IGxlYXN0IG9uZSBv ZiB3aGljaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBrbm93biB0byBh cHBlYXIgaW4gYW55IHIuZS4gbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIGRmYS4gICovCi0gIHVuc2lnbmVkIGNoYXIgKm1ibGVuX2J1ZjsgICAgIC8qIENv cnJlc3BvbmQgdG8gdGhlIGlucHV0IGJ1ZmZlciBpbiBkZmFleGVjLgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFYWNoIGVsZW1lbnQgc3RvcmVzIHRoZSBudW1iZXIgb2YgcmVt YWluaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIG9mIHRoZSBj b3JyZXNwb25kaW5nIG11bHRpYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IHN0cmluZy4gIEEgZWxlbWVudCdzCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIDAgaWYgdGhlIGNvcnJlc3BvbmRpbmcg Y2hhcmFjdGVyIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZS1i eXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuLCBpbnB1dCA6ICdh JywgPG1iKDApPiwgPG1iKDEpPiwgPG1iKDIpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYmxlbl9idWYgICA6ICAwLCAgICAgICAzLCAgICAgICAyLCAgICAgICAxCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzaXplX3Qgbm1ibGVuX2J1ZjsgICAg ICAgICAgICAvKiBMZW5ndGggb2YgdGhlIG1ibGVuIGJ1ZmZlciBjdXJyZW50bHkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkLiAgKi8KLSAgd2NoYXJfdCAqaW5w dXR3Y3M7ICAgICAgICAgICAgLyogV2lkZSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhl IGlucHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBpbiBkZmFl eGVjLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRo aXMgYXJyYXkgaXMgdGhlIHNhbWUgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGxlbmd0aCBvZiBpbnB1dCBzdHJpbmcgKGNoYXIgYXJyYXkpLgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHN0cmluZ1tpXSBpcyBhIHNpbmdsZS1ieXRlIGNo YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaXJzdCBieXRl IG9mIGEgbXVsdGlieXRlIGNoYXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0d2NzW2ldIGlzIHRoZSBjb2RlcG9pbnQuICAqLwotICBzaXplX3QgbmlucHV0d2NzOyAg ICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhlIGlucHV0IHdpZGUgY2hhcmFjdGVycwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgYWxsb2NhdGVkLiAgKi8KICAg cG9zaXRpb25fc2V0ICptYl9mb2xsb3dzOyAgICAgLyogRm9sbG93IHNldCBhZGRlZCBieSBBTllD SEFSIGFuZC9vciBNQkNTRVQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24g ZGVtYW5kLiAgKi8KICAgaW50ICptYl9tYXRjaF9sZW5zOyAgICAgICAgICAgLyogQXJyYXkgb2Yg bGVuZ3RoIHJlZHVjZWQgYnkgQU5ZQ0hBUiBhbmQvb3IKQEAgLTkwMSw4ICs4ODEsNiBAQCBzdGF0 aWMgaW50IGN1cl9tYl9sZW4gPSAxOyAgICAgIC8qIExlbmd0aCBvZiB0aGUgbXVsdGlieXRlIHJl cHJlc2VudGF0aW9uIG9mCiBzdGF0aWMgbWJzdGF0ZV90IG1iczsgICAgICAgICAgIC8qIG1ic3Rh dGUgZm9yIG1icnRvd2MuICAqLwogc3RhdGljIHdjaGFyX3Qgd2N0b2s7ICAgICAgICAgICAvKiBX aWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KLXN0YXRpYyB1 bnNpZ25lZCBjaGFyIGNvbnN0ICpidWZfYmVnaW47ICAvKiByZWZlcmVuY2UgdG8gYmVnaW4gaW4g ZGZhZXhlYy4gICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmX2VuZDsgICAgLyog cmVmZXJlbmNlIHRvIGVuZCBpbiBkZmFleGVjLiAgKi8KIAogCiAjaWYgTUJTX1NVUFBPUlQKQEAg LTI5NTgsMjcgKzI5MzYsNiBAQCBidWlsZF9zdGF0ZV96ZXJvIChzdHJ1Y3QgZGZhICpkKQogCiAv KiBNdWx0aWJ5dGUgY2hhcmFjdGVyIGhhbmRsaW5nIHN1Yi1yb3V0aW5lcyBmb3IgZGZhZXhlYy4g ICovCiAKLS8qIFRoZSBpbml0aWFsIHN0YXRlIG1heSBlbmNvdW50ZXIgYSBieXRlIHdoaWNoIGlz IG5vdCBhIHNpbmdsZSBieXRlIGNoYXJhY3RlcgotICAgbm9yIHRoZSBmaXJzdCBieXRlIG9mIGEg bXVsdGlieXRlIGNoYXJhY3Rlci4gIEJ1dCBpdCBpcyBpbmNvcnJlY3QgZm9yIHRoZQotICAgaW5p dGlhbCBzdGF0ZSB0byBhY2NlcHQgc3VjaCBhIGJ5dGUuICBGb3IgZXhhbXBsZSwgaW4gU2hpZnQg SklTIHRoZSByZWd1bGFyCi0gICBleHByZXNzaW9uICJcXCIgYWNjZXB0cyB0aGUgY29kZXBvaW50 IDB4NWMsIGJ1dCBzaG91bGQgbm90IGFjY2VwdCB0aGUgc2Vjb25kCi0gICBieXRlIG9mIHRoZSBj b2RlcG9pbnQgMHg4MTVjLiAgVGhlbiB0aGUgaW5pdGlhbCBzdGF0ZSBtdXN0IHNraXAgdGhlIGJ5 dGVzCi0gICB0aGF0IGFyZSBub3QgYSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgbm9yIHRoZSBmaXJz dCBieXRlIG9mIGEgbXVsdGlieXRlCi0gICBjaGFyYWN0ZXIuICAqLwotI2RlZmluZSBTS0lQX1JF TUFJTlNfTUJfSUZfSU5JVElBTF9TVEFURShzLCBwKQkJXAotICBpZiAocyA9PSAwKQkJCQkJCVwK LSAgICB7CQkJCQkJCVwKLSAgICAgIHdoaWxlIChkLT5pbnB1dHdjc1twIC0gYnVmX2JlZ2luXSA9 PSAwCQlcCi0gICAgICAgICAgICAmJiBkLT5tYmxlbl9idWZbcCAtIGJ1Zl9iZWdpbl0gPiAwCQlc Ci0gICAgICAgICAgICAmJiAodW5zaWduZWQgY2hhciBjb25zdCAqKSBwIDwgYnVmX2VuZCkJXAot ICAgICAgICArK3A7CQkJCQkJXAotICAgICAgaWYgKChjaGFyICopIHAgPj0gZW5kKQkJCQlcCi0g ICAgICAgIHsJCQkJCQlcCi0gICAgICAgICAgKmVuZCA9IHNhdmVkX2VuZDsJCQkJXAotICAgICAg ICAgIHJldHVybiBOVUxMOwkJCQkJXAotICAgICAgICB9CQkJCQkJXAotICAgIH0KLQogc3RhdGlj IHZvaWQKIHJlYWxsb2NfdHJhbnNfaWZfbmVjZXNzYXJ5IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9u dW0gbmV3X3N0YXRlKQogewpAQCAtMzAzNSwxNCArMjk5Miw3IEBAIHRyYW5zaXRfc3RhdGVfc2lu Z2xlYnl0ZSAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3Qg KnAsCiAgICAgICAgICAgICB3b3JrcyA9IDA7CiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHdv cmtzIDwgMCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChwID09IGJ1Zl9lbmQpCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgIC8qIEF0IHRoZSBtb21lbnQsIGl0IG11c3Qgbm90IGhhcHBl bi4gICovCi0gICAgICAgICAgICAgIGFib3J0ICgpOwotICAgICAgICAgICAgfQotICAgICAgICAg IHdvcmtzID0gMDsKLSAgICAgICAgfQorICAgICAgICB3b3JrcyA9IDA7CiAgICAgICBlbHNlIGlm IChkLT5mYWlsc1t3b3Jrc10pCiAgICAgICAgIHsKICAgICAgICAgICB3b3JrcyA9IGQtPmZhaWxz W3dvcmtzXVsqcF07CkBAIC0zMDU3LDE4ICszMDA3LDEzIEBAIHRyYW5zaXRfc3RhdGVfc2luZ2xl Ynl0ZSAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAs CiAgIHJldHVybiBydmFsOwogfQogCi0vKiBNYXRjaCBhICIuIiBhZ2FpbnN0IHRoZSBjdXJyZW50 IGNvbnRleHQuICBidWZfYmVnaW5bSURYXSBpcyB0aGUKLSAgIGN1cnJlbnQgcG9zaXRpb24uICBS ZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2gsIGluIGJ5dGVzLgotICAgUE9TIGlzIHRoZSBw b3NpdGlvbiBvZiB0aGUgIi4iLiAgKi8KKy8qIE1hdGNoIGEgIi4iIGFnYWluc3QgdGhlIGN1cnJl bnQgY29udGV4dC4gIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgbWF0Y2gsIGluIGJ5dGVz LiAgUE9TIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgIi4iLiAgKi8KIHN0YXRpYyBpbnQKLW1hdGNo X2FueWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBwb3NpdGlvbiBwb3MsIHNpemVf dCBpZHgpCittYXRjaF9hbnljaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRp b24gcG9zLAorICAgICAgICAgICAgICAgd2NoYXJfdCB3Yywgc2l6ZV90IG1iY2xlbikKIHsKICAg aW50IGNvbnRleHQ7Ci0gIHdjaGFyX3Qgd2M7Ci0gIGludCBtYmNsZW47Ci0KLSAgd2MgPSBkLT5p bnB1dHdjc1tpZHhdOwotICBtYmNsZW4gPSAoZC0+bWJsZW5fYnVmW2lkeF0gPT0gMCkgPyAxIDog ZC0+bWJsZW5fYnVmW2lkeF07CiAKICAgLyogQ2hlY2sgc3ludGF4IGJpdHMuICAqLwogICBpZiAo d2MgPT0gKHdjaGFyX3QpIGVvbGJ5dGUpCkBAIC0zMDkwLDE2ICszMDM1LDE0IEBAIG1hdGNoX2Fu eWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBwb3NpdGlvbiBwb3MsIHNpemVfdCBp ZHgpCiB9CiAKIC8qIE1hdGNoIGEgYnJhY2tldCBleHByZXNzaW9uIGFnYWluc3QgdGhlIGN1cnJl bnQgY29udGV4dC4KLSAgIGJ1Zl9iZWdpbltJRFhdIGlzIHRoZSBjdXJyZW50IHBvc2l0aW9uLgog ICAgUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoLCBpbiBieXRlcy4KICAgIFBPUyBpcyB0 aGUgcG9zaXRpb24gb2YgdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCiBzdGF0aWMgaW50Ci1t YXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9z LCBzaXplX3QgaWR4KQorbWF0Y2hfbWJfY2hhcnNldCAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVt IHMsIHBvc2l0aW9uIHBvcywKKyAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnAsIHdjaGFy X3Qgd2MsIHNpemVfdCBtYXRjaF9sZW4pCiB7CiAgIHNpemVfdCBpOwogICBpbnQgbWF0Y2g7ICAg ICAgICAgICAgICAgLyogTWF0Y2hpbmcgc3VjY2VlZGVkLiAgKi8KLSAgaW50IG1hdGNoX2xlbjsg ICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgY2hhcmFjdGVyIChvciBjb2xsYXRpbmcgZWxlbWVu dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggd2hpY2ggdGhpcyBvcGVyYXRv ciBtYXRjaGVzLiAgKi8KICAgaW50IG9wX2xlbjsgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0 aGUgb3BlcmF0b3IuICAqLwogICBjaGFyIGJ1ZmZlclsxMjhdOwogCkBAIC0zMTA3LDkgKzMwNTAs NiBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRp b24gcG9zLCBzaXplX3QgaWR4KQogICBzdHJ1Y3QgbWJfY2hhcl9jbGFzc2VzICp3b3JrX21iYzsK IAogICBpbnQgY29udGV4dDsKLSAgd2NoYXJfdCB3YzsgICAgICAgICAgICAgICAgICAgLyogQ3Vy cmVudCByZWZlcnJpbmcgY2hhcmFjdGVyLiAgKi8KLQotICB3YyA9IGQtPmlucHV0d2NzW2lkeF07 CiAKICAgLyogQ2hlY2sgc3ludGF4IGJpdHMuICAqLwogICBpZiAod2MgPT0gKHdjaGFyX3QpIGVv bGJ5dGUpCkBAIC0zMTMwLDcgKzMwNzAsNiBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZh ICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICAvKiBBc3NpZ24g dGhlIGN1cnJlbnQgcmVmZXJyaW5nIG9wZXJhdG9yIHRvIHdvcmtfbWJjLiAgKi8KICAgd29ya19t YmMgPSAmKGQtPm1iY3NldHNbKGQtPm11bHRpYnl0ZV9wcm9wW3Bvcy5pbmRleF0pID4+IDJdKTsK ICAgbWF0Y2ggPSAhd29ya19tYmMtPmludmVydDsKLSAgbWF0Y2hfbGVuID0gKGQtPm1ibGVuX2J1 ZltpZHhdID09IDApID8gMSA6IGQtPm1ibGVuX2J1ZltpZHhdOwogCiAgIC8qIE1hdGNoIGluIHJh bmdlIDAtMjU1PyAgKi8KICAgaWYgKHdjIDwgTk9UQ0hBUiAmJiB3b3JrX21iYy0+Y3NldCAhPSAt MQpAQCAtMzE0NCwxNCArMzA4MywxNCBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpk LCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICAgICAgICBnb3RvIGNo YXJzZXRfbWF0Y2hlZDsKICAgICB9CiAKLSAgc3RybmNweSAoYnVmZmVyLCAoY2hhciBjb25zdCAq KSBidWZfYmVnaW4gKyBpZHgsIG1hdGNoX2xlbik7CisgIHN0cm5jcHkgKGJ1ZmZlciwgcCwgbWF0 Y2hfbGVuKTsKICAgYnVmZmVyW21hdGNoX2xlbl0gPSAnXDAnOwogCiAgIC8qIG1hdGNoIHdpdGgg YW4gZXF1aXZhbGVuY2UgY2xhc3M/ICAqLwogICBmb3IgKGkgPSAwOyBpIDwgd29ya19tYmMtPm5l cXVpdnM7IGkrKykKICAgICB7CiAgICAgICBvcF9sZW4gPSBzdHJsZW4gKHdvcmtfbWJjLT5lcXVp dnNbaV0pOwotICAgICAgc3RybmNweSAoYnVmZmVyLCAoY2hhciBjb25zdCAqKSBidWZfYmVnaW4g KyBpZHgsIG9wX2xlbik7CisgICAgICBzdHJuY3B5IChidWZmZXIsIHAsIG9wX2xlbik7CiAgICAg ICBidWZmZXJbb3BfbGVuXSA9ICdcMCc7CiAgICAgICBpZiAoc3RyY29sbCAod29ya19tYmMtPmVx dWl2c1tpXSwgYnVmZmVyKSA9PSAwKQogICAgICAgICB7CkBAIC0zMTY0LDcgKzMxMDMsNyBAQCBt YXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9z LCBzaXplX3QgaWR4KQogICBmb3IgKGkgPSAwOyBpIDwgd29ya19tYmMtPm5jb2xsX2VsZW1zOyBp KyspCiAgICAgewogICAgICAgb3BfbGVuID0gc3RybGVuICh3b3JrX21iYy0+Y29sbF9lbGVtc1tp XSk7Ci0gICAgICBzdHJuY3B5IChidWZmZXIsIChjaGFyIGNvbnN0ICopIGJ1Zl9iZWdpbiArIGlk eCwgb3BfbGVuKTsKKyAgICAgIHN0cm5jcHkgKGJ1ZmZlciwgcCwgb3BfbGVuKTsKICAgICAgIGJ1 ZmZlcltvcF9sZW5dID0gJ1wwJzsKIAogICAgICAgaWYgKHN0cmNvbGwgKHdvcmtfbWJjLT5jb2xs X2VsZW1zW2ldLCBidWZmZXIpID09IDApCkBAIC0zMTk4LDEyICszMTM3LDEwIEBAIGNoYXJzZXRf bWF0Y2hlZDoKICAgIGFycmF5IHdoaWNoIGNvcnJlc3BvbmRzIHRvICdkLT5zdGF0ZXNbc10ubWJw cy5lbGVtJzsgZWFjaCBlbGVtZW50IG9mIHRoZQogICAgYXJyYXkgY29udGFpbnMgdGhlIG51bWJl ciBvZiBieXRlcyB3aXRoIHdoaWNoIHRoZSBlbGVtZW50IGNhbiBtYXRjaC4KIAotICAgJ2lkeCcg aXMgdGhlIGluZGV4IGZyb20gYnVmX2JlZ2luLCBhbmQgaXQgaXMgdGhlIGN1cnJlbnQgcG9zaXRp b24KLSAgIGluIHRoZSBidWZmZXIuCi0KICAgIFRoZSBjYWxsZXIgTVVTVCBmcmVlIHRoZSBhcnJh eSB3aGljaCB0aGlzIGZ1bmN0aW9uIHJldHVybi4gICovCiBzdGF0aWMgaW50ICoKLWNoZWNrX21h dGNoaW5nX3dpdGhfbXVsdGlieXRlX29wcyAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHNp emVfdCBpZHgpCitjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy IGNvbnN0ICpwLCB3Y2hhcl90IHdjLCBzaXplX3QgbWJjbGVuKQogewogICBzaXplX3QgaTsKICAg aW50ICpyYXJyYXk7CkBAIC0zMjE1LDEwICszMTUyLDEwIEBAIGNoZWNrX21hdGNoaW5nX3dpdGhf bXVsdGlieXRlX29wcyAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHNpemVfdCBpZHgpCiAg ICAgICBzd2l0Y2ggKGQtPnRva2Vuc1twb3MuaW5kZXhdKQogICAgICAgICB7CiAgICAgICAgIGNh c2UgQU5ZQ0hBUjoKLSAgICAgICAgICByYXJyYXlbaV0gPSBtYXRjaF9hbnljaGFyIChkLCBzLCBw b3MsIGlkeCk7CisgICAgICAgICAgcmFycmF5W2ldID0gbWF0Y2hfYW55Y2hhciAoZCwgcywgcG9z LCB3YywgbWJjbGVuKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNQkNTRVQ6Ci0g ICAgICAgICAgcmFycmF5W2ldID0gbWF0Y2hfbWJfY2hhcnNldCAoZCwgcywgcG9zLCBpZHgpOwor ICAgICAgICAgIHJhcnJheVtpXSA9IG1hdGNoX21iX2NoYXJzZXQgKGQsIHMsIHBvcywgcCwgd2Ms IG1iY2xlbik7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg YnJlYWs7ICAgICAgICAgICAgICAgIC8qIGNhbm5vdCBoYXBwZW4uICAqLwpAQCAtMzIzOCwyMiAr MzE3NSwyMiBAQCBjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLCBzaXplX3QgaWR4KQogc3RhdGljIHN0YXR1c190cmFuc2l0X3N0YXRl CiB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICoqcHAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF0Y2hfbGVucywgaW50ICptYmNs ZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qgd2MsIHNpemVfdCBtYmNs ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF0Y2hfbGVucykKIHsKICAg c2l6ZV90IGksIGo7CiAgIGludCBrOwogICBzdGF0ZV9udW0gczEsIHMyOwotICBpbnQgKndvcmtf bWJsczsKICAgc3RhdHVzX3RyYW5zaXRfc3RhdGUgcnMgPSBUUkFOU0lUX1NUQVRFX0RPTkU7CiAK LSAgLyogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIChzaW5nbGUvbXVsdGkgYnl0ZSkgY2hh cmFjdGVyCi0gICAgIHRvIHdoaWNoIHAgcG9pbnRzLiAgKi8KLSAgKm1iY2xlbiA9IChkLT5tYmxl bl9idWZbKnBwIC0gYnVmX2JlZ2luXSA9PSAwKSA/IDEgOiBkLT5tYmxlbl9idWZbKnBwIC0gYnVm X2JlZ2luXTsKKyAgLyogQ2hlY2sgKGlucHV0KSBtYXRjaF9sZW5zLCBhbmQgaW5pdGlhbGl6ZSBp ZiBpdCBpcyBOVUxMLiAgKi8KKyAgaWYgKG1hdGNoX2xlbnMgPT0gTlVMTCAmJiBkLT5zdGF0ZXNb c10ubWJwcy5uZWxlbSAhPSAwKQorICAgIG1hdGNoX2xlbnMgPSBjaGVja19tYXRjaGluZ193aXRo X211bHRpYnl0ZV9vcHMgKGQsIHMsIChjaGFyIGNvbnN0ICopICpwcCwgd2MsIG1iY2xlbik7CiAK ICAgLyogQ2FsY3VsYXRlIHRoZSBzdGF0ZSB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSBz dGF0ZSAncycgYnkKLSAgICAgY29uc3VtaW5nICcqbWJjbGVuJyBzaW5nbGUgYnl0ZXMgZnJvbSB0 aGUgYnVmZmVyLiAgKi8KKyAgICAgY29uc3VtaW5nICdtYmNsZW4nIHNpbmdsZSBieXRlcyBmcm9t IHRoZSBidWZmZXIuICAqLwogICBzMSA9IHM7Ci0gIGZvciAoayA9IDA7IGsgPCAqbWJjbGVuOyBr KyspCisgIGZvciAoayA9IDA7IGsgPCBtYmNsZW47IGsrKykKICAgICB7CiAgICAgICBzMiA9IHMx OwogICAgICAgcnMgPSB0cmFuc2l0X3N0YXRlX3NpbmdsZWJ5dGUgKGQsIHMyLCAoKnBwKSsrLCAm czEpOwpAQCAtMzI2MSwxNyArMzE5OCwxMSBAQCB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIg KHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLAogICAvKiBDb3B5IHRoZSBwb3NpdGlvbnMgY29u dGFpbmVkIGJ5ICdzMScgdG8gdGhlIHNldCAnZC0+bWJfZm9sbG93cycuICAqLwogICBjb3B5ICgm KGQtPnN0YXRlc1tzMV0uZWxlbXMpLCBkLT5tYl9mb2xsb3dzKTsKIAotICAvKiBDaGVjayAoaW5w dXQpIG1hdGNoX2xlbnMsIGFuZCBpbml0aWFsaXplIGlmIGl0IGlzIE5VTEwuICAqLwotICBpZiAo bWF0Y2hfbGVucyA9PSBOVUxMICYmIGQtPnN0YXRlc1tzXS5tYnBzLm5lbGVtICE9IDApCi0gICAg d29ya19tYmxzID0gY2hlY2tfbWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzIChkLCBzLCAqcHAg LSBidWZfYmVnaW4pOwotICBlbHNlCi0gICAgd29ya19tYmxzID0gbWF0Y2hfbGVuczsKLQogICAv KiBBZGQgYWxsIG9mIHRoZSBwb3NpdGlvbnMgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSAncycg YnkgY29uc3VtaW5nCiAgICAgIGEgc2luZ2xlIGNoYXJhY3Rlci4gICovCiAgIGZvciAoaSA9IDA7 IGkgPCBkLT5zdGF0ZXNbc10ubWJwcy5uZWxlbTsgaSsrKQogICAgIHsKLSAgICAgIGlmICh3b3Jr X21ibHNbaV0gPT0gKm1iY2xlbikKKyAgICAgIGlmIChtYXRjaF9sZW5zW2ldID09IG1iY2xlbikK ICAgICAgICAgZm9yIChqID0gMDsgaiA8IGQtPmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1icHMuZWxl bXNbaV0uaW5kZXhdLm5lbGVtOwogICAgICAgICAgICAgIGorKykKICAgICAgICAgICBpbnNlcnQg KGQtPmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1icHMuZWxlbXNbaV0uaW5kZXhdLmVsZW1zW2pdLApA QCAtMzI4Niw3ICszMjE3LDggQEAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3Qg ZGZhICpkLCBzdGF0ZV9udW0gcywKICAgIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHNv bWUgb3BlcmF0b3Igd2hpY2ggY2FuIG1hdGNoIHdpdGggYSBtdWx0aS0KICAgIGJ5dGUgY2hhcmFj dGVyIG9yIGEgY29sbGF0aW5nIGVsZW1lbnQgKHdoaWNoIG1heSBiZSBtdWx0aSBjaGFyYWN0ZXJz KS4gICovCiBzdGF0aWMgc3RhdGVfbnVtCi10cmFuc2l0X3N0YXRlIChzdHJ1Y3QgZGZhICpkLCBz dGF0ZV9udW0gcywgdW5zaWduZWQgY2hhciBjb25zdCAqKnBwKQordHJhbnNpdF9zdGF0ZSAoc3Ry dWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCwKKyAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKmVuZCkKIHsKICAgc3RhdGVfbnVtIHMxOwog ICBpbnQgbWJjbGVuOyAgLyogVGhlIGxlbmd0aCBvZiBjdXJyZW50IGlucHV0IG11bHRpYnl0ZSBj aGFyYWN0ZXIuICAqLwpAQCAtMzMwMiw3ICszMjM0LDggQEAgdHJhbnNpdF9zdGF0ZSAoc3RydWN0 IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCkKICAgICAgICBX ZSBjaGVjayB3aGV0aGVyIGVhY2ggb2YgdGhlbSBjYW4gbWF0Y2ggb3Igbm90LiAgKi8KICAgICB7 CiAgICAgICAvKiBOb3RlOiBjYWxsZXIgbXVzdCBmcmVlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhp cyBmdW5jdGlvbi4gICovCi0gICAgICBtYXRjaF9sZW5zID0gY2hlY2tfbWF0Y2hpbmdfd2l0aF9t dWx0aWJ5dGVfb3BzIChkLCBzLCAqcHAgLSBidWZfYmVnaW4pOworICAgICAgbWJjbGVuID0gbWJz X3RvX3djaGFyIChkLCAmd2MsIChjaGFyIGNvbnN0ICopICpwcCwgZW5kIC0gKnBwLCAmbWJzKTsK KyAgICAgIG1hdGNoX2xlbnMgPSBjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKGQs IHMsIChjaGFyIGNvbnN0ICopICpwcCwgd2MsIG1iY2xlbik7CiAKICAgICAgIGZvciAoaSA9IDA7 IGkgPCBuZWxlbTsgaSsrKQogICAgICAgICAvKiBTZWFyY2ggdGhlIG9wZXJhdG9yIHdoaWNoIG1h dGNoIHRoZSBsb25nZXN0IHN0cmluZywKQEAgLTMzMzQsMTUgKzMyNjcsMTUgQEAgdHJhbnNpdF9z dGF0ZSAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipw cCkKICAgICAgbm90IGJlIGEgY2hhcmFjdGVyIGJ1dCBhIChtdWx0aSBjaGFyYWN0ZXIpIGNvbGxh dGluZyBlbGVtZW50LgogICAgICBXZSBlbnVtZXJhdGUgYWxsIG9mIHRoZSBwb3NpdGlvbnMgd2hp Y2ggJ3MnIGNhbiByZWFjaCBieSBjb25zdW1pbmcKICAgICAgJ21heGxlbicgYnl0ZXMuICAqLwot ICB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKGQsIHMsIHBwLCBtYXRjaF9sZW5zLCAmbWJj bGVuKTsKKyAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzLCBwcCwgd2MsIG1iY2xl biwgbWF0Y2hfbGVucyk7CiAKLSAgd2MgPSBkLT5pbnB1dHdjc1sqcHAgLSBtYmNsZW4gLSBidWZf YmVnaW5dOwogICBzMSA9IHN0YXRlX2luZGV4IChkLCBkLT5tYl9mb2xsb3dzLCB3Y2hhcl9jb250 ZXh0ICh3YykpOwogICByZWFsbG9jX3RyYW5zX2lmX25lY2Vzc2FyeSAoZCwgczEpOwogCiAgIHdo aWxlICgqcHAgLSBwMSA8IG1heGxlbikKICAgICB7Ci0gICAgICB0cmFuc2l0X3N0YXRlX2NvbnN1 bWVfMWNoYXIgKGQsIHMxLCBwcCwgTlVMTCwgJm1iY2xlbik7CisgICAgICBtYmNsZW4gPSBtYnNf dG9fd2NoYXIgKGQsICZ3YywgKGNoYXIgY29uc3QgKikgKnBwLCBlbmQgLSAqcHAsICZtYnMpOwor ICAgICAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzMSwgcHAsIHdjLCBtYmNsZW4s IE5VTEwpOwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmVsZW07IGkrKykKICAgICAgICAgewpA QCAtMzM1Myw0NiArMzI4NiwxMiBAQCB0cmFuc2l0X3N0YXRlIChzdHJ1Y3QgZGZhICpkLCBzdGF0 ZV9udW0gcywgdW5zaWduZWQgY2hhciBjb25zdCAqKnBwKQogICAgICAgICAgICAgICAgICAgICAg IGQtPm1iX2ZvbGxvd3MpOwogICAgICAgICB9CiAKLSAgICAgIHdjID0gZC0+aW5wdXR3Y3NbKnBw IC0gbWJjbGVuIC0gYnVmX2JlZ2luXTsKICAgICAgIHMxID0gc3RhdGVfaW5kZXggKGQsIGQtPm1i X2ZvbGxvd3MsIHdjaGFyX2NvbnRleHQgKHdjKSk7CiAgICAgICByZWFsbG9jX3RyYW5zX2lmX25l Y2Vzc2FyeSAoZCwgczEpOwogICAgIH0KICAgcmV0dXJuIHMxOwogfQogCi0KLS8qIEluaXRpYWxp emUgbWJsZW5fYnVmIGFuZCBpbnB1dHdjcyB3aXRoIGRhdGEgZnJvbSB0aGUgbmV4dCBsaW5lLiAg Ki8KLQotc3RhdGljIHZvaWQKLXByZXBhcmVfd2NfYnVmIChzdHJ1Y3QgZGZhICpkLCBjb25zdCBj aGFyICpiZWdpbiwgY29uc3QgY2hhciAqZW5kKQotewotI2lmIE1CU19TVVBQT1JUCi0gIHVuc2ln bmVkIGNoYXIgZW9sID0gZW9sYnl0ZTsKLSAgc2l6ZV90IGk7Ci0gIHNpemVfdCBpbGltID0gZW5k IC0gYmVnaW4gKyAxOwotCi0gIGJ1Zl9iZWdpbiA9ICh1bnNpZ25lZCBjaGFyICopIGJlZ2luOwot Ci0gIGZvciAoaSA9IDA7IGkgPCBpbGltOyBpKyspCi0gICAgewotICAgICAgc2l6ZV90IG5ieXRl cyA9IG1ic190b193Y2hhciAoZCwgZC0+aW5wdXR3Y3MgKyBpLCBiZWdpbiArIGksIGlsaW0gLSBp LCAmbWJzKTsKLSAgICAgIGQtPm1ibGVuX2J1ZltpXSA9IG5ieXRlcyAtIChuYnl0ZXMgPT0gMSk7 Ci0gICAgICBpZiAoYmVnaW5baV0gPT0gZW9sKQotICAgICAgICBicmVhazsKLSAgICAgIHdoaWxl ICgtLW5ieXRlcyAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgaSsrOwotICAgICAgICAgIGQt Pm1ibGVuX2J1ZltpXSA9IG5ieXRlczsKLSAgICAgICAgICBkLT5pbnB1dHdjc1tpXSA9IDA7Ci0g ICAgICAgIH0KLSAgICB9Ci0KLSAgYnVmX2VuZCA9ICh1bnNpZ25lZCBjaGFyICopIChiZWdpbiAr IGkpOwotICBkLT5tYmxlbl9idWZbaV0gPSAwOwotICBkLT5pbnB1dHdjc1tpXSA9IDA7ICAgICAg ICAgICAgICAvKiBzZW50aW5lbCAqLwotI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCi19Ci0KIC8q IFNlYXJjaCB0aHJvdWdoIGEgYnVmZmVyIGxvb2tpbmcgZm9yIGEgbWF0Y2ggdG8gdGhlIGdpdmVu IHN0cnVjdCBkZmEuCiAgICBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIG1h dGNoaW5nIHRoZSByZWdleHAgaW4gdGhlCiAgICBidWZmZXIsIGFuZCB0aGUgc2hvcnRlc3QgcG9z c2libGUgdmVyc2lvbiB0aGVyZW9mLiAgUmV0dXJuIGEgcG9pbnRlciB0bwpAQCAtMzQxMCw3ICsz MzA5LDcgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4sIGNoYXIg KmVuZCwKICAgICAgICAgIGludCBhbGxvd19ubCwgc2l6ZV90ICpjb3VudCwgaW50ICpiYWNrcmVm KQogewogICBzdGF0ZV9udW0gcywgczE7ICAgICAgICAgICAgICAvKiBDdXJyZW50IHN0YXRlLiAg Ki8KLSAgdW5zaWduZWQgY2hhciBjb25zdCAqcDsgICAgICAgLyogQ3VycmVudCBpbnB1dCBjaGFy YWN0ZXIuICAqLworICB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCAqbWJwOyAvKiBDdXJyZW50IGlu cHV0IGNoYXJhY3Rlci4gICovCiAgIHN0YXRlX251bSAqKnRyYW5zLCAqdDsgICAgICAgIC8qIENv cHkgb2YgZC0+dHJhbnMgc28gaXQgY2FuIGJlIG9wdGltaXplZAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnRvIGEgcmVnaXN0ZXIuICAqLwogICB1bnNpZ25lZCBjaGFyIGVv bCA9IGVvbGJ5dGU7ICAvKiBMaWtld2lzZSBmb3IgZW9sYnl0ZS4gICovCkBAIC0zNDIwLDcgKzMz MTksNyBAQCBkZmFleGVjIChzdHJ1Y3QgZGZhICpkLCBjaGFyIGNvbnN0ICpiZWdpbiwgY2hhciAq ZW5kLAogICAgIGJ1aWxkX3N0YXRlX3plcm8gKGQpOwogCiAgIHMgPSBzMSA9IDA7Ci0gIHAgPSAo dW5zaWduZWQgY2hhciBjb25zdCAqKSBiZWdpbjsKKyAgcCA9IG1icCA9ICh1bnNpZ25lZCBjaGFy IGNvbnN0ICopIGJlZ2luOwogICB0cmFucyA9IGQtPnRyYW5zOwogICBzYXZlZF9lbmQgPSAqKHVu c2lnbmVkIGNoYXIgKikgZW5kOwogICAqZW5kID0gZW9sOwpAQCAtMzQyOCwxMCArMzMyNyw3IEBA IGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAg IGlmIChkLT5tYl9jdXJfbWF4ID4gMSkKICAgICB7CiAgICAgICBzdGF0aWMgYm9vbCBtYl9hbGxv YyA9IGZhbHNlOwotICAgICAgUkVBTExPQ19JRl9ORUNFU1NBUlkgKGQtPm1ibGVuX2J1ZiwgZC0+ bm1ibGVuX2J1ZiwgZW5kIC0gYmVnaW4gKyAyKTsKLSAgICAgIFJFQUxMT0NfSUZfTkVDRVNTQVJZ IChkLT5pbnB1dHdjcywgZC0+bmlucHV0d2NzLCBlbmQgLSBiZWdpbiArIDIpOwogICAgICAgbWVt c2V0ICgmbWJzLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOwotICAgICAgcHJlcGFyZV93Y19idWYg KGQsIChjb25zdCBjaGFyICopIHAsIGVuZCk7CiAgICAgICBpZiAoIW1iX2FsbG9jKQogICAgICAg ICB7CiAgICAgICAgICAgTUFMTE9DIChkLT5tYl9tYXRjaF9sZW5zLCBkLT5ubGVhdmVzKTsKQEAg LTM0NDcsMTAgKzMzNDMsMzIgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAq YmVnaW4sIGNoYXIgKmVuZCwKICAgICAgICAgewogICAgICAgICAgIHdoaWxlICgodCA9IHRyYW5z W3NdKSAhPSBOVUxMKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAocCA+IGJ1Zl9l bmQpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIHMxID0gczsKLSAgICAg ICAgICAgICAgU0tJUF9SRU1BSU5TX01CX0lGX0lOSVRJQUxfU1RBVEUgKHMsIHApOworCisgICAg ICAgICAgICAgIGlmIChzID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgLyogVGhlIGluaXRpYWwgc3RhdGUgbWF5IGVuY291bnRlciBhIGJ5dGUgd2hpY2ggaXMgbm90 CisgICAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSBieXRlIGNoYXJhY3RlciBub3IgdGhlIGZp cnN0IGJ5dGUgb2YgYQorICAgICAgICAgICAgICAgICAgICAgbXVsdGlieXRlIGNoYXJhY3Rlci4g IEJ1dCBpdCBpcyBpbmNvcnJlY3QgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgaW5pdGlh bCBzdGF0ZSB0byBhY2NlcHQgc3VjaCBhIGJ5dGUuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAg ICAgICAgICAgIGluIFNoaWZ0IEpJUyB0aGUgcmVndWxhciBleHByZXNzaW9uICJcXCIgYWNjZXB0 cworICAgICAgICAgICAgICAgICAgICAgdGhlIGNvZGVwb2ludCAweDVjLCBidXQgc2hvdWxkIG5v dCBhY2NlcHQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgYnl0ZSBvZiB0aGUgY29k ZXBvaW50IDB4ODE1Yy4gIFRoZW4gdGhlIGluaXRpYWwKKyAgICAgICAgICAgICAgICAgICAgIHN0 YXRlIG11c3Qgc2tpcCB0aGUgYnl0ZXMgdGhhdCBhcmUgbm90IGEgc2luZ2xlCisgICAgICAgICAg ICAgICAgICAgICBieXRlIGNoYXJhY3RlciBub3IgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5 dGUKKyAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rlci4gICovCisgICAgICAgICAgICAgICAg ICB3Y2hhcl90IHdjOworICAgICAgICAgICAgICAgICAgd2hpbGUgKG1icCA8IHApCisgICAgICAg ICAgICAgICAgICAgIG1icCArPSBtYnNfdG9fd2NoYXIgKGQsICZ3YywgKGNoYXIgY29uc3QgKikg bWJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSAoY2hh ciBjb25zdCAqKSBtYnAsICZtYnMpOworICAgICAgICAgICAgICAgICAgcCA9IG1icDsKKworICAg ICAgICAgICAgICAgICAgaWYgKChjaGFyICopIHAgPj0gZW5kKQorICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgKmVuZCA9IHNhdmVkX2VuZDsKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KIAogICAgICAgICAgICAgICBpZiAoZC0+c3RhdGVzW3NdLm1icHMubmVsZW0gPT0g MCkKICAgICAgICAgICAgICAgICB7CkBAIC0zNDcxLDcgKzMzODksOCBAQCBkZmFleGVjIChzdHJ1 Y3QgZGZhICpkLCBjaGFyIGNvbnN0ICpiZWdpbiwgY2hhciAqZW5kLAogCiAgICAgICAgICAgICAg IC8qIENhbiBtYXRjaCB3aXRoIGEgbXVsdGlieXRlIGNoYXJhY3RlciAoYW5kIG11bHRpIGNoYXJh Y3RlcgogICAgICAgICAgICAgICAgICBjb2xsYXRpbmcgZWxlbWVudCkuICBUcmFuc2l0aW9uIHRh YmxlIG1pZ2h0IGJlIHVwZGF0ZWQuICAqLwotICAgICAgICAgICAgICBzID0gdHJhbnNpdF9zdGF0 ZSAoZCwgcywgJnApOworICAgICAgICAgICAgICBzID0gdHJhbnNpdF9zdGF0ZSAoZCwgcywgJnAs ICh1bnNpZ25lZCBjaGFyICopIGVuZCk7CisgICAgICAgICAgICAgIG1icCA9IHA7CiAgICAgICAg ICAgICAgIHRyYW5zID0gZC0+dHJhbnM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM1 MDYsNyArMzQyNSw4IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJlZ2lu LCBjaGFyICplbmQsCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIC8qIENhbiBtYXRjaCB3 aXRoIGEgbXVsdGlieXRlIGNoYXJhY3RlciAoYW5kIG11bHRpY2hhcmFjdGVyCiAgICAgICAgICAg ICAgICAgIGNvbGxhdGluZyBlbGVtZW50KS4gIFRyYW5zaXRpb24gdGFibGUgbWlnaHQgYmUgdXBk YXRlZC4gICovCi0gICAgICAgICAgICAgIHMgPSB0cmFuc2l0X3N0YXRlIChkLCBzLCAmcCk7Cisg ICAgICAgICAgICAgIHMgPSB0cmFuc2l0X3N0YXRlIChkLCBzLCAmcCwgKHVuc2lnbmVkIGNoYXIg KikgZW5kKTsKKyAgICAgICAgICAgICAgbWJwID0gcDsKICAgICAgICAgICAgICAgdHJhbnMgPSBk LT50cmFuczsKICAgICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCkBAIC0zNTE1LDE0ICszNDM1 LDggQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4sIGNoYXIgKmVu ZCwKICAgICAgICAgfQogCiAgICAgICAvKiBJZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHdhcyBh IG5ld2xpbmUsIGNvdW50IGl0LiAgKi8KLSAgICAgIGlmICgoY2hhciAqKSBwIDw9IGVuZCAmJiBw Wy0xXSA9PSBlb2wpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY291bnQpCi0gICAgICAgICAg ICArKypjb3VudDsKLQotICAgICAgICAgIGlmIChkLT5tYl9jdXJfbWF4ID4gMSkKLSAgICAgICAg ICAgIHByZXBhcmVfd2NfYnVmIChkLCAoY29uc3QgY2hhciAqKSBwLCBlbmQpOwotICAgICAgICB9 CisgICAgICBpZiAoKGNoYXIgKikgcCA8PSBlbmQgJiYgcFstMV0gPT0gZW9sICYmIGNvdW50KQor ICAgICAgICArKypjb3VudDsKIAogICAgICAgLyogQ2hlY2sgaWYgd2UndmUgcnVuIG9mZiB0aGUg ZW5kIG9mIHRoZSBidWZmZXIuICAqLwogICAgICAgaWYgKChjaGFyICopIHAgPiBlbmQpCkBAIC0z NTc4LDggKzM0OTIsNiBAQCBmcmVlX21iZGF0YSAoc3RydWN0IGRmYSAqZCkKICAgZC0+bWJjc2V0 cyA9IE5VTEw7CiAgIGQtPm5tYmNzZXRzID0gMDsKIAotICBmcmVlIChkLT5tYmxlbl9idWYpOwot ICBmcmVlIChkLT5pbnB1dHdjcyk7CiAgIGlmIChkLT5tYl9mb2xsb3dzICE9IE5VTEwpCiAgICAg ZnJlZSAoZC0+bWJfZm9sbG93cy0+ZWxlbXMpOwogICBmcmVlIChkLT5tYl9mb2xsb3dzKTsKLS0g CjEuOS4xCgo= --------_5337434D000000003F21_MULTIPART_MIXED_-- From debbugs-submit-bounces@debbugs.gnu.org Sun Mar 30 07:14:47 2014 Received: (at 17070) by debbugs.gnu.org; 30 Mar 2014 11:14:47 +0000 Received: from localhost ([127.0.0.1]:56778 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WUDhM-00085O-On for submit@debbugs.gnu.org; Sun, 30 Mar 2014 07:14:46 -0400 Received: from pbsg501.nifty.com ([202.248.238.71]:50886) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WUDhE-000857-Kx for 17070@debbugs.gnu.org; Sun, 30 Mar 2014 07:14:41 -0400 Received: from [10.120.1.60] (i118-21-128-66.s30.a048.ap.plala.or.jp [118.21.128.66]) (authenticated) by pbsg501.nifty.com with ESMTP id s2UBEJ3g001838 for <17070@debbugs.gnu.org>; Sun, 30 Mar 2014 20:14:20 +0900 X-Nifty-SrcIP: [118.21.128.66] Date: Sun, 30 Mar 2014 20:14:21 +0900 From: Norihiro Tanaka To: 17070@debbugs.gnu.org Subject: bug#17070: [PATCH] grep: optimization of DFA by reuse of multi-byte buffers in non-UTF8 locales In-Reply-To: <20140329023458.063E.27F6AC2D@kcn.ne.jp> References: <20140323221557.0464.27F6AC2D@kcn.ne.jp> <20140329023458.063E.27F6AC2D@kcn.ne.jp> Message-Id: <20140330201420.6040.27F6AC2D@kcn.ne.jp> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_5337434D000000003F21_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.65.07 [ja] X-Spam-Score: 2.1 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: I added further improvement to previous patch. If dfaexec() runs in non-UTF8 locales, length and wide character representation are checked for all characters of a line in a input string. However, if matched early in the line, results for remaining characters are wasted. [...] Content analysis details: (2.1 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [202.248.238.71 listed in psbl.surriel.com] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.6 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain X-Debbugs-Envelope-To: 17070 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 2.1 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: I added further improvement to previous patch. If dfaexec() runs in non-UTF8 locales, length and wide character representation are checked for all characters of a line in a input string. However, if matched early in the line, results for remaining characters are wasted. [...] Content analysis details: (2.1 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 2.7 RCVD_IN_PSBL RBL: Received via a relay in PSBL [202.248.238.71 listed in psbl.surriel.com] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.6 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain --------_5337434D000000003F21_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit I added further improvement to previous patch. If dfaexec() runs in non-UTF8 locales, length and wide character representation are checked for all characters of a line in a input string. However, if matched early in the line, results for remaining characters are wasted. The new patch doesn't reuse both `mblen_buf' and `inputwcs' but stops using them, and checks multibyte characters on demand. It enables to accomplish to speed-up for matched early and reduce required memories. Norihiro --------_5337434D000000003F21_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 RnJvbSA2ZGU0MTM3YmY4YzVjMjM3Y2MzNWMyZWVjZjZmZTE0OWRiNDc4YmNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBXZWQsIDI2IE1hciAyMDE0IDIyOjE0OjE5ICswOTAwClN1YmplY3Q6IFtQQVRDSCAxLzJd IGdyZXA6IG9wdGltaXphdGlvbiBvZiBERkEgYnkgcmV1c2Ugb2YgbXVsdGktYnl0ZSBidWZmZXJz CiBpbiBub24tVVRGOCBsb2NhbGVzCgoqIHNyYy9kZmEuYyAoc3RydWN0IGRmYSk6IE5ldyBtZW1i ZXJzIGBtYmxlbl9idWYnLCBgbm1ibGVuX2J1ZicsCmBpbnB1dHdjcycsIGBuaW5wdXR3Y3MnLCBg bWJfZm9sbG93cycgYW5kIGBtYl9tYXRjaF9sZW5zJy4KKFNLSVBfUkVNQUlOU19NQl9JRl9JTklU SUFMX1NUQVRFKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoobWF0Y2hf YW55Y2hhcik6IFVzZSB0aGVtIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKG1hdGNoX21i X2NoYXJzZXQpOiBVc2UgdGhlbSBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCihjaGVja19t YXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMpOiBVc2UgaXQgaW5zdGVhZCBvZiBuZXcgYWxsb2Nh dGlvbi4KKHRyYW5zaXRfc3RhdGVfY29uc3VtZV8xY2hhcik6IFVzZSB0aGVtIGluc3RlYWQgb2Yg Z2xvYmFsIHZhcmlhYmxlcy4KKHRyYW5zaXRfc3RhdGUpOiBVc2UgdGhlbSBpbnN0ZWFkIG9mIGds b2JhbCB2YXJpYWJsZXMuCihwcmVwYXJlX3djX2J1Zik6IFVzZSB0aGVtIGluc3RlYWQgb2YgZ2xv YmFsIHZhcmlhYmxlcy4KKGRmYWV4ZWMpOiBJbml0aWFsaXphdGlvbnMgb2YgbmV3IG1lbWJlcnMu CihmcmVlX21iZGF0YSk6IE1lbW9yeSBEZWFsbG9jYXRpb25zIGZvciBuZXcgbWVtYmVycy4KLS0t CiBzcmMvZGZhLmMgfCAxMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCsp LCA2NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvZGZhLmMgYi9zcmMvZGZhLmMKaW5k ZXggYjIyZmU5Ny4uYWRmZTQ1MCAxMDA2NDQKLS0tIGEvc3JjL2RmYS5jCisrKyBiL3NyYy9kZmEu YwpAQCAtNDM2LDYgKzQzNiwzMCBAQCBzdHJ1Y3QgZGZhCiAgIHN0cnVjdCBkZmFtdXN0ICptdXN0 czsgICAgICAgIC8qIExpc3Qgb2Ygc3RyaW5ncywgYXQgbGVhc3Qgb25lIG9mIHdoaWNoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGtub3duIHRvIGFwcGVhciBpbiBhbnkg ci5lLiBtYXRjaGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGZh LiAgKi8KKyAgdW5zaWduZWQgY2hhciAqbWJsZW5fYnVmOyAgICAgLyogQ29ycmVzcG9uZCB0byB0 aGUgaW5wdXQgYnVmZmVyIGluIGRmYWV4ZWMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVhY2ggZWxlbWVudCBzdG9yZXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcg bXVsdGlieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBp biB0aGUgaW5wdXQgc3RyaW5nLiAgQSBlbGVtZW50J3MKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgaXMgMCBpZiB0aGUgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIgaXMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlLWJ5dGUuCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4sIGlucHV0IDogJ2EnLCA8bWIoMCk+LCA8 bWIoMSk+LCA8bWIoMik+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ibGVu X2J1ZiAgIDogIDAsICAgICAgIDMsICAgICAgIDIsICAgICAgIDEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisgIHNpemVfdCBubWJsZW5fYnVmOyAgICAgICAgICAgIC8qIExl bmd0aCBvZiB0aGUgbWJsZW4gYnVmZmVyIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhbGxvY2F0ZWQuICAqLworICB3Y2hhcl90ICppbnB1dHdjczsgICAgICAg ICAgICAvKiBXaWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGluIGRmYWV4ZWMuCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhpcyBhcnJheSBpcyB0 aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGVuZ3Ro IG9mIGlucHV0IHN0cmluZyAoY2hhciBhcnJheSkuCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlucHV0c3RyaW5nW2ldIGlzIGEgc2luZ2xlLWJ5dGUgY2hhciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5 dGUgY2hhcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXR3Y3NbaV0g aXMgdGhlIGNvZGVwb2ludC4gICovCisgIHNpemVfdCBuaW5wdXR3Y3M7ICAgICAgICAgICAgIC8q IExlbmd0aCBvZiB0aGUgaW5wdXQgd2lkZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRseSBhbGxvY2F0ZWQuICAqLworICBwb3NpdGlvbl9zZXQg Km1iX2ZvbGxvd3M7ICAgICAvKiBGb2xsb3cgc2V0IGFkZGVkIGJ5IEFOWUNIQVIgYW5kL29yIE1C Q1NFVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBkZW1hbmQuICAqLwor ICBpbnQgKm1iX21hdGNoX2xlbnM7ICAgICAgICAgICAvKiBBcnJheSBvZiBsZW5ndGggcmVkdWNl ZCBieSBBTllDSEFSIGFuZC9vcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN QkNTRVQuICAqLwogfTsKIAogLyogU29tZSBtYWNyb3MgZm9yIHVzZXIgYWNjZXNzIHRvIGRmYSBp bnRlcm5hbHMuICAqLwpAQCAtODc3LDIyICs5MDEsNiBAQCBzdGF0aWMgaW50IGN1cl9tYl9sZW4g PSAxOyAgICAgIC8qIExlbmd0aCBvZiB0aGUgbXVsdGlieXRlIHJlcHJlc2VudGF0aW9uIG9mCiBz dGF0aWMgbWJzdGF0ZV90IG1iczsgICAgICAgICAgIC8qIG1ic3RhdGUgZm9yIG1icnRvd2MuICAq Lwogc3RhdGljIHdjaGFyX3Qgd2N0b2s7ICAgICAgICAgICAvKiBXaWRlIGNoYXJhY3RlciByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyICptYmxl bl9idWY7LyogQ29ycmVzcG9uZCB0byB0aGUgaW5wdXQgYnVmZmVyIGluIGRmYWV4ZWMuCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggZWxlbWVudCBzdG9yZXMgdGhlIG51 bWJlciBvZiByZW1haW5pbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0 ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbXVsdGlieXRlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgc3RyaW5nLiAgQSBlbGVtZW50J3MK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgMCBpZiB0aGUgY29y cmVzcG9uZGluZyBjaGFyYWN0ZXIgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2luZ2xlLWJ5dGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4s IGlucHV0IDogJ2EnLCA8bWIoMCk+LCA8bWIoMSk+LCA8bWIoMik+Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ibGVuX2J1ZiAgIDogIDAsICAgICAgIDMsICAgICAgIDIsICAg ICAgIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1zdGF0aWMgd2NoYXJf dCAqaW5wdXR3Y3M7ICAgICAgIC8qIFdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uIG9mIHRo ZSBpbnB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgaW4gZGZh ZXhlYy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0 aGlzIGFycmF5IGlzIHRoZSBzYW1lIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoZSBsZW5ndGggb2YgaW5wdXQgc3RyaW5nIChjaGFyIGFycmF5KS4KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzdHJpbmdbaV0gaXMgYSBzaW5nbGUtYnl0ZSBj aGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgZmlyc3QgYnl0 ZSBvZiBhIG11bHRpYnl0ZSBjaGFyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dHdjc1tpXSBpcyB0aGUgY29kZXBvaW50LiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFy IGNvbnN0ICpidWZfYmVnaW47ICAvKiByZWZlcmVuY2UgdG8gYmVnaW4gaW4gZGZhZXhlYy4gICov CiBzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmX2VuZDsgICAgLyogcmVmZXJlbmNlIHRv IGVuZCBpbiBkZmFleGVjLiAgKi8KIApAQCAtMjk2MCwxNCArMjk2OCwxMiBAQCBidWlsZF9zdGF0 ZV96ZXJvIChzdHJ1Y3QgZGZhICpkKQogI2RlZmluZSBTS0lQX1JFTUFJTlNfTUJfSUZfSU5JVElB TF9TVEFURShzLCBwKQkJXAogICBpZiAocyA9PSAwKQkJCQkJCVwKICAgICB7CQkJCQkJCVwKLSAg ICAgIHdoaWxlIChpbnB1dHdjc1twIC0gYnVmX2JlZ2luXSA9PSAwCQlcCi0gICAgICAgICAgICAm JiBtYmxlbl9idWZbcCAtIGJ1Zl9iZWdpbl0gPiAwCQlcCisgICAgICB3aGlsZSAoZC0+aW5wdXR3 Y3NbcCAtIGJ1Zl9iZWdpbl0gPT0gMAkJXAorICAgICAgICAgICAgJiYgZC0+bWJsZW5fYnVmW3Ag LSBidWZfYmVnaW5dID4gMAkJXAogICAgICAgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIgY29uc3Qg KikgcCA8IGJ1Zl9lbmQpCVwKICAgICAgICAgKytwOwkJCQkJCVwKICAgICAgIGlmICgoY2hhciAq KSBwID49IGVuZCkJCQkJXAogICAgICAgICB7CQkJCQkJXAotICAgICAgICAgIGZyZWUgKG1ibGVu X2J1Zik7CQkJCVwKLSAgICAgICAgICBmcmVlIChpbnB1dHdjcyk7CQkJCVwKICAgICAgICAgICAq ZW5kID0gc2F2ZWRfZW5kOwkJCQlcCiAgICAgICAgICAgcmV0dXJuIE5VTEw7CQkJCQlcCiAgICAg ICAgIH0JCQkJCQlcCkBAIC0zMDYxLDggKzMwNjcsOCBAQCBtYXRjaF9hbnljaGFyIChzdHJ1Y3Qg ZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICB3Y2hhcl90 IHdjOwogICBpbnQgbWJjbGVuOwogCi0gIHdjID0gaW5wdXR3Y3NbaWR4XTsKLSAgbWJjbGVuID0g KG1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IG1ibGVuX2J1ZltpZHhdOworICB3YyA9IGQtPmlu cHV0d2NzW2lkeF07CisgIG1iY2xlbiA9IChkLT5tYmxlbl9idWZbaWR4XSA9PSAwKSA/IDEgOiBk LT5tYmxlbl9idWZbaWR4XTsKIAogICAvKiBDaGVjayBzeW50YXggYml0cy4gICovCiAgIGlmICh3 YyA9PSAod2NoYXJfdCkgZW9sYnl0ZSkKQEAgLTMxMDMsNyArMzEwOSw3IEBAIG1hdGNoX21iX2No YXJzZXQgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBwb3NpdGlvbiBwb3MsIHNpemVfdCBp ZHgpCiAgIGludCBjb250ZXh0OwogICB3Y2hhcl90IHdjOyAgICAgICAgICAgICAgICAgICAvKiBD dXJyZW50IHJlZmVycmluZyBjaGFyYWN0ZXIuICAqLwogCi0gIHdjID0gaW5wdXR3Y3NbaWR4XTsK KyAgd2MgPSBkLT5pbnB1dHdjc1tpZHhdOwogCiAgIC8qIENoZWNrIHN5bnRheCBiaXRzLiAgKi8K ICAgaWYgKHdjID09ICh3Y2hhcl90KSBlb2xieXRlKQpAQCAtMzEyNCw3ICszMTMwLDcgQEAgbWF0 Y2hfbWJfY2hhcnNldCAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHBvc2l0aW9uIHBvcywg c2l6ZV90IGlkeCkKICAgLyogQXNzaWduIHRoZSBjdXJyZW50IHJlZmVycmluZyBvcGVyYXRvciB0 byB3b3JrX21iYy4gICovCiAgIHdvcmtfbWJjID0gJihkLT5tYmNzZXRzWyhkLT5tdWx0aWJ5dGVf cHJvcFtwb3MuaW5kZXhdKSA+PiAyXSk7CiAgIG1hdGNoID0gIXdvcmtfbWJjLT5pbnZlcnQ7Ci0g IG1hdGNoX2xlbiA9IChtYmxlbl9idWZbaWR4XSA9PSAwKSA/IDEgOiBtYmxlbl9idWZbaWR4XTsK KyAgbWF0Y2hfbGVuID0gKGQtPm1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IGQtPm1ibGVuX2J1 ZltpZHhdOwogCiAgIC8qIE1hdGNoIGluIHJhbmdlIDAtMjU1PyAgKi8KICAgaWYgKHdjIDwgTk9U Q0hBUiAmJiB3b3JrX21iYy0+Y3NldCAhPSAtMQpAQCAtMzIwMiw3ICszMjA4LDcgQEAgY2hlY2tf bWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywg c2l6ZV90IGlkeCkKICAgc2l6ZV90IGk7CiAgIGludCAqcmFycmF5OwogCi0gIE1BTExPQyAocmFy cmF5LCBkLT5zdGF0ZXNbc10ubWJwcy5uZWxlbSk7CisgIHJhcnJheSA9IGQtPm1iX21hdGNoX2xl bnM7CiAgIGZvciAoaSA9IDA7IGkgPCBkLT5zdGF0ZXNbc10ubWJwcy5uZWxlbTsgKytpKQogICAg IHsKICAgICAgIHBvc2l0aW9uIHBvcyA9IGQtPnN0YXRlc1tzXS5tYnBzLmVsZW1zW2ldOwpAQCAt MzIzMiw3ICszMjM4LDcgQEAgY2hlY2tfbWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzIChzdHJ1 Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgc2l6ZV90IGlkeCkKIHN0YXRpYyBzdGF0dXNfdHJhbnNp dF9zdGF0ZQogdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0 ZV9udW0gcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjb25z dCAqKnBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1hdGNoX2xlbnMsIGlu dCAqbWJjbGVuLCBwb3NpdGlvbl9zZXQgKiBwcHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqbWF0Y2hfbGVucywgaW50ICptYmNsZW4pCiB7CiAgIHNpemVfdCBpLCBqOwogICBp bnQgazsKQEAgLTMyNDIsNyArMzI0OCw3IEBAIHRyYW5zaXRfc3RhdGVfY29uc3VtZV8xY2hhciAo c3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsCiAKICAgLyogQ2FsY3VsYXRlIHRoZSBsZW5ndGgg b2YgdGhlIChzaW5nbGUvbXVsdGkgYnl0ZSkgY2hhcmFjdGVyCiAgICAgIHRvIHdoaWNoIHAgcG9p bnRzLiAgKi8KLSAgKm1iY2xlbiA9IChtYmxlbl9idWZbKnBwIC0gYnVmX2JlZ2luXSA9PSAwKSA/ IDEgOiBtYmxlbl9idWZbKnBwIC0gYnVmX2JlZ2luXTsKKyAgKm1iY2xlbiA9IChkLT5tYmxlbl9i dWZbKnBwIC0gYnVmX2JlZ2luXSA9PSAwKSA/IDEgOiBkLT5tYmxlbl9idWZbKnBwIC0gYnVmX2Jl Z2luXTsKIAogICAvKiBDYWxjdWxhdGUgdGhlIHN0YXRlIHdoaWNoIGNhbiBiZSByZWFjaGVkIGZy b20gdGhlIHN0YXRlICdzJyBieQogICAgICBjb25zdW1pbmcgJyptYmNsZW4nIHNpbmdsZSBieXRl cyBmcm9tIHRoZSBidWZmZXIuICAqLwpAQCAtMzI1Miw4ICszMjU4LDggQEAgdHJhbnNpdF9zdGF0 ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywKICAgICAgIHMyID0g czE7CiAgICAgICBycyA9IHRyYW5zaXRfc3RhdGVfc2luZ2xlYnl0ZSAoZCwgczIsICgqcHApKyss ICZzMSk7CiAgICAgfQotICAvKiBDb3B5IHRoZSBwb3NpdGlvbnMgY29udGFpbmVkIGJ5ICdzMScg dG8gdGhlIHNldCAncHBzJy4gICovCi0gIGNvcHkgKCYoZC0+c3RhdGVzW3MxXS5lbGVtcyksIHBw cyk7CisgIC8qIENvcHkgdGhlIHBvc2l0aW9ucyBjb250YWluZWQgYnkgJ3MxJyB0byB0aGUgc2V0 ICdkLT5tYl9mb2xsb3dzJy4gICovCisgIGNvcHkgKCYoZC0+c3RhdGVzW3MxXS5lbGVtcyksIGQt Pm1iX2ZvbGxvd3MpOwogCiAgIC8qIENoZWNrIChpbnB1dCkgbWF0Y2hfbGVucywgYW5kIGluaXRp YWxpemUgaWYgaXQgaXMgTlVMTC4gICovCiAgIGlmIChtYXRjaF9sZW5zID09IE5VTEwgJiYgZC0+ c3RhdGVzW3NdLm1icHMubmVsZW0gIT0gMCkKQEAgLTMyNjgsMTIgKzMyNzQsMTAgQEAgdHJhbnNp dF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywKICAgICAg IGlmICh3b3JrX21ibHNbaV0gPT0gKm1iY2xlbikKICAgICAgICAgZm9yIChqID0gMDsgaiA8IGQt PmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1icHMuZWxlbXNbaV0uaW5kZXhdLm5lbGVtOwogICAgICAg ICAgICAgIGorKykKLSAgICAgICAgICBpbnNlcnQgKGQtPmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1i cHMuZWxlbXNbaV0uaW5kZXhdLmVsZW1zW2pdLCBwcHMpOworICAgICAgICAgIGluc2VydCAoZC0+ Zm9sbG93c1tkLT5zdGF0ZXNbc10ubWJwcy5lbGVtc1tpXS5pbmRleF0uZWxlbXNbal0sCisgICAg ICAgICAgICBkLT5tYl9mb2xsb3dzKTsKICAgICB9CiAKLSAgaWYgKG1hdGNoX2xlbnMgPT0gTlVM TCAmJiB3b3JrX21ibHMgIT0gTlVMTCkKLSAgICBmcmVlICh3b3JrX21ibHMpOwotCiAgIC8qIEZJ WE1FOiB0aGlzIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgaWdub3JlZC4gICovCiAgIHJldHVybiBy czsKIH0KQEAgLTMyOTAsNyArMzI5NCw2IEBAIHRyYW5zaXRfc3RhdGUgKHN0cnVjdCBkZmEgKmQs IHN0YXRlX251bSBzLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICoqcHApCiAgIHNpemVfdCBpLCBqOwog ICBpbnQgKm1hdGNoX2xlbnMgPSBOVUxMOwogICBzaXplX3QgbmVsZW0gPSBkLT5zdGF0ZXNbc10u bWJwcy5uZWxlbTsgICAgICAgLyogSnVzdCBhIGFsaWFzLiAgKi8KLSAgcG9zaXRpb25fc2V0IGZv bGxvd3M7CiAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAxID0gKnBwOwogICB3Y2hhcl90IHdjOwog CkBAIC0zMzIxLDI2ICszMzI0LDI1IEBAIHRyYW5zaXRfc3RhdGUgKHN0cnVjdCBkZmEgKmQsIHN0 YXRlX251bSBzLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICoqcHApCiAgICAgICBpZiAocnMgPT0gVFJB TlNJVF9TVEFURV9ET05FKQogICAgICAgICArKypwcDsKIAotICAgICAgZnJlZSAobWF0Y2hfbGVu cyk7CiAgICAgICByZXR1cm4gczE7CiAgICAgfQogCiAgIC8qIFRoaXMgc3RhdGUgaGFzIHNvbWUg b3BlcmF0b3JzIHdoaWNoIGNhbiBtYXRjaCBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLwotICBh bGxvY19wb3NpdGlvbl9zZXQgKCZmb2xsb3dzLCBkLT5ubGVhdmVzKTsKKyAgZC0+bWJfZm9sbG93 cy0+bmVsZW0gPSAwOwogCiAgIC8qICdtYXhsZW4nIG1heSBiZSBsb25nZXIgdGhhbiB0aGUgbGVu Z3RoIG9mIGEgY2hhcmFjdGVyLCBiZWNhdXNlIGl0IG1heQogICAgICBub3QgYmUgYSBjaGFyYWN0 ZXIgYnV0IGEgKG11bHRpIGNoYXJhY3RlcikgY29sbGF0aW5nIGVsZW1lbnQuCiAgICAgIFdlIGVu dW1lcmF0ZSBhbGwgb2YgdGhlIHBvc2l0aW9ucyB3aGljaCAncycgY2FuIHJlYWNoIGJ5IGNvbnN1 bWluZwogICAgICAnbWF4bGVuJyBieXRlcy4gICovCi0gIHRyYW5zaXRfc3RhdGVfY29uc3VtZV8x Y2hhciAoZCwgcywgcHAsIG1hdGNoX2xlbnMsICZtYmNsZW4sICZmb2xsb3dzKTsKKyAgdHJhbnNp dF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzLCBwcCwgbWF0Y2hfbGVucywgJm1iY2xlbik7CiAK LSAgd2MgPSBpbnB1dHdjc1sqcHAgLSBtYmNsZW4gLSBidWZfYmVnaW5dOwotICBzMSA9IHN0YXRl X2luZGV4IChkLCAmZm9sbG93cywgd2NoYXJfY29udGV4dCAod2MpKTsKKyAgd2MgPSBkLT5pbnB1 dHdjc1sqcHAgLSBtYmNsZW4gLSBidWZfYmVnaW5dOworICBzMSA9IHN0YXRlX2luZGV4IChkLCBk LT5tYl9mb2xsb3dzLCB3Y2hhcl9jb250ZXh0ICh3YykpOwogICByZWFsbG9jX3RyYW5zX2lmX25l Y2Vzc2FyeSAoZCwgczEpOwogCiAgIHdoaWxlICgqcHAgLSBwMSA8IG1heGxlbikKICAgICB7Ci0g ICAgICB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKGQsIHMxLCBwcCwgTlVMTCwgJm1iY2xl biwgJmZvbGxvd3MpOworICAgICAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzMSwg cHAsIE5VTEwsICZtYmNsZW4pOwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmVsZW07IGkrKykK ICAgICAgICAgewpAQCAtMzM0OCwxNSArMzM1MCwxMyBAQCB0cmFuc2l0X3N0YXRlIChzdHJ1Y3Qg ZGZhICpkLCBzdGF0ZV9udW0gcywgdW5zaWduZWQgY2hhciBjb25zdCAqKnBwKQogICAgICAgICAg ICAgZm9yIChqID0gMDsKICAgICAgICAgICAgICAgICAgaiA8IGQtPmZvbGxvd3NbZC0+c3RhdGVz W3MxXS5tYnBzLmVsZW1zW2ldLmluZGV4XS5uZWxlbTsgaisrKQogICAgICAgICAgICAgICBpbnNl cnQgKGQtPmZvbGxvd3NbZC0+c3RhdGVzW3MxXS5tYnBzLmVsZW1zW2ldLmluZGV4XS5lbGVtc1tq XSwKLSAgICAgICAgICAgICAgICAgICAgICAmZm9sbG93cyk7CisgICAgICAgICAgICAgICAgICAg ICAgZC0+bWJfZm9sbG93cyk7CiAgICAgICAgIH0KIAotICAgICAgd2MgPSBpbnB1dHdjc1sqcHAg LSBtYmNsZW4gLSBidWZfYmVnaW5dOwotICAgICAgczEgPSBzdGF0ZV9pbmRleCAoZCwgJmZvbGxv d3MsIHdjaGFyX2NvbnRleHQgKHdjKSk7CisgICAgICB3YyA9IGQtPmlucHV0d2NzWypwcCAtIG1i Y2xlbiAtIGJ1Zl9iZWdpbl07CisgICAgICBzMSA9IHN0YXRlX2luZGV4IChkLCBkLT5tYl9mb2xs b3dzLCB3Y2hhcl9jb250ZXh0ICh3YykpOwogICAgICAgcmVhbGxvY190cmFuc19pZl9uZWNlc3Nh cnkgKGQsIHMxKTsKICAgICB9Ci0gIGZyZWUgKG1hdGNoX2xlbnMpOwotICBmcmVlIChmb2xsb3dz LmVsZW1zKTsKICAgcmV0dXJuIHMxOwogfQogCkBAIC0zMzc1LDIxICszMzc1LDIxIEBAIHByZXBh cmVfd2NfYnVmIChzdHJ1Y3QgZGZhICpkLCBjb25zdCBjaGFyICpiZWdpbiwgY29uc3QgY2hhciAq ZW5kKQogCiAgIGZvciAoaSA9IDA7IGkgPCBpbGltOyBpKyspCiAgICAgewotICAgICAgc2l6ZV90 IG5ieXRlcyA9IG1ic190b193Y2hhciAoZCwgaW5wdXR3Y3MgKyBpLCBiZWdpbiArIGksIGlsaW0g LSBpLCAmbWJzKTsKLSAgICAgIG1ibGVuX2J1ZltpXSA9IG5ieXRlcyAtIChuYnl0ZXMgPT0gMSk7 CisgICAgICBzaXplX3QgbmJ5dGVzID0gbWJzX3RvX3djaGFyIChkLCBkLT5pbnB1dHdjcyArIGks IGJlZ2luICsgaSwgaWxpbSAtIGksICZtYnMpOworICAgICAgZC0+bWJsZW5fYnVmW2ldID0gbmJ5 dGVzIC0gKG5ieXRlcyA9PSAxKTsKICAgICAgIGlmIChiZWdpbltpXSA9PSBlb2wpCiAgICAgICAg IGJyZWFrOwogICAgICAgd2hpbGUgKC0tbmJ5dGVzICE9IDApCiAgICAgICAgIHsKICAgICAgICAg ICBpKys7Ci0gICAgICAgICAgbWJsZW5fYnVmW2ldID0gbmJ5dGVzOwotICAgICAgICAgIGlucHV0 d2NzW2ldID0gMDsKKyAgICAgICAgICBkLT5tYmxlbl9idWZbaV0gPSBuYnl0ZXM7CisgICAgICAg ICAgZC0+aW5wdXR3Y3NbaV0gPSAwOwogICAgICAgICB9CiAgICAgfQogCiAgIGJ1Zl9lbmQgPSAo dW5zaWduZWQgY2hhciAqKSAoYmVnaW4gKyBpKTsKLSAgbWJsZW5fYnVmW2ldID0gMDsKLSAgaW5w dXR3Y3NbaV0gPSAwOyAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgZC0+bWJsZW5fYnVm W2ldID0gMDsKKyAgZC0+aW5wdXR3Y3NbaV0gPSAwOyAgICAgICAgICAgICAgLyogc2VudGluZWwg Ki8KICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLwogfQogCkBAIC0zNDI3LDEwICszNDI3LDE4IEBA IGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAK ICAgaWYgKGQtPm1iX2N1cl9tYXggPiAxKQogICAgIHsKLSAgICAgIE1BTExPQyAobWJsZW5fYnVm LCBlbmQgLSBiZWdpbiArIDIpOwotICAgICAgTUFMTE9DIChpbnB1dHdjcywgZW5kIC0gYmVnaW4g KyAyKTsKKyAgICAgIHN0YXRpYyBib29sIG1iX2FsbG9jID0gZmFsc2U7CisgICAgICBSRUFMTE9D X0lGX05FQ0VTU0FSWSAoZC0+bWJsZW5fYnVmLCBkLT5ubWJsZW5fYnVmLCBlbmQgLSBiZWdpbiAr IDIpOworICAgICAgUkVBTExPQ19JRl9ORUNFU1NBUlkgKGQtPmlucHV0d2NzLCBkLT5uaW5wdXR3 Y3MsIGVuZCAtIGJlZ2luICsgMik7CiAgICAgICBtZW1zZXQgKCZtYnMsIDAsIHNpemVvZiAobWJz dGF0ZV90KSk7CiAgICAgICBwcmVwYXJlX3djX2J1ZiAoZCwgKGNvbnN0IGNoYXIgKikgcCwgZW5k KTsKKyAgICAgIGlmICghbWJfYWxsb2MpCisgICAgICAgIHsKKyAgICAgICAgICBNQUxMT0MgKGQt Pm1iX21hdGNoX2xlbnMsIGQtPm5sZWF2ZXMpOworICAgICAgICAgIE1BTExPQyAoZC0+bWJfZm9s bG93cywgMSk7CisgICAgICAgICAgYWxsb2NfcG9zaXRpb25fc2V0IChkLT5tYl9mb2xsb3dzLCBk LT5ubGVhdmVzKTsKKyAgICAgICAgICBtYl9hbGxvYyA9IHRydWU7CisgICAgICAgIH0KICAgICB9 CiAKICAgZm9yICg7OykKQEAgLTM0NTcsOCArMzQ2NSw2IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEg KmQsIGNoYXIgY29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAgICAgICAgICAgICAgIGlmIChiYWNr cmVmKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICpiYWNrcmVmID0gMTsK LSAgICAgICAgICAgICAgICAgIGZyZWUgKG1ibGVuX2J1Zik7Ci0gICAgICAgICAgICAgICAgICBm cmVlIChpbnB1dHdjcyk7CiAgICAgICAgICAgICAgICAgICAqZW5kID0gc2F2ZWRfZW5kOwogICAg ICAgICAgICAgICAgICAgcmV0dXJuIChjaGFyICopIHA7CiAgICAgICAgICAgICAgICAgfQpAQCAt MzQ5MSwxMSArMzQ5Nyw2IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJl Z2luLCBjaGFyICplbmQsCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGlmIChiYWNrcmVm KQogICAgICAgICAgICAgICAgICpiYWNrcmVmID0gKGQtPnN0YXRlc1tzXS5iYWNrcmVmICE9IDAp OwotICAgICAgICAgICAgICBpZiAoZC0+bWJfY3VyX21heCA+IDEpCi0gICAgICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgICAgZnJlZSAobWJsZW5fYnVmKTsKLSAgICAgICAgICAgICAgICAg IGZyZWUgKGlucHV0d2NzKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICplbmQg PSBzYXZlZF9lbmQ7CiAgICAgICAgICAgICAgIHJldHVybiAoY2hhciAqKSBwOwogICAgICAgICAg ICAgfQpAQCAtMzUyNiwxMSArMzUyNyw2IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIg Y29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAgICAgICAvKiBDaGVjayBpZiB3ZSd2ZSBydW4gb2Zm IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCiAgICAgICBpZiAoKGNoYXIgKikgcCA+IGVuZCkK ICAgICAgICAgewotICAgICAgICAgIGlmIChkLT5tYl9jdXJfbWF4ID4gMSkKLSAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgZnJlZSAobWJsZW5fYnVmKTsKLSAgICAgICAgICAgICAgZnJlZSAo aW5wdXR3Y3MpOwotICAgICAgICAgICAgfQogICAgICAgICAgICplbmQgPSBzYXZlZF9lbmQ7CiAg ICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTM1ODEsNiArMzU3NywxMyBAQCBm cmVlX21iZGF0YSAoc3RydWN0IGRmYSAqZCkKICAgZnJlZSAoZC0+bWJjc2V0cyk7CiAgIGQtPm1i Y3NldHMgPSBOVUxMOwogICBkLT5ubWJjc2V0cyA9IDA7CisKKyAgZnJlZSAoZC0+bWJsZW5fYnVm KTsKKyAgZnJlZSAoZC0+aW5wdXR3Y3MpOworICBpZiAoZC0+bWJfZm9sbG93cyAhPSBOVUxMKQor ICAgIGZyZWUgKGQtPm1iX2ZvbGxvd3MtPmVsZW1zKTsKKyAgZnJlZSAoZC0+bWJfZm9sbG93cyk7 CisgIGZyZWUgKGQtPm1iX21hdGNoX2xlbnMpOwogfQogCiAvKiBJbml0aWFsaXplIHRoZSBjb21w b25lbnRzIG9mIGEgZGZhIHRoYXQgdGhlIG90aGVyIHJvdXRpbmVzIGRvbid0Ci0tIAoxLjkuMQoK CkZyb20gZDkzNmQ4MThkOGY1NzM1ZjE1ZTY3YjNiNWYwZjNkZjNkN2U3YjVlMSBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKRnJvbTogTm9yaWhpcm8gVGFuYWthIDxub3JpdG5rQGtjbi5uZS5qcD4K RGF0ZTogU2F0LCAyOSBNYXIgMjAxNCAyMDo1OTo1MyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggMi8y XSBncmVwOiBzcGVlZC11cCBvZiBERkEgYnkgY2hlY2tpbmcgbXVsdGlieXRlIGNoYXJhY3RlcnMg b24KIGRlbWFuZAoKSWYgZGZhZXhlYygpIHJ1bnMgaW4gbm9uLVVURjggbG9jYWxlcywgbGVuZ3Ro IGFuZCB3aWRlIGNoYXJhY3RlcgpyZXByZXNlbnRhdGlvbiBhcmUgY2hlY2tlZCBmb3IgYWxsIGNo YXJhY3RlcnMgb2YgYSBsaW5lIGluIGEgaW5wdXQKc3RyaW5nLiAgSG93ZXZlciwgaWYgbWF0Y2hl ZCBlYXJseSBpbiB0aGUgbGluZSwgcmVzdWx0cyBmb3IgcmVtYWluaW5nCmNoYXJhY3RlcnMgYXJl IHdhc3RlZC4KClRoaXMgcGF0Y2ggY2hlY2tzIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIG9uIGRlbWFu ZC4gIEl0IGVuYWJsZXMgdG8KYWNjb21wbGlzaCB0byBzcGVlZC11cCBmb3IgbWF0Y2hlZCBlYXJs eSBhbmQgcmVkdWNlIHJlcXVpcmVkIG1lbW9yaWVzLgoKKiBzcmMvZGZhLmMgKHN0cnVjdCBkZmEp OiBSZW1vdmUgbWVtYmVycy4KKGJ1Zl9iZWdpbiwgYnVmX2VuZCk6IE5vIGxvbmdlciB0aGV5IGFy ZSB1c2VkLiAgUmVtb3ZlIHRoZW0uCihTS0lQX1JFTUFJTlNfTUJfSUZfSU5JVElBTF9TVEFURSk6 IE5vdywgdGhlIGNvbnRlbnQgb2YgdGhlIG1hY3JvIGlzCmV4dGVuZGVkIGluIGRmYWV4ZWMoKS4K KHRyYW5zaXRfc3RhdGVfc2luZ2xlYnl0ZSk6IHNlbSBjaGVjayBpcyByZW1vdmVkLgoobWF0Y2hf YW55Y2hhcik6IERvZXNuJ3QgdXNlIGBtYmxlbl9idWYgYW5kJyBgaW5wdXR3Y3MnLgoobWF0Y2hf bWJfY2hhcnNldCk6IERvZXNuJ3QgdXNlIGBtYmxlbl9idWYgYW5kJyBgaW5wdXR3Y3MnLgooY2hl Y2tfbWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzKTogTW9kaWZ5IGFyZ3VtZW50cy4KKHRyYW5z aXRfc3RhdGVfY29uc3VtZV8xY2hhcik6IE1vZGlmeSBhcmd1bWVudHMuCih0cmFuc2l0X3N0YXRl KTogRG9lc24ndCB1c2UgYG1ibGVuX2J1ZiBhbmQnIGBpbnB1dHdjcycuCihwcmVwYXJlX3djX2J1 Zik6IFJlbW92ZSBpdC4KKGRmYWV4ZWMpOiBEb2Vzbid0IHVzZSBgbWJsZW5fYnVmIGFuZCcgYGlu cHV0d2NzJy4KLS0tCiBzcmMvZGZhLmMgfCAyMTIgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2MiBp bnNlcnRpb25zKCspLCAxNTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2RmYS5jIGIv c3JjL2RmYS5jCmluZGV4IGFkZmU0NTAuLjgxNDY3MDAgMTAwNjQ0Ci0tLSBhL3NyYy9kZmEuYwor KysgYi9zcmMvZGZhLmMKQEAgLTQzNiwyNiArNDM2LDYgQEAgc3RydWN0IGRmYQogICBzdHJ1Y3Qg ZGZhbXVzdCAqbXVzdHM7ICAgICAgICAvKiBMaXN0IG9mIHN0cmluZ3MsIGF0IGxlYXN0IG9uZSBv ZiB3aGljaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBrbm93biB0byBh cHBlYXIgaW4gYW55IHIuZS4gbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIGRmYS4gICovCi0gIHVuc2lnbmVkIGNoYXIgKm1ibGVuX2J1ZjsgICAgIC8qIENv cnJlc3BvbmQgdG8gdGhlIGlucHV0IGJ1ZmZlciBpbiBkZmFleGVjLgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFYWNoIGVsZW1lbnQgc3RvcmVzIHRoZSBudW1iZXIgb2YgcmVt YWluaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIG9mIHRoZSBj b3JyZXNwb25kaW5nIG11bHRpYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IHN0cmluZy4gIEEgZWxlbWVudCdzCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIDAgaWYgdGhlIGNvcnJlc3BvbmRpbmcg Y2hhcmFjdGVyIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZS1i eXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuLCBpbnB1dCA6ICdh JywgPG1iKDApPiwgPG1iKDEpPiwgPG1iKDIpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYmxlbl9idWYgICA6ICAwLCAgICAgICAzLCAgICAgICAyLCAgICAgICAxCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzaXplX3Qgbm1ibGVuX2J1ZjsgICAg ICAgICAgICAvKiBMZW5ndGggb2YgdGhlIG1ibGVuIGJ1ZmZlciBjdXJyZW50bHkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkLiAgKi8KLSAgd2NoYXJfdCAqaW5w dXR3Y3M7ICAgICAgICAgICAgLyogV2lkZSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhl IGlucHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBpbiBkZmFl eGVjLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRo aXMgYXJyYXkgaXMgdGhlIHNhbWUgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGxlbmd0aCBvZiBpbnB1dCBzdHJpbmcgKGNoYXIgYXJyYXkpLgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHN0cmluZ1tpXSBpcyBhIHNpbmdsZS1ieXRlIGNo YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaXJzdCBieXRl IG9mIGEgbXVsdGlieXRlIGNoYXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0d2NzW2ldIGlzIHRoZSBjb2RlcG9pbnQuICAqLwotICBzaXplX3QgbmlucHV0d2NzOyAg ICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhlIGlucHV0IHdpZGUgY2hhcmFjdGVycwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHkgYWxsb2NhdGVkLiAgKi8KICAg cG9zaXRpb25fc2V0ICptYl9mb2xsb3dzOyAgICAgLyogRm9sbG93IHNldCBhZGRlZCBieSBBTllD SEFSIGFuZC9vciBNQkNTRVQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24g ZGVtYW5kLiAgKi8KICAgaW50ICptYl9tYXRjaF9sZW5zOyAgICAgICAgICAgLyogQXJyYXkgb2Yg bGVuZ3RoIHJlZHVjZWQgYnkgQU5ZQ0hBUiBhbmQvb3IKQEAgLTkwMSw4ICs4ODEsNiBAQCBzdGF0 aWMgaW50IGN1cl9tYl9sZW4gPSAxOyAgICAgIC8qIExlbmd0aCBvZiB0aGUgbXVsdGlieXRlIHJl cHJlc2VudGF0aW9uIG9mCiBzdGF0aWMgbWJzdGF0ZV90IG1iczsgICAgICAgICAgIC8qIG1ic3Rh dGUgZm9yIG1icnRvd2MuICAqLwogc3RhdGljIHdjaGFyX3Qgd2N0b2s7ICAgICAgICAgICAvKiBX aWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KLXN0YXRpYyB1 bnNpZ25lZCBjaGFyIGNvbnN0ICpidWZfYmVnaW47ICAvKiByZWZlcmVuY2UgdG8gYmVnaW4gaW4g ZGZhZXhlYy4gICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmX2VuZDsgICAgLyog cmVmZXJlbmNlIHRvIGVuZCBpbiBkZmFleGVjLiAgKi8KIAogCiAjaWYgTUJTX1NVUFBPUlQKQEAg LTI5NTgsMjcgKzI5MzYsNiBAQCBidWlsZF9zdGF0ZV96ZXJvIChzdHJ1Y3QgZGZhICpkKQogCiAv KiBNdWx0aWJ5dGUgY2hhcmFjdGVyIGhhbmRsaW5nIHN1Yi1yb3V0aW5lcyBmb3IgZGZhZXhlYy4g ICovCiAKLS8qIFRoZSBpbml0aWFsIHN0YXRlIG1heSBlbmNvdW50ZXIgYSBieXRlIHdoaWNoIGlz IG5vdCBhIHNpbmdsZSBieXRlIGNoYXJhY3RlcgotICAgbm9yIHRoZSBmaXJzdCBieXRlIG9mIGEg bXVsdGlieXRlIGNoYXJhY3Rlci4gIEJ1dCBpdCBpcyBpbmNvcnJlY3QgZm9yIHRoZQotICAgaW5p dGlhbCBzdGF0ZSB0byBhY2NlcHQgc3VjaCBhIGJ5dGUuICBGb3IgZXhhbXBsZSwgaW4gU2hpZnQg SklTIHRoZSByZWd1bGFyCi0gICBleHByZXNzaW9uICJcXCIgYWNjZXB0cyB0aGUgY29kZXBvaW50 IDB4NWMsIGJ1dCBzaG91bGQgbm90IGFjY2VwdCB0aGUgc2Vjb25kCi0gICBieXRlIG9mIHRoZSBj b2RlcG9pbnQgMHg4MTVjLiAgVGhlbiB0aGUgaW5pdGlhbCBzdGF0ZSBtdXN0IHNraXAgdGhlIGJ5 dGVzCi0gICB0aGF0IGFyZSBub3QgYSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgbm9yIHRoZSBmaXJz dCBieXRlIG9mIGEgbXVsdGlieXRlCi0gICBjaGFyYWN0ZXIuICAqLwotI2RlZmluZSBTS0lQX1JF TUFJTlNfTUJfSUZfSU5JVElBTF9TVEFURShzLCBwKQkJXAotICBpZiAocyA9PSAwKQkJCQkJCVwK LSAgICB7CQkJCQkJCVwKLSAgICAgIHdoaWxlIChkLT5pbnB1dHdjc1twIC0gYnVmX2JlZ2luXSA9 PSAwCQlcCi0gICAgICAgICAgICAmJiBkLT5tYmxlbl9idWZbcCAtIGJ1Zl9iZWdpbl0gPiAwCQlc Ci0gICAgICAgICAgICAmJiAodW5zaWduZWQgY2hhciBjb25zdCAqKSBwIDwgYnVmX2VuZCkJXAot ICAgICAgICArK3A7CQkJCQkJXAotICAgICAgaWYgKChjaGFyICopIHAgPj0gZW5kKQkJCQlcCi0g ICAgICAgIHsJCQkJCQlcCi0gICAgICAgICAgKmVuZCA9IHNhdmVkX2VuZDsJCQkJXAotICAgICAg ICAgIHJldHVybiBOVUxMOwkJCQkJXAotICAgICAgICB9CQkJCQkJXAotICAgIH0KLQogc3RhdGlj IHZvaWQKIHJlYWxsb2NfdHJhbnNfaWZfbmVjZXNzYXJ5IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9u dW0gbmV3X3N0YXRlKQogewpAQCAtMzAzNSwxNCArMjk5Miw3IEBAIHRyYW5zaXRfc3RhdGVfc2lu Z2xlYnl0ZSAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3Qg KnAsCiAgICAgICAgICAgICB3b3JrcyA9IDA7CiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKHdv cmtzIDwgMCkKLSAgICAgICAgewotICAgICAgICAgIGlmIChwID09IGJ1Zl9lbmQpCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgIC8qIEF0IHRoZSBtb21lbnQsIGl0IG11c3Qgbm90IGhhcHBl bi4gICovCi0gICAgICAgICAgICAgIGFib3J0ICgpOwotICAgICAgICAgICAgfQotICAgICAgICAg IHdvcmtzID0gMDsKLSAgICAgICAgfQorICAgICAgICB3b3JrcyA9IDA7CiAgICAgICBlbHNlIGlm IChkLT5mYWlsc1t3b3Jrc10pCiAgICAgICAgIHsKICAgICAgICAgICB3b3JrcyA9IGQtPmZhaWxz W3dvcmtzXVsqcF07CkBAIC0zMDU3LDE4ICszMDA3LDEzIEBAIHRyYW5zaXRfc3RhdGVfc2luZ2xl Ynl0ZSAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAs CiAgIHJldHVybiBydmFsOwogfQogCi0vKiBNYXRjaCBhICIuIiBhZ2FpbnN0IHRoZSBjdXJyZW50 IGNvbnRleHQuICBidWZfYmVnaW5bSURYXSBpcyB0aGUKLSAgIGN1cnJlbnQgcG9zaXRpb24uICBS ZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2gsIGluIGJ5dGVzLgotICAgUE9TIGlzIHRoZSBw b3NpdGlvbiBvZiB0aGUgIi4iLiAgKi8KKy8qIE1hdGNoIGEgIi4iIGFnYWluc3QgdGhlIGN1cnJl bnQgY29udGV4dC4gIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgbWF0Y2gsIGluIGJ5dGVz LiAgUE9TIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgIi4iLiAgKi8KIHN0YXRpYyBpbnQKLW1hdGNo X2FueWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBwb3NpdGlvbiBwb3MsIHNpemVf dCBpZHgpCittYXRjaF9hbnljaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRp b24gcG9zLAorICAgICAgICAgICAgICAgd2NoYXJfdCB3Yywgc2l6ZV90IG1iY2xlbikKIHsKICAg aW50IGNvbnRleHQ7Ci0gIHdjaGFyX3Qgd2M7Ci0gIGludCBtYmNsZW47Ci0KLSAgd2MgPSBkLT5p bnB1dHdjc1tpZHhdOwotICBtYmNsZW4gPSAoZC0+bWJsZW5fYnVmW2lkeF0gPT0gMCkgPyAxIDog ZC0+bWJsZW5fYnVmW2lkeF07CiAKICAgLyogQ2hlY2sgc3ludGF4IGJpdHMuICAqLwogICBpZiAo d2MgPT0gKHdjaGFyX3QpIGVvbGJ5dGUpCkBAIC0zMDkwLDE2ICszMDM1LDE0IEBAIG1hdGNoX2Fu eWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBwb3NpdGlvbiBwb3MsIHNpemVfdCBp ZHgpCiB9CiAKIC8qIE1hdGNoIGEgYnJhY2tldCBleHByZXNzaW9uIGFnYWluc3QgdGhlIGN1cnJl bnQgY29udGV4dC4KLSAgIGJ1Zl9iZWdpbltJRFhdIGlzIHRoZSBjdXJyZW50IHBvc2l0aW9uLgog ICAgUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoLCBpbiBieXRlcy4KICAgIFBPUyBpcyB0 aGUgcG9zaXRpb24gb2YgdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCiBzdGF0aWMgaW50Ci1t YXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9z LCBzaXplX3QgaWR4KQorbWF0Y2hfbWJfY2hhcnNldCAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVt IHMsIHBvc2l0aW9uIHBvcywKKyAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKnAsIHdjaGFy X3Qgd2MsIHNpemVfdCBtYXRjaF9sZW4pCiB7CiAgIHNpemVfdCBpOwogICBpbnQgbWF0Y2g7ICAg ICAgICAgICAgICAgLyogTWF0Y2hpbmcgc3VjY2VlZGVkLiAgKi8KLSAgaW50IG1hdGNoX2xlbjsg ICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgY2hhcmFjdGVyIChvciBjb2xsYXRpbmcgZWxlbWVu dCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggd2hpY2ggdGhpcyBvcGVyYXRv ciBtYXRjaGVzLiAgKi8KICAgaW50IG9wX2xlbjsgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0 aGUgb3BlcmF0b3IuICAqLwogICBjaGFyIGJ1ZmZlclsxMjhdOwogCkBAIC0zMTA3LDkgKzMwNTAs NiBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRp b24gcG9zLCBzaXplX3QgaWR4KQogICBzdHJ1Y3QgbWJfY2hhcl9jbGFzc2VzICp3b3JrX21iYzsK IAogICBpbnQgY29udGV4dDsKLSAgd2NoYXJfdCB3YzsgICAgICAgICAgICAgICAgICAgLyogQ3Vy cmVudCByZWZlcnJpbmcgY2hhcmFjdGVyLiAgKi8KLQotICB3YyA9IGQtPmlucHV0d2NzW2lkeF07 CiAKICAgLyogQ2hlY2sgc3ludGF4IGJpdHMuICAqLwogICBpZiAod2MgPT0gKHdjaGFyX3QpIGVv bGJ5dGUpCkBAIC0zMTMwLDcgKzMwNzAsNiBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZh ICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICAvKiBBc3NpZ24g dGhlIGN1cnJlbnQgcmVmZXJyaW5nIG9wZXJhdG9yIHRvIHdvcmtfbWJjLiAgKi8KICAgd29ya19t YmMgPSAmKGQtPm1iY3NldHNbKGQtPm11bHRpYnl0ZV9wcm9wW3Bvcy5pbmRleF0pID4+IDJdKTsK ICAgbWF0Y2ggPSAhd29ya19tYmMtPmludmVydDsKLSAgbWF0Y2hfbGVuID0gKGQtPm1ibGVuX2J1 ZltpZHhdID09IDApID8gMSA6IGQtPm1ibGVuX2J1ZltpZHhdOwogCiAgIC8qIE1hdGNoIGluIHJh bmdlIDAtMjU1PyAgKi8KICAgaWYgKHdjIDwgTk9UQ0hBUiAmJiB3b3JrX21iYy0+Y3NldCAhPSAt MQpAQCAtMzE0NCwxNCArMzA4MywxNCBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpk LCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICAgICAgICBnb3RvIGNo YXJzZXRfbWF0Y2hlZDsKICAgICB9CiAKLSAgc3RybmNweSAoYnVmZmVyLCAoY2hhciBjb25zdCAq KSBidWZfYmVnaW4gKyBpZHgsIG1hdGNoX2xlbik7CisgIHN0cm5jcHkgKGJ1ZmZlciwgcCwgbWF0 Y2hfbGVuKTsKICAgYnVmZmVyW21hdGNoX2xlbl0gPSAnXDAnOwogCiAgIC8qIG1hdGNoIHdpdGgg YW4gZXF1aXZhbGVuY2UgY2xhc3M/ICAqLwogICBmb3IgKGkgPSAwOyBpIDwgd29ya19tYmMtPm5l cXVpdnM7IGkrKykKICAgICB7CiAgICAgICBvcF9sZW4gPSBzdHJsZW4gKHdvcmtfbWJjLT5lcXVp dnNbaV0pOwotICAgICAgc3RybmNweSAoYnVmZmVyLCAoY2hhciBjb25zdCAqKSBidWZfYmVnaW4g KyBpZHgsIG9wX2xlbik7CisgICAgICBzdHJuY3B5IChidWZmZXIsIHAsIG9wX2xlbik7CiAgICAg ICBidWZmZXJbb3BfbGVuXSA9ICdcMCc7CiAgICAgICBpZiAoc3RyY29sbCAod29ya19tYmMtPmVx dWl2c1tpXSwgYnVmZmVyKSA9PSAwKQogICAgICAgICB7CkBAIC0zMTY0LDcgKzMxMDMsNyBAQCBt YXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9z LCBzaXplX3QgaWR4KQogICBmb3IgKGkgPSAwOyBpIDwgd29ya19tYmMtPm5jb2xsX2VsZW1zOyBp KyspCiAgICAgewogICAgICAgb3BfbGVuID0gc3RybGVuICh3b3JrX21iYy0+Y29sbF9lbGVtc1tp XSk7Ci0gICAgICBzdHJuY3B5IChidWZmZXIsIChjaGFyIGNvbnN0ICopIGJ1Zl9iZWdpbiArIGlk eCwgb3BfbGVuKTsKKyAgICAgIHN0cm5jcHkgKGJ1ZmZlciwgcCwgb3BfbGVuKTsKICAgICAgIGJ1 ZmZlcltvcF9sZW5dID0gJ1wwJzsKIAogICAgICAgaWYgKHN0cmNvbGwgKHdvcmtfbWJjLT5jb2xs X2VsZW1zW2ldLCBidWZmZXIpID09IDApCkBAIC0zMTk4LDEyICszMTM3LDEwIEBAIGNoYXJzZXRf bWF0Y2hlZDoKICAgIGFycmF5IHdoaWNoIGNvcnJlc3BvbmRzIHRvICdkLT5zdGF0ZXNbc10ubWJw cy5lbGVtJzsgZWFjaCBlbGVtZW50IG9mIHRoZQogICAgYXJyYXkgY29udGFpbnMgdGhlIG51bWJl ciBvZiBieXRlcyB3aXRoIHdoaWNoIHRoZSBlbGVtZW50IGNhbiBtYXRjaC4KIAotICAgJ2lkeCcg aXMgdGhlIGluZGV4IGZyb20gYnVmX2JlZ2luLCBhbmQgaXQgaXMgdGhlIGN1cnJlbnQgcG9zaXRp b24KLSAgIGluIHRoZSBidWZmZXIuCi0KICAgIFRoZSBjYWxsZXIgTVVTVCBmcmVlIHRoZSBhcnJh eSB3aGljaCB0aGlzIGZ1bmN0aW9uIHJldHVybi4gICovCiBzdGF0aWMgaW50ICoKLWNoZWNrX21h dGNoaW5nX3dpdGhfbXVsdGlieXRlX29wcyAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHNp emVfdCBpZHgpCitjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy IGNvbnN0ICpwLCB3Y2hhcl90IHdjLCBzaXplX3QgbWJjbGVuKQogewogICBzaXplX3QgaTsKICAg aW50ICpyYXJyYXk7CkBAIC0zMjE1LDEwICszMTUyLDEwIEBAIGNoZWNrX21hdGNoaW5nX3dpdGhf bXVsdGlieXRlX29wcyAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHNpemVfdCBpZHgpCiAg ICAgICBzd2l0Y2ggKGQtPnRva2Vuc1twb3MuaW5kZXhdKQogICAgICAgICB7CiAgICAgICAgIGNh c2UgQU5ZQ0hBUjoKLSAgICAgICAgICByYXJyYXlbaV0gPSBtYXRjaF9hbnljaGFyIChkLCBzLCBw b3MsIGlkeCk7CisgICAgICAgICAgcmFycmF5W2ldID0gbWF0Y2hfYW55Y2hhciAoZCwgcywgcG9z LCB3YywgbWJjbGVuKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNQkNTRVQ6Ci0g ICAgICAgICAgcmFycmF5W2ldID0gbWF0Y2hfbWJfY2hhcnNldCAoZCwgcywgcG9zLCBpZHgpOwor ICAgICAgICAgIHJhcnJheVtpXSA9IG1hdGNoX21iX2NoYXJzZXQgKGQsIHMsIHBvcywgcCwgd2Ms IG1iY2xlbik7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg YnJlYWs7ICAgICAgICAgICAgICAgIC8qIGNhbm5vdCBoYXBwZW4uICAqLwpAQCAtMzIzOCwyMiAr MzE3NSwyMiBAQCBjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLCBzaXplX3QgaWR4KQogc3RhdGljIHN0YXR1c190cmFuc2l0X3N0YXRl CiB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICoqcHAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF0Y2hfbGVucywgaW50ICptYmNs ZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qgd2MsIHNpemVfdCBtYmNs ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWF0Y2hfbGVucykKIHsKICAg c2l6ZV90IGksIGo7CiAgIGludCBrOwogICBzdGF0ZV9udW0gczEsIHMyOwotICBpbnQgKndvcmtf bWJsczsKICAgc3RhdHVzX3RyYW5zaXRfc3RhdGUgcnMgPSBUUkFOU0lUX1NUQVRFX0RPTkU7CiAK LSAgLyogQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIChzaW5nbGUvbXVsdGkgYnl0ZSkgY2hh cmFjdGVyCi0gICAgIHRvIHdoaWNoIHAgcG9pbnRzLiAgKi8KLSAgKm1iY2xlbiA9IChkLT5tYmxl bl9idWZbKnBwIC0gYnVmX2JlZ2luXSA9PSAwKSA/IDEgOiBkLT5tYmxlbl9idWZbKnBwIC0gYnVm X2JlZ2luXTsKKyAgLyogQ2hlY2sgKGlucHV0KSBtYXRjaF9sZW5zLCBhbmQgaW5pdGlhbGl6ZSBp ZiBpdCBpcyBOVUxMLiAgKi8KKyAgaWYgKG1hdGNoX2xlbnMgPT0gTlVMTCAmJiBkLT5zdGF0ZXNb c10ubWJwcy5uZWxlbSAhPSAwKQorICAgIG1hdGNoX2xlbnMgPSBjaGVja19tYXRjaGluZ193aXRo X211bHRpYnl0ZV9vcHMgKGQsIHMsIChjaGFyIGNvbnN0ICopICpwcCwgd2MsIG1iY2xlbik7CiAK ICAgLyogQ2FsY3VsYXRlIHRoZSBzdGF0ZSB3aGljaCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSBz dGF0ZSAncycgYnkKLSAgICAgY29uc3VtaW5nICcqbWJjbGVuJyBzaW5nbGUgYnl0ZXMgZnJvbSB0 aGUgYnVmZmVyLiAgKi8KKyAgICAgY29uc3VtaW5nICdtYmNsZW4nIHNpbmdsZSBieXRlcyBmcm9t IHRoZSBidWZmZXIuICAqLwogICBzMSA9IHM7Ci0gIGZvciAoayA9IDA7IGsgPCAqbWJjbGVuOyBr KyspCisgIGZvciAoayA9IDA7IGsgPCBtYmNsZW47IGsrKykKICAgICB7CiAgICAgICBzMiA9IHMx OwogICAgICAgcnMgPSB0cmFuc2l0X3N0YXRlX3NpbmdsZWJ5dGUgKGQsIHMyLCAoKnBwKSsrLCAm czEpOwpAQCAtMzI2MSwxNyArMzE5OCwxMSBAQCB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIg KHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLAogICAvKiBDb3B5IHRoZSBwb3NpdGlvbnMgY29u dGFpbmVkIGJ5ICdzMScgdG8gdGhlIHNldCAnZC0+bWJfZm9sbG93cycuICAqLwogICBjb3B5ICgm KGQtPnN0YXRlc1tzMV0uZWxlbXMpLCBkLT5tYl9mb2xsb3dzKTsKIAotICAvKiBDaGVjayAoaW5w dXQpIG1hdGNoX2xlbnMsIGFuZCBpbml0aWFsaXplIGlmIGl0IGlzIE5VTEwuICAqLwotICBpZiAo bWF0Y2hfbGVucyA9PSBOVUxMICYmIGQtPnN0YXRlc1tzXS5tYnBzLm5lbGVtICE9IDApCi0gICAg d29ya19tYmxzID0gY2hlY2tfbWF0Y2hpbmdfd2l0aF9tdWx0aWJ5dGVfb3BzIChkLCBzLCAqcHAg LSBidWZfYmVnaW4pOwotICBlbHNlCi0gICAgd29ya19tYmxzID0gbWF0Y2hfbGVuczsKLQogICAv KiBBZGQgYWxsIG9mIHRoZSBwb3NpdGlvbnMgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSAncycg YnkgY29uc3VtaW5nCiAgICAgIGEgc2luZ2xlIGNoYXJhY3Rlci4gICovCiAgIGZvciAoaSA9IDA7 IGkgPCBkLT5zdGF0ZXNbc10ubWJwcy5uZWxlbTsgaSsrKQogICAgIHsKLSAgICAgIGlmICh3b3Jr X21ibHNbaV0gPT0gKm1iY2xlbikKKyAgICAgIGlmIChtYXRjaF9sZW5zW2ldID09IG1iY2xlbikK ICAgICAgICAgZm9yIChqID0gMDsgaiA8IGQtPmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1icHMuZWxl bXNbaV0uaW5kZXhdLm5lbGVtOwogICAgICAgICAgICAgIGorKykKICAgICAgICAgICBpbnNlcnQg KGQtPmZvbGxvd3NbZC0+c3RhdGVzW3NdLm1icHMuZWxlbXNbaV0uaW5kZXhdLmVsZW1zW2pdLApA QCAtMzI4Niw3ICszMjE3LDggQEAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3Qg ZGZhICpkLCBzdGF0ZV9udW0gcywKICAgIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHNv bWUgb3BlcmF0b3Igd2hpY2ggY2FuIG1hdGNoIHdpdGggYSBtdWx0aS0KICAgIGJ5dGUgY2hhcmFj dGVyIG9yIGEgY29sbGF0aW5nIGVsZW1lbnQgKHdoaWNoIG1heSBiZSBtdWx0aSBjaGFyYWN0ZXJz KS4gICovCiBzdGF0aWMgc3RhdGVfbnVtCi10cmFuc2l0X3N0YXRlIChzdHJ1Y3QgZGZhICpkLCBz dGF0ZV9udW0gcywgdW5zaWduZWQgY2hhciBjb25zdCAqKnBwKQordHJhbnNpdF9zdGF0ZSAoc3Ry dWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCwKKyAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKmVuZCkKIHsKICAgc3RhdGVfbnVtIHMxOwog ICBpbnQgbWJjbGVuOyAgLyogVGhlIGxlbmd0aCBvZiBjdXJyZW50IGlucHV0IG11bHRpYnl0ZSBj aGFyYWN0ZXIuICAqLwpAQCAtMzMwMiw3ICszMjM0LDggQEAgdHJhbnNpdF9zdGF0ZSAoc3RydWN0 IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCkKICAgICAgICBX ZSBjaGVjayB3aGV0aGVyIGVhY2ggb2YgdGhlbSBjYW4gbWF0Y2ggb3Igbm90LiAgKi8KICAgICB7 CiAgICAgICAvKiBOb3RlOiBjYWxsZXIgbXVzdCBmcmVlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhp cyBmdW5jdGlvbi4gICovCi0gICAgICBtYXRjaF9sZW5zID0gY2hlY2tfbWF0Y2hpbmdfd2l0aF9t dWx0aWJ5dGVfb3BzIChkLCBzLCAqcHAgLSBidWZfYmVnaW4pOworICAgICAgbWJjbGVuID0gbWJz X3RvX3djaGFyIChkLCAmd2MsIChjaGFyIGNvbnN0ICopICpwcCwgZW5kIC0gKnBwLCAmbWJzKTsK KyAgICAgIG1hdGNoX2xlbnMgPSBjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKGQs IHMsIChjaGFyIGNvbnN0ICopICpwcCwgd2MsIG1iY2xlbik7CiAKICAgICAgIGZvciAoaSA9IDA7 IGkgPCBuZWxlbTsgaSsrKQogICAgICAgICAvKiBTZWFyY2ggdGhlIG9wZXJhdG9yIHdoaWNoIG1h dGNoIHRoZSBsb25nZXN0IHN0cmluZywKQEAgLTMzMzQsMTUgKzMyNjcsMTUgQEAgdHJhbnNpdF9z dGF0ZSAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipw cCkKICAgICAgbm90IGJlIGEgY2hhcmFjdGVyIGJ1dCBhIChtdWx0aSBjaGFyYWN0ZXIpIGNvbGxh dGluZyBlbGVtZW50LgogICAgICBXZSBlbnVtZXJhdGUgYWxsIG9mIHRoZSBwb3NpdGlvbnMgd2hp Y2ggJ3MnIGNhbiByZWFjaCBieSBjb25zdW1pbmcKICAgICAgJ21heGxlbicgYnl0ZXMuICAqLwot ICB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKGQsIHMsIHBwLCBtYXRjaF9sZW5zLCAmbWJj bGVuKTsKKyAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzLCBwcCwgd2MsIG1iY2xl biwgbWF0Y2hfbGVucyk7CiAKLSAgd2MgPSBkLT5pbnB1dHdjc1sqcHAgLSBtYmNsZW4gLSBidWZf YmVnaW5dOwogICBzMSA9IHN0YXRlX2luZGV4IChkLCBkLT5tYl9mb2xsb3dzLCB3Y2hhcl9jb250 ZXh0ICh3YykpOwogICByZWFsbG9jX3RyYW5zX2lmX25lY2Vzc2FyeSAoZCwgczEpOwogCiAgIHdo aWxlICgqcHAgLSBwMSA8IG1heGxlbikKICAgICB7Ci0gICAgICB0cmFuc2l0X3N0YXRlX2NvbnN1 bWVfMWNoYXIgKGQsIHMxLCBwcCwgTlVMTCwgJm1iY2xlbik7CisgICAgICBtYmNsZW4gPSBtYnNf dG9fd2NoYXIgKGQsICZ3YywgKGNoYXIgY29uc3QgKikgKnBwLCBlbmQgLSAqcHAsICZtYnMpOwor ICAgICAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzMSwgcHAsIHdjLCBtYmNsZW4s IE5VTEwpOwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmVsZW07IGkrKykKICAgICAgICAgewpA QCAtMzM1Myw0NiArMzI4NiwxMiBAQCB0cmFuc2l0X3N0YXRlIChzdHJ1Y3QgZGZhICpkLCBzdGF0 ZV9udW0gcywgdW5zaWduZWQgY2hhciBjb25zdCAqKnBwKQogICAgICAgICAgICAgICAgICAgICAg IGQtPm1iX2ZvbGxvd3MpOwogICAgICAgICB9CiAKLSAgICAgIHdjID0gZC0+aW5wdXR3Y3NbKnBw IC0gbWJjbGVuIC0gYnVmX2JlZ2luXTsKICAgICAgIHMxID0gc3RhdGVfaW5kZXggKGQsIGQtPm1i X2ZvbGxvd3MsIHdjaGFyX2NvbnRleHQgKHdjKSk7CiAgICAgICByZWFsbG9jX3RyYW5zX2lmX25l Y2Vzc2FyeSAoZCwgczEpOwogICAgIH0KICAgcmV0dXJuIHMxOwogfQogCi0KLS8qIEluaXRpYWxp emUgbWJsZW5fYnVmIGFuZCBpbnB1dHdjcyB3aXRoIGRhdGEgZnJvbSB0aGUgbmV4dCBsaW5lLiAg Ki8KLQotc3RhdGljIHZvaWQKLXByZXBhcmVfd2NfYnVmIChzdHJ1Y3QgZGZhICpkLCBjb25zdCBj aGFyICpiZWdpbiwgY29uc3QgY2hhciAqZW5kKQotewotI2lmIE1CU19TVVBQT1JUCi0gIHVuc2ln bmVkIGNoYXIgZW9sID0gZW9sYnl0ZTsKLSAgc2l6ZV90IGk7Ci0gIHNpemVfdCBpbGltID0gZW5k IC0gYmVnaW4gKyAxOwotCi0gIGJ1Zl9iZWdpbiA9ICh1bnNpZ25lZCBjaGFyICopIGJlZ2luOwot Ci0gIGZvciAoaSA9IDA7IGkgPCBpbGltOyBpKyspCi0gICAgewotICAgICAgc2l6ZV90IG5ieXRl cyA9IG1ic190b193Y2hhciAoZCwgZC0+aW5wdXR3Y3MgKyBpLCBiZWdpbiArIGksIGlsaW0gLSBp LCAmbWJzKTsKLSAgICAgIGQtPm1ibGVuX2J1ZltpXSA9IG5ieXRlcyAtIChuYnl0ZXMgPT0gMSk7 Ci0gICAgICBpZiAoYmVnaW5baV0gPT0gZW9sKQotICAgICAgICBicmVhazsKLSAgICAgIHdoaWxl ICgtLW5ieXRlcyAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgaSsrOwotICAgICAgICAgIGQt Pm1ibGVuX2J1ZltpXSA9IG5ieXRlczsKLSAgICAgICAgICBkLT5pbnB1dHdjc1tpXSA9IDA7Ci0g ICAgICAgIH0KLSAgICB9Ci0KLSAgYnVmX2VuZCA9ICh1bnNpZ25lZCBjaGFyICopIChiZWdpbiAr IGkpOwotICBkLT5tYmxlbl9idWZbaV0gPSAwOwotICBkLT5pbnB1dHdjc1tpXSA9IDA7ICAgICAg ICAgICAgICAvKiBzZW50aW5lbCAqLwotI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCi19Ci0KIC8q IFNlYXJjaCB0aHJvdWdoIGEgYnVmZmVyIGxvb2tpbmcgZm9yIGEgbWF0Y2ggdG8gdGhlIGdpdmVu IHN0cnVjdCBkZmEuCiAgICBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIG1h dGNoaW5nIHRoZSByZWdleHAgaW4gdGhlCiAgICBidWZmZXIsIGFuZCB0aGUgc2hvcnRlc3QgcG9z c2libGUgdmVyc2lvbiB0aGVyZW9mLiAgUmV0dXJuIGEgcG9pbnRlciB0bwpAQCAtMzQxMCw3ICsz MzA5LDcgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4sIGNoYXIg KmVuZCwKICAgICAgICAgIGludCBhbGxvd19ubCwgc2l6ZV90ICpjb3VudCwgaW50ICpiYWNrcmVm KQogewogICBzdGF0ZV9udW0gcywgczE7ICAgICAgICAgICAgICAvKiBDdXJyZW50IHN0YXRlLiAg Ki8KLSAgdW5zaWduZWQgY2hhciBjb25zdCAqcDsgICAgICAgLyogQ3VycmVudCBpbnB1dCBjaGFy YWN0ZXIuICAqLworICB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCAqbWJwOyAvKiBDdXJyZW50IGlu cHV0IGNoYXJhY3Rlci4gICovCiAgIHN0YXRlX251bSAqKnRyYW5zLCAqdDsgICAgICAgIC8qIENv cHkgb2YgZC0+dHJhbnMgc28gaXQgY2FuIGJlIG9wdGltaXplZAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnRvIGEgcmVnaXN0ZXIuICAqLwogICB1bnNpZ25lZCBjaGFyIGVv bCA9IGVvbGJ5dGU7ICAvKiBMaWtld2lzZSBmb3IgZW9sYnl0ZS4gICovCkBAIC0zNDIwLDcgKzMz MTksNyBAQCBkZmFleGVjIChzdHJ1Y3QgZGZhICpkLCBjaGFyIGNvbnN0ICpiZWdpbiwgY2hhciAq ZW5kLAogICAgIGJ1aWxkX3N0YXRlX3plcm8gKGQpOwogCiAgIHMgPSBzMSA9IDA7Ci0gIHAgPSAo dW5zaWduZWQgY2hhciBjb25zdCAqKSBiZWdpbjsKKyAgcCA9IG1icCA9ICh1bnNpZ25lZCBjaGFy IGNvbnN0ICopIGJlZ2luOwogICB0cmFucyA9IGQtPnRyYW5zOwogICBzYXZlZF9lbmQgPSAqKHVu c2lnbmVkIGNoYXIgKikgZW5kOwogICAqZW5kID0gZW9sOwpAQCAtMzQyOCwxMCArMzMyNyw3IEBA IGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJlZ2luLCBjaGFyICplbmQsCiAg IGlmIChkLT5tYl9jdXJfbWF4ID4gMSkKICAgICB7CiAgICAgICBzdGF0aWMgYm9vbCBtYl9hbGxv YyA9IGZhbHNlOwotICAgICAgUkVBTExPQ19JRl9ORUNFU1NBUlkgKGQtPm1ibGVuX2J1ZiwgZC0+ bm1ibGVuX2J1ZiwgZW5kIC0gYmVnaW4gKyAyKTsKLSAgICAgIFJFQUxMT0NfSUZfTkVDRVNTQVJZ IChkLT5pbnB1dHdjcywgZC0+bmlucHV0d2NzLCBlbmQgLSBiZWdpbiArIDIpOwogICAgICAgbWVt c2V0ICgmbWJzLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOwotICAgICAgcHJlcGFyZV93Y19idWYg KGQsIChjb25zdCBjaGFyICopIHAsIGVuZCk7CiAgICAgICBpZiAoIW1iX2FsbG9jKQogICAgICAg ICB7CiAgICAgICAgICAgTUFMTE9DIChkLT5tYl9tYXRjaF9sZW5zLCBkLT5ubGVhdmVzKTsKQEAg LTM0NDcsMTAgKzMzNDMsMzIgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAq YmVnaW4sIGNoYXIgKmVuZCwKICAgICAgICAgewogICAgICAgICAgIHdoaWxlICgodCA9IHRyYW5z W3NdKSAhPSBOVUxMKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBpZiAocCA+IGJ1Zl9l bmQpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIHMxID0gczsKLSAgICAg ICAgICAgICAgU0tJUF9SRU1BSU5TX01CX0lGX0lOSVRJQUxfU1RBVEUgKHMsIHApOworCisgICAg ICAgICAgICAgIGlmIChzID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgLyogVGhlIGluaXRpYWwgc3RhdGUgbWF5IGVuY291bnRlciBhIGJ5dGUgd2hpY2ggaXMgbm90 CisgICAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSBieXRlIGNoYXJhY3RlciBub3IgdGhlIGZp cnN0IGJ5dGUgb2YgYQorICAgICAgICAgICAgICAgICAgICAgbXVsdGlieXRlIGNoYXJhY3Rlci4g IEJ1dCBpdCBpcyBpbmNvcnJlY3QgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgaW5pdGlh bCBzdGF0ZSB0byBhY2NlcHQgc3VjaCBhIGJ5dGUuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAg ICAgICAgICAgIGluIFNoaWZ0IEpJUyB0aGUgcmVndWxhciBleHByZXNzaW9uICJcXCIgYWNjZXB0 cworICAgICAgICAgICAgICAgICAgICAgdGhlIGNvZGVwb2ludCAweDVjLCBidXQgc2hvdWxkIG5v dCBhY2NlcHQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgYnl0ZSBvZiB0aGUgY29k ZXBvaW50IDB4ODE1Yy4gIFRoZW4gdGhlIGluaXRpYWwKKyAgICAgICAgICAgICAgICAgICAgIHN0 YXRlIG11c3Qgc2tpcCB0aGUgYnl0ZXMgdGhhdCBhcmUgbm90IGEgc2luZ2xlCisgICAgICAgICAg ICAgICAgICAgICBieXRlIGNoYXJhY3RlciBub3IgdGhlIGZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5 dGUKKyAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rlci4gICovCisgICAgICAgICAgICAgICAg ICB3Y2hhcl90IHdjOworICAgICAgICAgICAgICAgICAgd2hpbGUgKG1icCA8IHApCisgICAgICAg ICAgICAgICAgICAgIG1icCArPSBtYnNfdG9fd2NoYXIgKGQsICZ3YywgKGNoYXIgY29uc3QgKikg bWJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSAoY2hh ciBjb25zdCAqKSBtYnAsICZtYnMpOworICAgICAgICAgICAgICAgICAgcCA9IG1icDsKKworICAg ICAgICAgICAgICAgICAgaWYgKChjaGFyICopIHAgPj0gZW5kKQorICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgKmVuZCA9IHNhdmVkX2VuZDsKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KIAogICAgICAgICAgICAgICBpZiAoZC0+c3RhdGVzW3NdLm1icHMubmVsZW0gPT0g MCkKICAgICAgICAgICAgICAgICB7CkBAIC0zNDcxLDcgKzMzODksOCBAQCBkZmFleGVjIChzdHJ1 Y3QgZGZhICpkLCBjaGFyIGNvbnN0ICpiZWdpbiwgY2hhciAqZW5kLAogCiAgICAgICAgICAgICAg IC8qIENhbiBtYXRjaCB3aXRoIGEgbXVsdGlieXRlIGNoYXJhY3RlciAoYW5kIG11bHRpIGNoYXJh Y3RlcgogICAgICAgICAgICAgICAgICBjb2xsYXRpbmcgZWxlbWVudCkuICBUcmFuc2l0aW9uIHRh YmxlIG1pZ2h0IGJlIHVwZGF0ZWQuICAqLwotICAgICAgICAgICAgICBzID0gdHJhbnNpdF9zdGF0 ZSAoZCwgcywgJnApOworICAgICAgICAgICAgICBzID0gdHJhbnNpdF9zdGF0ZSAoZCwgcywgJnAs ICh1bnNpZ25lZCBjaGFyICopIGVuZCk7CisgICAgICAgICAgICAgIG1icCA9IHA7CiAgICAgICAg ICAgICAgIHRyYW5zID0gZC0+dHJhbnM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM1 MDYsNyArMzQyNSw4IEBAIGRmYWV4ZWMgKHN0cnVjdCBkZmEgKmQsIGNoYXIgY29uc3QgKmJlZ2lu LCBjaGFyICplbmQsCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIC8qIENhbiBtYXRjaCB3 aXRoIGEgbXVsdGlieXRlIGNoYXJhY3RlciAoYW5kIG11bHRpY2hhcmFjdGVyCiAgICAgICAgICAg ICAgICAgIGNvbGxhdGluZyBlbGVtZW50KS4gIFRyYW5zaXRpb24gdGFibGUgbWlnaHQgYmUgdXBk YXRlZC4gICovCi0gICAgICAgICAgICAgIHMgPSB0cmFuc2l0X3N0YXRlIChkLCBzLCAmcCk7Cisg ICAgICAgICAgICAgIHMgPSB0cmFuc2l0X3N0YXRlIChkLCBzLCAmcCwgKHVuc2lnbmVkIGNoYXIg KikgZW5kKTsKKyAgICAgICAgICAgICAgbWJwID0gcDsKICAgICAgICAgICAgICAgdHJhbnMgPSBk LT50cmFuczsKICAgICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCkBAIC0zNTE1LDE0ICszNDM1 LDggQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4sIGNoYXIgKmVu ZCwKICAgICAgICAgfQogCiAgICAgICAvKiBJZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHdhcyBh IG5ld2xpbmUsIGNvdW50IGl0LiAgKi8KLSAgICAgIGlmICgoY2hhciAqKSBwIDw9IGVuZCAmJiBw Wy0xXSA9PSBlb2wpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoY291bnQpCi0gICAgICAgICAg ICArKypjb3VudDsKLQotICAgICAgICAgIGlmIChkLT5tYl9jdXJfbWF4ID4gMSkKLSAgICAgICAg ICAgIHByZXBhcmVfd2NfYnVmIChkLCAoY29uc3QgY2hhciAqKSBwLCBlbmQpOwotICAgICAgICB9 CisgICAgICBpZiAoKGNoYXIgKikgcCA8PSBlbmQgJiYgcFstMV0gPT0gZW9sICYmIGNvdW50KQor ICAgICAgICArKypjb3VudDsKIAogICAgICAgLyogQ2hlY2sgaWYgd2UndmUgcnVuIG9mZiB0aGUg ZW5kIG9mIHRoZSBidWZmZXIuICAqLwogICAgICAgaWYgKChjaGFyICopIHAgPiBlbmQpCkBAIC0z NTc4LDggKzM0OTIsNiBAQCBmcmVlX21iZGF0YSAoc3RydWN0IGRmYSAqZCkKICAgZC0+bWJjc2V0 cyA9IE5VTEw7CiAgIGQtPm5tYmNzZXRzID0gMDsKIAotICBmcmVlIChkLT5tYmxlbl9idWYpOwot ICBmcmVlIChkLT5pbnB1dHdjcyk7CiAgIGlmIChkLT5tYl9mb2xsb3dzICE9IE5VTEwpCiAgICAg ZnJlZSAoZC0+bWJfZm9sbG93cy0+ZWxlbXMpOwogICBmcmVlIChkLT5tYl9mb2xsb3dzKTsKLS0g CjEuOS4xCgo= --------_5337434D000000003F21_MULTIPART_MIXED_-- From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 01 04:53:19 2014 Received: (at 17070) by debbugs.gnu.org; 1 Apr 2014 08:53:19 +0000 Received: from localhost ([127.0.0.1]:58734 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WUuRa-0004VR-Ie for submit@debbugs.gnu.org; Tue, 01 Apr 2014 04:53:19 -0400 Received: from mail-wg0-f50.google.com ([74.125.82.50]:51048) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WUuRX-0004VI-Ga for 17070@debbugs.gnu.org; Tue, 01 Apr 2014 04:53:16 -0400 Received: by mail-wg0-f50.google.com with SMTP id x13so6922785wgg.33 for <17070@debbugs.gnu.org>; Tue, 01 Apr 2014 01:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:user-agent:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=WPIre6s+SY7tY4CHIYbes0vzFY8kDua5/vS/LgqCeZM=; b=HPieHTqDjzlUR3MYy70Iz7qcYPxLUDz4SDCGDP5QKHjz6zbUlT2aUvKT/pMdmFbFMC kTJYRBaRe8HTTHyAmkjI/V6qt1cpFZ0IPqY0ujhw3vI7WRnjeWzQ+lsZV4Ci5Them4eK 0MbnuJdHuTznXuJT6/ASVxs+mc9oxaOniHV3PdsxnIgwl3pEfZ/miU6OBEp2EK1lQjY9 XZGdzYuIFZGfMH0o/hu+nQrx8AV9G10v/fhy8nURCF3RU4X/lKp18iYp62cHb8d36eu7 dVItZjnlpZ/Xy/+RdvHwkwdynw2/1RCB6x/tjg0Z3aYVhgUrx6KqXptPdWpS7JFzql6i taTw== X-Received: by 10.180.73.141 with SMTP id l13mr18323420wiv.60.1396342394405; Tue, 01 Apr 2014 01:53:14 -0700 (PDT) Received: from yakj.usersys.redhat.com (net-37-117-156-129.cust.vodafonedsl.it. [37.117.156.129]) by mx.google.com with ESMTPSA id h47sm39050850eey.13.2014.04.01.01.53.11 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 01 Apr 2014 01:53:13 -0700 (PDT) Message-ID: <533A7E76.6010102@gnu.org> Date: Tue, 01 Apr 2014 10:53:10 +0200 From: Paolo Bonzini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Norihiro Tanaka , 17070@debbugs.gnu.org Subject: Re: bug#17070: [PATCH] grep: optimization of DFA by reuse of multi-byte buffers in non-UTF8 locales References: <20140323221557.0464.27F6AC2D@kcn.ne.jp> In-Reply-To: <20140323221557.0464.27F6AC2D@kcn.ne.jp> X-Enigmail-Version: 1.6 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 17070 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) Applying this patch too. Paolo From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 06 01:13:11 2014 Received: (at 17070-done) by debbugs.gnu.org; 6 Apr 2014 05:13:11 +0000 Received: from localhost ([127.0.0.1]:37342 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WWfOH-00061S-LM for submit@debbugs.gnu.org; Sun, 06 Apr 2014 01:13:10 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:46544) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WWfOC-000615-Bt; Sun, 06 Apr 2014 01:13:06 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 6279DA60001; Sat, 5 Apr 2014 22:13:03 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GjTTvviUGPAN; Sat, 5 Apr 2014 22:12:59 -0700 (PDT) Received: from [192.168.1.9] (pool-108-0-233-62.lsanca.fios.verizon.net [108.0.233.62]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id E318139E8014; Sat, 5 Apr 2014 22:12:58 -0700 (PDT) Message-ID: <5340E25A.9030301@cs.ucla.edu> Date: Sat, 05 Apr 2014 22:12:58 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Norihiro Tanaka Subject: Re: bug#17070: [PATCH] grep: optimization of DFA by reuse of multi-byte buffers in non-UTF8 locales References: <20140323221557.0464.27F6AC2D@kcn.ne.jp> <20140329023458.063E.27F6AC2D@kcn.ne.jp> In-Reply-To: <20140329023458.063E.27F6AC2D@kcn.ne.jp> Content-Type: multipart/mixed; boundary="------------040808090805050104070905" X-Spam-Score: -2.9 (--) X-Debbugs-Envelope-To: 17070-done Cc: Paolo Bonzini , 17070-done@debbugs.gnu.org, 17156@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.9 (--) This is a multi-part message in MIME format. --------------040808090805050104070905 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Norihiro Tanaka wrote: > I rebased this patch, and add a bug fix to it. Thanks. Paolo wrote it up in , and I just now tweaked its ChangeLog and merged the code and installed it (patch attached). I followed up with minor cleanups (2nd patch attached). --------------040808090805050104070905 Content-Type: text/plain; charset=UTF-8; name="0001-grep-reuse-multibyte-DFA-buffers-in-non-UTF8-locales.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-grep-reuse-multibyte-DFA-buffers-in-non-UTF8-locales.pa"; filename*1="tch" RnJvbSBmNjZlODliMzM1OGQ3ZGU3ZGZiNWM1MWU3YTI1M2RmMDRmZGYwOGE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5l LmpwPgpEYXRlOiBTYXQsIDUgQXByIDIwMTQgMTg6NTI6MDEgLTA3MDAKU3ViamVjdDogW1BB VENIIDEvMl0gZ3JlcDogcmV1c2UgbXVsdGlieXRlIERGQSBidWZmZXJzIGluIG5vbi1VVEY4 IGxvY2FsZXMKCiogc3JjL2RmYS5jIChzdHJ1Y3QgZGZhKTogTmV3IG1lbWJlcnMgJ21ibGVu X2J1ZicsICdubWJsZW5fYnVmJywKJ2lucHV0d2NzJywgJ25pbnB1dHdjcycsICdtYl9mb2xs b3dzJyBhbmQgJ21iX21hdGNoX2xlbnMnLgoobWJsZW5fYnVmLCBpbnB1dHdjcyk6IFJlbW92 ZSBzdGF0aWMgdmFycy4KKFNLSVBfUkVNQUlOU19NQl9JRl9JTklUSUFMX1NUQVRFLCBtYXRj aF9hbnljaGFyLCBtYXRjaF9tYl9jaGFyc2V0KQoodHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFj aGFyLCB0cmFuc2l0X3N0YXRlLCBwcmVwYXJlX3djX2J1Zik6ClVzZSBuZXcgbWVtYmVycyBp bnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCihjaGVja19tYXRjaGluZ193aXRoX211bHRp Ynl0ZV9vcHMpOiBVc2UgbmV3IG1lbWJlcnMKaW5zdGVhZCBvZiBuZXcgYWxsb2NhdGlvbi4K KGRmYWV4ZWMpOiBJbml0aWFsaXplIG5ldyBtZW1iZXJzLgooZnJlZV9tYmRhdGEpOiBGcmVl IG5ldyBtZW1iZXJzLgotLS0KIHNyYy9kZmEuYyB8IDEzNCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9kZmEuYyBiL3NyYy9kZmEuYwppbmRleCAwZDdlYWI1Li45NmZiY2IzIDEwMDY0NAot LS0gYS9zcmMvZGZhLmMKKysrIGIvc3JjL2RmYS5jCkBAIC00MjAsNiArNDIwLDMwIEBAIHN0 cnVjdCBkZmEKICAgc3RydWN0IGRmYW11c3QgKm11c3RzOyAgICAgICAgLyogTGlzdCBvZiBz dHJpbmdzLCBhdCBsZWFzdCBvbmUgb2Ygd2hpY2gKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXMga25vd24gdG8gYXBwZWFyIGluIGFueSByLmUuIG1hdGNoaW5nCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZmEuICAqLworICB1bnNp Z25lZCBjaGFyICptYmxlbl9idWY7ICAgICAvKiBDb3JyZXNwb25kIHRvIHRoZSBpbnB1dCBi dWZmZXIgaW4gZGZhZXhlYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RWFjaCBlbGVtZW50IHN0b3JlcyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBt dWx0aWJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVy IGluIHRoZSBpbnB1dCBzdHJpbmcuICBBIGVsZW1lbnQncworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZSBpcyAwIGlmIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJh Y3RlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGUtYnl0 ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nLiwgaW5wdXQgOiAn YScsIDxtYigwKT4sIDxtYigxKT4sIDxtYigyKT4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWJsZW5fYnVmICAgOiAgMCwgICAgICAgMywgICAgICAgMiwgICAgICAg MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc2l6ZV90IG5tYmxl bl9idWY7ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBtYmxlbiBidWZmZXIgY3VycmVu dGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZC4gICov CisgIHdjaGFyX3QgKmlucHV0d2NzOyAgICAgICAgICAgIC8qIFdpZGUgY2hhcmFjdGVyIHJl cHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJpbmcgaW4gZGZhZXhlYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5IGlzIHRoZSBzYW1lIGFzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsZW5ndGggb2YgaW5wdXQgc3Ry aW5nIChjaGFyIGFycmF5KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5wdXRzdHJpbmdbaV0gaXMgYSBzaW5nbGUtYnl0ZSBjaGFyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvciB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZSBj aGFyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHdjc1tpXSBp cyB0aGUgY29kZXBvaW50LiAgKi8KKyAgc2l6ZV90IG5pbnB1dHdjczsgICAgICAgICAgICAg LyogTGVuZ3RoIG9mIHRoZSBpbnB1dCB3aWRlIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5IGFsbG9jYXRlZC4gICovCisgIHBvc2l0 aW9uX3NldCAqbWJfZm9sbG93czsgICAgIC8qIEZvbGxvdyBzZXQgYWRkZWQgYnkgQU5ZQ0hB UiBhbmQvb3IgTUJDU0VUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9u IGRlbWFuZC4gICovCisgIGludCAqbWJfbWF0Y2hfbGVuczsgICAgICAgICAgIC8qIEFycmF5 IG9mIGxlbmd0aCByZWR1Y2VkIGJ5IEFOWUNIQVIgYW5kL29yCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1CQ1NFVC4gICovCiB9OwogCiAvKiBTb21lIG1hY3JvcyBm b3IgdXNlciBhY2Nlc3MgdG8gZGZhIGludGVybmFscy4gICovCkBAIC04NTIsMjIgKzg3Niw2 IEBAIHN0YXRpYyBpbnQgY3VyX21iX2xlbiA9IDE7ICAgICAgLyogTGVuZ3RoIG9mIHRoZSBt dWx0aWJ5dGUgcmVwcmVzZW50YXRpb24gb2YKIHN0YXRpYyBtYnN0YXRlX3QgbWJzOyAgICAg ICAgICAgLyogbWJzdGF0ZSBmb3IgbWJydG93Yy4gICovCiBzdGF0aWMgd2NoYXJfdCB3Y3Rv azsgICAgICAgICAgIC8qIFdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBj dXJyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpYnl0ZSBj aGFyYWN0ZXIuICAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgKm1ibGVuX2J1ZjsvKiBDb3Jy ZXNwb25kIHRvIHRoZSBpbnB1dCBidWZmZXIgaW4gZGZhZXhlYy4KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRWFjaCBlbGVtZW50IHN0b3JlcyB0aGUgbnVtYmVyIG9m IHJlbWFpbmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyBv ZiB0aGUgY29ycmVzcG9uZGluZyBtdWx0aWJ5dGUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBzdHJpbmcuICBBIGVsZW1lbnQn cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyAwIGlmIHRo ZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBpcwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaW5nbGUtYnl0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZS5nLiwgaW5wdXQgOiAnYScsIDxtYigwKT4sIDxtYigxKT4sIDxtYigyKT4KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJsZW5fYnVmICAgOiAgMCwgICAg ICAgMywgICAgICAgMiwgICAgICAgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KLXN0YXRpYyB3Y2hhcl90ICppbnB1dHdjczsgICAgICAgLyogV2lkZSBjaGFyYWN0 ZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cmluZyBpbiBkZmFleGVjLgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkgaXMgdGhlIHNhbWUgYXMK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiBpbnB1 dCBzdHJpbmcgKGNoYXIgYXJyYXkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dHN0cmluZ1tpXSBpcyBhIHNpbmdsZS1ieXRlIGNoYXIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaXJzdCBieXRlIG9mIGEgbXVsdGli eXRlIGNoYXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0d2Nz W2ldIGlzIHRoZSBjb2RlcG9pbnQuICAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3Qg KmJ1Zl9iZWdpbjsgIC8qIHJlZmVyZW5jZSB0byBiZWdpbiBpbiBkZmFleGVjLiAgKi8KIHN0 YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0ICpidWZfZW5kOyAgICAvKiByZWZlcmVuY2UgdG8g ZW5kIGluIGRmYWV4ZWMuICAqLwogCkBAIC0yODk5LDE0ICsyOTA3LDEyIEBAIGJ1aWxkX3N0 YXRlX3plcm8gKHN0cnVjdCBkZmEgKmQpCiAjZGVmaW5lIFNLSVBfUkVNQUlOU19NQl9JRl9J TklUSUFMX1NUQVRFKHMsIHApCQlcCiAgIGlmIChzID09IDApCQkJCQkJXAogICAgIHsJCQkJ CQkJXAotICAgICAgd2hpbGUgKGlucHV0d2NzW3AgLSBidWZfYmVnaW5dID09IDAJCVwKLSAg ICAgICAgICAgICYmIG1ibGVuX2J1ZltwIC0gYnVmX2JlZ2luXSA+IDAJCVwKKyAgICAgIHdo aWxlIChkLT5pbnB1dHdjc1twIC0gYnVmX2JlZ2luXSA9PSAwCQlcCisgICAgICAgICAgICAm JiBkLT5tYmxlbl9idWZbcCAtIGJ1Zl9iZWdpbl0gPiAwCQlcCiAgICAgICAgICAgICAmJiAo dW5zaWduZWQgY2hhciBjb25zdCAqKSBwIDwgYnVmX2VuZCkJXAogICAgICAgICArK3A7CQkJ CQkJXAogICAgICAgaWYgKChjaGFyICopIHAgPj0gZW5kKQkJCQlcCiAgICAgICAgIHsJCQkJ CQlcCi0gICAgICAgICAgZnJlZSAobWJsZW5fYnVmKTsJCQkJXAotICAgICAgICAgIGZyZWUg KGlucHV0d2NzKTsJCQkJXAogICAgICAgICAgICplbmQgPSBzYXZlZF9lbmQ7CQkJCVwKICAg ICAgICAgICByZXR1cm4gTlVMTDsJCQkJCVwKICAgICAgICAgfQkJCQkJCVwKQEAgLTMwMDAs OCArMzAwNiw4IEBAIG1hdGNoX2FueWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBz LCBwb3NpdGlvbiBwb3MsIHNpemVfdCBpZHgpCiAgIHdjaGFyX3Qgd2M7CiAgIGludCBtYmNs ZW47CiAKLSAgd2MgPSBpbnB1dHdjc1tpZHhdOwotICBtYmNsZW4gPSAobWJsZW5fYnVmW2lk eF0gPT0gMCkgPyAxIDogbWJsZW5fYnVmW2lkeF07CisgIHdjID0gZC0+aW5wdXR3Y3NbaWR4 XTsKKyAgbWJjbGVuID0gKGQtPm1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IGQtPm1ibGVu X2J1ZltpZHhdOwogCiAgIC8qIENoZWNrIHN5bnRheCBiaXRzLiAgKi8KICAgaWYgKHdjID09 ICh3Y2hhcl90KSBlb2xieXRlKQpAQCAtMzA0Miw3ICszMDQ4LDcgQEAgbWF0Y2hfbWJfY2hh cnNldCAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHBvc2l0aW9uIHBvcywgc2l6ZV90 IGlkeCkKICAgaW50IGNvbnRleHQ7CiAgIHdjaGFyX3Qgd2M7ICAgICAgICAgICAgICAgICAg IC8qIEN1cnJlbnQgcmVmZXJyaW5nIGNoYXJhY3Rlci4gICovCiAKLSAgd2MgPSBpbnB1dHdj c1tpZHhdOworICB3YyA9IGQtPmlucHV0d2NzW2lkeF07CiAKICAgLyogQ2hlY2sgc3ludGF4 IGJpdHMuICAqLwogICBpZiAod2MgPT0gKHdjaGFyX3QpIGVvbGJ5dGUpCkBAIC0zMDYzLDcg KzMwNjksNyBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0g cywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICAvKiBBc3NpZ24gdGhlIGN1cnJlbnQg cmVmZXJyaW5nIG9wZXJhdG9yIHRvIHdvcmtfbWJjLiAgKi8KICAgd29ya19tYmMgPSAmKGQt Pm1iY3NldHNbKGQtPm11bHRpYnl0ZV9wcm9wW3Bvcy5pbmRleF0pID4+IDJdKTsKICAgbWF0 Y2ggPSAhd29ya19tYmMtPmludmVydDsKLSAgbWF0Y2hfbGVuID0gKG1ibGVuX2J1ZltpZHhd ID09IDApID8gMSA6IG1ibGVuX2J1ZltpZHhdOworICBtYXRjaF9sZW4gPSAoZC0+bWJsZW5f YnVmW2lkeF0gPT0gMCkgPyAxIDogZC0+bWJsZW5fYnVmW2lkeF07CiAKICAgLyogTWF0Y2gg aW4gcmFuZ2UgMC0yNTU/ICAqLwogICBpZiAod2MgPCBOT1RDSEFSICYmIHdvcmtfbWJjLT5j c2V0ICE9IC0xCkBAIC0zMTQxLDcgKzMxNDcsNyBAQCBjaGVja19tYXRjaGluZ193aXRoX211 bHRpYnl0ZV9vcHMgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBzaXplX3QgaWR4KQog ICBzaXplX3QgaTsKICAgaW50ICpyYXJyYXk7CiAKLSAgTUFMTE9DIChyYXJyYXksIGQtPnN0 YXRlc1tzXS5tYnBzLm5lbGVtKTsKKyAgcmFycmF5ID0gZC0+bWJfbWF0Y2hfbGVuczsKICAg Zm9yIChpID0gMDsgaSA8IGQtPnN0YXRlc1tzXS5tYnBzLm5lbGVtOyArK2kpCiAgICAgewog ICAgICAgcG9zaXRpb24gcG9zID0gZC0+c3RhdGVzW3NdLm1icHMuZWxlbXNbaV07CkBAIC0z MTcxLDcgKzMxNzcsNyBAQCBjaGVja19tYXRjaGluZ193aXRoX211bHRpYnl0ZV9vcHMgKHN0 cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCBzaXplX3QgaWR4KQogc3RhdGljIHN0YXR1c190 cmFuc2l0X3N0YXRlCiB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyIGNvbnN0ICoqcHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq bWF0Y2hfbGVucywgaW50ICptYmNsZW4sIHBvc2l0aW9uX3NldCAqIHBwcykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICptYXRjaF9sZW5zLCBpbnQgKm1iY2xlbikKIHsK ICAgc2l6ZV90IGksIGo7CiAgIGludCBrOwpAQCAtMzE4MSw3ICszMTg3LDcgQEAgdHJhbnNp dF9zdGF0ZV9jb25zdW1lXzFjaGFyIChzdHJ1Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywKIAog ICAvKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgKHNpbmdsZS9tdWx0aSBieXRlKSBj aGFyYWN0ZXIKICAgICAgdG8gd2hpY2ggcCBwb2ludHMuICAqLwotICAqbWJjbGVuID0gKG1i bGVuX2J1ZlsqcHAgLSBidWZfYmVnaW5dID09IDApID8gMSA6IG1ibGVuX2J1ZlsqcHAgLSBi dWZfYmVnaW5dOworICAqbWJjbGVuID0gKGQtPm1ibGVuX2J1ZlsqcHAgLSBidWZfYmVnaW5d ID09IDApID8gMSA6IGQtPm1ibGVuX2J1ZlsqcHAgLSBidWZfYmVnaW5dOwogCiAgIC8qIENh bGN1bGF0ZSB0aGUgc3RhdGUgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZnJvbSB0aGUgc3RhdGUg J3MnIGJ5CiAgICAgIGNvbnN1bWluZyAnKm1iY2xlbicgc2luZ2xlIGJ5dGVzIGZyb20gdGhl IGJ1ZmZlci4gICovCkBAIC0zMTkxLDggKzMxOTcsOCBAQCB0cmFuc2l0X3N0YXRlX2NvbnN1 bWVfMWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLAogICAgICAgczIgPSBzMTsK ICAgICAgIHJzID0gdHJhbnNpdF9zdGF0ZV9zaW5nbGVieXRlIChkLCBzMiwgKCpwcCkrKywg JnMxKTsKICAgICB9Ci0gIC8qIENvcHkgdGhlIHBvc2l0aW9ucyBjb250YWluZWQgYnkgJ3Mx JyB0byB0aGUgc2V0ICdwcHMnLiAgKi8KLSAgY29weSAoJihkLT5zdGF0ZXNbczFdLmVsZW1z KSwgcHBzKTsKKyAgLyogQ29weSB0aGUgcG9zaXRpb25zIGNvbnRhaW5lZCBieSAnczEnIHRv IHRoZSBzZXQgJ2QtPm1iX2ZvbGxvd3MnLiAgKi8KKyAgY29weSAoJihkLT5zdGF0ZXNbczFd LmVsZW1zKSwgZC0+bWJfZm9sbG93cyk7CiAKICAgLyogQ2hlY2sgKGlucHV0KSBtYXRjaF9s ZW5zLCBhbmQgaW5pdGlhbGl6ZSBpZiBpdCBpcyBOVUxMLiAgKi8KICAgaWYgKG1hdGNoX2xl bnMgPT0gTlVMTCAmJiBkLT5zdGF0ZXNbc10ubWJwcy5uZWxlbSAhPSAwKQpAQCAtMzIwNywx MiArMzIxMywxMCBAQCB0cmFuc2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEg KmQsIHN0YXRlX251bSBzLAogICAgICAgaWYgKHdvcmtfbWJsc1tpXSA9PSAqbWJjbGVuKQog ICAgICAgICBmb3IgKGogPSAwOyBqIDwgZC0+Zm9sbG93c1tkLT5zdGF0ZXNbc10ubWJwcy5l bGVtc1tpXS5pbmRleF0ubmVsZW07CiAgICAgICAgICAgICAgaisrKQotICAgICAgICAgIGlu c2VydCAoZC0+Zm9sbG93c1tkLT5zdGF0ZXNbc10ubWJwcy5lbGVtc1tpXS5pbmRleF0uZWxl bXNbal0sIHBwcyk7CisgICAgICAgICAgaW5zZXJ0IChkLT5mb2xsb3dzW2QtPnN0YXRlc1tz XS5tYnBzLmVsZW1zW2ldLmluZGV4XS5lbGVtc1tqXSwKKyAgICAgICAgICAgIGQtPm1iX2Zv bGxvd3MpOwogICAgIH0KIAotICBpZiAobWF0Y2hfbGVucyA9PSBOVUxMICYmIHdvcmtfbWJs cyAhPSBOVUxMKQotICAgIGZyZWUgKHdvcmtfbWJscyk7Ci0KICAgLyogRklYTUU6IHRoaXMg cmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBpZ25vcmVkLiAgKi8KICAgcmV0dXJuIHJzOwogfQpA QCAtMzIyOSw3ICszMjMzLDYgQEAgdHJhbnNpdF9zdGF0ZSAoc3RydWN0IGRmYSAqZCwgc3Rh dGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCkKICAgc2l6ZV90IGksIGo7CiAg IGludCAqbWF0Y2hfbGVucyA9IE5VTEw7CiAgIHNpemVfdCBuZWxlbSA9IGQtPnN0YXRlc1tz XS5tYnBzLm5lbGVtOyAgICAgICAvKiBKdXN0IGEgYWxpYXMuICAqLwotICBwb3NpdGlvbl9z ZXQgZm9sbG93czsKICAgdW5zaWduZWQgY2hhciBjb25zdCAqcDEgPSAqcHA7CiAgIHdjaGFy X3Qgd2M7CiAKQEAgLTMyNjAsMjYgKzMyNjMsMjUgQEAgdHJhbnNpdF9zdGF0ZSAoc3RydWN0 IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKipwcCkKICAgICAg IGlmIChycyA9PSBUUkFOU0lUX1NUQVRFX0RPTkUpCiAgICAgICAgICsrKnBwOwogCi0gICAg ICBmcmVlIChtYXRjaF9sZW5zKTsKICAgICAgIHJldHVybiBzMTsKICAgICB9CiAKICAgLyog VGhpcyBzdGF0ZSBoYXMgc29tZSBvcGVyYXRvcnMgd2hpY2ggY2FuIG1hdGNoIGEgbXVsdGli eXRlIGNoYXJhY3Rlci4gICovCi0gIGFsbG9jX3Bvc2l0aW9uX3NldCAoJmZvbGxvd3MsIGQt Pm5sZWF2ZXMpOworICBkLT5tYl9mb2xsb3dzLT5uZWxlbSA9IDA7CiAKICAgLyogJ21heGxl bicgbWF5IGJlIGxvbmdlciB0aGFuIHRoZSBsZW5ndGggb2YgYSBjaGFyYWN0ZXIsIGJlY2F1 c2UgaXQgbWF5CiAgICAgIG5vdCBiZSBhIGNoYXJhY3RlciBidXQgYSAobXVsdGkgY2hhcmFj dGVyKSBjb2xsYXRpbmcgZWxlbWVudC4KICAgICAgV2UgZW51bWVyYXRlIGFsbCBvZiB0aGUg cG9zaXRpb25zIHdoaWNoICdzJyBjYW4gcmVhY2ggYnkgY29uc3VtaW5nCiAgICAgICdtYXhs ZW4nIGJ5dGVzLiAgKi8KLSAgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyIChkLCBzLCBw cCwgbWF0Y2hfbGVucywgJm1iY2xlbiwgJmZvbGxvd3MpOworICB0cmFuc2l0X3N0YXRlX2Nv bnN1bWVfMWNoYXIgKGQsIHMsIHBwLCBtYXRjaF9sZW5zLCAmbWJjbGVuKTsKIAotICB3YyA9 IGlucHV0d2NzWypwcCAtIG1iY2xlbiAtIGJ1Zl9iZWdpbl07Ci0gIHMxID0gc3RhdGVfaW5k ZXggKGQsICZmb2xsb3dzLCB3Y2hhcl9jb250ZXh0ICh3YykpOworICB3YyA9IGQtPmlucHV0 d2NzWypwcCAtIG1iY2xlbiAtIGJ1Zl9iZWdpbl07CisgIHMxID0gc3RhdGVfaW5kZXggKGQs IGQtPm1iX2ZvbGxvd3MsIHdjaGFyX2NvbnRleHQgKHdjKSk7CiAgIHJlYWxsb2NfdHJhbnNf aWZfbmVjZXNzYXJ5IChkLCBzMSk7CiAKICAgd2hpbGUgKCpwcCAtIHAxIDwgbWF4bGVuKQog ICAgIHsKLSAgICAgIHRyYW5zaXRfc3RhdGVfY29uc3VtZV8xY2hhciAoZCwgczEsIHBwLCBO VUxMLCAmbWJjbGVuLCAmZm9sbG93cyk7CisgICAgICB0cmFuc2l0X3N0YXRlX2NvbnN1bWVf MWNoYXIgKGQsIHMxLCBwcCwgTlVMTCwgJm1iY2xlbik7CiAKICAgICAgIGZvciAoaSA9IDA7 IGkgPCBuZWxlbTsgaSsrKQogICAgICAgICB7CkBAIC0zMjg3LDE1ICszMjg5LDEzIEBAIHRy YW5zaXRfc3RhdGUgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLCB1bnNpZ25lZCBjaGFy IGNvbnN0ICoqcHApCiAgICAgICAgICAgICBmb3IgKGogPSAwOwogICAgICAgICAgICAgICAg ICBqIDwgZC0+Zm9sbG93c1tkLT5zdGF0ZXNbczFdLm1icHMuZWxlbXNbaV0uaW5kZXhdLm5l bGVtOyBqKyspCiAgICAgICAgICAgICAgIGluc2VydCAoZC0+Zm9sbG93c1tkLT5zdGF0ZXNb czFdLm1icHMuZWxlbXNbaV0uaW5kZXhdLmVsZW1zW2pdLAotICAgICAgICAgICAgICAgICAg ICAgICZmb2xsb3dzKTsKKyAgICAgICAgICAgICAgICAgICAgICBkLT5tYl9mb2xsb3dzKTsK ICAgICAgICAgfQogCi0gICAgICB3YyA9IGlucHV0d2NzWypwcCAtIG1iY2xlbiAtIGJ1Zl9i ZWdpbl07Ci0gICAgICBzMSA9IHN0YXRlX2luZGV4IChkLCAmZm9sbG93cywgd2NoYXJfY29u dGV4dCAod2MpKTsKKyAgICAgIHdjID0gZC0+aW5wdXR3Y3NbKnBwIC0gbWJjbGVuIC0gYnVm X2JlZ2luXTsKKyAgICAgIHMxID0gc3RhdGVfaW5kZXggKGQsIGQtPm1iX2ZvbGxvd3MsIHdj aGFyX2NvbnRleHQgKHdjKSk7CiAgICAgICByZWFsbG9jX3RyYW5zX2lmX25lY2Vzc2FyeSAo ZCwgczEpOwogICAgIH0KLSAgZnJlZSAobWF0Y2hfbGVucyk7Ci0gIGZyZWUgKGZvbGxvd3Mu ZWxlbXMpOwogICByZXR1cm4gczE7CiB9CiAKQEAgLTMzMTMsMjEgKzMzMTMsMjIgQEAgcHJl cGFyZV93Y19idWYgKHN0cnVjdCBkZmEgKmQsIGNvbnN0IGNoYXIgKmJlZ2luLCBjb25zdCBj aGFyICplbmQpCiAKICAgZm9yIChpID0gMDsgaSA8IGlsaW07IGkrKykKICAgICB7Ci0gICAg ICBzaXplX3QgbmJ5dGVzID0gbWJzX3RvX3djaGFyIChkLCBpbnB1dHdjcyArIGksIGJlZ2lu ICsgaSwgaWxpbSAtIGksICZtYnMpOwotICAgICAgbWJsZW5fYnVmW2ldID0gbmJ5dGVzIC0g KG5ieXRlcyA9PSAxKTsKKyAgICAgIHNpemVfdCBuYnl0ZXMgPSBtYnNfdG9fd2NoYXIgKGQs IGQtPmlucHV0d2NzICsgaSwgYmVnaW4gKyBpLCBpbGltIC0gaSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZtYnMpOworICAgICAgZC0+bWJsZW5fYnVmW2ldID0g bmJ5dGVzIC0gKG5ieXRlcyA9PSAxKTsKICAgICAgIGlmIChiZWdpbltpXSA9PSBlb2wpCiAg ICAgICAgIGJyZWFrOwogICAgICAgd2hpbGUgKC0tbmJ5dGVzICE9IDApCiAgICAgICAgIHsK ICAgICAgICAgICBpKys7Ci0gICAgICAgICAgbWJsZW5fYnVmW2ldID0gbmJ5dGVzOwotICAg ICAgICAgIGlucHV0d2NzW2ldID0gMDsKKyAgICAgICAgICBkLT5tYmxlbl9idWZbaV0gPSBu Ynl0ZXM7CisgICAgICAgICAgZC0+aW5wdXR3Y3NbaV0gPSAwOwogICAgICAgICB9CiAgICAg fQogCiAgIGJ1Zl9lbmQgPSAodW5zaWduZWQgY2hhciAqKSAoYmVnaW4gKyBpKTsKLSAgbWJs ZW5fYnVmW2ldID0gMDsKLSAgaW5wdXR3Y3NbaV0gPSAwOyAgICAgICAgICAgICAgLyogc2Vu dGluZWwgKi8KKyAgZC0+bWJsZW5fYnVmW2ldID0gMDsKKyAgZC0+aW5wdXR3Y3NbaV0gPSAw OyAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH0KIAogLyogU2VhcmNoIHRocm91Z2gg YSBidWZmZXIgbG9va2luZyBmb3IgYSBtYXRjaCB0byB0aGUgZ2l2ZW4gc3RydWN0IGRmYS4K QEAgLTMzNjQsMTAgKzMzNjUsMTggQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBj b25zdCAqYmVnaW4sIGNoYXIgKmVuZCwKIAogICBpZiAoZC0+bWJfY3VyX21heCA+IDEpCiAg ICAgewotICAgICAgTUFMTE9DIChtYmxlbl9idWYsIGVuZCAtIGJlZ2luICsgMik7Ci0gICAg ICBNQUxMT0MgKGlucHV0d2NzLCBlbmQgLSBiZWdpbiArIDIpOworICAgICAgc3RhdGljIGJv b2wgbWJfYWxsb2MgPSBmYWxzZTsKKyAgICAgIFJFQUxMT0NfSUZfTkVDRVNTQVJZIChkLT5t Ymxlbl9idWYsIGQtPm5tYmxlbl9idWYsIGVuZCAtIGJlZ2luICsgMik7CisgICAgICBSRUFM TE9DX0lGX05FQ0VTU0FSWSAoZC0+aW5wdXR3Y3MsIGQtPm5pbnB1dHdjcywgZW5kIC0gYmVn aW4gKyAyKTsKICAgICAgIG1lbXNldCAoJm1icywgMCwgc2l6ZW9mIChtYnN0YXRlX3QpKTsK ICAgICAgIHByZXBhcmVfd2NfYnVmIChkLCAoY29uc3QgY2hhciAqKSBwLCBlbmQpOworICAg ICAgaWYgKCFtYl9hbGxvYykKKyAgICAgICAgeworICAgICAgICAgIE1BTExPQyAoZC0+bWJf bWF0Y2hfbGVucywgZC0+bmxlYXZlcyk7CisgICAgICAgICAgTUFMTE9DIChkLT5tYl9mb2xs b3dzLCAxKTsKKyAgICAgICAgICBhbGxvY19wb3NpdGlvbl9zZXQgKGQtPm1iX2ZvbGxvd3Ms IGQtPm5sZWF2ZXMpOworICAgICAgICAgIG1iX2FsbG9jID0gdHJ1ZTsKKyAgICAgICAgfQog ICAgIH0KIAogICBmb3IgKDs7KQpAQCAtMzM5NCw4ICszNDAzLDYgQEAgZGZhZXhlYyAoc3Ry dWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4sIGNoYXIgKmVuZCwKICAgICAgICAgICAg ICAgaWYgKGJhY2tyZWYpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg KmJhY2tyZWYgPSAxOwotICAgICAgICAgICAgICAgICAgZnJlZSAobWJsZW5fYnVmKTsKLSAg ICAgICAgICAgICAgICAgIGZyZWUgKGlucHV0d2NzKTsKICAgICAgICAgICAgICAgICAgICpl bmQgPSBzYXZlZF9lbmQ7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXIgKikgcDsK ICAgICAgICAgICAgICAgICB9CkBAIC0zNDI4LDExICszNDM1LDYgQEAgZGZhZXhlYyAoc3Ry dWN0IGRmYSAqZCwgY2hhciBjb25zdCAqYmVnaW4sIGNoYXIgKmVuZCwKICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgaWYgKGJhY2tyZWYpCiAgICAgICAgICAgICAgICAgKmJhY2ty ZWYgPSAoZC0+c3RhdGVzW3NdLmJhY2tyZWYgIT0gMCk7Ci0gICAgICAgICAgICAgIGlmIChk LT5tYl9jdXJfbWF4ID4gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg ICBmcmVlIChtYmxlbl9idWYpOwotICAgICAgICAgICAgICAgICAgZnJlZSAoaW5wdXR3Y3Mp OwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgKmVuZCA9IHNhdmVkX2VuZDsK ICAgICAgICAgICAgICAgcmV0dXJuIChjaGFyICopIHA7CiAgICAgICAgICAgICB9CkBAIC0z NDYzLDExICszNDY1LDYgQEAgZGZhZXhlYyAoc3RydWN0IGRmYSAqZCwgY2hhciBjb25zdCAq YmVnaW4sIGNoYXIgKmVuZCwKICAgICAgIC8qIENoZWNrIGlmIHdlJ3ZlIHJ1biBvZmYgdGhl IGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KICAgICAgIGlmICgoY2hhciAqKSBwID4gZW5kKQog ICAgICAgICB7Ci0gICAgICAgICAgaWYgKGQtPm1iX2N1cl9tYXggPiAxKQotICAgICAgICAg ICAgewotICAgICAgICAgICAgICBmcmVlIChtYmxlbl9idWYpOwotICAgICAgICAgICAgICBm cmVlIChpbnB1dHdjcyk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgKmVuZCA9IHNhdmVk X2VuZDsKICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMzUxOSw2ICsz NTE2LDEzIEBAIGZyZWVfbWJkYXRhIChzdHJ1Y3QgZGZhICpkKQogICBmcmVlIChkLT5tYmNz ZXRzKTsKICAgZC0+bWJjc2V0cyA9IE5VTEw7CiAgIGQtPm5tYmNzZXRzID0gMDsKKworICBm cmVlIChkLT5tYmxlbl9idWYpOworICBmcmVlIChkLT5pbnB1dHdjcyk7CisgIGlmIChkLT5t Yl9mb2xsb3dzICE9IE5VTEwpCisgICAgZnJlZSAoZC0+bWJfZm9sbG93cy0+ZWxlbXMpOwor ICBmcmVlIChkLT5tYl9mb2xsb3dzKTsKKyAgZnJlZSAoZC0+bWJfbWF0Y2hfbGVucyk7CiB9 CiAKIC8qIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudHMgb2YgYSBkZmEgdGhhdCB0aGUgb3Ro ZXIgcm91dGluZXMgZG9uJ3QKLS0gCjEuOS4wCgo= --------------040808090805050104070905 Content-Type: text/plain; charset=UTF-8; name="0002-grep-minor-improvements-to-previous-patch.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-grep-minor-improvements-to-previous-patch.patch" RnJvbSA5YmJlNTVlOTJjNjVhMWExNmM5YjM3ZGZhYmVkY2I1NDUyNTg2NDAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTYXQsIDUgQXByIDIwMTQgMjI6MDE6MzkgLTA3MDAKU3ViamVjdDogW1BBVENI IDIvMl0gZ3JlcDogbWlub3IgaW1wcm92ZW1lbnRzIHRvIHByZXZpb3VzIHBhdGNoCgoqIHNy Yy9kZmEuYyAoTUFYKTogTmV3IG1hY3JvLgoobWF0Y2hfYW55Y2hhciwgbWF0Y2hfbWJfY2hh cnNldCwgdHJhbnNpdF9zdGF0ZV9jb25zdW1lXzFjaGFyKToKVXNlIGl0IHRvIHNpbXBsaWZ5 IGFzc2lnbm1lbnRzLgooU0tJUF9SRU1BSU5TX01CX0lGX0lOSVRJQUxfU1RBVEUpOiBQcmVm ZXIgIT0gMCBmb3IgdW5zaWduZWQuCihmcmVlX21iZGF0YSk6IE9taXQgYW4gdW5uZWNlc3Nh cnkgJ2ZyZWUnLgotLS0KIHNyYy9kZmEuYyB8IDI5ICsrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2RmYS5jIGIvc3JjL2RmYS5jCmluZGV4IDk2ZmJjYjMu LmVmNWM4YTkgMTAwNjQ0Ci0tLSBhL3NyYy9kZmEuYworKysgYi9zcmMvZGZhLmMKQEAgLTQy OSw4ICs0MjksNyBAQCBzdHJ1Y3QgZGZhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGUuZy4sIGlucHV0IDogJ2EnLCA8bWIoMCk+LCA8bWIoMSk+LCA8bWIoMik+CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ibGVuX2J1ZiAgIDogIDAsICAg ICAgIDMsICAgICAgIDIsICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCi0gIHNpemVfdCBubWJsZW5fYnVmOyAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0 aGUgbWJsZW4gYnVmZmVyIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhbGxvY2F0ZWQuICAqLworICBzaXplX3Qgbm1ibGVuX2J1ZjsgICAgICAgICAg ICAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBtYmxlbl9idWYuICAqLwogICB3Y2hhcl90ICppbnB1 dHdjczsgICAgICAgICAgICAvKiBXaWRlIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiB0 aGUgaW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGlu IGRmYWV4ZWMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZW5n dGggb2YgdGhpcyBhcnJheSBpcyB0aGUgc2FtZSBhcwpAQCAtNDM4LDggKzQzNyw3IEBAIHN0 cnVjdCBkZmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzdHJp bmdbaV0gaXMgYSBzaW5nbGUtYnl0ZSBjaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvciB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZSBjaGFyOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHdjc1tpXSBpcyB0aGUgY29k ZXBvaW50LiAgKi8KLSAgc2l6ZV90IG5pbnB1dHdjczsgICAgICAgICAgICAgLyogTGVuZ3Ro IG9mIHRoZSBpbnB1dCB3aWRlIGNoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3VycmVudGx5IGFsbG9jYXRlZC4gICovCisgIHNpemVfdCBuaW5wdXR3 Y3M7ICAgICAgICAgICAgIC8qIEFsbG9jYXRlZCBudW1iZXIgb2YgaW5wdXR3Y3MgZWxlbWVu dHMuICAqLwogICBwb3NpdGlvbl9zZXQgKm1iX2ZvbGxvd3M7ICAgICAvKiBGb2xsb3cgc2V0 IGFkZGVkIGJ5IEFOWUNIQVIgYW5kL29yIE1CQ1NFVAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbiBkZW1hbmQuICAqLwogICBpbnQgKm1iX21hdGNoX2xlbnM7ICAg ICAgICAgICAvKiBBcnJheSBvZiBsZW5ndGggcmVkdWNlZCBieSBBTllDSEFSIGFuZC9vcgpA QCAtOTA1LDYgKzkwMyw5IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0ICpidWZfZW5k OyAgICAvKiByZWZlcmVuY2UgdG8gZW5kIGluIGRmYWV4ZWMuICAqLwogI2lmbmRlZiBNSU4K ICMgZGVmaW5lIE1JTihhLGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCiAjZW5kaWYKKyNp Zm5kZWYgTUFYCisjIGRlZmluZSBNQVgoYSxiKSAoKGEpIDwgKGIpID8gKGIpIDogKGEpKQor I2VuZGlmCiAKIC8qIFRoZSBzZXQgb2Ygd2NoYXJfdCB2YWx1ZXMgQyBzdWNoIHRoYXQgdGhl cmUncyBhIHVzZWZ1bCBsb2NhbGUKICAgIHNvbWV3aGVyZSB3aGVyZSBDICE9IHRvd3VwcGVy IChDKSAmJiBDICE9IHRvd2xvd2VyICh0b3d1cHBlciAoQykpLgpAQCAtMjkwOCw4ICsyOTA5 LDggQEAgYnVpbGRfc3RhdGVfemVybyAoc3RydWN0IGRmYSAqZCkKICAgaWYgKHMgPT0gMCkJ CQkJCQlcCiAgICAgewkJCQkJCQlcCiAgICAgICB3aGlsZSAoZC0+aW5wdXR3Y3NbcCAtIGJ1 Zl9iZWdpbl0gPT0gMAkJXAotICAgICAgICAgICAgJiYgZC0+bWJsZW5fYnVmW3AgLSBidWZf YmVnaW5dID4gMAkJXAotICAgICAgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIgY29uc3QgKikg cCA8IGJ1Zl9lbmQpCVwKKyAgICAgICAgICAgICAmJiBkLT5tYmxlbl9idWZbcCAtIGJ1Zl9i ZWdpbl0gIT0gMAlcCisgICAgICAgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIgY29uc3QgKikg cCA8IGJ1Zl9lbmQpCVwKICAgICAgICAgKytwOwkJCQkJCVwKICAgICAgIGlmICgoY2hhciAq KSBwID49IGVuZCkJCQkJXAogICAgICAgICB7CQkJCQkJXApAQCAtMzAwNyw3ICszMDA4LDcg QEAgbWF0Y2hfYW55Y2hhciAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsIHBvc2l0aW9u IHBvcywgc2l6ZV90IGlkeCkKICAgaW50IG1iY2xlbjsKIAogICB3YyA9IGQtPmlucHV0d2Nz W2lkeF07Ci0gIG1iY2xlbiA9IChkLT5tYmxlbl9idWZbaWR4XSA9PSAwKSA/IDEgOiBkLT5t Ymxlbl9idWZbaWR4XTsKKyAgbWJjbGVuID0gTUFYICgxLCBkLT5tYmxlbl9idWZbaWR4XSk7 CiAKICAgLyogQ2hlY2sgc3ludGF4IGJpdHMuICAqLwogICBpZiAod2MgPT0gKHdjaGFyX3Qp IGVvbGJ5dGUpCkBAIC0zMDY5LDcgKzMwNzAsNyBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1 Y3QgZGZhICpkLCBzdGF0ZV9udW0gcywgcG9zaXRpb24gcG9zLCBzaXplX3QgaWR4KQogICAv KiBBc3NpZ24gdGhlIGN1cnJlbnQgcmVmZXJyaW5nIG9wZXJhdG9yIHRvIHdvcmtfbWJjLiAg Ki8KICAgd29ya19tYmMgPSAmKGQtPm1iY3NldHNbKGQtPm11bHRpYnl0ZV9wcm9wW3Bvcy5p bmRleF0pID4+IDJdKTsKICAgbWF0Y2ggPSAhd29ya19tYmMtPmludmVydDsKLSAgbWF0Y2hf bGVuID0gKGQtPm1ibGVuX2J1ZltpZHhdID09IDApID8gMSA6IGQtPm1ibGVuX2J1ZltpZHhd OworICBtYXRjaF9sZW4gPSBNQVggKDEsIGQtPm1ibGVuX2J1ZltpZHhdKTsKIAogICAvKiBN YXRjaCBpbiByYW5nZSAwLTI1NT8gICovCiAgIGlmICh3YyA8IE5PVENIQVIgJiYgd29ya19t YmMtPmNzZXQgIT0gLTEKQEAgLTMxODcsNyArMzE4OCw3IEBAIHRyYW5zaXRfc3RhdGVfY29u c3VtZV8xY2hhciAoc3RydWN0IGRmYSAqZCwgc3RhdGVfbnVtIHMsCiAKICAgLyogQ2FsY3Vs YXRlIHRoZSBsZW5ndGggb2YgdGhlIChzaW5nbGUvbXVsdGkgYnl0ZSkgY2hhcmFjdGVyCiAg ICAgIHRvIHdoaWNoIHAgcG9pbnRzLiAgKi8KLSAgKm1iY2xlbiA9IChkLT5tYmxlbl9idWZb KnBwIC0gYnVmX2JlZ2luXSA9PSAwKSA/IDEgOiBkLT5tYmxlbl9idWZbKnBwIC0gYnVmX2Jl Z2luXTsKKyAgKm1iY2xlbiA9IE1BWCAoMSwgZC0+bWJsZW5fYnVmWypwcCAtIGJ1Zl9iZWdp bl0pOwogCiAgIC8qIENhbGN1bGF0ZSB0aGUgc3RhdGUgd2hpY2ggY2FuIGJlIHJlYWNoZWQg ZnJvbSB0aGUgc3RhdGUgJ3MnIGJ5CiAgICAgIGNvbnN1bWluZyAnKm1iY2xlbicgc2luZ2xl IGJ5dGVzIGZyb20gdGhlIGJ1ZmZlci4gICovCkBAIC0zMjE0LDcgKzMyMTUsNyBAQCB0cmFu c2l0X3N0YXRlX2NvbnN1bWVfMWNoYXIgKHN0cnVjdCBkZmEgKmQsIHN0YXRlX251bSBzLAog ICAgICAgICBmb3IgKGogPSAwOyBqIDwgZC0+Zm9sbG93c1tkLT5zdGF0ZXNbc10ubWJwcy5l bGVtc1tpXS5pbmRleF0ubmVsZW07CiAgICAgICAgICAgICAgaisrKQogICAgICAgICAgIGlu c2VydCAoZC0+Zm9sbG93c1tkLT5zdGF0ZXNbc10ubWJwcy5lbGVtc1tpXS5pbmRleF0uZWxl bXNbal0sCi0gICAgICAgICAgICBkLT5tYl9mb2xsb3dzKTsKKyAgICAgICAgICAgICAgICAg IGQtPm1iX2ZvbGxvd3MpOwogICAgIH0KIAogICAvKiBGSVhNRTogdGhpcyByZXR1cm4gdmFs dWUgaXMgYWx3YXlzIGlnbm9yZWQuICAqLwpAQCAtMzUxOSw5ICszNTIwLDExIEBAIGZyZWVf bWJkYXRhIChzdHJ1Y3QgZGZhICpkKQogCiAgIGZyZWUgKGQtPm1ibGVuX2J1Zik7CiAgIGZy ZWUgKGQtPmlucHV0d2NzKTsKLSAgaWYgKGQtPm1iX2ZvbGxvd3MgIT0gTlVMTCkKLSAgICBm cmVlIChkLT5tYl9mb2xsb3dzLT5lbGVtcyk7Ci0gIGZyZWUgKGQtPm1iX2ZvbGxvd3MpOwor ICBpZiAoZC0+bWJfZm9sbG93cykKKyAgICB7CisgICAgICBmcmVlIChkLT5tYl9mb2xsb3dz LT5lbGVtcyk7CisgICAgICBmcmVlIChkLT5tYl9mb2xsb3dzKTsKKyAgICB9CiAgIGZyZWUg KGQtPm1iX21hdGNoX2xlbnMpOwogfQogCi0tIAoxLjkuMAoK --------------040808090805050104070905-- From unknown Sat Aug 09 15:55:58 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 04 May 2014 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator